commit 4b7d0e344ecccd970fead21fc513bcd9dee83585
-Merge: 57013cd0 949c8cdc
+commit 3634d38c7e95f633ed80e816b6dbfa4e3edce5ac
+Merge: 4b7d0e34 98aca170
Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
-Date: Mon Dec 16 17:33:30 2024 +0800
+Date: Mon Dec 16 20:57:31 2024 +0800
- Merge pull request #421 from HuangFuSL/gaussian-process
+ Merge pull request #422 from HuangFuSL/rust-jupyter
- Update: Gaussian Process
+ Update: Rust Jupyter
diff --git a/metrics.svg b/metrics.svg
deleted file mode 100644
index 00bc5dedb..000000000
--- a/metrics.svg
+++ /dev/null
@@ -1,3209 +0,0 @@
-
\ No newline at end of file
diff --git a/search/search_index.json b/search/search_index.json
index 520138f8b..e312a65c7 100644
--- a/search/search_index.json
+++ b/search/search_index.json
@@ -1 +1 @@
-{"config":{"lang":["en"],"separator":"[\\s\\u200b\\-]","pipeline":["stemmer"]},"docs":[{"location":"","title":"Welcome to HuangFuSL's blog","text":""},{"location":"#table-of-contents","title":"Table of contents","text":" - \u200b\u63a8\u9001\u200b
- LaTeX
- \u200b\u6570\u5b66\u200b
- Coding
- \u200b\u65e5\u8bed\u200b
- \u200b\u5173\u4e8e\u200b\u6211\u200b
"},{"location":"#blog-timeline","title":"Blog timeline","text":"\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b
2024-12-16\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\uff08Gaussian Process\uff0cGP\uff09\u200b\u662f\u200b\u5c06\u200b\u591a\u200b\u53d8\u91cf\u200b\u9ad8\u65af\u5206\u5e03\u200b\u63a8\u5e7f\u200b\u5230\u200b\u65e0\u9650\u200b\u7ef4\u5ea6\u200b\\(\\mathcal X\\subseteq \\mathbb R^n\\)\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\u3002\u200b\u5177\u4f53\u200b\u5730\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\\(X = \\{x_1, \\ldots, x_n\\}\\subseteq \\mathcal X\\)\uff0c\u200b\u968f\u673a\u53d8\u91cf\u200b\\(f(x_1), \\ldots, f(x_n)\\)\u200b\u670d\u4ece\u200b\u591a\u5143\u200b\u9ad8\u65af\u5206\u5e03\u200b\\(\\mathcal N(\\mu(X), \\Sigma(X))\\)\u3002\u200b\u5176\u4e2d\u200b\uff0c\\(\\mu(X)\\)\u200b\u4e3a\u200b\u5747\u503c\u200b\u51fd\u6570\u200b\uff0c\\(\\Sigma(X)\\)\u200b\u4e3a\u200b\u534f\u65b9\u5dee\u200b\u51fd\u6570\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u9ad8\u65af\u5206\u5e03\u200b\u7814\u7a76\u200b\u7684\u200b\u662f\u200b\u51fd\u6570\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\u3002
\u200b\u7b97\u6cd5\u200b
2024-12-09\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u662f\u200b\u4e00\u7c7b\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u4f18\u5316\u200b\u9ed1\u76d2\u200b\u51fd\u6570\u200b\u7684\u200b\u4f18\u5316\u200b\u65b9\u6cd5\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u9ed1\u76d2\u200b\u51fd\u6570\u200b\u6765\u8bf4\u200b\uff0c\u200b\u6211\u4eec\u200b\u65e0\u6cd5\u200b\u5f97\u77e5\u200b\u5176\u200b\u663e\u5f0f\u200b\u7684\u200b\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200b\u8f93\u5165\u200b\u4e00\u4e2a\u200b\u6570\u636e\u200b\uff0c\u200b\u89c2\u6d4b\u200b\u5176\u200b\u8f93\u51fa\u200b\u7684\u200b\u65b9\u6cd5\u200b\u5bfb\u627e\u200b\u5b83\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u3002\u200b\u501f\u52a9\u4e8e\u200b\u8d1d\u53f6\u65af\u200b\u7edf\u8ba1\u200b\u7684\u200b\u601d\u60f3\u200b\uff0c\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u6700\u521d\u200b\u8ba4\u4e3a\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5b8c\u5168\u200b\u968f\u673a\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e0d\u65ad\u200b\u5730\u200b\u89c2\u6d4b\u200b\u6765\u200b\u66f4\u65b0\u200b\u5bf9\u200b\u51fd\u6570\u200b\u7684\u200b\u4f30\u8ba1\u200b\uff08\u200b\u540e\u9a8c\u200b\uff09\u3002\u200b\u5728\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u8fed\u4ee3\u200b\u4e2d\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u6839\u636e\u200b\u5f53\u524d\u200b\u7684\u200b\u540e\u9a8c\u200b\uff0c\u200b\u901a\u8fc7\u200b\u91c7\u96c6\u200b\u51fd\u6570\u200b\u6765\u200b\u9009\u62e9\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u89c2\u6d4b\u200b\u7684\u200b\u70b9\u200b\u3002\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u7684\u200b\u4f18\u70b9\u200b\u662f\u200b\u53ef\u4ee5\u200b\u5728\u200b\u8f83\u200b\u5c11\u200b\u7684\u200b\u8fed\u4ee3\u200b\u6b21\u6570\u200b\u5185\u200b\u627e\u5230\u200b\u5168\u5c40\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5728\u200b\u5b9e\u9645\u200b\u5e94\u7528\u200b\u4e2d\u200b\u88ab\u200b\u5e7f\u6cdb\u200b\u4f7f\u7528\u200b\u3002
\u200b\u5f3a\u5316\u200b\u5b66\u4e60\u200b
2024-12-04\u200b\u8bb0\u5f55\u200b\u5f3a\u5316\u200b\u5b66\u4e60\u200b\u7684\u200b\u5b66\u4e60\u200b\u8fc7\u7a0b\u200b\u3002
\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b
2024-12-04\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\uff08Multi-armed bandit\uff09\u200b\u95ee\u9898\u200b\u6765\u81ea\u200b\u4e8e\u200b\u73b0\u5b9e\u200b\u4e2d\u200b\u7684\u200b\u8001\u864e\u673a\u200b\u95ee\u9898\u200b\u3002\u200b\u6bcf\u53f0\u200b\u8001\u864e\u673a\u200b\u90fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u62c9\u6746\u200b\uff0c\u200b\u62c9\u52a8\u200b\u62c9\u6746\u200b\u540e\u200b\uff0c\u200b\u8001\u864e\u200b\u673a\u4f1a\u200b\u968f\u673a\u200b\u7ed9\u51fa\u200b\u4e00\u4e2a\u200b\u5956\u52b1\u200b\u3002\u200b\u73a9\u5bb6\u200b\u7684\u200b\u4efb\u52a1\u200b\u662f\u200b\u5728\u200b\u6709\u9650\u200b\u7684\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u5185\u200b\u5c3d\u53ef\u80fd\u200b\u83b7\u5f97\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u5956\u52b1\u200b\u3002
\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5\u200b
2024-12-04\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\uff08Upper Confidence Bound, UCB\uff09\u200b\u7b97\u6cd5\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u5c06\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u7eb3\u5165\u200b\u8003\u8651\u200b\uff0c\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u8f83\u5c11\u200b\u7684\u200b\u52a8\u4f5c\u200b\u6709\u200b\u66f4\u200b\u5927\u200b\u7684\u200b\u4e0d\u786e\u5b9a\u6027\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u5c3d\u53ef\u80fd\u200b\u4e50\u89c2\u200b\u5730\u200b\u8003\u8651\u200b\u8fd9\u4e9b\u200b\u6ca1\u6709\u200b\u5c1d\u8bd5\u200b\u8fc7\u200b\u7684\u200b\u52a8\u4f5c\u200b\uff0c\u200b\u5e76\u200b\u4f18\u5148\u200b\u63a2\u7d22\u200b\u8fd9\u4e9b\u200b\u52a8\u4f5c\u200b\u3002\u200b\u5728\u200b\u6bcf\u4e2a\u200b\u52a8\u4f5c\u200b\u63a2\u7d22\u200b\u6bd4\u8f83\u200b\u6df1\u5165\u200b\u540e\u200b\uff0c\u200b\u518d\u200b\u8f6c\u5411\u200b\u5229\u7528\u200b\u5956\u52b1\u200b\u8f83\u200b\u9ad8\u200b\u7684\u200b\u52a8\u4f5c\u200b\u3002
\u200b\u6a21\u578b\u200b\u63a8\u7406\u200b
2024-11-25\u200b\u5728\u200b\u63a8\u7406\u200b\u9636\u6bb5\u200b\uff0c\u200b\u5927\u200b\u6a21\u578b\u200b\u6839\u636e\u200b\u8f93\u5165\u200b\u7684\u200b\u6587\u672c\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u9884\u6d4b\u200b\u8f93\u5165\u200b\u6587\u672c\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u8bcd\u200b\uff0c\u200b\u76f4\u5230\u200b\u9884\u6d4b\u51fa\u200b\u7ed3\u675f\u200b\u7b26\u53f7\u200b\u4e3a\u6b62\u200b\u3002\u200b\u4e0d\u8fc7\u200b\uff0c\u200b\u5728\u200b\u9884\u200b\u8bad\u7ec3\u200b\u9636\u6bb5\u200b\u4e2d\u200b\uff0c\u200b\u4e0d\u200b\u5305\u542b\u200b\u5bf9\u200bbos\uff08begin of sentence\uff09\u200b\u548c\u200beos\uff08end of sentence\uff09\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002\u200b\u6240\u4ee5\u200b\uff0c\u200b\u5982\u679c\u200b\u4f7f\u7528\u200b\u57fa\u5ea7\u200b\u6a21\u578b\u200b\uff0c\u200b\u6a21\u578b\u200b\u4f1a\u200b\u4e0d\u65ad\u200b\u8f93\u51fa\u200btoken\u3002
\u200b\u5b9e\u73b0\u200bLlama-2
2024-09-07\u200b\u5728\u200b\u672c\u8282\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200bLlama-2\u200b\u6a21\u578b\u200b\u3002
\u200b\u5f52\u4e00\u5316\u200b
2024-09-07\u200b\u5f52\u4e00\u5316\u200b\u662f\u200b\u6307\u200b\u5c06\u200b\u6570\u636e\u200b\u6309\u7167\u200b\u6bd4\u4f8b\u200b\u7f29\u653e\u200b\uff0c\u200b\u6539\u53d8\u200b\u5176\u200b\u5206\u5e03\u200b\u3002\u200b\u6309\u7167\u200b\u5f52\u4e00\u5316\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u4e0d\u540c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u4ee5\u4e0b\u200b\u51e0\u79cd\u200b\uff1a
\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b
2024-09-07Attention\u200b\u673a\u5236\u200b\u867d\u7136\u200b\u80fd\u200b\u6355\u6349\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u4e0d\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u4f9d\u8d56\u200b\u5173\u7cfb\u200b\uff0c\u200b\u4f46\u662f\u200b\u65e0\u6cd5\u200b\u533a\u5206\u200b\u4e0d\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\u200b\u4e3a\u4e86\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\uff0cTransformer\u200b\u6a21\u578b\u200b\u5f15\u5165\u200b\u4e86\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff08Positional Encoding\uff09\u3002
transformer\u200b\u53d8\u79cd\u200b
2024-09-07Transformer\u200b\u53d8\u79cd\u200b\u4e3b\u8981\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u51e0\u79cd\u200b\uff1a
"},{"location":"#recent-updates","title":"Recent updates","text":" - 2024-12-16\uff1a\u200b\u673a\u5668\u200b\u5b66\u4e60\u200b\uff0c\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b
- 2024-12-09\uff1a\u200b\u7b97\u6cd5\u200b
- 2024-12-04\uff1a\u200b\u6df1\u5ea6\u200b\u5b66\u4e60\u200b\uff0c\u200b\u6570\u636e\u7ed3\u6784\u200b\uff0cPython\uff0c\u200b\u5f3a\u5316\u200b\u5b66\u4e60\u200b\uff0c\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\uff0c\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5\u200b\uff0cRust
- 2024-11-25\uff1a\u200b\u5b9e\u73b0\u200bLlama-2\uff0c\u200b\u6a21\u578b\u200b\u63a8\u7406\u200b
- 2024-09-07\uff1aCustom transformer\uff0c\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff0ctransformer\u200b\u53d8\u79cd\u200b\uff0c\u200b\u5b9e\u73b0\u200btransformer
"},{"location":"#currently-working-on","title":"Currently working on","text":""},{"location":"#customization","title":"Customization","text":"Click on the buttons to change the primary color.
Red Pink Purple Deep Purple Indigo Blue Light Blue Cyan Teal Green Light Green Lime Yellow Amber Orange Deep Orange Brown Grey Blue Grey White Click on the buttons to change the accent color.
Red Pink Purple Deep Purple Indigo Blue Light Blue Cyan Teal Green Light Green Lime Yellow Amber Orange Deep Orange However, if you try to switch from dark mode to light mode or reversed, changes to the primary color and accent color will lose.
"},{"location":"#building-documentation","title":"Building documentation","text":"Run git clone https://github.com/HuangFuSL/HuangFuSL.github.io.git
to get the source code.
"},{"location":"#bootstrap-icon-installation","title":"Bootstrap icon installation","text":"The site uses bootstrap icons, which are added as submodules in third_party/icons
. You have to manually initialize the submodule.
git submodule update --recursive --remote\n
"},{"location":"#latex-support","title":"LaTeX support","text":"The site uses xelatex
and dvisvgm
to render tex document to SVG images embedded in the markdown files. However, as the SVG images are ignored by .gitignore
, you have to manually perform the conversion.
For GitHub repository clones:
- Run
git submodule update --recursive --remote
to receive the template. - Make sure you have installed and correctly configured
xelatex
and dvisvgm
. - Add
./template
directory to $TEXINPUTS
environmental variable. - Execute
ci/convert.py
in the root directory of the repository. - Run
mkdocs serve
to view the images.
The template is located at HuangFuSL/latex-template
"},{"location":"#github-workflow","title":"GitHub workflow","text":"You need to install the dependencies stored in requirements.txt
before you can start building the site:
pip install -r requirements.txt\n
There are cross-links in the site which require metadata defined in the page, so the project should be built before mkdocs serve
is executed. The exported metadata is saved in meta.json
after a build is successfully executed. To build the site, execute the following command:
mkdocs build -d build\n
Execute mkdocs serve
, the built site will appear at http://127.0.0.1:8000
"},{"location":"#acknowledgements","title":"Acknowledgements","text":"The blog relies on the following open-source projects:
- mkdocs
- Python Markdown
- Python Markdown Extension
- jupyter
The blog uses the following mkdocs plugins to function correctly.
- Neoteroi/mkdocs-plugins
- lukasgeiter/mkdocs-awesome-pages-plugin
- timvink/mkdocs-git-revision-date-localized-plugin
- zhaoterryy/mkdocs-git-revision-date-plugin
- squidfunk/mkdocs-material
- facelessuser/mkdocs-material-extensions
- fralau/mkdocs_macros_plugin
- danielfrg/mkdocs-jupyter
- prcr/mkdocs-meta-descriptions-plugin
Unless noted, content in this blog are shared under CC-BY-NC-SA 4.0 license.
"},{"location":"#version-information","title":"Version information","text":"commit 4b7d0e344ecccd970fead21fc513bcd9dee83585\nMerge: 57013cd0 949c8cdc\nAuthor: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nDate: Mon Dec 16 17:33:30 2024 +0800\n\n Merge pull request #421 from HuangFuSL/gaussian-process\n\n Update: Gaussian Process\n
"},{"location":"about/","title":"\u5173\u4e8e\u200b\u6211","text":"Guess who is here?
"},{"location":"coding/","title":"Coding","text":"\u200b\u7f16\u7a0b\u200b\u76f8\u5173\u200b
"},{"location":"coding/#_1","title":"\u7f16\u7a0b\u8bed\u8a00","text":""},{"location":"coding/#_2","title":"\u7b97\u6cd5","text":" - Leetcode
- \u200b\u6570\u636e\u7ed3\u6784\u200b
"},{"location":"coding/#_3","title":"\u673a\u5668\u200b\u5b66\u4e60","text":" - \u200b\u673a\u5668\u200b\u5b66\u4e60\u200b
- \u200b\u6df1\u5ea6\u200b\u5b66\u4e60\u200b
- \u200b\u5f3a\u5316\u200b\u5b66\u4e60\u200b
"},{"location":"coding/#_4","title":"\u5176\u4ed6","text":" - \u200b\u7cfb\u7edf\u914d\u7f6e\u200b
- SVG
"},{"location":"coding/svg/","title":"SVG\u200b\u52a8\u753b","text":"SVG\u200b\u7684\u200b\u52a8\u753b\u200b\u4f7f\u7528\u200b<animate>
\u200b\u6807\u7b7e\u200b\uff0c\u200b\u5728\u200b\u4f7f\u7528\u200b\u65f6\u200b\uff0c<animate>
\u200b\u6807\u7b7e\u200b\u9700\u8981\u200b\u653e\u5728\u200b\u52a8\u753b\u200b\u64cd\u4f5c\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5185\u90e8\u200b\u3002
\u200b\u4f5c\u4e3a\u200b\u5bf9\u6bd4\u200b\uff0c\u200b\u6211\u4eec\u200b\u5148\u200b\u6784\u9020\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u77e9\u5f62\u200b\uff0c\u200b\u5728\u200b\u77e9\u5f62\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\u6dfb\u52a0\u200b\u52a8\u753b\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n </rect>\n</svg>\n
"},{"location":"coding/svg/#_1","title":"\u7b80\u5355\u200b\u52a8\u753b","text":"\u200b\u5728\u200b<rect>
\u200b\u6807\u7b7e\u200b\u4e2d\u200b\u6dfb\u52a0\u200b<animate>
\u200b\u6807\u7b7e\u200b\uff0c\u200b\u6307\u5b9a\u200b\u52a8\u753b\u200b\u7684\u200b\u7ed1\u5b9a\u200b\u5c5e\u6027\u200b\u3001\u200b\u5f00\u59cb\u200b\u7ed3\u675f\u200b\u7684\u200b\u53d6\u503c\u200b\u548c\u200b\u65f6\u957f\u200b\u5373\u53ef\u200b\u3002
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" from=\"20\" to=\"150\" begin=\"click\" dur=\"1.5s\" />\n </rect>\n</svg>\n
\u200b\u901a\u8fc7\u200battributeName
\u200b\u5c5e\u6027\u200b\u8bbe\u7f6e\u200b\u4ea4\u4e92\u200b\u7ed1\u5b9a\u200b\u7684\u200b\u5c5e\u6027\u200b\uff0c\u200b\u5141\u8bb8\u200b\u7684\u200b\u5c5e\u6027\u200b\u5217\u4e8e\u200b\u4e0b\u8868\u200b\uff1a
\u200b\u6807\u7b7e\u200b \u200b\u5c5e\u6027\u200b\u540d\u200b \u200b\u5907\u6ce8\u200b <animate>
x
<animate>
y
<animate>
width
<animate>
height
<animate>
r
cx
, cy
<animate>
opacity
<animate>
d
<animate>
points
<animate>
stroke
stroke-width
, stroke-linecap
, stroke-dashoffset
<animate>
fill
<set>
visibility
<animateTransform>
translate
<animateTransform>
transform
<animateTransform>
scale
<animateTransform>
rotate
<animateTransform>
skewX
<animateTransform>
skewY
<animateMotion>
path
<animateMotion>
rotate
<animateMotion>
keypoints
<animateMotion>
mpath
"},{"location":"coding/svg/#_2","title":"\u81ea\u5b9a\u4e49\u200b\u52a8\u753b","text":"<animate>
\u200b\u6807\u7b7e\u200b\u652f\u6301\u200b\u591a\u79cd\u200b\u81ea\u5b9a\u4e49\u200b\u5c5e\u6027\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u5c5e\u6027\u200b\u5141\u8bb8\u200b\u5728\u200b\u52a8\u753b\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u5173\u952e\u5e27\u200b\u3001\u200b\u8ba9\u200b\u52a8\u753b\u200b\u54cd\u5e94\u200b\u7528\u6237\u200b\u4ea4\u4e92\u200b\u7b49\u200b\u9ad8\u7ea7\u200b\u529f\u80fd\u200b\u7684\u200b\u5b9e\u73b0\u200b
"},{"location":"coding/svg/#fill","title":"fill
\u200b\u5c5e\u6027","text":"fill
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u52a8\u753b\u200b\u7ed3\u675f\u200b\u65f6\u200b\u52a8\u753b\u200b\u5bf9\u8c61\u200b\u7684\u200b\u72b6\u6001\u200b\uff0c\u200b\u53d6\u503c\u200b\u53ef\u4ee5\u200b\u4e3a\u200bremove
\u200b\u6216\u200bfreeze
\uff0c\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cfill
\u200b\u7684\u200b\u53d6\u503c\u200b\u4e3a\u200bremove
\u3002
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200bfill
\u200b\u53d6\u503c\u200b\u4e3a\u200bfreeze
\u200b\u7684\u200bSVG\u200b\u52a8\u753b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u770b\u51fa\u200b\uff0c\u200b\u52a8\u753b\u200b\u7ed3\u675f\u200b\u540e\u200b\u77e9\u5f62\u200b\u6ca1\u6709\u200b\u56de\u5230\u200b\u5f00\u59cb\u200b\u7684\u200b\u72b6\u6001\u200b\u3002
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" from=\"20\" to=\"150\" begin=\"click\" dur=\"1.5s\" fill=\"freeze\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#repeatcount","title":"repeatCount
\u200b\u5c5e\u6027","text":"repeatcount
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u52a8\u753b\u200b\u5728\u200b\u5f00\u59cb\u200b\u4ee5\u540e\u200b\u91cd\u590d\u200b\u7684\u200b\u6b21\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u6574\u6570\u200b\u503c\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4e3a\u200bindefinite
\u200b\u8868\u793a\u200b\u65e0\u9650\u200b\u6b21\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u4f7f\u200b\u77e9\u5f62\u200b\u79fb\u52a8\u200b\u7684\u200b\u52a8\u4f5c\u200b\u91cd\u590d\u200b\u4e09\u6b21\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" from=\"20\" to=\"150\" begin=\"click\" dur=\"1.5s\" repeatcount=\"3\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#values","title":"values
\u200b\u5c5e\u6027","text":"values
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u52a8\u753b\u200b\u7684\u200b\u5c5e\u6027\u200b\u5173\u952e\u5e27\u200b\uff0c\u200b\u5c5e\u6027\u200b\u503c\u4e3a\u200b\u5404\u200b\u5173\u952e\u5e27\u200b\u7684\u200b\u5c5e\u6027\u200b\u53d6\u503c\u200b\uff0c\u200b\u4ee5\u5206\u200b\u53f7\u200b\u5206\u9694\u200b\u3002values
\u200b\u5c5e\u6027\u200b\u53ef\u4ee5\u200b\u540c\u65f6\u200b\u66ff\u6362\u200bfrom
\u200b\u5c5e\u6027\u200b\u4e0e\u200bto
\u200b\u5c5e\u6027\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u4f7f\u7528\u200bvalues
\u200b\u5c5e\u6027\u200b\uff0c\u200b\u4ee4\u200b\u77e9\u5f62\u200b\u5728\u200b\u79fb\u52a8\u200b\u540e\u200b\u6298\u8fd4\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" values=\"20;150;20\" begin=\"click\" dur=\"3s\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#keytimes","title":"keyTimes
\u200b\u5c5e\u6027","text":"keyTimes
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u5173\u952e\u5e27\u200b\u7684\u200b\u65f6\u95f4\u200b\u5206\u914d\u200b\uff0c\u200b\u5f53\u200bcalcMode
\u200b\u5c5e\u6027\u200b\u4e3a\u200blinear
\u200b\u6216\u200bspline
\u200b\u65f6\u200b\uff0c\u200b\u8be5\u200b\u5c5e\u6027\u200b\u6709\u6548\u200b\uff0c\u200b\u5c5e\u6027\u200b\u7684\u200b\u503c\u200b\u4e3a\u200b\u5404\u4e2a\u200b\u5173\u952e\u5e27\u200b\u5728\u200b\u6574\u4e2a\u200b\u52a8\u753b\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u7684\u200b\u8fdb\u5ea6\u200b\uff08\u200b\u53d6\u503c\u200b\u5728\u200b0-1\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5c0f\u6570\u200b\uff09\u3002
\u200b\u4ee5\u4e0b\u200b\u4f7f\u7528\u200bkeyTimes
\u200b\u5c5e\u6027\u200b\uff0c\u200b\u4ee4\u200b\u77e9\u5f62\u200b\u5728\u200b\u53f3\u79fb\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u7684\u200b\u901f\u5ea6\u200b\u662f\u200b\u5de6\u79fb\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u901f\u5ea6\u200b\u7684\u200b\u4e09\u500d\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" values=\"20;150;20\" keyTimes=\"0;0.25;1\" begin=\"click\" dur=\"3s\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#calcmodekeysplines","title":"calcMode
\u200b\u5c5e\u6027\u200b\u4e0e\u200bkeySplines
\u200b\u5c5e\u6027","text":"calcMode
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u5173\u952e\u5e27\u200b\u63d2\u503c\u200b\u7684\u200b\u8ba1\u7b97\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u8fdb\u4e00\u6b65\u200b\u5730\u200b\uff0ckeySplines
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u5173\u952e\u5e27\u200b\u63d2\u503c\u200b\u6240\u7528\u200b\u7684\u200b\u51fd\u6570\u200b\uff08\u200b\u8d1d\u585e\u5c14\u200b\u66f2\u7ebf\u200b\uff09\u3002calcMode
\u200b\u5c5e\u6027\u200b\u5141\u8bb8\u200b\u7684\u200b\u53d6\u503c\u200b\u5982\u4e0b\u200b\uff1a
paced
\uff1a\u200b\u5ffd\u7565\u200bkeyTimes
\u200b\u5c5e\u6027\u200b\uff0c\u200b\u5c5e\u6027\u200b\u503c\u200b\u6309\u7167\u200bvalues
\u200b\u4e2d\u200b\u5b9a\u4e49\u200b\u7684\u200b\u5173\u952e\u5e27\u200b\u7ebf\u6027\u200b\u53d8\u5316\u200b linear
\uff1a\u200b\u9ed8\u8ba4\u200b\u53d6\u503c\u200b\uff0c\u200b\u5c5e\u6027\u200b\u503c\u200b\u6309\u7167\u200bvalues
\u200b\u4e2d\u200b\u5b9a\u4e49\u200b\u7684\u200b\u5173\u952e\u5e27\u200b\u5728\u200bkeyTimes
\u200b\u65f6\u95f4\u200b\u5185\u200b\u7ebf\u6027\u200b\u53d8\u5316\u200b discrete
\uff1a\u200b\u5c5e\u6027\u200b\u503c\u200b\u9636\u8dc3\u200b\u53d8\u5316\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8ba4\u4e3a\u200b\u6ca1\u6709\u200b\u63d2\u503c\u200b spline
\uff1a\u200b\u5c5e\u6027\u200b\u503c\u200b\u6309\u7167\u200bkeySplines
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\u5b9a\u4e49\u200b\u7684\u200b\u8d1d\u585e\u5c14\u200b\u66f2\u7ebf\u200b\u53d8\u5316\u200b
\u200b\u4ee5\u4e0b\u200b\u5206\u522b\u200b\u6f14\u793a\u200bcalcMode
\u200b\u5c5e\u6027\u200b\u56db\u79cd\u200b\u53d6\u503c\u200b\u7684\u200b\u6548\u679c\u200b\uff0ckeySplines
\u200b\u5c5e\u6027\u200b\u503c\u200b\u8bbe\u5b9a\u200b\u4e3a\u200b1 0 1 1; 0 0 0 1
\uff1a
SVG\u200b\u56fe\u50cf\u200b pacedlineardiscretespline
"},{"location":"coding/svg/#beginend","title":"begin
\u200b\u5c5e\u6027\u200b\u4e0e\u200bend
\u200b\u5c5e\u6027","text":"begin
\u200b\u5c5e\u6027\u200b\u4e0e\u200bend
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200bSVG\u200b\u52a8\u753b\u200b\u5728\u200b\u4f55\u65f6\u200b\u5f00\u59cb\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u65f6\u95f4\u200b\u96f6\u70b9\u200b\u4e3a\u200b\u9875\u9762\u200b\u6e32\u67d3\u200b\u5b8c\u6210\u200b\u7684\u200b\u65f6\u95f4\u200b\uff0c\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5982\u679c\u200b\u4e0d\u200b\u5728\u200bbegin
\u200b\u4e2d\u200b\u6307\u5b9a\u200b\u7528\u6237\u200b\u4ea4\u4e92\u200b\u4e8b\u4ef6\u200b\uff0c\u200b\u5219\u200b\u52a8\u753b\u200b\u5728\u200b\u6e32\u67d3\u200b\u5b8c\u6210\u200b\u540e\u200b\u5373\u200b\u5f00\u59cb\u200b\u8ba1\u65f6\u200b\u3002end
\u200b\u5c5e\u6027\u200b\u53ef\u4ee5\u200b\u63a7\u5236\u200b\u52a8\u753b\u200b\u7684\u200b\u5f3a\u5236\u200b\u7ed3\u675f\u200b\u65f6\u95f4\u200b\uff0c\u200b\u5982\u679c\u200b\u52a8\u753b\u200b\u5728\u200b\u8be5\u200b\u65f6\u95f4\u200b\u5185\u200b\u6ca1\u6709\u200b\u7ed3\u675f\u200b\uff0c\u200b\u5219\u200b\u7acb\u5373\u200b\u7ed3\u675f\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u4f7f\u7528\u200bbegin
\u200b\u5c5e\u6027\u200b\u63a7\u5236\u200b\u52a8\u753b\u200b\u5ef6\u8fdf\u200b\u5f00\u59cb\u200b2s\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" from=\"20\" to=\"150\" begin=\"click+2s\" dur=\"1.5s\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#additive","title":"additive
\u200b\u5c5e\u6027","text":"additive
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200bvalues
\u200b\u53ca\u200bfrom
\u200b\u4e0e\u200bto
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\u7684\u200b\u5c5e\u6027\u200b\u503c\u200b\u662f\u200b\u7edd\u5bf9\u503c\u200b\u8fd8\u662f\u200b\u76f8\u5bf9\u503c\u200b\u3002\u200b\u5141\u8bb8\u200b\u7684\u200b\u53d6\u503c\u200b\u4e3a\u200bsum
\u200b\u4e0e\u200breplace
\uff0c\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u76f8\u5bf9\u503c\u200b\u4e0e\u200b\u7edd\u5bf9\u503c\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cadditive
\u200b\u5c5e\u6027\u200b\u53d6\u200breplace
\u3002
\u200b\u4ee5\u4e0b\u200b\u4f7f\u7528\u200b\u76f8\u5bf9\u503c\u200b\u63a7\u5236\u200b\u77e9\u5f62\u200b\u7684\u200b\u79fb\u52a8\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" from=\"0\" to=\"130\" additive=\"sum\" begin=\"click\" dur=\"1.5s\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#accumulate","title":"accumulate
\u200b\u5c5e\u6027","text":"accumulate
\u200b\u5c5e\u6027\u200b\u5f53\u200b\u52a8\u753b\u200b\u91cd\u590d\u200b\u65f6\u200b\uff0c\u200b\u5c5e\u6027\u200b\u503c\u200b\u662f\u5426\u200b\u7d2f\u52a0\u200b\u3002\u200b\u5141\u8bb8\u200b\u7684\u200b\u53d6\u503c\u200b\u4e3a\u200bsum
\u200b\u4e0e\u200bnone
\u3002\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u4e0a\u200b\u4e00\u6b21\u200b\u52a8\u753b\u200b\u7ed3\u675f\u200b\u7684\u200b\u503c\u200b\u4e0e\u200b\u52a8\u753b\u200b\u539f\u672c\u200b\u7684\u200b\u5c5e\u6027\u200b\u503c\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0caccumulate
\u200b\u5c5e\u6027\u200b\u53d6\u200bnone
\u3002\u200b\u5f53\u200b\u5c5e\u6027\u200b\u503c\u200b\u4e0d\u200b\u652f\u6301\u200b\u76f8\u52a0\u200b\u6216\u200b\u52a8\u753b\u200b\u4e0d\u200b\u91cd\u590d\u200b\u65f6\u200b\uff0c\u200b\u8be5\u200b\u5c5e\u6027\u200b\u88ab\u200b\u5ffd\u7565\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u5b9e\u73b0\u200b\u6bcf\u6b21\u200b\u70b9\u51fb\u200b\u540e\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u77e9\u5f62\u200b\u4e24\u6b21\u200b\uff0c\u200b\u6bcf\u6b21\u200b65\u200b\u5355\u4f4d\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" values=\"0;65\" begin=\"click\" keyTimes=\"0;1\" keySplines=\"1 0 1 1\" calcMode=\"spline\" additive=\"sum\" accumulate=\"sum\" dur=\"1.5s\" fill=\"freeze\" repeatCount=\"2\"/>\n </rect>\n</svg>\n
"},{"location":"coding/svg/#_3","title":"\u4ea4\u4e92\u200b\u52a8\u753b","text":"begin
\u200b\u5c5e\u6027\u200b\u7684\u200b\u53d6\u503c\u200b\u53ef\u4ee5\u200b\u4e3a\u200bclick
\u200b\u6216\u200btouch
\u200b\u4ee5\u200b\u54cd\u5e94\u200b\u7528\u6237\u200b\u8f93\u5165\u200b\u3002click
\u200b\u65e2\u200b\u53ef\u4ee5\u200b\u54cd\u5e94\u200b\u9f20\u6807\u200b\u70b9\u51fb\u200b\u4e8b\u4ef6\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u54cd\u5e94\u200b\u7528\u6237\u200b\u89e6\u6478\u200b\u3002touch
\u200b\u53ea\u80fd\u200b\u54cd\u5e94\u200b\u7528\u6237\u200b\u89e6\u6478\u200b\u3002
"},{"location":"coding/svg/#svg_1","title":"\u5e38\u89c1\u200b\u7684\u200bSVG\u200b\u52a8\u753b\u200b\u6548\u679c","text":" - \u200b\u4f4d\u79fb\u200b
- \u200b\u53d8\u6362\u200b
- \u200b\u6de1\u5165\u6de1\u51fa\u200b
- \u200b\u63cf\u8fb9\u200b
- \u200b\u8def\u5f84\u200b\u53d8\u5316\u200b
- \u200b\u989c\u8272\u200b\u53d8\u5316\u200b
"},{"location":"coding/svg/#_4","title":"\u4f4d\u79fb","text":"\u200b\u4f4d\u79fb\u200b\u64cd\u4f5c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4f7f\u7528\u200b<animate>
\u200b\u63a7\u5236\u200b\u5bf9\u8c61\u200b\u7684\u200bx
\u3001y
\u200b\u5c5e\u6027\u200b\u4e0e\u200bwidth
\u3001height
\u200b\u5c5e\u6027\u200b\u5b9e\u73b0\u200b\u3002\u200b\u53ef\u80fd\u200b\u7684\u200b\u5e94\u7528\u200b\u573a\u666f\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u8fdb\u5ea6\u6761\u200b\u3001\u200b\u76f4\u65b9\u56fe\u200b\u7b49\u200b\u7528\u4e8e\u200b\u4ea4\u4e92\u200b\u7684\u200b\u6570\u636e\u200b\u56fe\u8868\u200b
- \u200b\u4ea4\u901a\u5de5\u5177\u200b\u6216\u200b\u5176\u4ed6\u200b\u5bf9\u8c61\u200b\u7684\u200b\u79fb\u52a8\u200b
\u200b\u8fdb\u5ea6\u6761\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8fdb\u5ea6\u6761\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b <svg id=\"\u200b\u56fe\u5c42\u200b_1\" data-name=\"\u200b\u56fe\u5c42\u200b 1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"700\" height=\"195\" viewBox=\"0 0 700 195\">\n <rect x=\"0.5\" y=\"0.5\" width=\"699\" height=\"58\" fill=\"#fff\"/><path d=\"M699,1V58H1V1H699m1-1H0V59H700V0Z\"/>\n <rect x=\"1\" y=\"1\" width=\"446\" height=\"57\" fill=\"red\">\n <animate attributeName=\"width\" values=\"0;698\" keytimes=\"0;1\" calcmode=\"spline\" keysplines=\"0.44 0.27 0.21 0.99\" begin=\"click\" dur=\"1s\" fill=\"freeze\" repeatcount=\"3\"/>\n </rect>\n <rect x=\"0.5\" y=\"68.5\" width=\"699\" height=\"58\" fill=\"#fff\"/>\n <path d=\"M699,69v57H1V69H699m1-1H0v59H700V68Z\"/>\n <rect x=\"1\" y=\"69\" width=\"446\" height=\"57\" fill=\"#dd2\">\n <animate attributeName=\"width\" values=\"0;698\" keytimes=\"0;1\" calcmode=\"spline\" keysplines=\"0 0 0.5 1\" begin=\"click\" dur=\"1s\" fill=\"freeze\" repeatcount=\"3\"/>\n </rect>\n <rect x=\"0.5\" y=\"136.5\" width=\"699\" height=\"58\" fill=\"#fff\"/>\n <path d=\"M699,137v57H1V137H699m1-1H0v59H700V136Z\"/>\n <rect x=\"1\" y=\"137\" width=\"446\" height=\"57\" fill=\"lime\">\n <animate attributeName=\"width\" values=\"0;698\" keytimes=\"0;1\" calcmode=\"spline\" keysplines=\"0.5 0 1 1\" begin=\"click\" dur=\"1s\" fill=\"freeze\" repeatcount=\"3\"/>\n </rect>\n</svg>\n
\u200b\u4e00\u4e2a\u200b\u79fb\u52a8\u200b\u7684\u200b\u5706\u70b9\u200b\uff1a
\u200b\u5706\u70b9\u200b\u52a8\u753b\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b <svg id=\"\u200b\u56fe\u5c42\u200b_1\" data-name=\"\u200b\u56fe\u5c42\u200b 1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" viewBox=\"0 0 700 195\">\n <rect width=\"700\" height=\"195\" fill=\"none\"/>\n <circle cx=\"279.5\" cy=\"97.5\" r=\"25.5\">\n <animate attributeName=\"cx\" values=\"0;90;0\" keytimes=\"0;0.5;1\" calcmode=\"spline\" keysplines=\"0.5 0 0.5 1; 0.5 0 0.5 1\" begin=\"0s\" dur=\"2s\" fill=\"freeze\" repeatcount=\"indefinite\" additive=\"sum\"/>\n </circle>\n</svg>\n
\u200b\u6b64\u5916\u200b\uff0c\u200b\u90e8\u5206\u200b\u4f4d\u79fb\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b<animateMotion>
\u200b\u6807\u7b7e\u200b\u8fdb\u884c\u200b\u63a7\u5236\u200b\uff0c<animateMotion>
\u200b\u6807\u7b7e\u200b\u652f\u6301\u200b\u5bf9\u8c61\u200b\u6309\u7167\u200b\u8def\u5f84\u200b\u8fdb\u884c\u200b\u4f4d\u79fb\u200b\u3002
\u200b\u590d\u6742\u200b\u7684\u200b\u4f4d\u79fb\u200b\u9700\u8981\u200b\u63a7\u5236\u200b\u5bf9\u8c61\u200b\u7684\u200btranslate
\u200b\u5c5e\u6027\u200b\u3002
"},{"location":"coding/svg/#_5","title":"\u53d8\u6362","text":"\u200b\u4ee5\u4e0b\u200b\u5c5e\u6027\u200b\u5f71\u54cd\u200b\u56fe\u5f62\u200b\u7684\u200b\u53d8\u6362\u200b\uff1a
r
\uff1a\u200b\u534a\u5f84\u200b\uff08\u200b\u5bf9\u4e8e\u200b\u5706\u200b\uff09 rotate
\uff1a\u200b\u65cb\u8f6c\u200b\uff08\u200b\u4ee5\u200b\u4e2d\u5fc3\u70b9\u200b\uff09 skewX
\u3001skewY
\uff1a\u200b\u503e\u659c\u200b transform
\uff1a\u200b\u590d\u6742\u200b\u53d8\u6362\u200b
\u200b\u4ee5\u4e0b\u200b\u7ed9\u51fa\u200br
\u200b\u53d8\u6362\u200b\u7684\u200b\u793a\u4f8b\u200b\uff1a
r\u200b\u53d8\u6362\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b >>> \u200b\u70b9\u51fb\u200b\u5706\u70b9\u200b \u200b\u67e5\u770b\u200b\u9690\u85cf\u200b\u5185\u5bb9\u200b <<< Hello World!
<svg id=\"\u200b\u56fe\u5c42\u200b_1\" data-name=\"\u200b\u56fe\u5c42\u200b 1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"350\" viewBox=\"0 0 749 1334\">\n <rect width=\"749\" height=\"1334\" fill=\"#fff\"/>\n <text transform=\"translate(221.4 1070.91)\" font-size=\"21\" font-family=\"PingFang-SC-Regular, PingFang SC\">\n >>> \u200b\u70b9\u51fb\u200b\u5706\u70b9\u200b \u200b\u67e5\u770b\u200b\u9690\u85cf\u200b\u5185\u5bb9\u200b <<<\n </text>\n <circle cx=\"375\" cy=\"992\" r=\"29\" fill=\"#ed1e79\">\n <animate attributeName=\"r\" values=\"0;1100\" keytimes=\"0;1\" calcmode=\"spline\" keysplines=\"0 0 0.5 1\" begin=\"click\" dur=\"0.75s\" fill=\"freeze\" additive=\"sum\" restart=\"never\">\n </circle>\n <text transform=\"translate(0 295.12)\" font-size=\"192\" fill=\"#fff\" font-family=\"PingFang-SC-Heavy, PingFang SC\" font-weight=\"800\">\n Hello\n <tspan x=\"0\" y=\"230.4\">\n World!\n </tspan>\n </text>\n</svg>\n
transform
\u200b\u5c5e\u6027\u200b\u5728\u200banimateTransform
\u200b\u6807\u7b7e\u200b\u4e2d\u200b\u66f4\u6539\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u8f83\u4e3a\u200b\u590d\u6742\u200b\u7684\u200b\u53d8\u6362\u200b\uff0c\u200b\u5982\u7ed5\u200b\u67d0\u200b\u4e00\u4e2a\u200b\u7279\u5b9a\u200b\u70b9\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\uff1a
transform\u200b\u53d8\u6362\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b <svg id=\"\u200b\u56fe\u5c42\u200b_1\" data-name=\"\u200b\u56fe\u5c42\u200b 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 749 1340\" width=\"350\">\n <rect y=\"6\" width=\"749\" height=\"1334\" fill=\"#fff\"/>\n <g>\n <animateTransform attributeName=\"transform\" type=\"rotate\" values=\"0 375 0; -10 375 0; 10 375 0; 0 375 0\" keytimes=\"0;0.25;0.75;1\" calcmode=\"spline\" keysplines=\"0 0 0.5 1; 0.5 0 0.5 1; 0.5 0 1 1\" start=\"0s\" dur=\"2s\" repeatcount=\"indefinite\" />\n <line x1=\"375\" y1=\"6\" x2=\"375\" y2=\"969.5\" fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"12\"/>\n <circle cx=\"375\" cy=\"969\" r=\"45\" stroke=\"#000\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"12\"/>\n </g>\n</svg>\n
"},{"location":"coding/configuration/","title":"\u7cfb\u7edf\u914d\u7f6e","text":""},{"location":"coding/configuration/#_2","title":"\u547d\u4ee4\u884c","text":" - apt
- Docker
- ssh
- Vim
- update-alternatives
"},{"location":"coding/configuration/#_3","title":"\u8f6f\u4ef6\u200b\u7f16\u8bd1\u200b\u6d41\u7a0b","text":" - \u200b\u6e90\u7801\u200b\u7f16\u8bd1\u200bnginx\u200b\u5e76\u200b\u6dfb\u52a0\u200bRTMP\u200b\u6a21\u5757\u200b
"},{"location":"coding/configuration/apt-get/","title":"apt\uff1aUbuntu \u200b\u5305\u200b\u7ba1\u7406\u5de5\u5177","text":"Ubuntu\u200b\u4e0b\u200b\u7684\u200b\u5305\u200b\u7ba1\u7406\u5de5\u5177\u200b\u662f\u200bdpkg
\uff0c\u200b\u6709\u200b\u4e24\u4e2a\u200b\u524d\u7aef\u200bapt
\u200b\u548c\u200bapt-get
\u3002
"},{"location":"coding/configuration/apt-get/#_1","title":"\u5b89\u88c5\u200b\u4e2d\u65ad\u200b\u540e\u200b\u7684\u200b\u6062\u590d","text":"\u200b\u5728\u200b\u67d0\u4e2a\u200b\u8f6f\u4ef6\u200b\u5b89\u88c5\u200b\u4e2d\u65ad\u200b\uff08\u200b\u5982\u200bCtrl+C\u200b\u6216\u200bkill\uff09\u200b\u540e\u200b\uff0c\u200b\u8f6f\u4ef6\u200b\u7684\u200b\u5b89\u88c5\u200b\u5e76\u200b\u6ca1\u6709\u200b\u5b9e\u9645\u200b\u5b8c\u6210\u200b\uff0c\u200b\u9700\u8981\u200b\u7ee7\u7eed\u6267\u884c\u200b\u5b89\u88c5\u64cd\u4f5c\u200b\u6216\u200b\u56de\u6eda\u200b\u5230\u200b\u5b89\u88c5\u200b\u4e4b\u524d\u200b\u7684\u200b\u72b6\u6001\u200b\u3002
\u200b\u82e5\u200b\u8981\u200b\u7ee7\u7eed\u200b\u5b89\u88c5\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6267\u884c\u200b\u5982\u4e0b\u200b\u547d\u4ee4\u200b\uff0cdpkg
\u200b\u4f1a\u200b\u5c1d\u8bd5\u200b\u5bf9\u200b\u5df2\u7ecf\u200b\u89e3\u538b\u200b\u672a\u200b\u5b8c\u6210\u200b\u5b89\u88c5\u200b\u7684\u200b\u8f6f\u4ef6\u5305\u200b\u8fdb\u884c\u200b\u6062\u590d\u200b\u3002
sudo dpkg --configure -a\n
\u200b\u82e5\u8981\u200b\u56de\u6eda\u200b\u5b89\u88c5\u200b\uff0c\u200b\u9700\u8981\u200b\u5148\u200b\u5728\u200bdpkg
\u200b\u7684\u200b\u5b89\u88c5\u200b\u8bb0\u5f55\u200b\u4e0b\u200b\u627e\u5230\u200b\u672a\u200b\u5b8c\u5168\u5b89\u88c5\u200b\u7684\u200b\u5305\u200b\uff0c\u200b\u5c06\u200b\u5176\u200b\u5220\u9664\u200b\u540e\u200b\u91cd\u65b0\u914d\u7f6e\u200bapt
\u3002\u200b\u6b64\u5904\u200b\u4ee5\u200bnvidia-cudnn
\u200b\u4e3a\u4f8b\u200b\uff1a
sudo ls -l /var/lib/dpkg/info | grep -i nvidia-cudnn\nsudo mv /var/lib/dpkg/info/nvidia-cudnn.* /tmp\nsudo dpkg --configure -a\nsudo apt-get autoremove\n
"},{"location":"coding/configuration/docker/","title":"Docker","text":"docker
\u200b\u662f\u200b\u7528\u4e8e\u200b\u63d0\u4f9b\u200b\u5bb9\u5668\u200b\u955c\u50cf\u200b\u7684\u200b\u8f6f\u4ef6\u200b\u3002\u200b\u955c\u50cf\u200b\u662f\u200b\u4e00\u5957\u200b\u914d\u7f6e\u200b\u597d\u200b\u7684\u200b\u8fd0\u884c\u200b\u73af\u5883\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5feb\u901f\u200b\u90e8\u7f72\u200b\u4e3a\u200b\u5e94\u7528\u7a0b\u5e8f\u200b\u3002
"},{"location":"coding/configuration/docker/#docker-registry","title":"Docker registry","text":"Docker registry\u200b\u662f\u200bdocker\u200b\u7684\u200b\u955c\u50cf\u200b\u6e90\u200b\u3002
"},{"location":"coding/configuration/docker/#_1","title":"\u767b\u5f55","text":"\u200b\u767b\u5f55\u200b\u7ec8\u7aef\u200b\u540e\u200b\uff0c\u200b\u624d\u80fd\u200b\u4ece\u200b\u7f51\u7edc\u200b\u4e0a\u200bpush\u200b\u548c\u200bpull\u200b\u955c\u50cf\u200b\u3002\u200b\u767b\u5f55\u200b\u7684\u200b\u547d\u4ee4\u200b\u4e3a\u200b
docker login <registry-url>\n
\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u6307\u5b9a\u200b<registry-url>
\uff0c\u200b\u5219\u200b\u9ed8\u8ba4\u200b\u4f7f\u7528\u200bDocker registry docker.io
\u3002
\u200b\u767b\u5f55\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u4f1a\u200b\u8bf7\u6c42\u200b\u7528\u6237\u200b\u8f93\u5165\u200b\u7528\u6237\u540d\u200b\u548c\u200b\u5bc6\u7801\u200b\uff08\u200b\u6216\u200bAccess Token\uff09\u3002\u200b\u5982\u679c\u200b\u8d26\u6237\u200b\u914d\u7f6e\u200b\u4e86\u200b2FA\uff0c\u200b\u5219\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200bAccess Token\u200b\u7684\u200b\u65b9\u5f0f\u200b\u767b\u5f55\u200b\u3002\u200b\u767b\u5f55\u200b\u4fe1\u606f\u200b\u4fdd\u5b58\u200b\u5728\u200b~/.docker/config.json
\u200b\u6216\u200b\u7cfb\u7edf\u200b\u7684\u200b\u94a5\u5319\u200b\u4e32\u4e2d\u200b\u3002\u200b\u5982\u679c\u200b\u52a0\u4e0a\u200b--password-stdin
\u200b\u53c2\u6570\u200b\uff0cdocker\u200b\u4f1a\u200b\u4ece\u200b\u547d\u4ee4\u884c\u200b\u4e2d\u200b\u8bfb\u53d6\u200b\u5bc6\u7801\u200b\u3002
\u200b\u914d\u7f6e\u200bdocker\u200b\u4f7f\u7528\u200bmacOS\u200b\u94a5\u5319\u200b\u4e32\u200b
- \u200b\u6267\u884c\u200b
docker logout
\uff0c\u200b\u5220\u9664\u200b\u539f\u5148\u200b\u7684\u200b\u767b\u5f55\u200b\u51ed\u8bc1\u200b\uff1b - \u200b\u4ece\u200bHomebrew\u200b\u5b89\u88c5\u200b
docker-credential-helper
\uff1b - \u200b\u5728\u200b
~/.docker/config.json
\u200b\u4e2d\u200b\u52a0\u5165\u200b\u5982\u4e0b\u200b\u4e00\u884c\u200b\uff1a
{\n \"credsStore\": \"osxkeychain\"\n}\n
- \u200b\u91cd\u65b0\u200b\u6267\u884c\u200b
docker login
\u200b\u767b\u5f55\u200b\uff1b - \u200b\u786e\u8ba4\u200b
~/.docker/config.json
\u200b\u91cc\u200b\u6ca1\u6709\u200b\u767b\u5f55\u200b\u51ed\u8bc1\u200b\uff1a
{\n \"auths\": {\n \"https://index.docker.io/v1/\": {}\n }\n}\n
"},{"location":"coding/configuration/docker/#_2","title":"\u7b2c\u4e09\u65b9\u200b\u955c\u50cf\u200b\u6e90\u200b\u5217\u8868","text":"ghcr.io
ghcr.io
\u200b\u662f\u200bGitHub\u200b\u63d0\u4f9b\u200b\u7684\u200b\u955c\u50cf\u200b\u6e90\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u65e0\u7f1d\u200b\u96c6\u6210\u200b\u81f3\u200bGitHub Actions\u3002
\u200b\u9a8c\u8bc1\u200b\u65b9\u5f0f\u200b\uff1a
- \u200b\u4f7f\u7528\u200bGitHub Access Token\u200b\u9a8c\u8bc1\u200b\uff0cAccess Token\u200b\u5fc5\u987b\u200b\u81f3\u5c11\u200b\u5177\u5907\u200b
read:packages
\u200b\u6743\u9650\u200b\uff0c\u200b\u5982\u679c\u200b\u8981\u200b\u63a8\u9001\u200b\u955c\u50cf\u200b\uff0c\u200b\u5219\u200b\u8fd8\u200b\u9700\u8981\u200bwrite:packages
\u200b\u6743\u9650\u200b - \u200b\u5728\u200bGitHub Actions\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b
GITHUB_TOKEN
\u200b\u9a8c\u8bc1\u200b\u3002
"},{"location":"coding/configuration/docker/#dockerfile","title":"Dockerfile","text":"dockerfile
\u200b\u6587\u4ef6\u200b\u7528\u6765\u200b\u5c06\u200b\u4e00\u5957\u200b\u73af\u5883\u200b\u6253\u5305\u200b\u6210\u200b\u955c\u50cf\u200b\u3002\u200b\u6bcf\u200b\u4e00\u6761\u200b\u6307\u4ee4\u200b\u90fd\u200b\u5bf9\u5e94\u200b\u4e86\u200b\u5bb9\u5668\u200b\u955c\u50cf\u200b\u7684\u200b\u4e00\u5c42\u200b\u3002
"},{"location":"coding/configuration/docker/#docker_1","title":"Docker\u200b\u955c\u50cf\u200b\u57fa\u7840","text":"Docker\u200b\u955c\u50cf\u200b\u7684\u200b\u57fa\u672c\u200b\u683c\u5f0f\u200b\u4e3a\u200b[<registry-name>]/<namespace>/<image-name>:[<tag>]
<registry-name>
\uff1a\u200b\u53ef\u200b\u9009\u200b\uff0c\u200b\u51b3\u5b9a\u200bDocker\u200b\u955c\u50cf\u200b\u53d1\u5e03\u200b\u5728\u200b\u54ea\u4e2a\u200bRegistry\u200b\u4e0a\u200b\uff1b <namespace>
\uff1a\u200b\u4e00\u822c\u200b\u662f\u200b\u7528\u6237\u540d\u200b\uff1b <image-name>
\uff1a\u200b\u955c\u50cf\u200b\u540d\u79f0\u200b\uff1b <tag>
\uff1a\u200b\u53ef\u200b\u9009\u200b\uff0c\u200b\u955c\u50cf\u200b\u7248\u672c\u200b\uff0c\u200b\u9ed8\u8ba4\u200b\u4e3a\u200blatest
\u200b\u4f7f\u7528\u200bdocker pull
\u200b\u547d\u4ee4\u200b\u4ece\u200bregistry\u200b\u4e0b\u8f7d\u200b\u955c\u50cf\u200b\u3002
\u200b\u6267\u884c\u200bdocker build <path>
\u200b\u6765\u200b\u4ece\u200bDockerfile\u200b\u6784\u5efa\u200b\u955c\u50cf\u200b\u3002\u200b\u7528\u200b-t
\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u6307\u5b9a\u200b\u955c\u50cf\u200b\u7684\u200b\u540d\u79f0\u200b\u548c\u200b\u7248\u672c\u200b\u3002
\u200b\u5728\u200b\u955c\u50cf\u200b\u6784\u5efa\u200b\u5b8c\u6210\u200b\u540e\u200b\uff0c\u200b\u6267\u884c\u200bdocker push <image-name>
\u200b\u5c06\u200b\u955c\u50cf\u200b\u63a8\u9001\u200b\u5230\u200b\u5bf9\u5e94\u200b\u7684\u200bregistry\u200b\u4e0a\u200b\u3002
"},{"location":"coding/configuration/docker/#add","title":"ADD
","text":"ADD
\uff08\u200b\u6216\u200bCOPY
\uff09\u200b\u547d\u4ee4\u200b\u5c06\u200b\u672c\u5730\u200b\u6216\u200b\u4e92\u8054\u7f51\u200b\u4e0a\u200b\u7684\u200b\u6587\u4ef6\u200b\u590d\u5236\u5230\u200b\u5bb9\u5668\u200b\u955c\u50cf\u200b\u4e2d\u200b\u3002
ADD <local-path> <image-path>\n
- \u200b\u5982\u679c\u200b\u8def\u5f84\u200b\u4e2d\u200b\u5305\u542b\u200b\u7a7a\u683c\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200b\u53cc\u5f15\u53f7\u200b\u628a\u200b\u8def\u5f84\u200b\u62ec\u200b\u8d77\u6765\u200b\uff1b
<local-path>
\u200b\u652f\u6301\u200b\u901a\u914d\u7b26\u200b*?
\uff1b
"},{"location":"coding/configuration/docker/#from","title":"FROM
","text":"FROM
\u200b\u547d\u4ee4\u200b\u6307\u660e\u200b\u5f53\u524d\u200b\u7684\u200bdockerfile
\u200b\u662f\u200b\u5728\u200b\u54ea\u200b\u4e00\u4e2a\u200b\u955c\u50cf\u200b\u4e0a\u200b\u6267\u884c\u200b\u7684\u200b\u3002\u200b\u6bcf\u4e2a\u200bDockerfile\u200b\u5fc5\u987b\u200b\u6709\u200b\u4e00\u6761\u200bFROM
\u200b\u8bed\u53e5\u200b\u3002
\u200b\u7a7a\u767d\u200bDocker\u200b\u955c\u50cf\u200b
scratch
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u9884\u5b9a\u200b\u4e49\u200b\u7684\u200b\u7a7a\u767d\u200bDocker\u200b\u955c\u50cf\u200b\uff0c\u200b\u4e5f\u200b\u662f\u200b\u6240\u6709\u200bDocker\u200b\u955c\u50cf\u200b\u7684\u200b\u8d77\u59cb\u200b\u3002
FROM scratch\n
"},{"location":"coding/configuration/docker/#run","title":"RUN
","text":"RUN
\u200b\u6267\u884c\u200b\u4e00\u4e2a\u200b\u547d\u4ee4\u200b\uff0c\u200b\u5982\u679c\u200b\u8981\u200b\u6267\u884c\u200b\u591a\u4e2a\u200b\u547d\u4ee4\u200b\u53ef\u4ee5\u200b\u7528\u200b&&
\u200b\u8fde\u63a5\u200b
RUN command-1 && \\\n command-2 && \\\n ...\n
"},{"location":"coding/configuration/docker/#tls","title":"\u914d\u7f6e\u200bTLS\u200b\u8fdc\u7a0b\u200b\u8bbf\u95ee","text":"Docker\u200b\u662f\u200bc/s\u200b\u67b6\u6784\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u53ef\u4ee5\u200b\u4ece\u200b\u8fdc\u7a0b\u200b\u8bbf\u95ee\u200b\u4e3b\u673a\u200b\u7684\u200bDocker daemon\uff0c\u200b\u4ece\u200b\u8fdc\u7a0b\u200b\u76f4\u63a5\u200b\u64cd\u4f5c\u200bDocker\u200b\u73af\u5883\u200b\uff0c\u200b\u5bb9\u5668\u200b\u548c\u200b\u955c\u50cf\u200b\u5747\u200b\u4fdd\u5b58\u200b\u5728\u200b\u8fdc\u7a0b\u200b\u4e3b\u673a\u200b\u4e0a\u200b\u3002\u200b\u4f46\u200b\u5728\u200b\u7f51\u7edc\u200b\u4e0a\u200b\u9700\u8981\u200bTLS\u200b\u52a0\u5bc6\u4f20\u8f93\u200b\u4ee5\u200b\u4fdd\u8bc1\u200b\u5b89\u5168\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u5148\u200b\u914d\u7f6e\u200b\u597d\u200bopenssl\uff0c\u200b\u5e76\u4e14\u200b\u6709\u200b\u4e00\u4e2a\u200b\u89e3\u6790\u200b\u5230\u200b\u670d\u52a1\u5668\u200b\u7684\u200b\u57df\u540d\u200b\uff0c\u200b\u5982\u200bwww.example.com
\u3002
"},{"location":"coding/configuration/docker/#_3","title":"\u670d\u52a1\u5668\u200b\u914d\u7f6e","text":"dockerd
\u200b\u662f\u200bDocker daemon\u200b\u7684\u200b\u53ef\u6267\u884c\u7a0b\u5e8f\u200b\u3002
Docker DaemonDocker Desktop \u200b\u5728\u200b\u670d\u52a1\u5668\u7aef\u200b\uff0c\u200b\u9700\u8981\u200b\u6267\u884c\u200b\u5982\u4e0b\u200b\u547d\u4ee4\u200b\u3002
-
\u200b\u751f\u6210\u200bCA\u200b\u5bc6\u94a5\u200b
openssl genrsa -aes256 -out ca-key.pem 4096\nopenssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem # (1)\n
- \u200b\u4f1a\u200b\u8bf7\u6c42\u200b\u8f93\u5165\u200b\u4e00\u4e9b\u200b\u4fe1\u606f\u200b\uff0c\u200b\u5176\u4e2d\u200b
Common Name
\u200b\u4e00\u6761\u200b\u9700\u8981\u200b\u586b\u5199\u200b\u670d\u52a1\u5668\u200b\u5bf9\u5e94\u200b\u7684\u200b\u57df\u540d\u200b\u3002
-
\u200b\u751f\u6210\u200b\u670d\u52a1\u5668\u200b\u5bc6\u94a5\u200b\u548c\u200b\u8bc1\u4e66\u200b
openssl genrsa -out server-key.pem 4096\nopenssl req -subj \"/CN=www.example.com\" -sha256 -new -key server-key.pem -out server.csr\necho subjectAltName = DNS:$HOST,IP:8.8.8.8 >> extfile.cnf # (1)\necho extendedKeyUsage = serverAuth >> extfile.cnf\nopenssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \\\n -CAcreateserial -out server-cert.pem -extfile extfile.cnf\n
- \u200b\u5982\u679c\u200b\u4e0d\u200b\u9700\u8981\u200bIP\u200b\u5730\u5740\u200b\u8bbf\u95ee\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5220\u9664\u200b\u76f8\u5173\u200b\u6761\u76ee\u200b\u3002
-
\u200b\u751f\u6210\u200b\u5ba2\u6237\u7aef\u200b\u5bc6\u94a5\u200b\u548c\u200b\u8bc1\u4e66\u200b
openssl genrsa -out key.pem 4096\nopenssl req -subj '/CN=client' -new -key key.pem -out client.csr\necho extendedKeyUsage = clientAuth > extfile-client.cnf\nopenssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \\\n -CAcreateserial -out cert.pem -extfile extfile-client.cnf\n
-
\u200b\u6e05\u7406\u200b\u5176\u4f59\u200b\u6587\u4ef6\u200b\uff0c\u200b\u53ea\u200b\u7559\u4e0b\u200b.pem
\u200b\u8bc1\u4e66\u200b\u6587\u4ef6\u200b\uff0c\u200b\u5e76\u4e14\u200b\u8c03\u6574\u200b\u8bc1\u4e66\u200b\u6587\u4ef6\u200b\u7684\u200b\u6743\u9650\u200b
rm -v client.csr server.csr extfile.cnf extfile-client.cnf\nchmod -v 0400 ca-key.pem key.pem server-key.pem\nchmod -v 0444 ca.pem server-cert.pem cert.pem\n
-
\u200b\u542f\u52a8\u200bDocker daemon
dockerd \\\n --tlsverify \\\n --tlscacert=ca.pem \\\n --tlscert=server-cert.pem \\\n --tlskey=server-key.pem \\\n -H=0.0.0.0:2376\n
-
\u200b\u5206\u53d1\u200b\u5ba2\u6237\u7aef\u200b\u8bc1\u4e66\u200bca.pem
\u3001cert.pem
\u3001key.pem
\u3002\u200b\u5ba2\u6237\u7aef\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4ee5\u4e0b\u200b\u547d\u4ee4\u200b\u8fde\u63a5\u200b
docker --tlsverify \\\n --tlscacert=ca.pem \\\n --tlscert=cert.pem \\\n --tlskey=key.pem \\\n -H=$HOST:2376\n
\u200b\u5728\u200bWindows\u200b\u4e2d\u200b\uff0cDocker\u200b\u901a\u8fc7\u200bWSL\u200b\u6216\u8005\u200bHyper-V\u200b\u865a\u62df\u5316\u200b\u5b9e\u73b0\u200bLinux\u200b\u73af\u5883\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5982\u679c\u200b\u5728\u200bWindows\u200b\u4e0b\u200b\u76f4\u63a5\u200b\u6267\u884c\u200bdockerd.exe
\uff0c\u200b\u5f97\u5230\u200b\u7684\u200b\u662f\u200b\u8fd0\u884c\u200bWindows\u200b\u5bb9\u5668\u200b\u7684\u200bDocker\u3002\u200b\u5982\u679c\u200b\u8981\u200b\u8fdc\u7a0b\u200b\u8fde\u63a5\u200b\u8fd0\u884c\u200bLinux\u200b\u7684\u200bDocker\u200b\u73af\u5883\u200b\uff0c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bdocker-remote-api-tls
\u3002
Docker Desktop Engine \u200b\u914d\u7f6e\u6587\u4ef6\u200b
\u200b\u5728\u200bDocker Desktop\u200b\u91cc\u200b\u7684\u200bSettings - Engine\u200b\u91cc\u200b\u4fee\u6539\u200bTLS\u200b\u53c2\u6570\u200b\u914d\u7f6e\u200b\uff0c\u200b\u4f1a\u200b\u5bfc\u81f4\u200bDocker Engine\u200b\u65e0\u6cd5\u200b\u542f\u52a8\u200b\u3002
- \u200b\u6267\u884c\u200b
git clone https://github.com/kekru/docker-remote-api-tls.git
\u200b\u514b\u9686\u200b\u955c\u50cf\u200b -
\u200b\u7f16\u8f91\u200bdocker-compose.yml
\uff0c\u200b\u66ff\u6362\u200b<password>
\u3001<domain-or-ip>
\u3001<client-cert-path>
\u200b\u4e2d\u200b\u7684\u200b\u5185\u5bb9\u200b
version: \"3.4\"\nservices:\n remote-api:\n image: kekru/docker-remote-api-tls:v0.4.0\n ports:\n - 2376:443\n environment:\n - CREATE_CERTS_WITH_PW=<password>\n - CERT_HOSTNAME=<domain-or-ip>\n volumes:\n - <client-cert-path>:/data/certs # (1)\n - /var/run/docker.sock:/var/run/docker.sock:ro\n
- \u200b\u4e0d\u52a0\u200b\u8fd9\u200b\u4e00\u884c\u200b\u4e5f\u200b\u884c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u4ece\u200bDocker Desktop\u200b\u91cc\u200b\u590d\u5236\u200b
-
\u200b\u6267\u884c\u200bdocker-compose up -d
\u200b\u8fd0\u884c\u200b\u5bb9\u5668\u200b\uff0c\u200b\u6ce8\u610f\u200b\u5728\u200b\u8fdc\u7a0b\u200b\u8fde\u63a5\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u9700\u8981\u200b\u4fdd\u8bc1\u200b\u5bb9\u5668\u200b\u59cb\u7ec8\u200b\u5f00\u542f\u200b
"},{"location":"coding/configuration/docker/#_4","title":"\u5ba2\u6237\u7aef\u200b\u914d\u7f6e","text":" - \u200b\u5c06\u200b
ca.pem
\u3001cert.pem
\u3001key.pem
\u200b\u590d\u5236\u5230\u200b\u5ba2\u6237\u7aef\u200b\u7684\u200b~/.docker
\u200b\u76ee\u5f55\u200b\u4e0b\u200b -
\u200b\u8bbe\u7f6e\u200b\u73af\u5883\u53d8\u91cf\u200b\uff08\u200b\u53ea\u200b\u9002\u7528\u200b\u4e8e\u200b\u4ece\u200b\u7ec8\u7aef\u200b\u8bbf\u95ee\u200bDocker\u200b\u7684\u200b\u60c5\u51b5\u200b\uff09
export $DOCKER_TLS_VERIFY=1\nexport $DOCKER_HOST=\"tcp://<domain-or-ip>:2376\"\n
-
\u200b\u6216\u8005\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200bDocker context
docker context create remote --docker \\\n \"host=tcp://<domain-or-ip>:2376,ca=~/.docker/ca.pem,cert=~/.docker/cert.pem,key=~/.docker/key.pem\n
-
\u200b\u6b64\u540e\u200b\uff0cDocker\u200b\u4f1a\u200b\u9ed8\u8ba4\u200b\u4f7f\u7528\u200b\u8fdc\u7a0b\u200b\u8fde\u63a5\u200b\u3002
\u200b\u5982\u679c\u200b\u8fde\u63a5\u200b\u6210\u529f\u200b\uff0c\u200b\u6267\u884c\u200bdocker version
\u200b\u4f1a\u200b\u540c\u65f6\u200b\u8f93\u51fa\u200b\u5ba2\u6237\u7aef\u200b\u548c\u200b\u670d\u52a1\u5668\u200b\u4e24\u8005\u200b\u7684\u200b\u7248\u672c\u4fe1\u606f\u200b\uff0c\u200b\u5982\u200b
Client: Docker Engine - Community\n Version: 24.0.5\n API version: 1.43\n Go version: go1.20.6\n Git commit: ced0996600\n Built: Wed Jul 19 19:44:22 2023\n OS/Arch: darwin/arm64\n Context: default\n\nServer: Docker Desktop 4.21.1 (114176)\n Engine:\n Version: 24.0.2\n API version: 1.43 (minimum version 1.12)\n Go version: go1.20.4\n Git commit: 659604f\n Built: Thu May 25 21:52:17 2023\n OS/Arch: linux/amd64\n Experimental: false\n containerd:\n Version: 1.6.21\n GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8\n runc:\n Version: 1.1.7\n GitCommit: v1.1.7-0-g860f061\n docker-init:\n Version: 0.19.0\n GitCommit: de40ad0\n
\u200b\u6302\u8f7d\u200b\u5377\u200b
\u200b\u5728\u200bDocker\u200b\u4e2d\u200b\uff0c\u200b\u65e0\u8bba\u662f\u200b\u4f7f\u7528\u200b-v
\u200b\u53c2\u6570\u200b\u8fd8\u662f\u200b--mount
\u200b\u53c2\u6570\u200b\u6302\u8f7d\u200b\u7684\u200b\u5377\u200b\u7684\u200b\u6e90\u200b\u8def\u5f84\u200b\u90fd\u200b\u662f\u200b\u76f8\u5bf9\u200b\u4e8e\u200bDocker Daemon\u200b\u800c\u8a00\u200b\u7684\u200b\u3002
"},{"location":"coding/configuration/docker/#_5","title":"\u53c2\u8003\u200b\u9605\u8bfb","text":"Docker registry\uff1a
- Working with the Container registry (GitHub)
Dockerfile\uff1a
\u200b\u8fdc\u7a0b\u200b\u8bbf\u95ee\u200bDocker daemon\uff1a
- Windows Docker \u200b\u4e3b\u673a\u200b\u8fdc\u7a0b\u7ba1\u7406\u200b
- Protect the Docker daemon socket
- dockerd
- Docker Remote API with TLS client authentication via container
- How can I mount a volume of files to a remote docker daemon?
"},{"location":"coding/configuration/nginx-rtmp/","title":"\u6e90\u7801\u200b\u7f16\u8bd1\u200bnginx\u200b\u5e76\u200b\u6dfb\u52a0\u200bRTMP\u200b\u6a21\u5757","text":""},{"location":"coding/configuration/nginx-rtmp/#_1","title":"\u5148\u51b3\u6761\u4ef6","text":" \u200b\u672c\u6b21\u200b\u7f16\u8bd1\u200b\u4f7f\u7528\u200b\u7684\u200b\u73af\u5883\u200b\uff1a
- Windows 19042.662
- Visual Studio 2019
- Visual Studio Build Tools 2017
- Windows 10 SDK 10.0.17763.0
- nginx 1.19.5
- openssl 1.1.1g
- zlib 1.2.11
- pcre 8.44
- perl 5.32 (Strawberry)
- nasm 2.15.05
- nmake 14.27.29112.0
- MSVC(cl) 19.27.29112
\u200b\u5c06\u200b\u5305\u542b\u200bperl.exe
\u3001nasm.exe
\u3001sed.exe
\u200b\u7684\u200b\u76ee\u5f55\u200b\u6dfb\u52a0\u200b\u5230\u200bPATH\u200b\u73af\u5883\u53d8\u91cf\u200b\u3002
"},{"location":"coding/configuration/nginx-rtmp/#_2","title":"\u51c6\u5907\u200b\u5de5\u4f5c","text":"\u200b\u542f\u52a8\u200bMSYS\uff0ccd
\u200b\u5230\u200bnginx\u200b\u7684\u200b\u6e90\u4ee3\u7801\u200b\u76ee\u5f55\u200b\uff0c\u200b\u5207\u6362\u200b\u5230\u200bC\u200b\u76d8\u200b\u6839\u76ee\u5f55\u200b\u7684\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
cd /c/\n
\u200b\u6267\u884c\u200bauto/configure
\uff0c\u200b\u6839\u636e\u200bnginx\u200b\u5b98\u7f51\u200b\u63d0\u4f9b\u200b\u7684\u200b\u53c2\u6570\u200b\u8fdb\u884c\u200b\uff0c\u200b\u6dfb\u52a0\u200b``\u200b\u53c2\u6570\u200b\uff0c\u200b\u5177\u4f53\u200b\u547d\u4ee4\u200b\u5982\u4e0b\u200b\uff1a
auto/configure \\\n --with-cc=cl \\\n --with-debug \\\n --prefix=. \\\n --conf-path=conf/nginx.conf \\\n --pid-path=logs/nginx.pid \\\n --http-log-path=logs/access.log \\\n --error-log-path=logs/error.log \\\n --sbin-path=nginx.exe \\\n --http-client-body-temp-path=temp/client_body_temp \\\n --http-proxy-temp-path=temp/proxy_temp \\\n --http-fastcgi-temp-path=temp/fastcgi_temp \\\n --http-scgi-temp-path=temp/scgi_temp \\\n --http-uwsgi-temp-path=temp/uwsgi_temp \\\n --with-cc-opt=-DFD_SETSIZE=1024 \\\n --with-pcre=pcre-8.44 \\\n --with-zlib=zlib \\\n --with-openssl=openssl \\\n --with-openssl-opt=no-asm \\\n --with-http_ssl_module \\\n --add-module=nginx-rtmp-module\n
\u200b\u6ce8\u610f\u200b\u6b64\u5904\u200b--with-pcre
\u3001--with-zlib
\u3001--with-openssl
\u200b\u53c2\u6570\u200b\u4e2d\u200b\u63d0\u4f9b\u200b\u7684\u200b\u8def\u5f84\u200b\u9700\u8981\u200b\u4e0e\u200bPCRE\u3001zlib\u3001openssl\u200b\u7684\u200b\u6e90\u4ee3\u7801\u200b\u8def\u5f84\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u3002
\u200b\u6267\u884c\u200b\u5b8c\u6bd5\u200b\u540e\u200b\u751f\u6210\u200bMakefile\u200b\u6587\u4ef6\u200b\u300232\u200b\u4f4d\u200b\u73af\u5883\u200b\u4e0b\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u5f00\u59cb\u200b\u7f16\u8bd1\u200b\uff0c64\u200b\u4f4d\u200b\u73af\u5883\u200b\u4e0b\u200b\u9700\u8981\u200b\u5bf9\u200bauto\\lib\\openssl\\makefile.msvc
\u200b\u6539\u4e3a\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b
# Copyright (C) Igor Sysoev\n# Copyright (C) Nginx, Inc.\n\n\nall:\n cd $(OPENSSL)\n\n perl Configure VC-WIN64A no-shared \\\n --prefix=\"%cd%/openssl\" \\\n --openssldir=\"%cd%/openssl/ssl\" \\\n $(OPENSSL_OPT)\n\n if exist ms\\do_win64a.bat ( \\\n ms\\do_win64a \\\n && $(MAKE) -f ms\\nt.mak \\\n && $(MAKE) -f ms\\nt.mak install \\\n ) else ( \\\n $(MAKE) \\\n && $(MAKE) install_sw \\\n )\n
\u200b\u5c06\u200bVC-WIN32
\u200b\u66ff\u6362\u200b\u4e3a\u200bVC-WIN64A
\uff0c\u200b\u6240\u6709\u200b\u7684\u200bms\\do_ms.bat
\u200b\u66ff\u6362\u200b\u4e3a\u200bms\\do_win64a.bat
\u3002
"},{"location":"coding/configuration/nginx-rtmp/#msvc","title":"MSVC\u200b\u7f16\u8bd1","text":"\u200b\u7f16\u8f91\u200b\u5982\u4e0b\u200b\u6e90\u4ee3\u7801\u200b\u6587\u4ef6\u200b\uff1a
nginx-rtmp-module/ngx_rtmp_flv_module.c
\uff0c\u200b\u5b9a\u4f4d\u200b\u5230\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\u5757\u200b\uff1a
509\u200b\u884c\u200b\uff1a
ngx_rtmp_prepare_message(s, &h, ctx->msg_mask & (1 << h.type) ?\n &lh : NULL, out);\n
521\u200b\u884c\u200b\uff1a
ctx->msg_mask |= (1 << h.type);\n
\u200b\u5c06\u200b\u5176\u4e2d\u200b\u7684\u200b(1 << h.type)
\u200b\u6539\u4e3a\u200b(unsigned long)(1 << h.type)
\u3002
nginx-rtmp-module/ngx_rtmp_core_module.c
\uff0c\u200b\u5b9a\u4f4d\u200b\u5230\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\u5757\u200b\uff1a
611\u200b\u884c\u200b\uff1a
struct sockaddr *sa;\n
\u200b\u5c06\u200b\u6b64\u5904\u200b\u7684\u200b\u53d8\u91cf\u540d\u200bsa
\u200b\u6539\u4e3a\u200bsa2
\uff0c\u200b\u5e76\u200b\u5c06\u200b\u6b64\u540e\u200b\u6240\u6709\u200b\u7684\u200bsa
\u200b\u53d8\u91cf\u200b\u6539\u4e3a\u200bsa2
\u3002
\u200b\u542f\u52a8\u200bx64 Native Tools Command Prompt for VS 2019\uff0c\u200b\u5207\u6362\u200b\u5230\u200b\u6e90\u4ee3\u7801\u200b\u76ee\u5f55\u200b\uff0c\u200b\u6267\u884c\u200bnmake
\u200b\u542f\u52a8\u200b\u7f16\u8bd1\u200b\u3002\u200b\u8f93\u51fa\u200b\u6587\u4ef6\u200b\u4e3a\u200bobjs/nginx.exe
"},{"location":"coding/configuration/nginx-rtmp/#nginx","title":"nginx\u200b\u914d\u7f6e","text":"\u200b\u5c06\u200bobjs/nginx.exe
\u200b\u590d\u5236\u200b\u4e00\u4efd\u200b\u3002\u200b\u5728\u200b\u6240\u5728\u200b\u76ee\u5f55\u200b\u4e0b\u200b\u521b\u5efa\u200b\u5982\u4e0b\u200b\u6587\u4ef6\u200b\u7ed3\u6784\u200b\uff1a
.\n\u251c\u2500 nginx.exe\n\u251c\u2500 conf/\n\u2502 \u2514\u2500 nginx.conf\n\u251c\u2500 html\n\u2502 \u2514\u2500 index.xsl\n\u251c\u2500 logs\n\u2514\u2500 temp\n
\u200b\u5176\u4e2d\u200b\uff0chtml/index.xsl
\u200b\u5199\u5165\u200b\u5982\u4e0b\u200b\u5185\u5bb9\u200b
html/index.xsl\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b <?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!--\nCopyright (C) Roman Arutyunyan\n-->\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n<xsl:template match=\"/\">\n <html>\n <head>\n <title>RTMP statistics</title>\n </head>\n <body>\n <xsl:apply-templates select=\"rtmp\"/>\n <hr/>\n Generated by <a href='https://github.com/arut/nginx-rtmp-module'>\n nginx-rtmp-module</a> <xsl:value-of select=\"/rtmp/nginx_rtmp_version\"/>,\n <a href=\"http://nginx.org\">nginx</a> <xsl:value-of select=\"/rtmp/nginx_version\"/>,\n pid <xsl:value-of select=\"/rtmp/pid\"/>,\n built <xsl:value-of select=\"/rtmp/built\"/> <xsl:value-of select=\"/rtmp/compiler\"/>\n </body>\n </html>\n</xsl:template>\n<xsl:template match=\"rtmp\">\n <table cellspacing=\"1\" cellpadding=\"5\">\n <tr bgcolor=\"#999999\">\n <th>RTMP</th>\n <th>#clients</th>\n <th colspan=\"4\">Video</th>\n <th colspan=\"4\">Audio</th>\n <th>In bytes</th>\n <th>Out bytes</th>\n <th>In bits/s</th>\n <th>Out bits/s</th>\n <th>State</th>\n <th>Time</th>\n </tr>\n <tr>\n <td colspan=\"2\">Accepted: <xsl:value-of select=\"naccepted\"/></td>\n <th bgcolor=\"#999999\">codec</th>\n <th bgcolor=\"#999999\">bits/s</th>\n <th bgcolor=\"#999999\">size</th>\n <th bgcolor=\"#999999\">fps</th>\n <th bgcolor=\"#999999\">codec</th>\n <th bgcolor=\"#999999\">bits/s</th>\n <th bgcolor=\"#999999\">freq</th>\n <th bgcolor=\"#999999\">chan</th>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bytes_in\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bytes_out\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_in\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_out\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td/>\n <td>\n <xsl:call-template name=\"showtime\">\n <xsl:with-param name=\"time\" select=\"/rtmp/uptime * 1000\"/>\n </xsl:call-template>\n </td>\n </tr>\n <xsl:apply-templates select=\"server\"/>\n </table>\n</xsl:template>\n<xsl:template match=\"server\">\n <xsl:apply-templates select=\"application\"/>\n</xsl:template>\n<xsl:template match=\"application\">\n <tr bgcolor=\"#999999\">\n <td>\n <b><xsl:value-of select=\"name\"/></b>\n </td>\n </tr>\n <xsl:apply-templates select=\"live\"/>\n <xsl:apply-templates select=\"play\"/>\n</xsl:template>\n<xsl:template match=\"live\">\n <tr bgcolor=\"#aaaaaa\">\n <td>\n <i>live streams</i>\n </td>\n <td align=\"middle\">\n <xsl:value-of select=\"nclients\"/>\n </td>\n </tr>\n <xsl:apply-templates select=\"stream\"/>\n</xsl:template>\n<xsl:template match=\"play\">\n <tr bgcolor=\"#aaaaaa\">\n <td>\n <i>vod streams</i>\n </td>\n <td align=\"middle\">\n <xsl:value-of select=\"nclients\"/>\n </td>\n </tr>\n <xsl:apply-templates select=\"stream\"/>\n</xsl:template>\n<xsl:template match=\"stream\">\n <tr valign=\"top\">\n <xsl:attribute name=\"bgcolor\">\n <xsl:choose>\n <xsl:when test=\"active\">#cccccc</xsl:when>\n <xsl:otherwise>#dddddd</xsl:otherwise>\n </xsl:choose>\n </xsl:attribute>\n <td>\n <a href=\"\">\n <xsl:attribute name=\"onclick\">\n var d=document.getElementById('<xsl:value-of select=\"../../name\"/>-<xsl:value-of select=\"name\"/>');\n d.style.display=d.style.display=='none'?'':'none';\n return false\n </xsl:attribute>\n <xsl:value-of select=\"name\"/>\n <xsl:if test=\"string-length(name) = 0\">\n [EMPTY]\n </xsl:if>\n </a>\n </td>\n <td align=\"middle\"> <xsl:value-of select=\"nclients\"/> </td>\n <td>\n <xsl:value-of select=\"meta/video/codec\"/> <xsl:value-of select=\"meta/video/profile\"/> <xsl:value-of select=\"meta/video/level\"/>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_video\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:apply-templates select=\"meta/video/width\"/>\n </td>\n <td>\n <xsl:value-of select=\"meta/video/frame_rate\"/>\n </td>\n <td>\n <xsl:value-of select=\"meta/audio/codec\"/> <xsl:value-of select=\"meta/audio/profile\"/>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_audio\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:apply-templates select=\"meta/audio/sample_rate\"/>\n </td>\n <td>\n <xsl:value-of select=\"meta/audio/channels\"/>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bytes_in\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bytes_out\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_in\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_out\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td><xsl:call-template name=\"streamstate\"/></td>\n <td>\n <xsl:call-template name=\"showtime\">\n <xsl:with-param name=\"time\" select=\"time\"/>\n </xsl:call-template>\n </td>\n </tr>\n <tr style=\"display:none\">\n <xsl:attribute name=\"id\">\n <xsl:value-of select=\"../../name\"/>-<xsl:value-of select=\"name\"/>\n </xsl:attribute>\n <td colspan=\"16\" ngcolor=\"#eeeeee\">\n <table cellspacing=\"1\" cellpadding=\"5\">\n <tr>\n <th>Id</th>\n <th>State</th>\n <th>Address</th>\n <th>Flash version</th>\n <th>Page URL</th>\n <th>SWF URL</th>\n <th>Dropped</th>\n <th>Timestamp</th>\n <th>A-V</th>\n <th>Time</th>\n </tr>\n <xsl:apply-templates select=\"client\"/>\n </table>\n </td>\n </tr>\n</xsl:template>\n<xsl:template name=\"showtime\">\n <xsl:param name=\"time\"/>\n\n <xsl:if test=\"$time > 0\">\n <xsl:variable name=\"sec\">\n <xsl:value-of select=\"floor($time div 1000)\"/>\n </xsl:variable>\n\n <xsl:if test=\"$sec >= 86400\">\n <xsl:value-of select=\"floor($sec div 86400)\"/>d\n </xsl:if>\n\n <xsl:if test=\"$sec >= 3600\">\n <xsl:value-of select=\"(floor($sec div 3600)) mod 24\"/>h\n </xsl:if>\n\n <xsl:if test=\"$sec >= 60\">\n <xsl:value-of select=\"(floor($sec div 60)) mod 60\"/>m\n </xsl:if>\n\n <xsl:value-of select=\"$sec mod 60\"/>s\n </xsl:if>\n</xsl:template>\n\n<xsl:template name=\"showsize\">\n <xsl:param name=\"size\"/>\n <xsl:param name=\"bits\" select=\"0\" />\n <xsl:param name=\"persec\" select=\"0\" />\n <xsl:variable name=\"sizen\">\n <xsl:value-of select=\"floor($size div 1024)\"/>\n </xsl:variable>\n <xsl:choose>\n <xsl:when test=\"$sizen >= 1073741824\">\n <xsl:value-of select=\"format-number($sizen div 1073741824,'#.###')\"/> T</xsl:when>\n\n <xsl:when test=\"$sizen >= 1048576\">\n <xsl:value-of select=\"format-number($sizen div 1048576,'#.###')\"/> G</xsl:when>\n\n <xsl:when test=\"$sizen >= 1024\">\n <xsl:value-of select=\"format-number($sizen div 1024,'#.##')\"/> M</xsl:when>\n <xsl:when test=\"$sizen >= 0\">\n <xsl:value-of select=\"$sizen\"/> K</xsl:when>\n </xsl:choose>\n <xsl:if test=\"string-length($size) > 0\">\n <xsl:choose>\n <xsl:when test=\"$bits = 1\">b</xsl:when>\n <xsl:otherwise>B</xsl:otherwise>\n </xsl:choose>\n <xsl:if test=\"$persec = 1\">/s</xsl:if>\n </xsl:if>\n</xsl:template>\n\n<xsl:template name=\"streamstate\">\n <xsl:choose>\n <xsl:when test=\"active\">active</xsl:when>\n <xsl:otherwise>idle</xsl:otherwise>\n </xsl:choose>\n</xsl:template>\n\n\n<xsl:template name=\"clientstate\">\n <xsl:choose>\n <xsl:when test=\"publishing\">publishing</xsl:when>\n <xsl:otherwise>playing</xsl:otherwise>\n </xsl:choose>\n</xsl:template>\n\n\n<xsl:template match=\"client\">\n <tr>\n <xsl:attribute name=\"bgcolor\">\n <xsl:choose>\n <xsl:when test=\"publishing\">#cccccc</xsl:when>\n <xsl:otherwise>#eeeeee</xsl:otherwise>\n </xsl:choose>\n </xsl:attribute>\n <td><xsl:value-of select=\"id\"/></td>\n <td><xsl:call-template name=\"clientstate\"/></td>\n <td>\n <a target=\"_blank\">\n <xsl:attribute name=\"href\">\n http://apps.db.ripe.net/search/query.html?searchtext=<xsl:value-of select=\"address\"/>\n </xsl:attribute>\n <xsl:attribute name=\"title\">whois</xsl:attribute>\n <xsl:value-of select=\"address\"/>\n </a>\n </td>\n <td><xsl:value-of select=\"flashver\"/></td>\n <td>\n <a target=\"_blank\">\n <xsl:attribute name=\"href\">\n <xsl:value-of select=\"pageurl\"/>\n </xsl:attribute>\n <xsl:value-of select=\"pageurl\"/>\n </a>\n </td>\n <td><xsl:value-of select=\"swfurl\"/></td>\n <td><xsl:value-of select=\"dropped\"/></td>\n <td><xsl:value-of select=\"timestamp\"/></td>\n <td><xsl:value-of select=\"avsync\"/></td>\n <td>\n <xsl:call-template name=\"showtime\">\n <xsl:with-param name=\"time\" select=\"time\"/>\n </xsl:call-template>\n </td>\n </tr>\n</xsl:template>\n\n<xsl:template match=\"publishing\">\n publishing\n</xsl:template>\n\n<xsl:template match=\"active\">\n active\n</xsl:template>\n\n<xsl:template match=\"width\">\n <xsl:value-of select=\".\"/>x<xsl:value-of select=\"../height\"/>\n</xsl:template>\n\n</xsl:stylesheet>\n
conf/nginx.conf
\u200b\u5199\u5165\u200b\u5982\u4e0b\u200b\u5185\u5bb9\u200b\uff1a
conf/nginx.conf\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b
worker_processes 8;\nerror_log logs/error.log info;\nevents {\n worker_connections 1024;\n}\n\nrtmp {\n server {\n listen 1935;\n\n application live {\n live on;\n }\n\n application hls {\n live on;\n hls on; \n hls_path temp/hls; \n hls_fragment 8s; \n }\n }\n}\n\nhttp {\n server {\n listen 8080;\n root html;\n location / {\n rtmp_stat all;\n rtmp_stat_stylesheet index.xsl;\n }\n\n location /index.xsl {\n root html;\n }\n\n location /hls { \n types{ \n application/vnd.apple.mpegurl m3u8; \n video/mp2t ts; \n } \n alias temp/hls; \n expires -1; \n } \n }\n}\n
\u200b\u53cc\u51fb\u200bnginx.exe
\u200b\u5373\u53ef\u200b\u542f\u52a8\u200b\u670d\u52a1\u5668\u200b\uff0c\u200b\u670d\u52a1\u5668\u200b\u540c\u65f6\u200b\u76d1\u542c\u200b1935\u200b\u7aef\u53e3\u200b\u4e0e\u200b8080\u200b\u7aef\u53e3\u200b
- \u200b\u63a8\u6d41\u200b\u4f7f\u7528\u200b\u7684\u200bRTMP\u200b\u670d\u52a1\u5668\u200b\u5730\u5740\u200b\u4e3a\u200b\uff1a
rtmp://localhost:1935/live
- \u200b\u8bbf\u95ee\u200b
http://localhost:8080
\u200b\u53ef\u4ee5\u200b\u67e5\u770b\u200b\u670d\u52a1\u5668\u7aef\u200b\u7684\u200b\u7edf\u8ba1\u200b\u4fe1\u606f\u200b - \u200b\u5ba2\u6237\u7aef\u200b\uff08\u200b\u5982\u200bVLC\u200b\u7b49\u200b\uff09\u200b\u53ef\u4ee5\u200b\u8bbf\u95ee\u200b
rtmp://localhost:1935/live
\u200b\u63a5\u6536\u200b\u6d41\u200b\uff0clocalhost
\u200b\u53ef\u4ee5\u200b\u66f4\u200b\u6539\u4e3a\u200b\u672c\u673a\u200b\u7684\u200bIP\u200b\u5730\u5740\u200b
\u200b\u4f7f\u7528\u200b\u547d\u4ee4\u200b.\\nginx.exe -s stop
\u200b\u5173\u95ed\u200b\u670d\u52a1\u5668\u200b
"},{"location":"coding/configuration/ssh/","title":"ssh","text":""},{"location":"coding/configuration/ssh/#_1","title":"\u57fa\u672c\u200b\u4f7f\u7528","text":"SSH\u200b\u53ef\u4ee5\u200b\u8fdc\u7a0b\u200b\u8fde\u63a5\u200b\u670d\u52a1\u5668\u200b\u7684\u200b\u7ec8\u7aef\u200b\u3002\u200b\u547d\u4ee4\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b\uff0c\u200b\u5176\u4e2d\u200b<user>
\u200b\u4e3a\u200b\u8fdc\u7a0b\u200b\u670d\u52a1\u5668\u200b\u4e0a\u200b\u7684\u200b\u7528\u6237\u540d\u200b\uff0c<hostname>
\u200b\u662f\u200b\u8fdc\u7a0b\u200b\u670d\u52a1\u5668\u200b\u7684\u200b\u7f51\u7edc\u5730\u5740\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u662f\u200bIP\u200b\u5730\u5740\u200b\u6216\u200b\u57df\u540d\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b~/.ssh/config
\u200b\u6587\u4ef6\u200b\u4e2d\u200b\u5b9a\u4e49\u200b\u7684\u200b\u4e3b\u673a\u200b\u3002\u200b\u5982\u679c\u200b\u6307\u5b9a\u200b\u4e86\u200b<command>
\u200b\u53c2\u6570\u200b\uff0c\u200b\u5219\u200bSSH\u200b\u5728\u200b\u8fde\u63a5\u200b\u6210\u529f\u200b\u540e\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u6267\u884c\u547d\u4ee4\u200b\uff0c\u200b\u5c06\u200b\u7ed3\u679c\u200b\u8f93\u51fa\u200b\u5230\u200b\u7ec8\u7aef\u200b\u5e76\u200b\u5728\u200b\u6267\u884c\u200b\u7ed3\u675f\u200b\u540e\u200b\u65ad\u5f00\u8fde\u63a5\u200b\u3002
ssh <user>@<hostname> [<command>]\n
\u200b\u82e5\u200b\u5ba2\u6237\u7aef\u200b\u7684\u200b\u7528\u6237\u540d\u200b\u548c\u200b\u670d\u52a1\u5668\u200b\u7684\u200b\u7528\u6237\u540d\u200b\u76f8\u540c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b<user>
\u200b\u53c2\u6570\u200b\uff0c\u200b\u5982\u200b
ssh <hostname> [<command>]\n
"},{"location":"coding/configuration/ssh/#_2","title":"\u7aef\u53e3\u200b\u8f6c\u53d1","text":"SSH\u200b\u63d0\u4f9b\u200b\u4e86\u200b-L
\u3001-R
\u3001-D
\u200b\u53c2\u6570\u200b\uff0c\u200b\u5206\u522b\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u672c\u5730\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u3001\u200b\u8fdc\u7a0b\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u4e0e\u200b\u52a8\u6001\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u3002\u200b\u4f7f\u7528\u200b-N
\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u5728\u200b\u4e0d\u200b\u8fde\u63a5\u200b\u8fdc\u7a0b\u200b\u7ec8\u7aef\u200b\uff0c\u200b\u53ea\u200b\u5b9e\u73b0\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u3002\u200b\u4e3a\u200b\u6e05\u6670\u200b\u8868\u8ff0\u200b\u5404\u4e2a\u200b\u7aef\u53e3\u200b\uff0c\u200b\u672c\u8282\u200b\u4e2d\u200b\u5047\u8bbe\u200b\u5ba2\u6237\u7aef\u200bA\u3001\u200b\u670d\u52a1\u5668\u200bB\u200b\u548c\u200b\u53e6\u200b\u4e00\u200b\u4e3b\u673a\u200bC\u3002\u200b\u5ba2\u6237\u7aef\u200bA\u200b\u901a\u8fc7\u200bSSH\u200b\u8fde\u63a5\u200b\u81f3\u200b\u670d\u52a1\u5668\u200bB\u3002
"},{"location":"coding/configuration/ssh/#_3","title":"\u672c\u5730\u200b\u7aef\u53e3\u200b\u8f6c\u53d1","text":"\u200b\u4f7f\u7528\u200b-L
\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u6253\u5f00\u200bSSH\u200b\u7684\u200b\u672c\u5730\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u529f\u80fd\u200b\u3002\u200b\u7531\u4e8e\u200b-L
\u200b\u53c2\u6570\u200b\u5c06\u200b\u6307\u5411\u200b\u5ba2\u6237\u7aef\u200b\u672c\u5730\u200b\u7684\u200b\u8bf7\u6c42\u200b\u8f6c\u53d1\u7ed9\u200b\u670d\u52a1\u5668\u200b\uff0c\u200b\u56e0\u6b64\u200b\u79f0\u4e3a\u200b\u672c\u5730\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u3002\u200b\u542f\u52a8\u200b\u672c\u5730\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u7684\u200b\u547d\u4ee4\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
ssh -L [<bind-addr>]:<port-of-A>:<addr-of-C>:<port-of-C> <user>@<hostname>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u8868\u793a\u200b\u5c06\u200b\u5ba2\u6237\u7aef\u200bA\u200b\u4e0a\u200b\u6307\u5411\u200b<port-of-A>
\u200b\u7aef\u53e3\u200b\u7684\u200b\u672c\u5730\u200b\u8bf7\u6c42\u200b\u901a\u8fc7\u200bSSH\u200b\u8f6c\u53d1\u7ed9\u200b\u670d\u52a1\u5668\u200bB\uff0c\u200b\u7531\u200b\u670d\u52a1\u5668\u200bB\u200b\u5411\u200b\u8fdc\u7a0b\u200b\u4e3b\u673a\u200b<addr-of-C>
\u200b\u7684\u200b<port-of-C>
\u200b\u7aef\u53e3\u200b\u53d1\u8d77\u200b\u8bf7\u6c42\u200b\u3002\u200b\u82e5\u200b\u6307\u5b9a\u200b<bind-addr>
\uff0c\u200b\u5219\u200bSSH\u200b\u4f1a\u200b\u76d1\u542c\u200b<bind-addr>
\u200b\u5730\u5740\u200b\uff0c\u200b\u5e76\u200b\u53ea\u200b\u8f6c\u53d1\u200b\u76ee\u6807\u200b\u4e3a\u200b<bind-addr>
\u200b\u7684\u200b\u8bf7\u6c42\u200b\u3002
"},{"location":"coding/configuration/ssh/#_4","title":"\u8fdc\u7a0b\u200b\u7aef\u53e3\u200b\u8f6c\u53d1","text":"\u200b\u4f7f\u7528\u200b-R
\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u6253\u5f00\u200bSSH\u200b\u7684\u200b\u8fdc\u7a0b\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u529f\u80fd\u200b\u3002-R
\u200b\u7aef\u53e3\u200b\u5c06\u200b\u6307\u5411\u200b\u8fdc\u7a0b\u200b\u670d\u52a1\u5668\u200b\u7684\u200b\u8bf7\u6c42\u200b\u8f6c\u53d1\u7ed9\u200b\u5ba2\u6237\u7aef\u200b\uff0c\u200b\u56e0\u6b64\u200b\u79f0\u4e3a\u200b\u8fdc\u7a0b\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u3002\u200b\u542f\u52a8\u200b\u8fdc\u7a0b\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u7684\u200b\u547d\u4ee4\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
ssh -R [<bind-addr>]:<port-of-B>:<addr-of-C>:<port-of-C> <user>@<hostname>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u8868\u793a\u200b\u5c06\u200b\u670d\u52a1\u5668\u200bB\u200b\u4e0a\u200b\u6307\u5411\u200b<port-of-B>
\u200b\u7aef\u53e3\u200b\u7684\u200b\u8bf7\u6c42\u200b\u901a\u8fc7\u200bSSH\u200b\u8f6c\u53d1\u7ed9\u200b\u5ba2\u6237\u7aef\u200bA\uff0c\u200b\u7531\u200b\u5ba2\u6237\u7aef\u200bA\u200b\u5411\u200b\u53e6\u4e00\u53f0\u200b\u4e3b\u673a\u200b<addr-of-C>
\u200b\u7684\u200b<port-of-C>
\u200b\u7aef\u53e3\u200b\u53d1\u8d77\u200b\u8bf7\u6c42\u200b\u3002\u200b\u82e5\u200b\u6307\u5b9a\u200b<bind-addr>
\uff0c\u200b\u5219\u200bSSH\u200b\u4f1a\u200b\u76d1\u542c\u200b<bind-addr>
\u200b\u5730\u5740\u200b\uff0c\u200b\u5e76\u200b\u53ea\u200b\u8f6c\u53d1\u200b\u76ee\u6807\u200b\u4e3a\u200b<bind-addr>
\u200b\u7684\u200b\u8bf7\u6c42\u200b\u3002
"},{"location":"coding/configuration/ssh/#_5","title":"\u52a8\u6001\u200b\u7aef\u53e3\u200b\u8f6c\u53d1","text":"\u200b\u52a8\u6001\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u7684\u200b\u547d\u4ee4\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
ssh -D <port-of-A> <user>@<hostname>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u8868\u793a\u200b\u5c06\u200b\u5ba2\u6237\u7aef\u200bA\u200b\u4e0a\u200b\u6307\u5411\u200b<port-of-A>
\u200b\u7684\u200b\u8bf7\u6c42\u200b\u901a\u8fc7\u200bSSH\u200b\u8f6c\u53d1\u7ed9\u200b\u670d\u52a1\u5668\u200bB\uff0c\u200b\u7531\u200bB\u200b\u4ee3\u4e3a\u200b\u53d1\u8d77\u200b\u8bf7\u6c42\u200b\uff0c\u200b\u5e76\u200b\u5c06\u200b\u8bbf\u95ee\u200b\u7ed3\u679c\u200b\u4f20\u8f93\u200b\u56de\u200b\u672c\u5730\u200b\u3002
\u200b\u82e5\u200b\u8981\u200b\u8f6c\u53d1\u200b\u6240\u6709\u200b\u672c\u5730\u7f51\u7edc\u200b\u8bf7\u6c42\u200b\uff0c\u200b\u8bbe\u7f6e\u200bSOCKS5\u200b\u4ee3\u7406\u200b\u5c06\u200b\u672c\u5730\u200b\u8bf7\u6c42\u200b\u91cd\u5b9a\u5411\u200b\u5230\u200b<port-of-A>
\u200b\u5373\u53ef\u200b\u3002
"},{"location":"coding/configuration/ssh/#_6","title":"\u5bc6\u94a5\u200b\u767b\u5f55","text":"SSH\u200b\u9ed8\u8ba4\u200b\u4f7f\u7528\u200b\u7528\u6237\u540d\u200b-\u200b\u5bc6\u7801\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u9a8c\u8bc1\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u767b\u5f55\u200b\u9700\u8981\u200b\u8f93\u5165\u200b\u5bc6\u7801\u200b\u3002\u200b\u53ef\u4ee5\u200b\u914d\u7f6e\u200bSSH\u200b\u4f7f\u7528\u200b\u5bc6\u94a5\u200b\u5bf9\u200b\u5ba2\u6237\u7aef\u200b\u8fdb\u884c\u200b\u9a8c\u8bc1\u200b\uff0c\u200b\u6b64\u540e\u200b\u4f7f\u7528\u200b\u8be5\u200b\u5ba2\u6237\u7aef\u200b\u767b\u5f55\u200b\u5c31\u200b\u4e0d\u518d\u200b\u9700\u8981\u200b\u8f93\u5165\u200b\u5bc6\u7801\u200b\u3002\u200b\u6b65\u9aa4\u200b\u5982\u4e0b\u200b
- \u200b\u5728\u200b\u5ba2\u6237\u7aef\u200b\u6267\u884c\u200b
ssh-keygen
\u200b\u547d\u4ee4\u200b\u751f\u6210\u200b\u5bc6\u94a5\u200b\u5bf9\u200b\uff0c\u200b\u6267\u884c\u200b\u5b8c\u6210\u200b\u540e\u4f1a\u200b\u5728\u200b~/.ssh
\u200b\u76ee\u5f55\u200b\u4e0b\u200b\u751f\u6210\u200b\u79c1\u94a5\u200b\u6587\u4ef6\u200bid_rsa
\u200b\u4e0e\u200b\u516c\u94a5\u200b\u6587\u4ef6\u200bid_rsa.pub
\uff1b - \u200b\u6267\u884c\u200b
ssh-copy-id <user>@<hostname>
\u200b\u547d\u4ee4\u200b\uff0c\u200b\u5c06\u200b\u516c\u94a5\u200b\u590d\u5236\u5230\u200b\u8fdc\u7a0b\u200b\u4e3b\u673a\u200b\u7684\u200b~/.ssh/authorized_key
\u200b\u6587\u4ef6\u200b\u4e2d\u200b\uff08\u200b\u624b\u52a8\u200b\u590d\u5236\u7c98\u8d34\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\uff09\u3002
"},{"location":"coding/configuration/ssh/#_7","title":"\u6587\u4ef6\u4f20\u8f93","text":"scp
\u200b\u53ef\u4ee5\u200b\u501f\u52a9\u200bSSH tunnel\u200b\u5b9e\u73b0\u200b\u6587\u4ef6\u4f20\u8f93\u200b\u3002\u200b\u547d\u4ee4\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
scp SOURCE DESTINATION\n
\u200b\u8868\u793a\u200b\u5c06\u200b\u6587\u4ef6\u200bSOURCE\u200b\u590d\u5236\u5230\u200bDESTINATION\u200b\u4e0b\u200b\u3002SOURCE\u200b\u548c\u200bDESTINATION\u200b\u53ef\u4ee5\u200b\u662f\u200b\uff1a
- \u200b\u672c\u5730\u200b\u6709\u6548\u200b\u8def\u5f84\u200b
- \u200b\u683c\u5f0f\u200b\u4e3a\u200b
<user>@<ip>:<path>
\u200b\u7684\u200b\u8fdc\u7a0b\u200b\u8def\u5f84\u200b
"},{"location":"coding/configuration/update-alternatives/","title":"update-alternatives","text":"update-alternatives
\u200b\u662f\u200b\u7528\u4e8e\u200b\u7ba1\u7406\u200b\u8f6f\u200b\u94fe\u63a5\u200b\u7684\u200b\u547d\u4ee4\u200b\u3002
"},{"location":"coding/configuration/update-alternatives/#_1","title":"\u57fa\u7840\u200b\u4f7f\u7528","text":""},{"location":"coding/configuration/update-alternatives/#_2","title":"\u521b\u5efa\u200b\u94fe\u63a5","text":"\u200b\u4f7f\u7528\u200b--install
\u200b\u53c2\u6570\u200b\u521b\u5efa\u200b\u6307\u5411\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u200b\u7684\u200b\u8f6f\u200b\u94fe\u63a5\u200b\uff0c\u200b\u547d\u4ee4\u200b\u7684\u200b\u57fa\u672c\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
update-alternatives --install <destination> <entry-name> <source> <priority>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b<entry-name>
\u200b\u7684\u200b\u8f6f\u200b\u94fe\u63a5\u200b\u6761\u76ee\u200b\uff0c\u200b\u5c06\u200b<source>
\u200b\u6307\u5411\u200b<destination>
\u3002\u200b\u5f53\u6709\u200b\u591a\u4e2a\u200b<source>
\u200b\u6307\u5411\u200b\u540c\u4e00\u4e2a\u200b<destination>
\u200b\u65f6\u200b\uff0c\u200b\u9ed8\u8ba4\u200b<priority>
\u200b\u66f4\u5927\u200b\u7684\u200b\u751f\u6548\u200b\u3002
"},{"location":"coding/configuration/update-alternatives/#_3","title":"\u67e5\u8be2\u200b\u6761\u76ee","text":"\u200b\u4f7f\u7528\u200b--display
\u200b\u53c2\u6570\u200b\u67e5\u8be2\u200b<entry-name>
\u200b\u4e0b\u200b\u7684\u200b\u547d\u4ee4\u200b\u6307\u5411\u200b\uff1a
update-alternatives --display <entry-name>\n
\u200b\u4f7f\u7528\u200b--get-selections
\u200b\u53c2\u6570\u200b\u67e5\u8be2\u200b\u6240\u6709\u200b\u7684\u200b\u6761\u76ee\u200b\u548c\u200b\u914d\u7f6e\u200b\u72b6\u6001\u200b\u3002
update-alternatives --get-selections\n
\u200b\u8f93\u51fa\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
arptables auto /usr/sbin/arptables-nft\nawk auto /usr/bin/gawk\nbuiltins.7.gz auto /usr/share/man/man7/bash-builtins.7.gz\nc++ auto /usr/bin/g++\nc89 auto /usr/bin/c89-gcc\nc99 auto /usr/bin/c99-gcc\ncc auto /usr/bin/gcc\ncpp auto /usr/bin/cpp\ncuda auto /usr/local/cuda-11.7\ncuda-11 auto /usr/local/cuda-11.7\n
"},{"location":"coding/configuration/update-alternatives/#_4","title":"\u5207\u6362\u200b\u94fe\u63a5","text":"\u200b\u4f7f\u7528\u200b--config
\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u5217\u51fa\u200b\u5e76\u200b\u9009\u62e9\u200b\u9700\u8981\u200b\u7684\u200b\u8f6f\u200b\u94fe\u63a5\u200b\uff0c\u200b\u547d\u4ee4\u200b\u7684\u200b\u57fa\u672c\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
update-alternatives --config <entry-name>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u4f1a\u200b\u5217\u51fa\u200b<entry-name>
\u200b\u4e0b\u200b\u7684\u200b\u6240\u6709\u200b\u6761\u76ee\u200b\u3002
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).\n\n Selection Path Priority Status\n------------------------------------------------------------\n* 0 /usr/bin/gcc-11 2 auto mode\n 1 /usr/bin/gcc-11 2 manual mode\n 2 /usr/bin/gcc-12 1 manual mode\n\nPress <enter> to keep the current choice[*], or type selection number:\n
\u200b\u6216\u8005\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200b--set
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\u94fe\u63a5\u200b\u7684\u200b\u76ee\u6807\u200b\uff0c\u200b\u683c\u5f0f\u200b\u4e3a\u200b\uff1a
update-alternatives --set <entry-name> <source>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u4f7f\u7528\u200b<source>
\u200b\u4f5c\u4e3a\u200b<entry-name>
\u200b\u6761\u200b\u76ee\u7684\u200b\u6307\u5411\u200b\u3002
\u200b\u4f7f\u7528\u200b--auto
\u200b\u53c2\u6570\u200b\u6062\u590d\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u76ee\u6807\u200b\u6307\u5411\u200b\u3002
update-alternatives --auto <entry-name>\n
"},{"location":"coding/configuration/update-alternatives/#_5","title":"\u5220\u9664\u200b\u94fe\u63a5","text":"\u200b\u4f7f\u7528\u200b--remove
\u200b\u53c2\u6570\u200b\u5220\u9664\u200b\u4e00\u4e2a\u200b\u6761\u76ee\u200b\u4e0b\u200b\u7684\u200b\u94fe\u63a5\u200b\u3002
update-alternatives --remove <entry-name> <source>\n
"},{"location":"coding/configuration/vim/","title":"Vim","text":"Vim\u200b\u662f\u200b\u57fa\u4e8e\u200b\u547d\u4ee4\u884c\u200b\u7684\u200b\u6587\u672c\u7f16\u8f91\u200b\u5668\u200b\u3002
"},{"location":"coding/configuration/vim/#_1","title":"\u547d\u4ee4\u884c","text":""},{"location":"coding/configuration/vim/#_2","title":"\u4ea4\u4e92","text":"Vim\u200b\u7684\u200b\u4ea4\u4e92\u200b\u547d\u4ee4\u200b\u5982\u4e0b\u200b\u8868\u6240\u5217\u200b\uff0c\u200b\u4ea4\u4e92\u200b\u547d\u4ee4\u200b\u4ee5\u200b:
\u200b\u5f00\u5934\u200b\u3002
\u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b \u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b v
\u200b\u9009\u62e9\u200b\u5b57\u7b26\u200b V
\u200b\u9009\u62e9\u200b\u884c\u200b Ctrl+V
\u200b\u9009\u62e9\u200b\u5757\u200b i
\u200b\u5207\u6362\u200b\u5230\u200b\u63d2\u5165\u200b\u6a21\u5f0f\u200b \u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b \u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b :q
\u200b\u9000\u51fa\u200bVim :q!
\u200b\u9000\u51fa\u200b\u800c\u200b\u4e0d\u200b\u4fdd\u5b58\u200b :w
\u200b\u4fdd\u5b58\u200b <Esc>
\u200b\u9000\u51fa\u200b\u63d2\u5165\u200b\u6a21\u5f0f\u200b :h
\u200b\u67e5\u8be2\u200b\u5e2e\u52a9\u200b :version
\u200b\u67e5\u8be2\u200b\u7248\u672c\u200b\u548c\u200b\u529f\u80fd\u200b :history
\u200b\u67e5\u8be2\u200b\u5386\u53f2\u200b\u547d\u4ee4\u200b :s
\u200b\u6839\u636e\u200b\u6b63\u5219\u8868\u8fbe\u5f0f\u200b\u66ff\u6362\u200b\u5b57\u7b26\u4e32\u200b :edit
\u200b\u7f16\u8f91\u200b\u6587\u4ef6\u200b\uff08\u200b\u652f\u6301\u200bglob pattern\u200b\u5339\u914d\u200b\uff09 :find
\u200b\u5728\u200bpath
\u200b\u4e2d\u200b\u67e5\u627e\u6587\u4ef6\u200b :set
\u200b\u67e5\u8be2\u200b/\u200b\u8bbe\u7f6e\u200b\u73af\u5883\u53d8\u91cf\u200b :Rg
\u200b\u5728\u200b\u6587\u4ef6\u200b\u4e2d\u200b\u67e5\u627e"},{"location":"coding/configuration/vim/#_3","title":"\u64cd\u4f5c","text":"Vim\u200b\u7684\u200b\u8bed\u53e5\u200b\u7531\u200b\u64cd\u4f5c\u7b26\u200b\u548c\u200b\u52a8\u4f5c\u200b\u7ec4\u6210\u200b\uff0c\u200b\u5728\u200bVim\u200b\u754c\u9762\u200b\u4e2d\u200b\uff0c\u200b\u6309\u200b:
\u200b\u8f93\u5165\u200b\u8bed\u53e5\u200b\u3002
Vim\u200b\u7684\u200b\u52a8\u4f5c\u200b\u5982\u4e0b\u200b\u8868\u200b\u6240\u793a\u200b
\u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b \u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b h
\u200b\u5411\u200b\u5de6\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b j
\u200b\u5411\u4e0b\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b k
\u200b\u5411\u4e0a\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b l
\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b b
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0a\u200b\u4e00\u8bcd\u200b\u5f00\u5934\u200b w
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0b\u200b\u4e00\u8bcd\u200b\u5f00\u5934\u200b ge
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0a\u200b\u4e00\u8bcd\u200b\u7ed3\u5c3e\u200b e
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0b\u200b\u4e00\u8bcd\u200b\u7ed3\u5c3e\u200b {
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0a\u200b\u4e00\u6bb5\u200b }
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0b\u200b\u4e00\u6bb5\u200b 0
\u200b\u79fb\u52a8\u200b\u5230\u200b\u884c\u9996\u200b $
\u200b\u79fb\u52a8\u200b\u5230\u200b\u884c\u5c3e\u200b ^
\u200b\u79fb\u52a8\u200b\u5230\u200b\u884c\u9996\u200b\u975e\u200b\u7a7a\u5b57\u7b26\u200b g_
\u200b\u79fb\u52a8\u200b\u5230\u200b\u884c\u5c3e\u200b\u975e\u200b\u7a7a\u5b57\u7b26\u200b n|
\u200b\u79fb\u52a8\u200b\u5230\u200b\u5f53\u524d\u200b\u884c\u200b\u7684\u200b\u7b2c\u200bn
\u200b\u5217\u200b Vim\u200b\u7684\u200b\u64cd\u4f5c\u7b26\u200b\u5982\u4e0b\u200b\u8868\u200b\u6240\u793a\u200b
\u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b y
\u200b\u590d\u5236\u200b d
\u200b\u526a\u5207\u200b c
\u200b\u526a\u5207\u200b\u5e76\u200b\u7f16\u8f91\u200b p
\u200b\u7c98\u8d34\u200b \u200b\u884c\u200b\u64cd\u4f5c\u200b\u6a21\u5f0f\u200b
\u200b\u8fde\u7eed\u200b\u8f93\u5165\u200b\u4e24\u4e2a\u200b\u76f8\u540c\u200b\u64cd\u4f5c\u7b26\u200b\u5bf9\u200b\u5f53\u524d\u200b\u884c\u200b\u6267\u884c\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u5982\u200byy
\u200b\u590d\u5236\u200b\u5f53\u524d\u200b\u884c\u200b\u3002
\u200b\u5728\u200b\u91cd\u590d\u200b\u7684\u200b\u64cd\u4f5c\u7b26\u200b\u524d\u9762\u200b\u52a0\u200b\u6570\u5b57\u200bn
\uff0c\u200b\u8868\u793a\u200b\u4ece\u200b\u5f53\u524d\u200b\u884c\u200b\u5f00\u59cb\u200b\u5230\u200b\u7b2c\u200bn
\u200b\u884c\u200b\u6267\u884c\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u5982\u200b3yy
\u200b\u4ece\u200b\u5f53\u524d\u200b\u884c\u200b\u5f00\u59cb\u200b\u590d\u5236\u200b3\u200b\u884c\u200b\u3002
"},{"location":"coding/dl-from-scratch/","title":"\u6df1\u5ea6\u200b\u5b66\u4e60","text":""},{"location":"coding/dl-from-scratch/#_2","title":"\u795e\u7ecf\u200b\u7f51\u7edc\u5c42","text":" - \u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b
- \u200b\u635f\u5931\u200b\u51fd\u6570\u200b
- \u200b\u5f52\u4e00\u5316\u200b
- \u200b\u591a\u5c42\u200b\u611f\u77e5\u673a\u200b
- \u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b
"},{"location":"coding/dl-from-scratch/#llm-from-scratch","title":"LLM from scratch","text":" - \u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b
- \u200b\u7f16\u7801\u5668\u200b\u4e0e\u200b\u89e3\u7801\u5668\u200b
- \u200b\u9a8c\u8bc1\u200btransformer\u200b\u5b9e\u73b0\u200b
- \u200b\u7edd\u5bf9\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b
- \u200b\u9a8c\u8bc1\u200bbert\u200b\u5b9e\u73b0\u200b
- RoPE
- transformer\u200b\u53d8\u79cd\u200b
- \u200b\u9a8c\u8bc1\u200bLlama-2\u200b\u5b9e\u73b0\u200b
- \u200b\u5927\u200b\u6a21\u578b\u200b\u63a8\u7406\u200b
"},{"location":"coding/dl-from-scratch/activation/","title":"\u6fc0\u6d3b\u200b\u51fd\u6570","text":"\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u662f\u200b\u795e\u7ecf\u7f51\u7edc\u200b\u4e2d\u200b\u7528\u4e8e\u200b\u5f15\u5165\u200b\u975e\u7ebf\u6027\u200b\u56e0\u7d20\u200b\u7684\u200b\u51fd\u6570\u200b\u3002\u200b\u5e38\u7528\u200b\u7684\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u6709\u200b\u5982\u4e0b\u200b\u51e0\u79cd\u200b\uff1a
"},{"location":"coding/dl-from-scratch/activation/#sigmoid","title":"Sigmoid \u200b\u51fd\u6570","text":"Sigmoid\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5c06\u200b\u8f93\u5165\u200b\u503c\u200b\u538b\u7f29\u200b\u5230\u200b0\u200b\u5230\u200b1\u200b\u4e4b\u95f4\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5e38\u7528\u200b\\(\\sigma\\)\u200b\u8868\u793a\u200b\u3002Sigmoid\u200b\u51fd\u6570\u200b\u5e38\u7528\u200b\u4e8e\u200b\u4e8c\u200b\u5206\u7c7b\u200b\u95ee\u9898\u200b\u4e2d\u200b\uff0c\u200b\u5c06\u200b\u8f93\u51fa\u200b\u503c\u200b\u6620\u5c04\u200b\u5230\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b\u3002
\\[ \\begin{aligned} \\sigma(x) &= \\frac{1}{1 + e^{-x}} \\\\ \\sigma'(x) &= \\sigma(x)(1 - \\sigma(x)) \\end{aligned} \\] def sigmoid(x: torch.Tensor) -> torch.Tensor:\n return 1 / (1 + torch.exp(-x))\n\nclass Sigmoid(torch.nn.Module):\n def __init__(self):\n super(Sigmoid, self).__init__()\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n return sigmoid(x)\n
"},{"location":"coding/dl-from-scratch/activation/#softmax","title":"Softmax \u200b\u51fd\u6570","text":"Softmax\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5c06\u200b\u8f93\u5165\u200b\u503c\u200b\u538b\u7f29\u200b\u5230\u200b0\u200b\u5230\u200b1\u200b\u4e4b\u95f4\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5e38\u7528\u200b\u4e8e\u200b\u591a\u200b\u5206\u7c7b\u200b\u95ee\u9898\u200b\u4e2d\u200b\uff0c\u200b\u5c06\u200b\u591a\u4e2a\u200b\u5206\u7c7b\u200b\u4e0a\u200b\u8f93\u51fa\u200b\u503c\u200b\u6620\u5c04\u200b\u5230\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u6240\u6709\u200b\u7c7b\u522b\u200b\u7684\u200b\u6982\u7387\u200b\u4e4b\u200b\u548c\u200b\u4e3a\u200b1\u3002
\\[ \\begin{aligned} \\text{softmax}(\\bsz)_i &= \\frac{e^{z_i}}{\\sum_{j=1}^n e^{z_j}} \\\\ \\text{softmax}'(\\bsz)_i &= \\text{softmax}(\\bsz)_i(1 - \\text{softmax}(\\bsz)_i) \\end{aligned} \\] def softmax(x: torch.Tensor, dim: int = -1) -> torch.Tensor:\n return torch.exp(x) / torch.exp(x).sum(dim=dim, keepdim=True)\n\nclass Softmax(torch.nn.Module):\n def __init__(self, dim: int = -1):\n super(Softmax, self).__init__()\n self.dim = dim\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n return softmax(x, dim=self.dim)\n
\u200b\u76f8\u5bf9\u200b\u5e94\u200b\u7684\u200b\uff0csoftmin\u200b\u51fd\u6570\u200b\u662f\u200bsoftmax\u200b\u51fd\u6570\u200b\u7684\u200b\u5bf9\u79f0\u200b\u51fd\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u6700\u5c0f\u5316\u200b\u8f93\u51fa\u200b\u503c\u200b\uff0c\\(\\text{softmin}(\\bsz) = \\text{softmax}(-\\bsz)\\)\u3002
"},{"location":"coding/dl-from-scratch/attention/","title":"\u6ce8\u610f\u529b\u200b\u673a\u5236","text":""},{"location":"coding/dl-from-scratch/attention/#_2","title":"\u5e8f\u5217\u200b\u5efa\u6a21","text":"\u200b\u8bed\u8a00\u200b\u6a21\u578b\u200b\u662f\u200b\u4e00\u7c7b\u200b\u5e8f\u5217\u200b\u6a21\u578b\u200b\uff0c\u200b\u5176\u200b\u76ee\u6807\u200b\u662f\u200b\u5bf9\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u5e8f\u5217\u200b\u5efa\u6a21\u200b\uff0c\u200b\u5373\u200b\u5bf9\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u4f4d\u7f6e\u200b\u9884\u6d4b\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u6982\u7387\u200b\u3002\u200b\u6587\u672c\u200b\u9996\u5148\u200b\u901a\u8fc7\u200b\u5206\u8bcd\u200b\uff0c\u200b\u83b7\u5f97\u200b\u5bf9\u5e94\u200b\u7684\u200b\u79bb\u6563\u200b\u7b26\u53f7\u200b\uff08token\uff09\uff0c\u200b\u7136\u540e\u200b\u7ecf\u8fc7\u200b\u5d4c\u5165\u200b\u5c42\u200b\uff08embedding layer\uff09\u200b\u5c06\u200b\u7b26\u53f7\u200b\u6620\u5c04\u200b\u5230\u200b\\(D\\)\u200b\u7ef4\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5e8f\u5217\u200b\u5efa\u6a21\u200b\u7684\u200b\u8f93\u5165\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(N\\times L\\times D\\)\u200b\u7684\u200b\u5f20\u91cf\u200b\uff0c\u200b\u5176\u4e2d\u200b\\(N\\)\u200b\u662f\u200bbatch size\uff0c\\(L\\)\u200b\u662f\u200b\u5e8f\u5217\u200b\u957f\u5ea6\u200b\uff0c\\(D\\)\u200b\u662f\u200b\u5d4c\u5165\u200b\u7ef4\u5ea6\u200b\u3002
"},{"location":"coding/dl-from-scratch/attention/#transformer","title":"Transformer","text":"Transformer\u200b\u7531\u200bVaswani\u200b\u7b49\u200b\u4eba\u200b\u5728\u200b2017\u200b\u5e74\u200b\u63d0\u51fa\u200b\uff0c\u200b\u5176\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\uff0c\u200b\u5373\u200b\u901a\u8fc7\u200b\u67e5\u8be2\u200b\u3001\u200b\u952e\u200b\u7684\u200b\u5339\u914d\u200b\u5f97\u200b\u5206\u4e3a\u200b\u503c\u200b\u5206\u914d\u200b\u6743\u91cd\u200b\uff0c\u200b\u4ece\u800c\u200b\u5b9e\u73b0\u200b\u5bf9\u200b\u5e8f\u5217\u200b\u7684\u200b\u5efa\u6a21\u200b\u3002\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u7684\u200b\u6570\u5b66\u200b\u8868\u8fbe\u200b\u4e3a\u200b\uff1a
\\[ \\text{Attention}(Q, K, V) = \\text{softmax}\\left(\\frac{\\bsQ\\bsK^\\top}{\\sqrt{d_k}}\\right)\\bsV \\] \u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u6307\u200b\u7684\u200b\u662f\u200b\u67e5\u8be2\u200b\u3001\u200b\u952e\u548c\u503c\u200b\u90fd\u200b\u6765\u81ea\u200b\u540c\u4e00\u4e2a\u200b\u5e8f\u5217\u200b\u3002\u200b\u5728\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\uff0c\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\\(\\bsx\\)\u200b\u5206\u522b\u200b\u7ecf\u8fc7\u200b\u4e09\u7ec4\u200b\u7ebf\u6027\u53d8\u6362\u200b\\(\\bsW^Q, \\bsW^K, \\bsW^V\\)\u200b\u5f97\u5230\u200b\u67e5\u8be2\u200b\\(\\bsQ\\)\u3001\u200b\u952e\u200b\\(\\bsK\\)\u200b\u548c\u200b\u503c\u200b\\(\\bsV\\)\uff0c\u200b\u7136\u540e\u200b\u8ba1\u7b97\u200b\u6ce8\u610f\u529b\u200b\u5f97\u5206\u200b\uff0c\u200b\u6700\u540e\u200b\u901a\u8fc7\u200b\u503c\u200b\u7684\u200b\u52a0\u6743\u200b\u6c42\u548c\u200b\u5f97\u5230\u200b\u8f93\u51fa\u200b\u3002\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u6307\u200b\u67e5\u8be2\u200b\u548c\u200b
\u200b\u4e3a\u4ec0\u4e48\u200b\u9700\u8981\u200b\u7ebf\u6027\u53d8\u6362\u200b
\u200b\u7ebf\u6027\u53d8\u6362\u200b\u7684\u200b\u76ee\u7684\u200b\u662f\u200b\u5c06\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u6620\u5c04\u200b\u5230\u200b\u4e0d\u540c\u200b\u7684\u200b\u8bed\u4e49\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u53e6\u5916\u200b\u4e00\u65b9\u9762\u200b\u4e5f\u200b\u4f7f\u5f97\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4e0d\u518d\u200b\u53d7\u5230\u200b\u77e9\u9635\u200b\u5bf9\u79f0\u200b\u7684\u200b\u7ea6\u675f\u200b\uff08A\u200b\u5bf9\u200bB\u200b\u7684\u200b\u6ce8\u610f\u529b\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u7b49\u4e8e\u200bB\u200b\u5bf9\u200bA\u200b\u7684\u200b\u6ce8\u610f\u529b\u200b\uff09\u3002
\u200b\u4e3a\u4ec0\u4e48\u200b\u8981\u200b\u9664\u4ee5\u200b\\(\\sqrt{d_k}\\)
\u200b\u5728\u200b\\(\\bsQ\\bsK^\\top\\)\u200b\u7684\u200b\u8ba1\u7b97\u200b\u4e2d\u200b\uff0c\u200b\u7ed3\u679c\u200b\u7684\u200b\u65b9\u5dee\u200b\u4f1a\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u4e3a\u4e86\u200b\u4f7f\u200b\u7ed3\u679c\u200b\u7684\u200b\u65b9\u5dee\u200b\u4fdd\u6301\u200b\u4e0d\u53d8\u200b\uff0c\u200b\u9700\u8981\u200b\u9664\u4ee5\u200b\\(\\sqrt{d_k}\\)\uff0c\u200b\u5176\u4e2d\u200b\\(d_k\\)\u200b\u662f\u200b\u952e\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u3002\u200b\u5426\u5219\u200b\uff0c\u200b\u5f53\u200b\\(d_k\\)\u200b\u8f83\u5927\u200b\u65f6\u200b\uff0c\\(\\bsQ\\bsK^\\top\\)\u200b\u4e2d\u200b\u5143\u7d20\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5dee\u5f02\u200b\u4f1a\u200b\u53d8\u5f97\u200b\u5f88\u5927\u200b\uff0c\u200b\u5bfc\u81f4\u200bsoftmax\u200b\u51fd\u6570\u200b\u7684\u200b\u68af\u5ea6\u200b\u63a5\u8fd1\u200b\u4e8e\u200b0\u3002
softmax\u200b\u51fd\u6570\u200b
softmax\u200b\u51fd\u6570\u200b\u7684\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\uff1a
\\[ \\text{softmax}(\\bsz)_i = \\frac{e^{z_i}}{\\sum_{j=1}^n e^{z_j}} \\] \u200b\u5373\u200b\u5bf9\u200b\u8f93\u5165\u200b\u5411\u91cf\u200b\\(\\bsz\\)\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u6307\u6570\u200b\u7684\u200b\u5f52\u4e00\u5316\u200b\u3002\u200b\u5176\u4e2d\u200b\\(\\bsz\\)\u200b\u662f\u200b\u8f93\u5165\u200b\u5411\u91cf\u200b\uff0c\\(n\\)\u200b\u662f\u200b\u5411\u91cf\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u3002
\u200b\u4e3a\u4e86\u200b\u4ece\u200b\u591a\u4e2a\u200b\u7ef4\u5ea6\u200b\u5b66\u4e60\u200b\u5230\u200b\u5bf9\u200b\u540c\u4e00\u4e2a\u200b\u4f4d\u7f6e\u200b\u4e0d\u540c\u200b\u7279\u5f81\u200b\u7684\u200b\u8868\u5f81\u200b\uff0ctransformer\u200b\u5f15\u5165\u200b\u4e86\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u3002\u200b\u5176\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u5c06\u200b\u8f93\u5165\u200b\u7684\u200b\\(D\\)\u200b\u7ef4\u200b\u5411\u91cf\u200b\u62c6\u5206\u200b\u5230\u200b\\(h\\)\u200b\u4e2a\u5934\u200b\uff0c\u200b\u7136\u540e\u200b\u5206\u522b\u200b\u8ba1\u7b97\u200b\u6ce8\u610f\u529b\u200b\uff0c\u200b\u6700\u540e\u200b\u5c06\u200b\\(h\\)\u200b\u4e2a\u5934\u200b\u7684\u200b\u8f93\u51fa\u200b\u62fc\u63a5\u200b\u5728\u200b\u4e00\u8d77\u200b\uff0c\u200b\u518d\u200b\u7ecf\u8fc7\u200b\u4e00\u4e2a\u200b\u7ebf\u6027\u53d8\u6362\u200b\u5f97\u5230\u200b\u6700\u7ec8\u200b\u8f93\u51fa\u200b\u3002\u200b\u5728\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\uff0c\u200b\u4e00\u822c\u200b\u4f7f\u7528\u200b\u7ef4\u5ea6\u200b\u53d8\u6362\u200b\u6765\u200b\u5b9e\u73b0\u200b\u8f93\u5165\u200b\u5411\u91cf\u200b\u7684\u200b\u62c6\u5206\u200b\u3002
\u200b\u5728\u200b\u90e8\u5206\u200b\u4efb\u52a1\u200b\u4e2d\u200b\uff0c\u200b\u9700\u8981\u200b\u63a7\u5236\u200b\u5e8f\u5217\u200b\u67d0\u4e2a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u53ea\u80fd\u200b\u4f9d\u8d56\u4e8e\u200b\u8be5\u200b\u4f4d\u7f6e\u200b\u4e4b\u524d\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u800c\u200b\u4e0d\u80fd\u200b\u4f9d\u8d56\u4e8e\u200b\u4e4b\u540e\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\u200b\u6b64\u65f6\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bmask\u200b\u673a\u5236\u200b\uff0c\u200b\u5373\u200b\u5728\u200b\u8ba1\u7b97\u200b\u6ce8\u610f\u529b\u200b\u5f97\u5206\u200b\u65f6\u200b\uff0c\u200b\u5c06\u200b\u4e0d\u200b\u5408\u6cd5\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5f97\u5206\u200b\u8bbe\u7f6e\u200b\u4e3a\u200b\u8d1f\u200b\u65e0\u7a77\u200b\uff0c\u200b\u4ece\u800c\u200b\u5728\u200bsoftmax\u200b\u51fd\u6570\u200b\u4e2d\u200b\u5f97\u5230\u200b0\u200b\u7684\u200b\u6982\u7387\u200b\u3002
"},{"location":"coding/dl-from-scratch/attention/#_3","title":"\u4ee3\u7801\u200b\u5b9e\u73b0","text":"einsum
einsum
\u200b\u662f\u200bEinstein Summation Notation\u200b\u7684\u200b\u7f29\u5199\u200b\uff0c\u200b\u662f\u200b\u4e00\u79cd\u200b\u7528\u4e8e\u200b\u5f20\u91cf\u200b\u8fd0\u7b97\u200b\u7684\u200b\u8bb0\u53f7\u200b\u3002\u200b\u5728\u200bPyTorch\u200b\u4e2d\u200b\uff0ceinsum
\u200b\u51fd\u6570\u200b\u7684\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\uff1a
torch.einsum(equation, *operands)\n
\u200b\u5176\u4e2d\u200bequation
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u63cf\u8ff0\u200b\u4e86\u200b\u5f20\u91cf\u200b\u7684\u200b\u8fd0\u7b97\u200b\u65b9\u5f0f\u200b\uff0coperands
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6216\u200b\u591a\u4e2a\u200b\u5f20\u91cf\u200b\u3002\u200b\u4f8b\u5982\u200b\uff0ctorch.einsum(\"ij,jk->ik\", A, B)
\u200b\u8868\u793a\u200b\u8ba1\u7b97\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u548c\u200b\\(B\\)\u200b\u7684\u200b\u4e58\u79ef\u200b\u3002\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5176\u200b\u7406\u89e3\u200b\u4e3a\u200b\u4e58\u79ef\u200b-\u200b\u6c42\u548c\u200b\u7684\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u5373\u5c06\u200bequation
\u200b\u4e2d\u200b\u7684\u200b\u5b57\u6bcd\u200b\u5bf9\u5e94\u200b\u5230\u200boperands
\u200b\u4e2d\u200b\u7684\u200b\u5f20\u91cf\u200b\uff0c\u200b\u7136\u540e\u200b\u5bf9\u200b\u8fd9\u4e9b\u200b\u5f20\u91cf\u200b\u8fdb\u884c\u200b\u4e58\u79ef\u200b\u548c\u200b\u6c42\u548c\u200b\u3002\u200b\u5ffd\u7565\u200bbatch size\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u8ba1\u7b97\u200b\\(\\bsQ\\bsK^\\top\\)\uff0c\u200b\u5176\u4e2d\u200b\\(\\bsQ\\)\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u662f\u200b\\((L, D)\\)\uff0c\\(\\bsK\\)\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u662f\u200b\\((L, D)\\)\uff0c\u200b\u8f93\u51fa\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u662f\u200b\\((L, L)\\)\uff0c\u200b\u56e0\u6b64\u200bequation
\u200b\u4e3a\u200b\"id,jd->ij\"
\u3002
\u200b\u4e0b\u9762\u200b\u6211\u4eec\u200b\u901a\u8fc7\u200bPyTorch\u200b\u5b9e\u73b0\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u3002\u200b\u5728\u200b\u5b9e\u73b0\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u524d\u200b\uff0c\u200b\u9700\u8981\u200b\u5148\u200b\u5b9e\u73b0\u200b\u7ebf\u6027\u53d8\u6362\u200b\u548c\u200bsoftmax\u200b\u51fd\u6570\u200b\u3002\u200b\u4e4b\u540e\u200b\u5b9e\u73b0\u200b\u7528\u4e8e\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u7684\u200bMultiHeadSelfAttention
\u200b\u7c7b\u200b\uff0c\u200b\u5176\u200b\u8f93\u5165\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(N\\times L\\times D\\)\u200b\u7684\u200b\u5f20\u91cf\u200b\uff0c\u200b\u8f93\u51fa\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(N\\times L\\times D\\)\u200b\u7684\u200b\u5f20\u91cf\u200b\u3002
class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadAttention, self).__init__()\n self.d_model = d_model\n self.num_heads = num_heads\n if d_model % num_heads != 0:\n raise ValueError(\"d_model must be divisible by num_heads\")\n\n self.d_k = d_model // num_heads\n self.sqrt_d_k = self.d_k ** 0.5\n\n self.W_Q = torch.nn.Linear(d_model, d_model)\n self.W_K = torch.nn.Linear(d_model, d_model)\n self.W_V = torch.nn.Linear(d_model, d_model)\n self.W_O = torch.nn.Linear(d_model, d_model)\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n N, L_Q, D = x_q.size()\n _, L_KV, _ = x_k.size()\n Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)\n K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n score = torch.einsum(\"nihd,njhd->nijh\", Q, K) / self.sqrt_d_k\n score = torch.nn.functional.softmax(score, dim=2)\n value = torch.einsum(\"nijh,njhd->nihd\", score, V).reshape(N, L_Q, self.d_model)\n return self.W_O(value)\n\nclass MultiHeadSelfAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadSelfAttention, self).__init__(d_model, num_heads)\n\n def forward(self, x: torch.Tensor, mask: torch.Tensor | None = None) -> torch.Tensor:\n return super().forward(x, x, x, mask)\n\nclass MultiHeadCrossAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadCrossAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x_q: torch.Tensor, x_kv: torch.Tensor,\n mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n return super().forward(x_q, x_kv, x_kv, mask)\n
\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4e2d\u200b\u7684\u200bmask
\u200b\u5728\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\uff0c\u200b\u6709\u65f6\u200b\u9700\u8981\u200b\u5bf9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u7684\u200b\u5f97\u5206\u200b\u8fdb\u884c\u200bmask\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u4ee5\u200b\u63a7\u5236\u200b\u6a21\u578b\u200b\u7684\u200b\u884c\u4e3a\u200b\u3002mask\u200b\u901a\u5e38\u200b\u5206\u4e3a\u200b\u4e09\u79cd\u200b\uff0c\u200b\u5373\u200b
- padding mask\uff1a\u200b\u7ef4\u5ea6\u200b
[N, L]
\uff0c\u200b\u7528\u4e8e\u200b\u63a9\u76d6\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200bpadding\u200b\u5143\u7d20\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u4e0d\u200b\u53c2\u4e0e\u200b\u6ce8\u610f\u529b\u200b\u8ba1\u7b97\u200b\u3002 - attention mask\uff1a\u200b\u7ef4\u5ea6\u200b
[L, L]
\uff0c\u200b\u7528\u4e8e\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4e2d\u200b\uff0c\u200b\u63a7\u5236\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u4f9d\u8d56\u200b\u5173\u7cfb\u200b\u3002\u200b\u901a\u5e38\u200b\u7528\u200bcausal mask\u200b\u6216\u200blook-ahead mask\u200b\u89c4\u5b9a\u200b\u5e8f\u5217\u200b\u67d0\u4e2a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u53ea\u80fd\u200b\u4f9d\u8d56\u4e8e\u200b\u8be5\u200b\u4f4d\u7f6e\u200b\u4e4b\u524d\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u800c\u200b\u4e0d\u80fd\u200b\u4f9d\u8d56\u4e8e\u200b\u4e4b\u540e\u200b\u7684\u200b\u5143\u7d20\u200b\u3002 - \u200b\u5728\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4e2d\u200b\u7684\u200bmemory mask\uff1a\u200b\u7ef4\u5ea6\u200b
[L_Q, L_KV]
\uff0c\u200b\u7528\u4e8e\u200b\u63a7\u5236\u200b\u67e5\u8be2\u200b\u548c\u952e\u200b\u4e4b\u95f4\u200b\u7684\u200b\u4f9d\u8d56\u200b\u5173\u7cfb\u200b\u3002
\u200b\u5728\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u5c06\u200bmask\u200b\u4e2d\u4e3a\u200b0\u200b\u7684\u200b\u5143\u7d20\u200b\u8bbe\u7f6e\u200b\u4e3a\u200b\u8d1f\u200b\u65e0\u7a77\u200b\uff0c\u200b\u4ece\u800c\u200b\u5728\u200bsoftmax\u200b\u51fd\u6570\u200b\u4e2d\u200b\u5f97\u5230\u200b0\u200b\u7684\u200b\u6982\u7387\u200b\u3002
\u200b\u5b8c\u6574\u200b\u7684\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u5b9e\u73b0\u200b\u5982\u4e0b\u200b
class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadAttention, self).__init__()\n self.d_model = d_model\n self.num_heads = num_heads\n if d_model % num_heads != 0:\n raise ValueError(\"d_model must be divisible by num_heads\")\n\n self.d_k = d_model // num_heads\n self.sqrt_d_k = self.d_k ** 0.5\n\n self.W_Q = torch.nn.Linear(d_model, d_model)\n self.W_K = torch.nn.Linear(d_model, d_model)\n self.W_V = torch.nn.Linear(d_model, d_model)\n self.W_O = torch.nn.Linear(d_model, d_model)\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n # x_q: (N, L_Q, D), x_k: (N, L_KV, D), x_v: (N, L_KV, D)\n # padding_mask: (N, L_KV), attention_mask: (L_Q, L_KV)\n N, L_Q, D = x_q.size()\n _, L_KV, _ = x_k.size()\n\n # Linear transformation -> Split heads\n Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)\n K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n # Compute attention score\n score = torch.einsum('nihd,njhd->nijh', Q, K) / self.sqrt_d_k\n\n # Apply attention mask\n if attention_mask is not None:\n score = score.masked_fill(\n attention_mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf')\n )\n\n # Apply padding mask\n if padding_mask is not None:\n score = score.masked_fill(\n padding_mask.reshape(N, 1, L_KV, 1) == 0, float('-inf')\n )\n\n # Softmax -> Weighted sum -> Merge heads -> Output transformation\n score = torch.nn.functional.softmax(score, dim=2)\n value = torch.einsum(\n 'nijh,njhd->nihd', score, V\n ).reshape(N, L_Q, self.d_model)\n return self.W_O(value)\n\n\nclass MultiHeadSelfAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadSelfAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n # Self attention is applied to the same input\n return super().forward(x, x, x, padding_mask, attention_mask)\n\n\nclass MultiHeadCrossAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadCrossAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x_q: torch.Tensor, x_kv: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n # Cross attention is applying query on another kv sequence\n return super().forward(x_q, x_kv, x_kv, padding_mask, attention_mask)\n
"},{"location":"coding/dl-from-scratch/bert/","title":"\u5b9e\u73b0\u200bBERT","text":"In\u00a0[1]: Copied! import transformers\nimport torch\n\nfrom custom_transformer import Encoder\n
import transformers import torch from custom_transformer import Encoder huggingface\u200b\u4e2d\u200b\u7684\u200b\u6a21\u578b\u200b\u901a\u5e38\u200b\u5bf9\u5e94\u200b\u4e00\u7ec4\u200bconfig\uff0c\u200b\u5b58\u50a8\u200b\u6a21\u578b\u200b\u7684\u200b\u8d85\u200b\u53c2\u6570\u200b\u3002
In\u00a0[2]: Copied! bert_config = transformers.BertConfig.from_pretrained('bert-base-uncased', local_files_only=True)\n# Remove the pooler layer\nbert_config\n
bert_config = transformers.BertConfig.from_pretrained('bert-base-uncased', local_files_only=True) # Remove the pooler layer bert_config /opt/homebrew/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n warnings.warn(\n
Out[2]: BertConfig {\n \"architectures\": [\n \"BertForMaskedLM\"\n ],\n \"attention_probs_dropout_prob\": 0.1,\n \"classifier_dropout\": null,\n \"gradient_checkpointing\": false,\n \"hidden_act\": \"gelu\",\n \"hidden_dropout_prob\": 0.1,\n \"hidden_size\": 768,\n \"initializer_range\": 0.02,\n \"intermediate_size\": 3072,\n \"layer_norm_eps\": 1e-12,\n \"max_position_embeddings\": 512,\n \"model_type\": \"bert\",\n \"num_attention_heads\": 12,\n \"num_hidden_layers\": 12,\n \"pad_token_id\": 0,\n \"position_embedding_type\": \"absolute\",\n \"transformers_version\": \"4.41.2\",\n \"type_vocab_size\": 2,\n \"use_cache\": true,\n \"vocab_size\": 30522\n}
\u200b\u9996\u5148\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u52a0\u8f7d\u200b\u9884\u200b\u8bad\u7ec3\u200b\u7684\u200bbert-base-uncased\u200b\u6a21\u578b\u200b\uff0c\u200b\u7528\u4e8e\u200b\u548c\u200b\u6211\u4eec\u200b\u7684\u200b\u6a21\u578b\u200b\u8fdb\u884c\u200b\u5bf9\u6bd4\u200b\u3002
In\u00a0[3]: Copied! bert_tokenizer = transformers.BertTokenizer.from_pretrained(\n 'bert-base-uncased', local_files_only=True\n)\nhf_model = transformers.BertModel.from_pretrained(\n 'bert-base-uncased', config=bert_config, add_pooling_layer=False\n)\nhf_model\n
bert_tokenizer = transformers.BertTokenizer.from_pretrained( 'bert-base-uncased', local_files_only=True ) hf_model = transformers.BertModel.from_pretrained( 'bert-base-uncased', config=bert_config, add_pooling_layer=False ) hf_model Out[3]: BertModel(\n (embeddings): BertEmbeddings(\n (word_embeddings): Embedding(30522, 768, padding_idx=0)\n (position_embeddings): Embedding(512, 768)\n (token_type_embeddings): Embedding(2, 768)\n (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n (encoder): BertEncoder(\n (layer): ModuleList(\n (0-11): 12 x BertLayer(\n (attention): BertAttention(\n (self): BertSdpaSelfAttention(\n (query): Linear(in_features=768, out_features=768, bias=True)\n (key): Linear(in_features=768, out_features=768, bias=True)\n (value): Linear(in_features=768, out_features=768, bias=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n (output): BertSelfOutput(\n (dense): Linear(in_features=768, out_features=768, bias=True)\n (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n )\n (intermediate): BertIntermediate(\n (dense): Linear(in_features=768, out_features=3072, bias=True)\n (intermediate_act_fn): GELUActivation()\n )\n (output): BertOutput(\n (dense): Linear(in_features=3072, out_features=768, bias=True)\n (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n )\n )\n )\n)
\u200b\u63a5\u4e0b\u6765\u200b\uff0c\u200b\u6211\u4eec\u200b\u6839\u636e\u200bconfig\u200b\u548c\u200b\u6a21\u578b\u200b\u7684\u200b\u7ed3\u6784\u200b\uff0c\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200bBERT\u200b\u6a21\u578b\u200b\u3002
In\u00a0[4]: Copied! class BertEmbeddings(torch.nn.Module):\n def __init__(self, config: transformers.BertConfig):\n super(BertEmbeddings, self).__init__()\n\n self.word_embeddings = torch.nn.Embedding(\n config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id\n )\n self.positional_embedding = torch.nn.Embedding(\n config.max_position_embeddings, config.hidden_size\n )\n self.token_type_embeddings = torch.nn.Embedding(\n config.type_vocab_size, config.hidden_size\n )\n self.ln = torch.nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps)\n self.dropout = torch.nn.Dropout(config.hidden_dropout_prob)\n\n def forward(self, input_ids):\n input_embeds = self.word_embeddings(input_ids)\n pos_embeds = self.positional_embedding(\n torch.arange(input_ids.size(1), device=input_ids.device)\n )\n type_embeds = self.token_type_embeddings(\n torch.zeros_like(input_ids)\n )\n return self.dropout(self.ln(input_embeds + pos_embeds + type_embeds))\n\nclass CustomBertModel(torch.nn.Module):\n def __init__(self, config: transformers.BertConfig):\n super(CustomBertModel, self).__init__()\n self.shared = BertEmbeddings(config)\n self.encoder = Encoder(\n num_layers=config.num_hidden_layers,\n input_dim=config.hidden_size,\n num_heads=config.num_attention_heads,\n ffn_dim=config.intermediate_size,\n dropout=config.hidden_dropout_prob,\n layer_norm_eps=config.layer_norm_eps,\n activation=config.hidden_act,\n )\n\n def forward(self, input_ids, padding_mask):\n input_embeds = self.shared(input_ids)\n return self.encoder(input_embeds, padding_mask=padding_mask)\n\ncustom_model = CustomBertModel(bert_config)\ncustom_model\n
class BertEmbeddings(torch.nn.Module): def __init__(self, config: transformers.BertConfig): super(BertEmbeddings, self).__init__() self.word_embeddings = torch.nn.Embedding( config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id ) self.positional_embedding = torch.nn.Embedding( config.max_position_embeddings, config.hidden_size ) self.token_type_embeddings = torch.nn.Embedding( config.type_vocab_size, config.hidden_size ) self.ln = torch.nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) self.dropout = torch.nn.Dropout(config.hidden_dropout_prob) def forward(self, input_ids): input_embeds = self.word_embeddings(input_ids) pos_embeds = self.positional_embedding( torch.arange(input_ids.size(1), device=input_ids.device) ) type_embeds = self.token_type_embeddings( torch.zeros_like(input_ids) ) return self.dropout(self.ln(input_embeds + pos_embeds + type_embeds)) class CustomBertModel(torch.nn.Module): def __init__(self, config: transformers.BertConfig): super(CustomBertModel, self).__init__() self.shared = BertEmbeddings(config) self.encoder = Encoder( num_layers=config.num_hidden_layers, input_dim=config.hidden_size, num_heads=config.num_attention_heads, ffn_dim=config.intermediate_size, dropout=config.hidden_dropout_prob, layer_norm_eps=config.layer_norm_eps, activation=config.hidden_act, ) def forward(self, input_ids, padding_mask): input_embeds = self.shared(input_ids) return self.encoder(input_embeds, padding_mask=padding_mask) custom_model = CustomBertModel(bert_config) custom_model Out[4]: CustomBertModel(\n (shared): BertEmbeddings(\n (word_embeddings): Embedding(30522, 768, padding_idx=0)\n (positional_embedding): Embedding(512, 768)\n (token_type_embeddings): Embedding(2, 768)\n (ln): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n (encoder): Encoder(\n (layers): ModuleList(\n (0-11): 12 x EncoderLayer(\n (attention): MultiHeadSelfAttention(\n (W_Q): Linear(in_features=768, out_features=768, bias=True)\n (W_K): Linear(in_features=768, out_features=768, bias=True)\n (W_V): Linear(in_features=768, out_features=768, bias=True)\n (W_O): Linear(in_features=768, out_features=768, bias=True)\n )\n (norm1): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout1): Dropout(p=0.1, inplace=False)\n (ffn): FFN(\n (fc1): Linear(in_features=768, out_features=3072, bias=True)\n (fc2): Linear(in_features=3072, out_features=768, bias=True)\n (act): GELU(approximate='none')\n )\n (norm2): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout2): Dropout(p=0.1, inplace=False)\n )\n )\n )\n)
\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u5c06\u200b\u9884\u200b\u8bad\u7ec3\u200b\u6a21\u578b\u200b\u7684\u200b\u6743\u91cd\u200b\u52a0\u8f7d\u200b\u5230\u200b\u6211\u4eec\u200b\u7684\u200b\u6a21\u578b\u200b\u4e2d\u200b\u3002
In\u00a0[5]: Copied! def copy_weights(src, dest, bias: bool = False):\n src.weight.data.copy_(dest.weight.data)\n if bias:\n src.bias.data.copy_(dest.bias.data)\n\ndef load_weight_from_hf(model: CustomBertModel, hf_model: transformers.BertModel):\n # Embeddings\n unbiased_layer_pairs = [\n (model.shared.word_embeddings, hf_model.embeddings.word_embeddings),\n (model.shared.positional_embedding, hf_model.embeddings.position_embeddings),\n (model.shared.token_type_embeddings, hf_model.embeddings.token_type_embeddings),\n ]\n biased_layer_pairs = [\n (model.shared.ln, hf_model.embeddings.LayerNorm),\n ]\n for custom_layer, hf_layer in zip(model.encoder.layers, hf_model.encoder.layer):\n # attn\n biased_layer_pairs.append((custom_layer.attention.W_Q, hf_layer.attention.self.query))\n biased_layer_pairs.append((custom_layer.attention.W_K, hf_layer.attention.self.key))\n biased_layer_pairs.append((custom_layer.attention.W_V, hf_layer.attention.self.value))\n biased_layer_pairs.append((custom_layer.attention.W_O, hf_layer.attention.output.dense))\n biased_layer_pairs.append((custom_layer.norm1, hf_layer.attention.output.LayerNorm))\n # ffn\n biased_layer_pairs.append((custom_layer.ffn.fc1, hf_layer.intermediate.dense))\n biased_layer_pairs.append((custom_layer.ffn.fc2, hf_layer.output.dense))\n biased_layer_pairs.append((custom_layer.norm2, hf_layer.output.LayerNorm))\n\n for src, dest in unbiased_layer_pairs:\n copy_weights(src, dest)\n for src, dest in biased_layer_pairs:\n copy_weights(src, dest, bias=True)\n return model\n
def copy_weights(src, dest, bias: bool = False): src.weight.data.copy_(dest.weight.data) if bias: src.bias.data.copy_(dest.bias.data) def load_weight_from_hf(model: CustomBertModel, hf_model: transformers.BertModel): # Embeddings unbiased_layer_pairs = [ (model.shared.word_embeddings, hf_model.embeddings.word_embeddings), (model.shared.positional_embedding, hf_model.embeddings.position_embeddings), (model.shared.token_type_embeddings, hf_model.embeddings.token_type_embeddings), ] biased_layer_pairs = [ (model.shared.ln, hf_model.embeddings.LayerNorm), ] for custom_layer, hf_layer in zip(model.encoder.layers, hf_model.encoder.layer): # attn biased_layer_pairs.append((custom_layer.attention.W_Q, hf_layer.attention.self.query)) biased_layer_pairs.append((custom_layer.attention.W_K, hf_layer.attention.self.key)) biased_layer_pairs.append((custom_layer.attention.W_V, hf_layer.attention.self.value)) biased_layer_pairs.append((custom_layer.attention.W_O, hf_layer.attention.output.dense)) biased_layer_pairs.append((custom_layer.norm1, hf_layer.attention.output.LayerNorm)) # ffn biased_layer_pairs.append((custom_layer.ffn.fc1, hf_layer.intermediate.dense)) biased_layer_pairs.append((custom_layer.ffn.fc2, hf_layer.output.dense)) biased_layer_pairs.append((custom_layer.norm2, hf_layer.output.LayerNorm)) for src, dest in unbiased_layer_pairs: copy_weights(src, dest) for src, dest in biased_layer_pairs: copy_weights(src, dest, bias=True) return model In\u00a0[6]: Copied! custom_model = load_weight_from_hf(custom_model, hf_model)\n
custom_model = load_weight_from_hf(custom_model, hf_model) \u200b\u4f7f\u7528\u200bBERT\u200b\u7f16\u7801\u200b\u4e00\u53e5\u200b\u8bdd\u200b\uff0c\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u5bf9\u200b\u53e5\u5b50\u200b\u5206\u8bcd\u200b\uff0c\u200b\u7136\u540e\u200b\u5c06\u200b\u5176\u200b\u8f93\u5165\u200b\u6a21\u578b\u200b\u5f97\u5230\u200b\u5bf9\u5e94\u200b\u7684\u200b\u8f93\u51fa\u200b\u3002
In\u00a0[7]: Copied! custom_model.eval()\nhf_model.eval()\n\nsentence = \"Hello, World!\"\ntokenized_sentence = bert_tokenizer(sentence, return_tensors='pt')\ninput_ids = tokenized_sentence['input_ids']\npadding_mask = tokenized_sentence['attention_mask']\n\ncustom_output = custom_model(input_ids, padding_mask)\nhf_output = hf_model(input_ids, attention_mask=padding_mask).last_hidden_state\ncustom_output[0, 0, :5], hf_output[0, 0, :5]\n
custom_model.eval() hf_model.eval() sentence = \"Hello, World!\" tokenized_sentence = bert_tokenizer(sentence, return_tensors='pt') input_ids = tokenized_sentence['input_ids'] padding_mask = tokenized_sentence['attention_mask'] custom_output = custom_model(input_ids, padding_mask) hf_output = hf_model(input_ids, attention_mask=padding_mask).last_hidden_state custom_output[0, 0, :5], hf_output[0, 0, :5] Out[7]: (tensor([-0.0781, 0.1587, 0.0400, -0.1986, -0.3442], grad_fn=<SliceBackward0>),\n tensor([-0.0781, 0.1587, 0.0400, -0.1986, -0.3442], grad_fn=<SliceBackward0>))
In\u00a0[8]: Copied! torch.allclose(custom_output, hf_output, atol=1e-5)\n
torch.allclose(custom_output, hf_output, atol=1e-5) Out[8]: True
"},{"location":"coding/dl-from-scratch/custom_transformer/","title":"Custom transformer","text":"In\u00a0[\u00a0]: Copied! import torch\n
import torch In\u00a0[\u00a0]: Copied! class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadAttention, self).__init__()\n self.d_model = d_model\n self.num_heads = num_heads\n if d_model % num_heads != 0:\n raise ValueError(\"d_model must be divisible by num_heads\")\n\n self.d_k = d_model // num_heads\n self.sqrt_d_k = self.d_k ** 0.5\n\n self.W_Q = torch.nn.Linear(d_model, d_model)\n self.W_K = torch.nn.Linear(d_model, d_model)\n self.W_V = torch.nn.Linear(d_model, d_model)\n self.W_O = torch.nn.Linear(d_model, d_model)\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n # x_q: (N, L_Q, D), x_k: (N, L_KV, D), x_v: (N, L_KV, D)\n # padding_mask: (N, L_KV), attention_mask: (L_Q, L_KV)\n N, L_Q, D = x_q.size()\n _, L_KV, _ = x_k.size()\n Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)\n K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n score = torch.einsum('nihd,njhd->nijh', Q, K) / self.sqrt_d_k\n # score: (N, L_Q, L_KV, num_heads)\n # Apply attention mask\n if attention_mask is not None:\n score = score.masked_fill(\n attention_mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf')\n )\n # Apply padding mask\n if padding_mask is not None:\n score = score.masked_fill(\n padding_mask.reshape(N, 1, L_KV, 1) == 0, float('-inf')\n )\n score = torch.nn.functional.softmax(score, dim=2)\n value = torch.einsum(\n 'nijh,njhd->nihd', score, V\n ).reshape(N, L_Q, self.d_model)\n return self.W_O(value)\n
class MultiHeadAttention(torch.nn.Module): def __init__(self, d_model: int, num_heads: int): super(MultiHeadAttention, self).__init__() self.d_model = d_model self.num_heads = num_heads if d_model % num_heads != 0: raise ValueError(\"d_model must be divisible by num_heads\") self.d_k = d_model // num_heads self.sqrt_d_k = self.d_k ** 0.5 self.W_Q = torch.nn.Linear(d_model, d_model) self.W_K = torch.nn.Linear(d_model, d_model) self.W_V = torch.nn.Linear(d_model, d_model) self.W_O = torch.nn.Linear(d_model, d_model) def forward( self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None ) -> torch.Tensor: # x_q: (N, L_Q, D), x_k: (N, L_KV, D), x_v: (N, L_KV, D) # padding_mask: (N, L_KV), attention_mask: (L_Q, L_KV) N, L_Q, D = x_q.size() _, L_KV, _ = x_k.size() Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k) K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k) V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k) score = torch.einsum('nihd,njhd->nijh', Q, K) / self.sqrt_d_k # score: (N, L_Q, L_KV, num_heads) # Apply attention mask if attention_mask is not None: score = score.masked_fill( attention_mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf') ) # Apply padding mask if padding_mask is not None: score = score.masked_fill( padding_mask.reshape(N, 1, L_KV, 1) == 0, float('-inf') ) score = torch.nn.functional.softmax(score, dim=2) value = torch.einsum( 'nijh,njhd->nihd', score, V ).reshape(N, L_Q, self.d_model) return self.W_O(value) In\u00a0[\u00a0]: Copied! class MultiHeadSelfAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadSelfAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n return super().forward(x, x, x, padding_mask, attention_mask)\n
class MultiHeadSelfAttention(MultiHeadAttention): def __init__(self, d_model: int, num_heads: int): super(MultiHeadSelfAttention, self).__init__(d_model, num_heads) def forward( self, x: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None ) -> torch.Tensor: return super().forward(x, x, x, padding_mask, attention_mask) In\u00a0[\u00a0]: Copied! class MultiHeadCrossAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadCrossAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x_q: torch.Tensor, x_kv: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n return super().forward(x_q, x_kv, x_kv, padding_mask, attention_mask)\n
class MultiHeadCrossAttention(MultiHeadAttention): def __init__(self, d_model: int, num_heads: int): super(MultiHeadCrossAttention, self).__init__(d_model, num_heads) def forward( self, x_q: torch.Tensor, x_kv: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None ) -> torch.Tensor: return super().forward(x_q, x_kv, x_kv, padding_mask, attention_mask) In\u00a0[\u00a0]: Copied! ACT2FN = {\n 'relu': torch.nn.ReLU,\n 'gelu': torch.nn.GELU,\n}\n
ACT2FN = { 'relu': torch.nn.ReLU, 'gelu': torch.nn.GELU, } In\u00a0[\u00a0]: Copied! class FFN(torch.nn.Module):\n def __init__(self, input_dim: int, hidden_dim: int, activation: str = 'relu'):\n super(FFN, self).__init__()\n self.fc1 = torch.nn.Linear(input_dim, hidden_dim)\n self.fc2 = torch.nn.Linear(hidden_dim, input_dim)\n self.act = ACT2FN[activation]()\n\n def forward(self, x):\n return self.fc2(self.act(self.fc1(x)))\n
class FFN(torch.nn.Module): def __init__(self, input_dim: int, hidden_dim: int, activation: str = 'relu'): super(FFN, self).__init__() self.fc1 = torch.nn.Linear(input_dim, hidden_dim) self.fc2 = torch.nn.Linear(hidden_dim, input_dim) self.act = ACT2FN[activation]() def forward(self, x): return self.fc2(self.act(self.fc1(x))) In\u00a0[\u00a0]: Copied! class EncoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(EncoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim, activation)\n self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n def forward(\n self, x, padding_mask: torch.Tensor | None = None,\n src_mask: torch.Tensor | None = None\n ):\n x = x + self.dropout1(self.attention(x, padding_mask, src_mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.ffn(x))\n x = self.norm2(x)\n\n return x\n
class EncoderLayer(torch.nn.Module): def __init__( self, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6, activation: str = 'relu' ): super(EncoderLayer, self).__init__() if ffn_dim is None: ffn_dim = input_dim * 4 self.attention = MultiHeadSelfAttention(input_dim, num_heads) self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout1 = torch.nn.Dropout(dropout) self.ffn = FFN(input_dim, ffn_dim, activation) self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout2 = torch.nn.Dropout(dropout) def forward( self, x, padding_mask: torch.Tensor | None = None, src_mask: torch.Tensor | None = None ): x = x + self.dropout1(self.attention(x, padding_mask, src_mask)) x = self.norm1(x) x = x + self.dropout2(self.ffn(x)) x = self.norm2(x) return x In\u00a0[\u00a0]: Copied! class Encoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(Encoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n EncoderLayer(\n input_dim, num_heads, ffn_dim,\n dropout, layer_norm_eps, activation\n )\n for _ in range(num_layers)\n ])\n\n def forward(\n self, x, padding_mask: torch.Tensor | None = None,\n src_mask: torch.Tensor | None = None\n ):\n # x: (N, L, D)\n if src_mask is None:\n src_mask = torch.ones(x.size(1), x.size(1)).to(x.device)\n for layer in self.layers:\n x = layer(x, padding_mask, src_mask)\n return x\n
class Encoder(torch.nn.Module): def __init__( self, num_layers: int, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6, activation: str = 'relu' ): super(Encoder, self).__init__() self.layers = torch.nn.ModuleList([ EncoderLayer( input_dim, num_heads, ffn_dim, dropout, layer_norm_eps, activation ) for _ in range(num_layers) ]) def forward( self, x, padding_mask: torch.Tensor | None = None, src_mask: torch.Tensor | None = None ): # x: (N, L, D) if src_mask is None: src_mask = torch.ones(x.size(1), x.size(1)).to(x.device) for layer in self.layers: x = layer(x, padding_mask, src_mask) return x In\u00a0[\u00a0]: Copied! class DecoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(DecoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.self_attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.cross_attention = MultiHeadCrossAttention(input_dim, num_heads)\n self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim, activation)\n self.norm3 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout3 = torch.nn.Dropout(dropout)\n\n def forward(\n self, x: torch.Tensor, memory: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n memory_mask: torch.Tensor | None = None,\n tgt_mask: torch.Tensor | None = None\n ):\n\n x = x + self.dropout1(self.self_attention(x, padding_mask, tgt_mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.cross_attention(x, memory, padding_mask, memory_mask))\n x = self.norm2(x)\n\n x = x + self.dropout3(self.ffn(x))\n x = self.norm3(x)\n\n return x\n
class DecoderLayer(torch.nn.Module): def __init__( self, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6, activation: str = 'relu' ): super(DecoderLayer, self).__init__() if ffn_dim is None: ffn_dim = input_dim * 4 self.self_attention = MultiHeadSelfAttention(input_dim, num_heads) self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout1 = torch.nn.Dropout(dropout) self.cross_attention = MultiHeadCrossAttention(input_dim, num_heads) self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout2 = torch.nn.Dropout(dropout) self.ffn = FFN(input_dim, ffn_dim, activation) self.norm3 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout3 = torch.nn.Dropout(dropout) def forward( self, x: torch.Tensor, memory: torch.Tensor, padding_mask: torch.Tensor | None = None, memory_mask: torch.Tensor | None = None, tgt_mask: torch.Tensor | None = None ): x = x + self.dropout1(self.self_attention(x, padding_mask, tgt_mask)) x = self.norm1(x) x = x + self.dropout2(self.cross_attention(x, memory, padding_mask, memory_mask)) x = self.norm2(x) x = x + self.dropout3(self.ffn(x)) x = self.norm3(x) return x In\u00a0[\u00a0]: Copied! class Decoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(Decoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n DecoderLayer(\n input_dim, num_heads, ffn_dim, dropout,\n layer_norm_eps, activation\n )\n for _ in range(num_layers)\n ])\n\n def forward(\n self, x: torch.Tensor, memory: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n memory_mask: torch.Tensor | None = None,\n tgt_mask: torch.Tensor | None = None\n ):\n # x: (N, L, D)\n for layer in self.layers:\n x = layer(x, memory, padding_mask, memory_mask, tgt_mask)\n return x\n
class Decoder(torch.nn.Module): def __init__( self, num_layers: int, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6, activation: str = 'relu' ): super(Decoder, self).__init__() self.layers = torch.nn.ModuleList([ DecoderLayer( input_dim, num_heads, ffn_dim, dropout, layer_norm_eps, activation ) for _ in range(num_layers) ]) def forward( self, x: torch.Tensor, memory: torch.Tensor, padding_mask: torch.Tensor | None = None, memory_mask: torch.Tensor | None = None, tgt_mask: torch.Tensor | None = None ): # x: (N, L, D) for layer in self.layers: x = layer(x, memory, padding_mask, memory_mask, tgt_mask) return x"},{"location":"coding/dl-from-scratch/encoder-decoder/","title":"\u7f16\u7801\u5668\u200b\u4e0e\u200b\u89e3\u7801\u5668","text":"\u200b\u5728\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\uff0cVaswani\u200b\u7b49\u200b\u4eba\u200b\u63d0\u51fa\u200b\u4e86\u200b\u4e24\u79cd\u200btransformer\u200b\u67b6\u6784\u200b\uff0c\u200b\u5373\u200b\u7f16\u7801\u5668\u200b\u548c\u200b\u89e3\u7801\u5668\u200b\u3002\u200b\u7f16\u7801\u5668\u200b\u5229\u7528\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\uff0c\u200b\u5bf9\u200b\u8f93\u5165\u200b\u7684\u200b\u5e8f\u5217\u200b\u8fdb\u884c\u200b\u7f16\u7801\u200b\uff0c\u200b\u89e3\u7801\u5668\u200b\u5219\u200b\u5229\u7528\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u548c\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\uff0c\u200b\u751f\u6210\u200b\u5bf9\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002
"},{"location":"coding/dl-from-scratch/encoder-decoder/#_2","title":"\u7f16\u7801\u5668","text":"\u200b\u7f16\u7801\u5668\u200b\u7531\u200b\u591a\u4e2a\u200b\u76f8\u540c\u200b\u7684\u200b\u5c42\u200b\u7ec4\u6210\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5c42\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\u6b8b\u5dee\u200b\u8fde\u63a5\u200b\u7684\u200b\u591a\u5934\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u548c\u200b\u4e00\u4e2a\u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\u3002\u200b\u5728\u200b\u6b8b\u5dee\u200b\u8fde\u63a5\u200b\u524d\u200b\uff0c\u200b\u4f7f\u7528\u200bdropout\uff1b\u200b\u5728\u200b\u6b8b\u5dee\u200b\u8fde\u63a5\u200b\u540e\u200b\uff0c\u200b\u4f7f\u7528\u200b\u5c42\u200b\u5f52\u4e00\u5316\u200b\u6765\u200b\u9632\u6b62\u200b\u8fc7\u200b\u62df\u5408\u200b\u3002\u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\u7531\u200b\u4e24\u4e2a\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u7ec4\u6210\u200b\uff0c\u200b\u4e24\u4e2a\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u4e4b\u95f4\u200b\u901a\u5e38\u200b\u4f7f\u7528\u200bReLU\u200b\u6216\u200bGeLU\u200b\u7b49\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u3002
ACT2FN = {\n 'relu': torch.nn.ReLU,\n 'gelu': torch.nn.GELU,\n}\n\nclass FFN(torch.nn.Module):\n def __init__(self, input_dim: int, hidden_dim: int, activation: str = 'relu'):\n super(FFN, self).__init__()\n self.fc1 = torch.nn.Linear(input_dim, hidden_dim)\n self.fc2 = torch.nn.Linear(hidden_dim, input_dim)\n self.act = ACT2FN[activation]()\n\n def forward(self, x):\n return self.fc2(self.act(self.fc1(x)))\n\n\nclass EncoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(EncoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim, activation)\n self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n def forward(\n self, x, padding_mask: torch.Tensor | None = None,\n src_mask: torch.Tensor | None = None\n ):\n x = x + self.dropout1(self.attention(x, padding_mask, src_mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.ffn(x))\n x = self.norm2(x)\n\n return x\n\n\nclass Encoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(Encoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n EncoderLayer(\n input_dim, num_heads, ffn_dim,\n dropout, layer_norm_eps, activation\n )\n for _ in range(num_layers)\n ])\n\n def forward(\n self, x, padding_mask: torch.Tensor | None = None,\n src_mask: torch.Tensor | None = None\n ):\n # x: (N, L, D)\n if src_mask is None:\n src_mask = torch.ones(x.size(1), x.size(1)).to(x.device)\n for layer in self.layers:\n x = layer(x, padding_mask, src_mask)\n return x\n
"},{"location":"coding/dl-from-scratch/encoder-decoder/#_3","title":"\u89e3\u7801\u5668","text":"\u200b\u89e3\u7801\u5668\u200b\u5728\u200b\u7f16\u7801\u5668\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\uff0c\u200b\u5c06\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u7531\u200b\u53cc\u5411\u200b\u6539\u4e3a\u200b\u5355\u5411\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5728\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\u548c\u200b\u524d\u9988\u200b\u795e\u7ecf\u200b\u7f51\u7edc\u5c42\u200b\u4e4b\u95f4\u200b\u589e\u52a0\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u6b8b\u5dee\u200b\u8fde\u63a5\u200b\u7684\u200b\u591a\u5934\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u3002\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4f7f\u7528\u200b\u7f16\u7801\u5668\u200b\u7684\u200b\u8f93\u51fa\u200b\u4f5c\u4e3a\u200b\u5168\u5c40\u200b\u952e\u548c\u503c\u200b\uff0c\u200b\u89e3\u7801\u5668\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\u7684\u200b\u8f93\u51fa\u200b\u4f5c\u4e3a\u200b\u67e5\u8be2\u200b\u3002\u200b\u5728\u200b\u6b8b\u5dee\u200b\u8fde\u63a5\u200b\u524d\u540e\u200b\u4f7f\u7528\u200bdropout\u200b\u548c\u200b\u5c42\u200b\u5f52\u4e00\u5316\u200b\u3002\u200b\u6ce8\u610f\u200b\u5bf9\u4e8e\u200bdecoder-only\u200b\u7684\u200btransformer\uff0c\u200b\u6ca1\u6709\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\uff0c\u200b\u800c\u662f\u200b\u4ec5\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\u5355\u5411\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\u3002
class DecoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(DecoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.self_attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.cross_attention = MultiHeadCrossAttention(input_dim, num_heads)\n self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim, activation)\n self.norm3 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout3 = torch.nn.Dropout(dropout)\n\n def forward(\n self, x: torch.Tensor, memory: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n memory_mask: torch.Tensor | None = None,\n tgt_mask: torch.Tensor | None = None\n ):\n if tgt_mask is None:\n tgt_mask = torch.triu(\n torch.ones(x.size(1), x.size(1)), diagonal=1\n ).to(x.device)\n\n x = x + self.dropout1(self.self_attention(x, padding_mask, tgt_mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.cross_attention(x, memory, padding_mask, memory_mask))\n x = self.norm2(x)\n\n x = x + self.dropout3(self.ffn(x))\n x = self.norm3(x)\n\n return x\n\n\nclass Decoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(Decoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n DecoderLayer(\n input_dim, num_heads, ffn_dim, dropout,\n layer_norm_eps, activation\n )\n for _ in range(num_layers)\n ])\n\n def forward(\n self, x: torch.Tensor, memory: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n memory_mask: torch.Tensor | None = None,\n tgt_mask: torch.Tensor | None = None\n ):\n # x: (N, L, D)\n for layer in self.layers:\n x = layer(x, memory, padding_mask, memory_mask, tgt_mask)\n return x\n
"},{"location":"coding/dl-from-scratch/encoder-decoder/#transformer","title":"transformer\u200b\u7684\u200b\u65f6\u7a7a\u200b\u590d\u6742\u5ea6","text":"\u200b\u7ed9\u5b9a\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u7684\u200b\u957f\u5ea6\u200b\\(L\\)\uff0c\u200b\u8f93\u5165\u200b\u7ef4\u5ea6\u200b\\(D\\)\uff0c\u200b\u7f16\u7801\u5668\u200b\u5c42\u6570\u200b\\(N\\)\uff0c\u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\u7684\u200b\u9690\u85cf\u200b\u5c42\u200b\u7ef4\u5ea6\u200b\\(D_{ff}\\)\uff0c\u200b\u5219\u200btransformer\u200b\u7684\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b
- \u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\uff1a\u200b\u6bcf\u5c42\u200b\u5305\u542b\u200b\u56db\u4e2a\u200b\\(D \\rightarrow D\\)\u200b\u7684\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u5305\u542b\u200b\\(D \\times D + D\\)\u200b\u4e2a\u200b\u53c2\u6570\u200b\uff08\u200b\u6743\u91cd\u200b+\u200b\u504f\u7f6e\u200b\uff09\uff0c\u200b\u5171\u200b\\(4ND(D + 1)\\)\u200b\u4e2a\u200b\u53c2\u6570\u200b\uff1b
- \u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\uff1a\u200b\u5171\u200b\\(N\\)\u200b\u5c42\u200b\uff0c\u200b\u6bcf\u5c42\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\\(D \\rightarrow D_{ff}\\)\u200b\u7684\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u548c\u200b\u4e00\u4e2a\u200b\\(D_{ff} \\rightarrow D\\)\u200b\u7684\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\uff0c\u200b\u5171\u200b\\(2NDD_{ff} + ND_{ff} + ND\\)\u200b\u4e2a\u200b\u53c2\u6570\u200b\uff1b
- \u200b\u5c42\u200b\u5f52\u4e00\u5316\u200b\uff1a\u200b\u6bcf\u5c42\u200b\u7f16\u7801\u5668\u200b\u5305\u542b\u200b\u4e24\u4e2a\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5f52\u4e00\u5316\u200b\u5305\u542b\u200b\u4e24\u4e2a\u200b\\(D\\)\u200b\u7ef4\u200b\u7684\u200b\u7f29\u653e\u200b\u53c2\u6570\u200b\u548c\u200b\u504f\u7f6e\u200b\u53c2\u6570\u200b\uff0c\u200b\u5171\u200b\\(4ND\\)\u200b\u4e2a\u200b\u53c2\u6570\u200b\u3002
\u200b\u56e0\u6b64\u200b\uff0ctransformer\u200b\u7684\u200b\u603b\u53c2\u200b\u6570\u91cf\u200b\u4e3a\u200b\\(4ND(D + 1) + 2NDD_{ff} + ND_{ff} + ND + 2ND\\)\u3002\u200b\u5728\u200bVaswani\u200b\u7b49\u200b\u4eba\u200b\u7684\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\uff0c\\(D_{ff} = 4D\\)\uff0c\u200b\u5219\u200btransformer\u200b\u7684\u200b\u53c2\u200b\u6570\u91cf\u200b\u4e3a\u200b\\(12ND^2 + 13ND\\)\u3002\u200b\u89e3\u7801\u5668\u200b\u6bd4\u200b\u7f16\u7801\u5668\u200b\u591a\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\uff08\\(4ND(D + 1)\\)\uff09\u200b\u548c\u200b1\u200b\u4e2a\u200b\u5f52\u4e00\u5316\u200b\u5c42\u200b\uff08\\(2ND\\)\uff09\uff0c\u200b\u56e0\u6b64\u200b\u89e3\u7801\u5668\u200b\u7684\u200b\u53c2\u200b\u6570\u91cf\u200b\u4e3a\u200b\\(16ND^2 + 19ND\\)\u3002
\u200b\u77e9\u9635\u200b\u8fd0\u7b97\u200b\\(\\bbR^{m\\times n}\\times \\bbR^{n\\times p} \\rightarrow \\bbR^{m\\times p}\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(mnp)\\)\uff0c\u200b\u9010\u6b65\u200b\u5206\u6790\u200btransformer\u200b\u7684\u200b\u8ba1\u7b97\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u5ffd\u7565\u200b\u52a0\u6cd5\u200b\u548c\u200b\u5f52\u4e00\u5316\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\uff1a
- \u200b\u7ebf\u6027\u53d8\u6362\u200b\uff1a\\(\\bbR^{L\\times D}\\times \\bbR^{D\\times D} \\rightarrow \\bbR^{L\\times D}\\)\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(LD^2)\\)\uff1b
- \u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\uff1a\\(\\bbR^{L\\times D}\\times \\bbR^{D\\times L}\\rightarrow \\bbR^{L\\times L}\\)\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(L^2D)\\)\uff1b
- \u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\uff1a\\(\\bbR^{L\\times D}\\times \\bbR^{D\\times D_{ff}}\\rightarrow \\bbR^{L\\times D_{ff}}\\)\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(LDD_{ff})\\)\u3002\u200b\u6309\u7167\u200b\\(D_{ff} = 4D\\)\uff0c\u200b\u5219\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(4LD^2) = O(LD^2)\\)\u3002
\\(D\\)\u200b\u4e3a\u200b\u5e38\u6570\u200b\uff0c\u200b\u6a21\u578b\u200b\u5171\u200b\u53e0\u52a0\u200b\\(N\\)\u200b\u5c42\u200b\u4e32\u884c\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u56e0\u6b64\u200btransformer\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(NL^2D)\\)\u3002
"},{"location":"coding/dl-from-scratch/llama-2/","title":"\u5b9e\u73b0\u200bLlama-2","text":"\u200b\u5728\u200b\u672c\u8282\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200bLlama-2\u200b\u6a21\u578b\u200b\u3002
In\u00a0[1]: Copied! import functools\n\nimport torch\nimport transformers\n
import functools import torch import transformers Llama\u200b\u4f7f\u7528\u200bRoPE\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u3002\u200b\u6ce8\u610f\u200b\u6b64\u5904\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u548c\u200bRoFormer\u200b\u4e2d\u200b\u5b9e\u73b0\u200b\u7684\u200b\u4e0d\u540c\u200b\uff0cRoFormer\u200b\u5c06\u200b\u76f8\u90bb\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5143\u7d20\u200b\u5206\u4e3a\u200b\u4e00\u7ec4\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u800c\u200bLlamaRope\u200b\u662f\u200b\u5c06\u200b\u5411\u91cf\u200b\u5206\u4e3a\u200b\u524d\u540e\u200b\u4e24\u6bb5\u200b\uff0c\u200b\u524d\u540e\u200b\u4e24\u6bb5\u200b\u76f8\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u5206\u4e3a\u200b\u4e00\u7ec4\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\u64cd\u4f5c\u200b\u3002
In\u00a0[2]: Copied! class RoPE(torch.nn.Module):\n def __init__(self, d_model: int, theta: int | float = 10000):\n super(RoPE, self).__init__()\n self.d_model = d_model\n self.theta = theta ** -(torch.arange(0, d_model, 2) / d_model)\n\n @functools.lru_cache(maxsize=None)\n def _forward_l(self, L: int) -> torch.Tensor:\n # Use lru_cache to avoid redundant computation for the same L\n\n D = self.d_model\n pos = torch.einsum(\n 'l,d->ld',\n torch.arange(L), self.theta\n ) # [L, D / 2]\n\n # 0 paired with d // 2, 1 paired with d // 2 + 1, ...\n cos = torch.cos(pos).repeat([1, 2])\n sin = torch.sin(pos)\n\n # Here we do not use efficient method, but construct a rotary matrix\n result = torch.zeros(L, D, D)\n result = torch.diagonal_scatter(result, cos, dim1=1, dim2=2)\n result = torch.diagonal_scatter(result, sin, dim1=1, dim2=2, offset=-D // 2)\n result = torch.diagonal_scatter(result, -sin, dim1=1, dim2=2, offset=D // 2)\n return result\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n # x: [N, L, H, D]\n _, L, _, D = x.size()\n rot_matrix = self._forward_l(L).to(x.device) # [L, D, D]\n return torch.einsum('lde,nlhe->nlhd', rot_matrix, x)\n
class RoPE(torch.nn.Module): def __init__(self, d_model: int, theta: int | float = 10000): super(RoPE, self).__init__() self.d_model = d_model self.theta = theta ** -(torch.arange(0, d_model, 2) / d_model) @functools.lru_cache(maxsize=None) def _forward_l(self, L: int) -> torch.Tensor: # Use lru_cache to avoid redundant computation for the same L D = self.d_model pos = torch.einsum( 'l,d->ld', torch.arange(L), self.theta ) # [L, D / 2] # 0 paired with d // 2, 1 paired with d // 2 + 1, ... cos = torch.cos(pos).repeat([1, 2]) sin = torch.sin(pos) # Here we do not use efficient method, but construct a rotary matrix result = torch.zeros(L, D, D) result = torch.diagonal_scatter(result, cos, dim1=1, dim2=2) result = torch.diagonal_scatter(result, sin, dim1=1, dim2=2, offset=-D // 2) result = torch.diagonal_scatter(result, -sin, dim1=1, dim2=2, offset=D // 2) return result def forward(self, x: torch.Tensor) -> torch.Tensor: # x: [N, L, H, D] _, L, _, D = x.size() rot_matrix = self._forward_l(L).to(x.device) # [L, D, D] return torch.einsum('lde,nlhe->nlhd', rot_matrix, x) RoPE\u200b\u662f\u200b\u5728\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u5206\u5934\u200b\u540e\u200b\u624d\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\u3002\u200b\u5e76\u4e14\u200b\uff0cLlama\u200b\u7684\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4e2d\u200b\u4e0d\u200b\u5305\u542b\u200b\u504f\u7f6e\u200b\u3002
In\u00a0[3]: Copied! class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int, rope: RoPE):\n super(MultiHeadAttention, self).__init__()\n self.d_model = d_model\n self.num_heads = num_heads\n if d_model % num_heads != 0:\n raise ValueError(\"d_model must be divisible by num_heads\")\n\n self.d_k = d_model // num_heads\n self.sqrt_d_k = self.d_k ** 0.5\n self.rope = rope\n\n self.W_Q = torch.nn.Linear(d_model, d_model, bias=False)\n self.W_K = torch.nn.Linear(d_model, d_model, bias=False)\n self.W_V = torch.nn.Linear(d_model, d_model, bias=False)\n self.W_O = torch.nn.Linear(d_model, d_model, bias=False)\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n # x_q: (N, L_Q, D), x_k: (N, L_KV, D), x_v: (N, L_KV, D)\n # padding_mask: (N, L_KV), attention_mask: (L_Q, L_KV)\n N, L_Q, D = x_q.size()\n _, L_KV, _ = x_k.size()\n Q = self.rope(self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k))\n K = self.rope(self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k))\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n score = torch.einsum('nihd,njhd->nijh', Q, K) / self.sqrt_d_k\n # score: (N, L_Q, L_KV, num_heads)\n # Apply attention mask\n if attention_mask is not None:\n score = score.masked_fill(\n attention_mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf')\n )\n # Apply padding mask\n if padding_mask is not None:\n score = score.masked_fill(\n padding_mask.reshape(N, 1, L_KV, 1) == 0, float('-inf')\n )\n score = torch.nn.functional.softmax(score, dim=2)\n value = torch.einsum(\n 'nijh,njhd->nihd', score, V\n ).reshape(N, L_Q, self.d_model)\n return self.W_O(value)\n\n\nclass MultiHeadSelfAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int, rope=RoPE):\n super(MultiHeadSelfAttention, self).__init__(d_model, num_heads, rope)\n\n def forward(\n self, x: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n return super().forward(x, x, x, padding_mask, attention_mask)\n
class MultiHeadAttention(torch.nn.Module): def __init__(self, d_model: int, num_heads: int, rope: RoPE): super(MultiHeadAttention, self).__init__() self.d_model = d_model self.num_heads = num_heads if d_model % num_heads != 0: raise ValueError(\"d_model must be divisible by num_heads\") self.d_k = d_model // num_heads self.sqrt_d_k = self.d_k ** 0.5 self.rope = rope self.W_Q = torch.nn.Linear(d_model, d_model, bias=False) self.W_K = torch.nn.Linear(d_model, d_model, bias=False) self.W_V = torch.nn.Linear(d_model, d_model, bias=False) self.W_O = torch.nn.Linear(d_model, d_model, bias=False) def forward( self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None ) -> torch.Tensor: # x_q: (N, L_Q, D), x_k: (N, L_KV, D), x_v: (N, L_KV, D) # padding_mask: (N, L_KV), attention_mask: (L_Q, L_KV) N, L_Q, D = x_q.size() _, L_KV, _ = x_k.size() Q = self.rope(self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)) K = self.rope(self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)) V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k) score = torch.einsum('nihd,njhd->nijh', Q, K) / self.sqrt_d_k # score: (N, L_Q, L_KV, num_heads) # Apply attention mask if attention_mask is not None: score = score.masked_fill( attention_mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf') ) # Apply padding mask if padding_mask is not None: score = score.masked_fill( padding_mask.reshape(N, 1, L_KV, 1) == 0, float('-inf') ) score = torch.nn.functional.softmax(score, dim=2) value = torch.einsum( 'nijh,njhd->nihd', score, V ).reshape(N, L_Q, self.d_model) return self.W_O(value) class MultiHeadSelfAttention(MultiHeadAttention): def __init__(self, d_model: int, num_heads: int, rope=RoPE): super(MultiHeadSelfAttention, self).__init__(d_model, num_heads, rope) def forward( self, x: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None ) -> torch.Tensor: return super().forward(x, x, x, padding_mask, attention_mask) \u200b\u5728\u200b\u524d\u9988\u200b\u7f51\u7edc\u200b\u90e8\u5206\u200b\uff0cLlama\u200b\u4f7f\u7528\u200bSwiglu\u200b\u4f5c\u4e3a\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u3002\u200b\u6b64\u200b\u90e8\u5206\u200b\u540c\u6837\u200b\u4e0d\u200b\u4f7f\u7528\u200b\u504f\u7f6e\u200b
In\u00a0[4]: Copied! class FFN(torch.nn.Module):\n def __init__(self, input_dim: int, hidden_dim: int):\n super(FFN, self).__init__()\n self.fc1 = torch.nn.Linear(input_dim, hidden_dim, bias=False)\n self.fc2 = torch.nn.Linear(hidden_dim, input_dim, bias=False)\n self.gate = torch.nn.Linear(input_dim, hidden_dim, bias=False)\n self.act = torch.nn.SiLU()\n\n def forward(self, x):\n return self.fc2(self.act(self.gate(x)) * self.fc1(x))\n
class FFN(torch.nn.Module): def __init__(self, input_dim: int, hidden_dim: int): super(FFN, self).__init__() self.fc1 = torch.nn.Linear(input_dim, hidden_dim, bias=False) self.fc2 = torch.nn.Linear(hidden_dim, input_dim, bias=False) self.gate = torch.nn.Linear(input_dim, hidden_dim, bias=False) self.act = torch.nn.SiLU() def forward(self, x): return self.fc2(self.act(self.gate(x)) * self.fc1(x)) Llama\u200b\u4f7f\u7528\u200bRMSNorm\u200b\u4f5c\u4e3a\u200bLayerNorm\u3002
In\u00a0[5]: Copied! class RMSNorm(torch.nn.Module):\n def __init__(self, dim: int, eps: float = 1e-8):\n super(RMSNorm, self).__init__()\n self.weight = torch.nn.Parameter(torch.ones(dim))\n self.eps = eps\n\n def forward(self, x: torch.Tensor):\n return x / torch.sqrt(torch.mean(x ** 2, dim=-1, keepdim=True) + self.eps) * self.weight\n
class RMSNorm(torch.nn.Module): def __init__(self, dim: int, eps: float = 1e-8): super(RMSNorm, self).__init__() self.weight = torch.nn.Parameter(torch.ones(dim)) self.eps = eps def forward(self, x: torch.Tensor): return x / torch.sqrt(torch.mean(x ** 2, dim=-1, keepdim=True) + self.eps) * self.weight Llama\u200b\u4f7f\u7528\u200bPre-norm\uff0c\u200b\u5373\u5148\u200b\u8fdb\u884c\u200bnorm\uff0c\u200b\u518d\u200b\u8fdb\u884c\u200battention/FFN\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u6700\u540e\u200b\u76f8\u52a0\u200b\u3002\u200b\u636e\u6b64\u200b\u53ef\u4ee5\u200b\u6784\u5efa\u200b\u51fa\u200bLlamaDecoder\u200b\u7684\u200b\u57fa\u672c\u200b\u7ed3\u6784\u200b\u3002
In\u00a0[6]: Copied! class LlamaDecoder(torch.nn.Module):\n def __init__(\n self, d_model: int, num_heads: int, rope: RoPE, hidden_dim: int, layernorm_eps: float\n ):\n super().__init__()\n self.norm1 = RMSNorm(d_model, layernorm_eps)\n self.attention = MultiHeadSelfAttention(d_model, num_heads, rope)\n self.norm2 = RMSNorm(d_model, layernorm_eps)\n self.ffn = FFN(d_model, hidden_dim)\n\n def forward(self, x: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None):\n hidden = x\n hidden += self.attention(self.norm1(hidden), padding_mask, attention_mask)\n hidden += self.ffn(self.norm2(hidden))\n return hidden\n
class LlamaDecoder(torch.nn.Module): def __init__( self, d_model: int, num_heads: int, rope: RoPE, hidden_dim: int, layernorm_eps: float ): super().__init__() self.norm1 = RMSNorm(d_model, layernorm_eps) self.attention = MultiHeadSelfAttention(d_model, num_heads, rope) self.norm2 = RMSNorm(d_model, layernorm_eps) self.ffn = FFN(d_model, hidden_dim) def forward(self, x: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None): hidden = x hidden += self.attention(self.norm1(hidden), padding_mask, attention_mask) hidden += self.ffn(self.norm2(hidden)) return hidden In\u00a0[7]: Copied! class LlamaModel(torch.nn.Module):\n def __init__(\n self, config: transformers.LlamaConfig\n ):\n super().__init__()\n self.embedding = torch.nn.Embedding(config.vocab_size, config.hidden_size)\n self.rope = RoPE(\n config.hidden_size // config.num_attention_heads,\n config.rope_theta\n )\n self.layers = torch.nn.ModuleList([\n LlamaDecoder(\n config.hidden_size,\n config.num_attention_heads,\n self.rope,\n config.intermediate_size,\n config.rms_norm_eps\n )\n for _ in range(config.num_hidden_layers)\n ])\n self.norm = RMSNorm(config.hidden_size)\n self.lm_head = torch.nn.Linear(config.hidden_size, config.vocab_size, bias=False)\n\n def forward(\n self, input_ids: torch.Tensor,\n padding_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n hidden = self.embedding(input_ids)\n attention_mask = 1 - torch.triu(\n torch.ones(hidden.size(1), hidden.size(1)), diagonal=1\n ).to(hidden.device)\n for layer in self.layers:\n hidden = layer(hidden, padding_mask, attention_mask)\n hidden = self.norm(hidden)\n hidden = self.lm_head(hidden)\n return hidden\n
class LlamaModel(torch.nn.Module): def __init__( self, config: transformers.LlamaConfig ): super().__init__() self.embedding = torch.nn.Embedding(config.vocab_size, config.hidden_size) self.rope = RoPE( config.hidden_size // config.num_attention_heads, config.rope_theta ) self.layers = torch.nn.ModuleList([ LlamaDecoder( config.hidden_size, config.num_attention_heads, self.rope, config.intermediate_size, config.rms_norm_eps ) for _ in range(config.num_hidden_layers) ]) self.norm = RMSNorm(config.hidden_size) self.lm_head = torch.nn.Linear(config.hidden_size, config.vocab_size, bias=False) def forward( self, input_ids: torch.Tensor, padding_mask: torch.Tensor | None = None ) -> torch.Tensor: hidden = self.embedding(input_ids) attention_mask = 1 - torch.triu( torch.ones(hidden.size(1), hidden.size(1)), diagonal=1 ).to(hidden.device) for layer in self.layers: hidden = layer(hidden, padding_mask, attention_mask) hidden = self.norm(hidden) hidden = self.lm_head(hidden) return hidden In\u00a0[8]: Copied! llama_config = transformers.AutoConfig.from_pretrained('meta-llama/Llama-2-7b-hf')\nllama = LlamaModel(llama_config)\n
llama_config = transformers.AutoConfig.from_pretrained('meta-llama/Llama-2-7b-hf') llama = LlamaModel(llama_config) /usr/local/lib/python3.10/dist-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n warnings.warn(\n
\u200b\u52a0\u8f7d\u200bHuggingface\u200b\u63d0\u4f9b\u200b\u7684\u200bLlama\u200b\u6a21\u578b\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5c06\u200b\u9884\u200b\u8bad\u7ec3\u200b\u7684\u200bLlama\u200b\u53c2\u6570\u200b\u590d\u5236\u5230\u200b\u5b9e\u73b0\u200b\u7684\u200b\u6a21\u578b\u200b\u4e2d\u200b\u3002
In\u00a0[9]: Copied! hf_llama = transformers.LlamaForCausalLM.from_pretrained('meta-llama/Llama-2-7b-hf')\n\ndef load_params(custom_model: LlamaModel, hf_model: transformers.LlamaForCausalLM):\n layer_pairs = [\n (custom_model.embedding, hf_model.model.embed_tokens),\n (custom_model.lm_head, hf_model.lm_head),\n (custom_model.norm, hf_model.model.norm)\n ]\n for custom_layer, hf_layer in zip(custom_model.layers, hf_model.model.layers):\n layer_pairs.extend([\n (custom_layer.norm1, hf_layer.input_layernorm),\n (custom_layer.norm2, hf_layer.post_attention_layernorm),\n (custom_layer.attention.W_Q, hf_layer.self_attn.q_proj),\n (custom_layer.attention.W_K, hf_layer.self_attn.k_proj),\n (custom_layer.attention.W_V, hf_layer.self_attn.v_proj),\n (custom_layer.attention.W_O, hf_layer.self_attn.o_proj),\n (custom_layer.ffn.gate, hf_layer.mlp.gate_proj),\n (custom_layer.ffn.fc1, hf_layer.mlp.up_proj),\n (custom_layer.ffn.fc2, hf_layer.mlp.down_proj)\n ])\n for custom_layer, hf_layer in layer_pairs:\n custom_layer.weight.data = hf_layer.weight.data.clone().detach()\n return custom_model\n\nllama = load_params(llama, hf_llama)\n
hf_llama = transformers.LlamaForCausalLM.from_pretrained('meta-llama/Llama-2-7b-hf') def load_params(custom_model: LlamaModel, hf_model: transformers.LlamaForCausalLM): layer_pairs = [ (custom_model.embedding, hf_model.model.embed_tokens), (custom_model.lm_head, hf_model.lm_head), (custom_model.norm, hf_model.model.norm) ] for custom_layer, hf_layer in zip(custom_model.layers, hf_model.model.layers): layer_pairs.extend([ (custom_layer.norm1, hf_layer.input_layernorm), (custom_layer.norm2, hf_layer.post_attention_layernorm), (custom_layer.attention.W_Q, hf_layer.self_attn.q_proj), (custom_layer.attention.W_K, hf_layer.self_attn.k_proj), (custom_layer.attention.W_V, hf_layer.self_attn.v_proj), (custom_layer.attention.W_O, hf_layer.self_attn.o_proj), (custom_layer.ffn.gate, hf_layer.mlp.gate_proj), (custom_layer.ffn.fc1, hf_layer.mlp.up_proj), (custom_layer.ffn.fc2, hf_layer.mlp.down_proj) ]) for custom_layer, hf_layer in layer_pairs: custom_layer.weight.data = hf_layer.weight.data.clone().detach() return custom_model llama = load_params(llama, hf_llama) Loading checkpoint shards: 0%| | 0/2 [00:00<?, ?it/s]
\u200b\u52a0\u8f7d\u200btokenizer\u200b\u5e76\u200b\u751f\u6210\u200b\u8f93\u5165\u200b\u6570\u636e\u200b\uff0c\u200b\u6ce8\u610f\u200bLlama-2\u200b\u6ca1\u6709\u200bpadding token\uff0c\u200b\u9700\u8981\u200b\u624b\u52a8\u200b\u8bbe\u7f6e\u200b\u3002
In\u00a0[10]: Copied! llama_tokenizer = transformers.LlamaTokenizer.from_pretrained('meta-llama/Llama-2-7b-hf')\nllama_tokenizer.pad_token = llama_tokenizer.eos_token\ntokenized_sentence = llama_tokenizer([\n 'User: Hello Llama! How are you?\\nAssistant:',\n 'User: Hello World!\\nAssistant:'\n], return_tensors='pt', padding=True)\ninput_ids = tokenized_sentence['input_ids']\npadding_mask = tokenized_sentence['attention_mask']\n
llama_tokenizer = transformers.LlamaTokenizer.from_pretrained('meta-llama/Llama-2-7b-hf') llama_tokenizer.pad_token = llama_tokenizer.eos_token tokenized_sentence = llama_tokenizer([ 'User: Hello Llama! How are you?\\nAssistant:', 'User: Hello World!\\nAssistant:' ], return_tensors='pt', padding=True) input_ids = tokenized_sentence['input_ids'] padding_mask = tokenized_sentence['attention_mask'] \u200b\u6839\u636e\u200b\u8f93\u5165\u200b\u6570\u636e\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u6bcf\u5c42\u200b\u6a21\u578b\u200b\u7684\u200b\u8f93\u51fa\u200b\u3002
In\u00a0[11]: Copied! llama_layers_output = hf_llama(input_ids, attention_mask=padding_mask, output_hidden_states=True)\n
llama_layers_output = hf_llama(input_ids, attention_mask=padding_mask, output_hidden_states=True) \u200b\u4ee5\u4e0b\u200b\u5bf9\u200b\u8f93\u51fa\u200b\u7ed3\u679c\u200b\u8fdb\u884c\u200b\u9a8c\u8bc1\u200b\u3002\u200b\u9996\u5148\u200b\u9a8c\u8bc1\u200bembedding\u200b\u5c42\u200b\u7684\u200b\u8f93\u51fa\u200b\u3002
In\u00a0[12]: Copied! llama_layers_output.hidden_states[0]\nhidden = llama.embedding(input_ids)\nattention_mask = 1 - torch.triu(\n torch.ones(hidden.size(1), hidden.size(1)), diagonal=1\n).to(device=hidden.device)\n\n# Hidden state 1 equivalent to embedding output\ntorch.allclose(\n llama_layers_output.hidden_states[0],\n hidden\n)\n
llama_layers_output.hidden_states[0] hidden = llama.embedding(input_ids) attention_mask = 1 - torch.triu( torch.ones(hidden.size(1), hidden.size(1)), diagonal=1 ).to(device=hidden.device) # Hidden state 1 equivalent to embedding output torch.allclose( llama_layers_output.hidden_states[0], hidden ) Out[12]: True
\u200b\u9a8c\u8bc1\u200b\u6bcf\u200b\u4e00\u5c42\u200bdecoder\u200b\u7684\u200b\u8f93\u51fa\u200b\uff0c\u200b\u6700\u540e\u200b\u4e00\u5c42\u200bdecoder\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u51fa\u73b0\u200b\u4e0d\u540c\u200b\u3002
In\u00a0[13]: Copied! # Verify layer outputs\nlayer_results = []\nfor i in range(llama_config.num_hidden_layers - 1):\n hidden = llama.layers[i](hidden, padding_mask, attention_mask)\n layer_results.append(torch.allclose(\n llama_layers_output.hidden_states[i + 1], hidden, atol=1e-4\n ))\nall(layer_results), all(layer_results[:-1])\n
# Verify layer outputs layer_results = [] for i in range(llama_config.num_hidden_layers - 1): hidden = llama.layers[i](hidden, padding_mask, attention_mask) layer_results.append(torch.allclose( llama_layers_output.hidden_states[i + 1], hidden, atol=1e-4 )) all(layer_results), all(layer_results[:-1]) Out[13]: (False, True)
\u200b\u9a8c\u8bc1\u200bLM-head\u200b\u7684\u200b\u8f93\u51fa\u200b\u3002
In\u00a0[14]: Copied! # Verify output logits\nlogits = llama(input_ids, padding_mask)\nhf_logits = llama_layers_output.logits\ntorch.allclose(logits, hf_logits, atol=1e-4)\n
# Verify output logits logits = llama(input_ids, padding_mask) hf_logits = llama_layers_output.logits torch.allclose(logits, hf_logits, atol=1e-4) Out[14]: True
\u200b\u5c1d\u8bd5\u200b\u5bf9\u200b\u8f93\u51fa\u200b\u7684\u200b\u5355\u8bcd\u200b\u8fdb\u884c\u200b\u89e3\u7801\u200b\u3002
In\u00a0[15]: Copied! # Decode the output tokens\nmax_prob_tokens = logits[0, -1].topk(5).indices.tolist()\nfor _ in max_prob_tokens:\n print(llama_tokenizer.decode(_))\n
# Decode the output tokens max_prob_tokens = logits[0, -1].topk(5).indices.tolist() for _ in max_prob_tokens: print(llama_tokenizer.decode(_)) I\nHello\nFine\nHi\nOh\n
In\u00a0[16]: Copied! del hf_llama\ndel llama_layers_output\ndel hf_logits\nimport gc\ngc.collect()\n
del hf_llama del llama_layers_output del hf_logits import gc gc.collect() Out[16]: 21
In\u00a0[17]: Copied! def complete_ids(model: LlamaModel, input_ids: torch.Tensor):\n assert input_ids.size(0) == 1\n\n next_token = model(input_ids, torch.ones_like(input_ids))[0, -1, :].topk(1).indices[0].item()\n return next_token\n\ndef complete_string(model: LlamaModel, tokenizer: transformers.LlamaTokenizer, prompt: str, max_length: int):\n model.eval()\n gc.collect()\n tokenized_sentence = tokenizer([prompt], return_tensors='pt')['input_ids'].tolist()\n next_token = None\n print(tokenizer.decode(tokenized_sentence[0]))\n num_tokens = 0\n\n while next_token != tokenizer.eos_token_id and num_tokens <= max_length:\n num_tokens += 1\n next_token = complete_ids(model, torch.tensor(tokenized_sentence))\n tokenized_sentence[0].append(next_token)\n print(tokenizer.decode(tokenized_sentence[0]))\n\n gc.collect()\n\n return num_tokens\n
def complete_ids(model: LlamaModel, input_ids: torch.Tensor): assert input_ids.size(0) == 1 next_token = model(input_ids, torch.ones_like(input_ids))[0, -1, :].topk(1).indices[0].item() return next_token def complete_string(model: LlamaModel, tokenizer: transformers.LlamaTokenizer, prompt: str, max_length: int): model.eval() gc.collect() tokenized_sentence = tokenizer([prompt], return_tensors='pt')['input_ids'].tolist() next_token = None print(tokenizer.decode(tokenized_sentence[0])) num_tokens = 0 while next_token != tokenizer.eos_token_id and num_tokens <= max_length: num_tokens += 1 next_token = complete_ids(model, torch.tensor(tokenized_sentence)) tokenized_sentence[0].append(next_token) print(tokenizer.decode(tokenized_sentence[0])) gc.collect() return num_tokens In\u00a0[18]: Copied! import time\nquery = 'User: Given two numbers, 13.11 and 13.8, which is larger?\\nAssistant:'\n\nstart_time = time.time()\nnum_tokens = complete_string(llama, llama_tokenizer, query, 10)\nend_time = time.time()\n\ntime_span = end_time - start_time\nprint(f'Predicted {num_tokens} in {time_span:.2f} seconds, {num_tokens / time_span:.2f} tokens/s')\n
import time query = 'User: Given two numbers, 13.11 and 13.8, which is larger?\\nAssistant:' start_time = time.time() num_tokens = complete_string(llama, llama_tokenizer, query, 10) end_time = time.time() time_span = end_time - start_time print(f'Predicted {num_tokens} in {time_span:.2f} seconds, {num_tokens / time_span:.2f} tokens/s') <s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant:\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is \n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 1\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 13\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 13.\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 13.8\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 13.8.\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 13.8.\n\nPredicted 11 in 37.42 seconds, 0.29 tokens/s\n
"},{"location":"coding/dl-from-scratch/llama-2/","title":"\u6a21\u578b\u200b\u5b9e\u73b0\u200b\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/","title":"\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/","title":"\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/#ffn","title":"FFN\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/#layernorm","title":"LayerNorm\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/#decoder-layer","title":"Decoder Layer\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/#llama","title":"Llama\u200b\u6a21\u578b\u200b\u6784\u5efa\u200b\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/","title":"\u6a21\u578b\u200b\u9a8c\u8bc1\u200b\u00b6","text":"\u200b\u9996\u5148\u200b\uff0c\u200b\u4ece\u200bLlama-2-7b-hf
\u200b\u4e2d\u200b\u52a0\u8f7d\u200b\u6a21\u578b\u200b\u914d\u7f6e\u200b\uff0c\u200b\u5e76\u200b\u6839\u636e\u200b\u914d\u7f6e\u200b\u521d\u59cb\u5316\u200b\u6a21\u578b\u200b
"},{"location":"coding/dl-from-scratch/llama-2/","title":"\u6a21\u578b\u200b\u63a8\u7406\u200b\u00b6","text":"\u200b\u5728\u200b\u63a8\u7406\u200b\u9636\u6bb5\u200b\uff0c\u200b\u6a21\u578b\u200b\u6839\u636e\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u9884\u6d4b\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5355\u8bcd\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5c06\u200b\u5176\u200b\u52a0\u5165\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u3002\u200b\u91cd\u590d\u200b\u8fd9\u4e2a\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u76f4\u5230\u200b\u51fa\u73b0\u200b\u7ed3\u675f\u200btoken\u3002
"},{"location":"coding/dl-from-scratch/llm-inference/","title":"\u5927\u200b\u6a21\u578b\u200b\u63a8\u7406","text":"\u200b\u5728\u200b\u63a8\u7406\u200b\u9636\u6bb5\u200b\uff0c\u200b\u5927\u200b\u6a21\u578b\u200b\u6839\u636e\u200b\u8f93\u5165\u200b\u7684\u200b\u6587\u672c\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u9884\u6d4b\u200b\u8f93\u5165\u200b\u6587\u672c\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u8bcd\u200b\uff0c\u200b\u76f4\u5230\u200b\u9884\u6d4b\u51fa\u200b\u7ed3\u675f\u200b\u7b26\u53f7\u200b\u4e3a\u6b62\u200b\u3002\u200b\u4e0d\u8fc7\u200b\uff0c\u200b\u5728\u200b\u9884\u200b\u8bad\u7ec3\u200b\u9636\u6bb5\u200b\u4e2d\u200b\uff0c\u200b\u4e0d\u200b\u5305\u542b\u200b\u5bf9\u200bbos\uff08begin of sentence\uff09\u200b\u548c\u200beos\uff08end of sentence\uff09\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002\u200b\u6240\u4ee5\u200b\uff0c\u200b\u5982\u679c\u200b\u4f7f\u7528\u200b\u57fa\u5ea7\u200b\u6a21\u578b\u200b\uff0c\u200b\u6a21\u578b\u200b\u4f1a\u200b\u4e0d\u65ad\u200b\u8f93\u51fa\u200btoken\u3002
"},{"location":"coding/dl-from-scratch/llm-inference/#kv-cache","title":"KV-cache","text":"\u200b\u628a\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u91cd\u65b0\u200b\u8f93\u51fa\u200bLLM\uff0c\u200b\u9884\u6d4b\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5355\u8bcd\u200b\u63a8\u7406\u200b\u6d41\u7a0b\u200b\u7684\u200b\u8ba1\u7b97\u200b\u6548\u7387\u200b\u975e\u5e38\u4f4e\u200b\uff0c\u200b\u539f\u56e0\u200b\u5728\u4e8e\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u9884\u6d4b\u200b\u90fd\u200b\u9700\u8981\u200b\u5bf9\u200b\u6574\u4e2a\u200b\u5e8f\u5217\u200b\u8ba1\u7b97\u200b\u6ce8\u610f\u529b\u200b\u5f97\u5206\u200b\u3002\u200b\u7136\u800c\u200b\uff0c\u200b\u7531\u4e8e\u200b\u6bcf\u200b\u4e00\u4e2a\u200btoken\u200b\u7684\u200b\u8868\u793a\u200b\u53ea\u200b\u4f9d\u8d56\u4e8e\u200b\u524d\u9762\u200b\u7684\u200btoken\uff0c\u200b\u5728\u200b\u63a8\u7406\u200b\u9636\u6bb5\u200b\uff0c\u200b\u6211\u4eec\u200b\u4e0d\u5fc5\u200b\u91cd\u7b97\u200b\u524d\u8fb9\u200b\u7684\u200btoken\uff0c\u200b\u53ea\u200b\u9700\u8981\u200b\u5b58\u50a8\u200b\u524d\u8fb9\u200b\u7684\u200btoken\u200b\u7684\u200bKV\u200b\u8868\u793a\u200b\u5373\u53ef\u200b\u3002\u200b\u53ea\u200b\u9700\u7528\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200btoken\u200b\u7684\u200bQ\u200b\u8ba1\u7b97\u200b\u6ce8\u610f\u529b\u200b\u5373\u53ef\u200b\u5f97\u5230\u200b\u5bf9\u4e0b\u200b\u4e00\u4e2a\u200btoken\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002\u200b\u8fd9\u79cd\u200b\u6280\u672f\u200b\u5373\u200b\u79f0\u4e3a\u200bKV\u200b\u7f13\u5b58\u200b\u3002\u200b\u5305\u542b\u200bKV\u200b\u7f13\u5b58\u200b\u7684\u200b\u63a8\u7406\u200b\u8fc7\u7a0b\u200b\u5206\u4e3a\u200b\u4e24\u4e2a\u200b\u9636\u6bb5\u200b\uff0c\u200b\u5373\u200b\u7f13\u5b58\u200b\u586b\u5145\u200b\uff08prefill\uff09\u200b\u9636\u6bb5\u200b\u548c\u200b\u89e3\u7801\u200b\uff08decode\uff09\u200b\u9636\u6bb5\u200b\u3002
\u200b\u4e3a\u4f55\u200b\u53ea\u200b\u9700\u8981\u200bKV-cache\u200b\u800c\u200b\u4e0d\u200b\u9700\u8981\u200bQ-cache
\u200b\u5047\u8bbe\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u7ecf\u8fc7\u200b\\(QKV\\)\u200b\u8ba1\u7b97\u200b\u540e\u200b\u7684\u200b\u5e8f\u5217\u200b\u4e3a\u200b\\(S^Q, S^K, S^V\\)\uff0c\u200b\u5e76\u4e14\u200b\u53ef\u4ee5\u200b\u62c6\u200b\u5206\u4e3a\u200b\u5217\u200b\u5411\u91cf\u200b\u8868\u793a\u200b\uff1a
\\[ \\begin{aligned} S^Q &= \\begin{bmatrix} Q_1 & Q_2 & \\cdots & Q_n \\end{bmatrix} \\\\ S^K &= \\begin{bmatrix} K_1 & K_2 & \\cdots & K_n \\end{bmatrix} \\\\ S^V &= \\begin{bmatrix} V_1 & V_2 & \\cdots & V_n \\end{bmatrix} \\] \u200b\u6ce8\u610f\u529b\u200b\u5f97\u5206\u200b\u77e9\u9635\u200b\u4e3a\u200b
\\[ \\begin{bmatrix} Q_1K_1 & Q_1K_2 & \\cdots & Q_1K_n \\\\ Q_2K_1 & Q_2K_2 & \\cdots & Q_2K_n \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ Q_nK_1 & Q_nK_2 & \\cdots & Q_nK_n \\] \u200b\u7531\u4e8e\u200bdecoder\u200b\u7684\u200bcausal mask\u200b\u9650\u5236\u200b\uff0c\u200b\u6700\u7ec8\u200b\u8ba1\u7b97\u200b\u7684\u200b\u8868\u793a\u200b\u4e3a\u200b
\\[ \\begin{aligned} O_1 &= \\sum_{i=1}^1 \\text{softmax}(Q_1K_i)V_i \\\\ O_2 &= \\sum_{i=1}^2 \\text{softmax}(Q_2K_i)V_i \\\\ \\end{aligned} \\] \u200b\u4e5f\u200b\u5373\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u8868\u793a\u200b\uff0c\u200b\u53ea\u200b\u4f9d\u8d56\u200b\u8be5\u200b\u4f4d\u7f6e\u200b\u7684\u200bQ\uff0c\u200b\u548c\u200b\u8be5\u200b\u4f4d\u7f6e\u200b\u53ca\u200b\u4e4b\u524d\u200b\u7684\u200bK\u200b\u548c\u200bV\u3002\u200b\u56e0\u6b64\u200b\u9884\u6d4b\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5355\u8bcd\u200b\u65f6\u200b\uff0c\u200b\u4e0d\u200b\u9700\u8981\u200b\u91cd\u65b0\u200b\u8ba1\u7b97\u200bKV\uff0c\u200b\u5c06\u200bKV\u200b\u5b58\u50a8\u200b\u4e0b\u6765\u200b\u5373\u53ef\u200b\u3002
\u200b\u5c06\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u8f93\u5165\u200bLLM\u200b\u65f6\u200b\uff0c\u200b\u9996\u5148\u200b\u8fdb\u884c\u200b\u7f13\u5b58\u200b\u586b\u5145\u200b\uff0c\u200b\u4fdd\u5b58\u200b\u4e0b\u200b\u6240\u6709\u200b\u5c42\u200b\u7684\u200bKV-cache\uff0c\u200b\u7136\u540e\u200b\u8fdb\u884c\u200b\u89e3\u7801\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u9884\u6d4b\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5355\u8bcd\u200b\uff0c\u200b\u5e76\u200b\u8bb0\u5f55\u200b\u9884\u6d4b\u200b\u5355\u8bcd\u200b\u7684\u200bKV\u200b\u8868\u793a\u200b\u3002\u200b\u5bf9\u4e8e\u200bdecoder\u200b\u7684\u200b\u6bcf\u200b\u4e00\u5c42\u200b\uff0c\u200b\u90fd\u200b\u9700\u8981\u200b\u4fdd\u5b58\u200b\u4e00\u4e2a\u200bKV-cache\uff0c\u200b\u6bcf\u200b\u4e00\u5c42\u200bcache\u200b\u7684\u200b\u5927\u5c0f\u200b\u4e3a\u200b\\(2\\times N\\times L\\times D\\)\u3002\u200b\u5bf9\u4e8e\u200b\u957f\u200b\u5e8f\u5217\u200b\uff0cKV-cache\u200b\u7684\u200b\u5927\u5c0f\u200b\u4f1a\u200b\u975e\u5e38\u200b\u5927\u200b\u3002
"},{"location":"coding/dl-from-scratch/loss/","title":"\u635f\u5931\u200b\u51fd\u6570","text":"\u200b\u635f\u5931\u200b\u51fd\u6570\u200b\u662f\u200b\u7528\u6765\u200b\u8bc4\u4ef7\u200b\u6a21\u578b\u200b\u9884\u6d4b\u503c\u200b\u4e0e\u200b\u771f\u5b9e\u200b\u503c\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5dee\u5f02\u200b\u7684\u200b\u51fd\u6570\u200b\u3002\u200b\u7136\u540e\u200b\u901a\u8fc7\u200b\u4f18\u5316\u200b\u7b97\u6cd5\u200b\u6765\u200b\u8c03\u6574\u200b\u6a21\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u635f\u5931\u200b\u51fd\u6570\u200b\u7684\u200b\u503c\u200b\u6700\u5c0f\u200b\u3002
"},{"location":"coding/dl-from-scratch/loss/#_2","title":"\u5747\u65b9\u200b\u8bef\u5dee","text":"\u200b\u5747\u65b9\u200b\u8bef\u5dee\u200b\uff08Mean Squared Error, MSE\uff09\u200b\u662f\u200b\u56de\u5f52\u200b\u4efb\u52a1\u200b\u4e2d\u200b\u6700\u200b\u5e38\u7528\u200b\u7684\u200b\u635f\u5931\u200b\u51fd\u6570\u200b\u3002\u200b\u5b83\u200b\u8ba1\u7b97\u200b\u7684\u200b\u662f\u200b\u9884\u6d4b\u503c\u200b\u4e0e\u200b\u771f\u5b9e\u200b\u503c\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5e73\u65b9\u5dee\u200b\u7684\u200b\u5747\u503c\u200b\u3002
\\[ \\begin{aligned} L(y, t) &= \\frac{1}{2} \\sum_{i=1}^{n} (y_i - t_i)^2 \\\\ \\frac{\\partial L}{\\partial y_i} &= y_i - t_i \\end{aligned} \\] \u200b\u5176\u4e2d\u200b\uff0c\\(y\\) \u200b\u662f\u200b\u6a21\u578b\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b\uff0c\\(t\\) \u200b\u662f\u200b\u771f\u5b9e\u200b\u503c\u200b\uff0c\\(n\\) \u200b\u662f\u200b\u6837\u672c\u200b\u6570\u91cf\u200b\u3002
def mse(y: torch.Tensor, t: torch.Tensor) -> torch.Tensor:\n return 0.5 * torch.sum((y - t) ** 2)\n\nclass MSELoss(torch.nn.Module):\n def __init__(self):\n super(MSELoss, self).__init__()\n\n def forward(self, y: torch.Tensor, t: torch.Tensor) -> torch.Tensor:\n return mse(y, t)\n
"},{"location":"coding/dl-from-scratch/loss/#_3","title":"\u4ea4\u53c9\u200b\u71b5","text":"\u200b\u4ea4\u53c9\u200b\u71b5\u200b\uff08Cross Entropy\uff09\u200b\u662f\u200b\u591a\u200b\u5206\u7c7b\u200b\u4efb\u52a1\u200b\u4e2d\u200b\u6700\u200b\u5e38\u7528\u200b\u7684\u200b\u635f\u5931\u200b\u51fd\u6570\u200b\u3002\u200b\u5b83\u200b\u8ba1\u7b97\u200b\u7684\u200b\u662f\u200b\u6a21\u578b\u200b\u8f93\u51fa\u200b\u503c\u200b\u4e0e\u200b\u771f\u5b9e\u200b\u503c\u200b\u4e4b\u95f4\u200b\u7684\u200b\u4ea4\u53c9\u200b\u71b5\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bKL\u200b\u6563\u5ea6\u200b\u63a8\u5bfc\u200b\u5f97\u5230\u200b\u3002
\\[ \\begin{aligned} KL(p||q) &= -\\sum_{i=1}^{n} p_i (\\log q_i - \\log p_i) \\\\ &= -\\sum_{i=1}^{n} p_i \\log q_i + \\sum_{i=1}^{n} p_i \\log p_i \\\\ &= H(p, q) - H(p) \\end{aligned} \\] \u200b\u5176\u4e2d\u200b\uff0c\\(p\\) \u200b\u662f\u200b\u771f\u5b9e\u200b\u6982\u7387\u5206\u5e03\u200b\uff0c\\(q\\) \u200b\u662f\u200b\u6a21\u578b\u200b\u8f93\u51fa\u200b\u6982\u7387\u5206\u5e03\u200b\uff0c\\(H(p)\\)\u200b\u8868\u793a\u200b\u771f\u5b9e\u200b\u5206\u5e03\u200b\\(p\\)\u200b\u7684\u200b\u71b5\u200b\uff0c\u200b\u4e3a\u200b\u5e38\u6570\u200b\u3002\u200b\u5f53\u200b\u8f93\u51fa\u200b\u5206\u5e03\u200b\\(q\\)\u200b\u4e0e\u200b\u771f\u5b9e\u200b\u5206\u5e03\u200b\\(p\\)\u200b\u76f8\u8fd1\u200b\u65f6\u200b\uff0cKL\u200b\u6563\u5ea6\u503c\u200b\u8d8a\u200b\u5c0f\u200b\uff0c\u200b\u4ea4\u53c9\u200b\u71b5\u200b\\(-\\sum_{i=1}^{n} p_i \\log q_i\\)\u200b\u503c\u200b\u4e5f\u200b\u8d8a\u200b\u5c0f\u200b\u3002
\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b\u7684\u200b\u662f\u200b\uff0c\u200b\u5728\u200bPyTorch\u200b\u4e2d\u200b\uff0ctorch.nn.CrossEntropyLoss
\u200b\u51fd\u6570\u200b\u7684\u200b\u8f93\u5165\u200b\u662f\u200b\u6a21\u578b\u200b\u7684\u200b\u8f93\u51fa\u200b\u503c\u200b\u548c\u200b\u771f\u5b9e\u200b\u6807\u7b7e\u200b\uff0c\u200b\u4e0d\u200b\u9700\u8981\u200b\u5bf9\u200b\u8f93\u51fa\u200b\u503c\u200b\u8fdb\u884c\u200bsoftmax\u200b\u64cd\u4f5c\u200b\u3002
def cross_entropy(score: torch.Tensor, label: torch.Tensor) -> torch.Tensor:\n # label: [N], score: [N, C]\n score = torch.softmax(score, dim=-1)\n label_logits = score[torch.arange(score.size(0)), label]\n return -torch.sum(torch.log(label_logits))\n\nclass CrossEntropyLoss(torch.nn.Module):\n def __init__(self):\n super(CrossEntropyLoss, self).__init__()\n\n def forward(self, score: torch.Tensor, label: torch.Tensor) -> torch.Tensor:\n return cross_entropy(score, label)\n
"},{"location":"coding/dl-from-scratch/mlp/","title":"\u591a\u5c42\u200b\u611f\u77e5\u673a","text":"\u200b\u591a\u5c42\u200b\u611f\u77e5\u673a\u200b\uff08Multilayer Perceptron, MLP\uff09\u200b\u662f\u200b\u6df1\u5ea6\u200b\u5b66\u4e60\u200b\u7684\u200b\u57fa\u7840\u200b\uff0c\u200b\u4e5f\u200b\u662f\u200b\u6700\u200b\u7b80\u5355\u200b\u7684\u200b\u6df1\u5ea6\u200b\u5b66\u4e60\u200b\u6a21\u578b\u200b\u4e4b\u4e00\u200b\uff0c\u200b\u7531\u200b\u7ebf\u6027\u53d8\u6362\u200b\u548c\u200b\u975e\u7ebf\u6027\u200b\u7684\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u7ec4\u6210\u200b\u3002\u200b\u591a\u5c42\u200b\u611f\u77e5\u673a\u200b\u7684\u200b\u7f51\u7edc\u7ed3\u6784\u200b\u662f\u200b\u7531\u200b\u8f93\u5165\u200b\u5c42\u200b\u3001\u200b\u591a\u4e2a\u200b\u9690\u85cf\u200b\u5c42\u200b\u548c\u200b\u8f93\u51fa\u200b\u5c42\u200b\u7ec4\u6210\u200b\uff0c\u200b\u5176\u4e2d\u200b\u9690\u85cf\u200b\u5c42\u200b\u7684\u200b\u795e\u7ecf\u5143\u200b\u6570\u91cf\u200b\u548c\u200b\u5c42\u6570\u200b\u53ef\u4ee5\u200b\u81ea\u7531\u200b\u8bbe\u5b9a\u200b\u3002
"},{"location":"coding/dl-from-scratch/mlp/#_2","title":"\u7ebf\u6027\u53d8\u6362","text":"\u200b\u7ebf\u6027\u53d8\u6362\u200b\u662f\u200b\u591a\u5c42\u200b\u611f\u77e5\u673a\u200b\u7684\u200b\u57fa\u7840\u200b\uff0c\u200b\u5b83\u200b\u662f\u200b\u7531\u200b\u8f93\u5165\u200b\u5c42\u5230\u200b\u9690\u85cf\u200b\u5c42\u200b\u548c\u200b\u8f93\u51fa\u200b\u5c42\u200b\u7684\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u7ec4\u6210\u200b\u3002\u200b\u7ebf\u6027\u53d8\u6362\u200b\u7684\u200b\u6570\u5b66\u200b\u8868\u8fbe\u5f0f\u200b\u4e3a\u200b\uff1a
\\[ y = Wx + b \\] \u200b\u5176\u4e2d\u200b \\(W\\) \u200b\u662f\u200b\u6743\u91cd\u200b\u77e9\u9635\u200b\uff0c\\(x\\) \u200b\u662f\u200b\u8f93\u5165\u200b\u5411\u91cf\u200b\uff0c\\(b\\) \u200b\u662f\u200b\u504f\u7f6e\u200b\u5411\u91cf\u200b\uff0c\\(y\\) \u200b\u662f\u200b\u8f93\u51fa\u200b\u5411\u91cf\u200b\u3002
class Linear(torch.nn.Module):\n def __init__(self, in_dim: int, out_dim: int):\n super(Linear, self).__init__()\n self.in_dim = in_dim\n self.out_dim = out_dim\n self.weight = torch.nn.Parameter(torch.randn(out_dim, in_dim))\n self.bias = torch.nn.Parameter(torch.randn(out_dim))\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n return torch.einsum(\"ij,j->i\", self.weight, x) + self.bias\n
\u200b\u53cd\u5411\u200b\u4f20\u64ad\u200b\u4e2d\u200b\uff0c\u200b\u68af\u5ea6\u200b\u8ba1\u7b97\u516c\u5f0f\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} \\frac{\\partial y}{\\partial W} &= x \\\\ \\frac{\\partial y}{\\partial b} &= 1 \\end{aligned} \\]"},{"location":"coding/dl-from-scratch/normalization/","title":"\u5f52\u4e00\u5316","text":"\u200b\u5f52\u4e00\u5316\u200b\u662f\u200b\u6307\u200b\u5c06\u200b\u6570\u636e\u200b\u6309\u7167\u200b\u6bd4\u4f8b\u200b\u7f29\u653e\u200b\uff0c\u200b\u6539\u53d8\u200b\u5176\u200b\u5206\u5e03\u200b\u3002\u200b\u6309\u7167\u200b\u5f52\u4e00\u5316\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u4e0d\u540c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u4ee5\u4e0b\u200b\u51e0\u79cd\u200b\uff1a
- \u200b\u6837\u672c\u200b\u5f52\u4e00\u5316\u200b\uff08Batch Normalization\uff09\uff1a\u200b\u5bf9\u200b\u6bcf\u4e2a\u200b\u7279\u5f81\u200b\u8fdb\u884c\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u901a\u5e38\u200b\u7528\u4e8e\u200b\u56fe\u50cf\u200b\u6570\u636e\u200b\\(B \\times C \\times H \\times W\\)\uff0c\u200b\u5728\u200b\u540c\u4e00\u200b\\(C\\)\u200b\u7ef4\u5ea6\u200b\u4e0a\u200b\u8ba1\u7b97\u200b\u5747\u503c\u200b\u548c\u200b\u65b9\u5dee\u200b\u3002
- \u200b\u5c42\u200b\u5f52\u4e00\u5316\u200b\uff08Layer Normalization\uff09\uff1a\u200b\u5bf9\u200b\u6bcf\u4e2a\u200b\u6837\u672c\u200b\u8fdb\u884c\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u901a\u5e38\u200b\u7528\u4e8e\u200b\u5e8f\u5217\u200b\u6570\u636e\u200b\\(B\\times L \\times D\\)\uff0c\u200b\u5728\u200b\u540c\u4e00\u200b\\(B\\)\u200b\u7ef4\u5ea6\u200b\u4e0a\u200b\u8ba1\u7b97\u200b\u5747\u503c\u200b\u548c\u200b\u65b9\u5dee\u200b\u3002
- \u200b\u5b9e\u4f8b\u200b\u5f52\u4e00\u5316\u200b\uff08Instance Normalization\uff09\uff1a\u200b\u5bf9\u200b\u6bcf\u4e2a\u200b\u6837\u672c\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u7279\u5f81\u200b\u7ef4\u5ea6\u200b\u8fdb\u884c\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u5728\u200b\u540c\u4e00\u200b\\(B\\times C\\)\u200b\u7ef4\u5ea6\u200b\u4e0a\u200b\u8ba1\u7b97\u200b\u5747\u503c\u200b\u548c\u200b\u65b9\u5dee\u200b\u3002
- \u200b\u5206\u7ec4\u200b\u5f52\u4e00\u5316\u200b\uff08Group Normalization\uff09\uff1a\u200b\u5bf9\u200b\u6bcf\u4e2a\u200b\u6837\u672c\u200b\u4e2d\u200b\u7684\u200b\u7279\u5f81\u200b\u5206\u6210\u200b\u82e5\u5e72\u7ec4\u200b\u540e\u200b\uff0c\u200b\u5728\u200b\u540c\u200b\u4e00\u7ec4\u200b\u5185\u200b\u8fdb\u884c\u200b\u5f52\u4e00\u5316\u200b\u3002
\u200b\u5f52\u4e00\u5316\u200b\u7684\u200b\u65b9\u5f0f\u200b\u4e3a\u200b
\\[ x' = \\frac{x - \\mu}{\\sigma} \\times \\gamma + \\beta \\] \u200b\u5176\u4e2d\u200b\\(\\mu, \\sigma\\)\u200b\u5206\u522b\u200b\u4e3a\u200b\u6837\u672c\u5747\u503c\u200b\u548c\u200b\u6807\u51c6\u5dee\u200b\uff0c\\(\\gamma, \\beta\\)\u200b\u4e3a\u200b\u53ef\u200b\u5b66\u4e60\u200b\u7684\u200b\u91cd\u200b\u7f29\u653e\u200b\u53c2\u6570\u200b\u3002\u200b\u7ed9\u5b9a\u200b\u7279\u5f81\u200b\u7ef4\u5ea6\u200b\\(d\\)\uff0c\u200b\u5f52\u4e00\u5316\u200b\u5c42\u200b\u7684\u200b\u53c2\u200b\u6570\u91cf\u200b\u4e3a\u200b\\(2d\\)\u3002
"},{"location":"coding/dl-from-scratch/normalization/#rmsnorm","title":"RMSNorm","text":"Zhang\u200b\u7b49\u200b\u4eba\u200b\u5728\u200bLN\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\u63d0\u51fa\u200b\u4e86\u200bRMSNorm\uff0c\u200b\u76f8\u6bd4\u200b\u4e8e\u200bLN\uff0cRMSNorm\u200b\u4e0d\u200b\u9700\u8981\u200b\u8ba1\u7b97\u200b\u5747\u503c\u200b\u548c\u200b\u65b9\u5dee\u200b\uff0c\u200b\u800c\u662f\u200b\u76f4\u63a5\u200b\u4f7f\u7528\u200b\u5747\u200b\u65b9\u6839\u200b\u4f5c\u4e3a\u200b\u5f52\u4e00\u5316\u200b\u7684\u200b\u6807\u51c6\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5728\u200b\u91cd\u200b\u7f29\u653e\u200b\u9636\u6bb5\u200b\u5220\u53bb\u200b\u4e86\u200b\u504f\u7f6e\u200b\\(\\beta\\)\u3002
\\[ x' = \\frac{x}{\\sqrt{\\frac{1}{N} \\sum_{i=1}^{N} x_i^2}} \\times \\gamma \\] class RMSNorm(torch.nn.Module):\n def __init__(self, dim: int, eps=1e-8):\n super(RMSNorm, self).__init__()\n self.gamma = torch.nn.Parameter(torch.ones(dim))\n self.eps = eps\n\n def forward(self, x: torch.Tensor):\n return x / torch.sqrt(torch.mean(x ** 2, dim=-1, keepdim=True) + self.eps) * self.gamma\n
"},{"location":"coding/dl-from-scratch/positional-embedding/","title":"\u4f4d\u7f6e\u200b\u7f16\u7801","text":"Attention\u200b\u673a\u5236\u200b\u867d\u7136\u200b\u80fd\u200b\u6355\u6349\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u4e0d\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u4f9d\u8d56\u200b\u5173\u7cfb\u200b\uff0c\u200b\u4f46\u662f\u200b\u65e0\u6cd5\u200b\u533a\u5206\u200b\u4e0d\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\u200b\u4e3a\u4e86\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\uff0cTransformer\u200b\u6a21\u578b\u200b\u5f15\u5165\u200b\u4e86\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff08Positional Encoding\uff09\u3002
"},{"location":"coding/dl-from-scratch/positional-embedding/#_2","title":"\u7edd\u5bf9\u200b\u4f4d\u7f6e\u200b\u7f16\u7801","text":"\u200b\u7edd\u5bf9\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u662f\u200bTransformer\u200b\u6a21\u578b\u200b\u4e2d\u200b\u6700\u65e9\u200b\u5f15\u5165\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u65b9\u5f0f\u200b\uff0c\u200b\u5176\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u4e3a\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u4f4d\u7f6e\u200b\u5206\u914d\u200b\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u7684\u200b\u5411\u91cf\u200b\uff0c\u200b\u5c06\u200b\u8fd9\u4e2a\u200b\u5411\u91cf\u200b\u548c\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u76f8\u52a0\u200b\u5f97\u5230\u200b\u6700\u7ec8\u200b\u5e8f\u5217\u200b\u7684\u200b\u8868\u793a\u200b\u3002\u200b\u5982\u200bBERT\u200b\u6a21\u578b\u200b\uff0c\u200b\u9650\u5236\u200b\u4e86\u200b\u5e8f\u5217\u200b\u7684\u200b\u6700\u5927\u200b\u957f\u5ea6\u200b\u4e3a\u200b512\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u56fa\u5b9a\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff0c\u200b\u5c06\u200b\u6bcf\u4e2a\u200b\u4f4d\u7f6e\u200b\u6620\u5c04\u200b\u5230\u200b\u4e00\u4e2a\u200b\u53ef\u200b\u5b66\u4e60\u200b\u7684\u200b\u5411\u91cf\u200b\u3002
class AbsolutePE(torch.nn.Module):\n def __init__(self, max_len: int, d_model: int):\n super(AbsolutePE, self).__init__()\n self.pe = torch.nn.Embedding(max_len, d_model)\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n # x: [N, L]\n pos = torch.arange(x.size(1), device=x.device).unsqueeze(0)\n return self.pe(pos) # [1, L, D], can be broadcasted to [N, L, D]\n
\u200b\u6b64\u7c7b\u200b\u65b9\u6cd5\u200b\u7684\u200b\u7f3a\u70b9\u200b\u662f\u200b\u65e0\u6cd5\u200b\u5904\u7406\u200b\u8d85\u8fc7\u200b\u6700\u5927\u200b\u957f\u5ea6\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5ffd\u89c6\u200b\u4e86\u200b\u5143\u7d20\u200b\u4e4b\u95f4\u200b\u7684\u200b\u76f8\u5bf9\u200b\u4f4d\u7f6e\u200b\u5173\u7cfb\u200b\u3002
"},{"location":"coding/dl-from-scratch/positional-embedding/#_3","title":"\u6b63\u5f26\u200b\u4f4d\u7f6e\u200b\u7f16\u7801","text":"Vaswani\u200b\u7b49\u200b\u4eba\u200b\u63d0\u51fa\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\u6b63\u5f26\u200b\u51fd\u6570\u200b\u548c\u200b\u4e00\u4e2a\u200b\u4f59\u5f26\u200b\u51fd\u6570\u200b\uff0c\u200b\u5176\u200b\u6570\u5b66\u200b\u8868\u8fbe\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} PE_{(pos, 2i)} &= \\sin(pos / 10000^{2i / d_{\\text{model}}}) \\\\ PE_{(pos, 2i + 1)} &= \\cos(pos / 10000^{2i / d_{\\text{model}}}) \\\\ \\end{aligned} \\] \u200b\u5176\u4e2d\u200b\uff0c\\(pos\\)\u200b\u8868\u793a\u200b\u4f4d\u7f6e\u200b\uff0c\\(i\\)\u200b\u8868\u793a\u200b\u7ef4\u5ea6\u200b\uff0c\\(d_{\\text{model}}\\)\u200b\u8868\u793a\u200b\u6a21\u578b\u200b\u7684\u200b\u7ef4\u5ea6\u200b\uff0c\u200b\u8f93\u51fa\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u76f4\u63a5\u200b\u4e0e\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u76f8\u52a0\u200b\u5f97\u5230\u200b\u6700\u7ec8\u200b\u8868\u793a\u200b\u3002\u200b\u6b63\u5f26\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u4e0d\u200b\u9700\u8981\u200b\u989d\u5916\u200b\u8fdb\u884c\u200b\u5b66\u4e60\u200b\u3002Vaswani\u200b\u7684\u200b\u5b9e\u9a8c\u200b\u8868\u660e\u200b\uff0c\u200b\u56fa\u5b9a\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u548c\u200b\u53ef\u200b\u5b66\u4e60\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u5728\u200b\u6027\u80fd\u200b\u4e0a\u200b\u6ca1\u6709\u200b\u663e\u8457\u200b\u5dee\u5f02\u200b\u3002
class SinusoidPE(torch.nn.Module):\n def __init__(self, d_model: int):\n super(SinusoidPE, self).__init__()\n self.d_model = d_model\n\n def _denominator(self, device: torch.device) -> torch.Tensor:\n return 10000 ** (torch.arange(0, self.d_model, device=device) / self.d_model)\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n # x: [N, L]\n pos = torch.arange(x.size(1), device=x.device).unsqueeze(0) # [1, L]\n pos = pos.unsqueeze(-1) / self._denominator(x.device) # [1, L, D]\n pos[:, :, 0::2] = torch.sin(pos[:, :, 0::2])\n pos[:, :, 1::2] = torch.cos(pos[:, :, 1::2])\n return pos # [1, L, D], can be broadcasted to [N, L, D]\n
"},{"location":"coding/dl-from-scratch/positional-embedding/#_4","title":"\u65cb\u8f6c\u200b\u4f4d\u7f6e\u200b\u7f16\u7801","text":"Su\u200b\u7b49\u200b\u4eba\u200b\u63d0\u51fa\u200b\u7684\u200b\u65cb\u8f6c\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff08Rotary Positional Embedding\uff0cRoPE\uff09\u3002\u200b\u7f16\u7801\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u901a\u8fc7\u200b\u65cb\u8f6c\u200b\u77e9\u9635\u200b\u5c06\u200b\u4f4d\u7f6e\u200b\u4fe1\u606f\u200b\u5d4c\u5165\u200b\u5230\u200b\u7279\u5f81\u200b\u7a7a\u95f4\u200b\u4e2d\u200b\uff0c\u200b\u4ece\u800c\u200b\u4f7f\u200b\u6a21\u578b\u200b\u80fd\u591f\u200b\u5b66\u4e60\u200b\u5230\u200b\u4f4d\u7f6e\u200b\u4fe1\u606f\u200b\u3002
\\[ f_{q, k} \\bsx_m = \\bsR_{\\Theta, m}^d W_{q, k} \\bsx_m \\] \u200b\u5176\u4e2d\u200b\uff0c\\(\\bsR_{\\Theta, m}\\)\u200b\u4e3a\u200b\u65cb\u8f6c\u200b\u77e9\u9635\u200b\uff0c\u200b\u5c06\u200b\u5411\u91cf\u200b\u6bcf\u200b\u4e24\u4e2a\u200b\u5206\u91cf\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\u3002
\\[ \\begin{aligned} \\bsR^k_{\\Theta, m} &= \\begin{bmatrix} \\cos(m\\theta_k) & -\\sin(m\\theta_k) \\\\ \\sin(m\\theta_k) & \\cos(m\\theta_k) \\end{bmatrix} \\\\ \\bsR_{\\Theta, m} &= \\begin{bmatrix} \\bsR^1_{\\Theta, m} & 0 & \\cdots & 0 \\\\ 0 & \\bsR^2_{\\Theta, m} & \\cdots & 0 \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ 0 & 0 & \\cdots & \\bsR^{d / 2}_{\\Theta, m} \\end{bmatrix}_{d\\times d} \\end{aligned} \\] \u200b\u6ce8\u610f\u200b\uff0c\\(m\\)\u200b\u4e3a\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\(1, \\ldots, L\\)\uff0c\\(k\\)\u200b\u4e3a\u200b\u7ef4\u5ea6\u200b\u4e0b\u6807\u200b\uff0c\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\(1, \\ldots, d / 2\\)\u3002\u200b\u6700\u7ec8\u200b\u7684\u200b\u65cb\u8f6c\u200b\u64cd\u4f5c\u200b\u5c06\u200b\u6bcf\u4e2a\u200b\u4f4d\u7f6e\u200b\\(m\\)\u200b\u7684\u200b\u5411\u91cf\u200b\\(\\bsx_m\\)\u200b\u5e94\u7528\u200b\u65cb\u8f6c\u200b\u77e9\u9635\u200b\\(\\bsR_{\\Theta, m}\\)\uff0c\u200b\u5f97\u5230\u200b\u65b0\u200b\u7684\u200b\u5411\u91cf\u200b\u3002
import functools\n\nclass RoPE(torch.nn.Module):\n def __init__(self, d_model: int, theta: int | float = 10000):\n super(RoPE, self).__init__()\n self.d_model = d_model\n self.theta = theta ** -(torch.arange(0, d_model, 2) / d_model)\n\n @functools.lru_cache(maxsize=None)\n def _forward_l(self, L: int) -> torch.Tensor:\n # Use lru_cache to avoid redundant computation for the same L\n\n D = self.d_model\n pos = torch.einsum(\n 'l,d->ld',\n torch.arange(L), self.theta\n ) # [L, D / 2]\n\n # Major diagonal is cos, cos, ..., cos; D elements\n cos = torch.cos(pos).repeat_interleave(2)\n # Minor diagonal is sin, 0, sin, 0, ..., sin; D - 1 elements\n sin = torch.stack([\n torch.sin(pos), torch.zeros_like(pos), dim=-1\n ]).reshape(L, D)[:, :-1]\n\n result = torch.zeros(L, D, D)\n result = torch.diagonal_scatter(result, cos, dim1=1, dim2=2)\n result = torch.diagonal_scatter(result, sin, dim1=1, dim2=2, offset=-1)\n result = torch.diagonal_scatter(result, -sin, dim1=1, dim2=2, offset=1)\n return result\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n # x: [N, L, H, D]\n _, L, _, D = x.size()\n rot_matrix = self._forward_l(L).to(x.device) # [L, D, D]\n return torch.einsum('lde,nlhe->nlhd', rot_matrix, x)\n
\u200b\u548c\u200b\u5176\u4ed6\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u65b9\u5f0f\u200b\u4e0d\u540c\u200b\uff0cRoPE\u200b\u5728\u200bQKV\u200b\u53d8\u6362\u200b\u540e\u200b\u8fdb\u884c\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u5bf9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u7684\u200b\u5b9e\u73b0\u200b\u8fdb\u884c\u200b\u4fee\u6539\u200b\u3002
class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int, rope: RoPE | None = None):\n ...\n\n self.rope = rope\n\n ...\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n ...\n\n if self.rope is not None:\n Q = self.rope(self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k))\n K = self.rope(self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k))\n else:\n Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)\n K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n ...\n
\u200b\u4e3a\u4e86\u200b\u8ba1\u7b97\u200b\u65b9\u4fbf\u200b\uff0cLlama\u200b\u7b49\u200b\u90e8\u5206\u200b\u6a21\u578b\u200b\u7684\u200bRoPE\u200b\u5c06\u200b\u8f93\u5165\u200b\u5411\u91cf\u200b\u5206\u4e3a\u200b\u524d\u540e\u200b\u4e24\u6bb5\u200b\uff0c\u200b\u524d\u540e\u200b\u4e24\u6bb5\u200b\u76f8\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u5206\u4e3a\u200b\u4e00\u7ec4\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u800c\u200b\u4e0d\u662f\u200b\u5c06\u200b\u6574\u4e2a\u200b\u5411\u91cf\u200b\u6309\u7167\u200b\u76f8\u90bb\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5143\u7d20\u200b\u5206\u4e3a\u200b\u4e00\u7ec4\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\u3002
"},{"location":"coding/dl-from-scratch/transformer-variants/","title":"Transformer\u200b\u53d8\u79cd","text":"Transformer\u200b\u53d8\u79cd\u200b\u4e3b\u8981\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u51e0\u79cd\u200b\uff1a
- \u200b\u6539\u53d8\u200btransformer\u200b\u7684\u200b\u6ce8\u610f\u529b\u200b\u8ba1\u7b97\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5982\u200bLinformer\u3001Reformer\u200b\u7b49\u200b\uff1b
- \u200b\u6539\u53d8\u200btransformer\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u65b9\u5f0f\u200b\uff1b
- \u200b\u6539\u53d8\u200btransformer\u200b\u7684\u200b\u5f52\u4e00\u5316\u200b\u5c42\u200b\uff1b
- \u200b\u6539\u53d8\u200btransformer\u200b\u7684\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\uff1b
- \u200b\u90e8\u5206\u200b\u8bed\u8a00\u200b\u6a21\u578b\u200b\uff08\u200b\u5982\u200bLlama\uff09\u200b\u4f7f\u7528\u200b\u7684\u200b\u7ebf\u6027\u200b\u5c42\u4e0d\u5e26\u200b\u504f\u7f6e\u200b\uff1b
- \u200b\u6539\u53d8\u200btransformer\u200b\u5f52\u4e00\u5316\u200b\u5c42\u200b\u7684\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u662f\u200b\u5148\u200b\u5f52\u4e00\u5316\u200b\u518d\u200b\u52a0\u200b\u6b8b\u5dee\u200b\uff08Pre-Norm\uff09\uff0c\u200b\u8fd8\u662f\u200b\u5148\u52a0\u200b\u6b8b\u5dee\u200b\u518d\u200b\u5f52\u4e00\u5316\u200b\uff08Post-Norm\uff09\u3002
"},{"location":"coding/dl-from-scratch/transformer-variants/#bert","title":"BERT","text":"BERT\u200b\u7684\u200b\u7ed3\u6784\u200b\u7279\u70b9\u200b\u4e3a\u200b\uff1a
- encoder-only\uff0c\u200b\u5373\u200b\u4f7f\u7528\u200bBidirectional self-attention\uff1b
- \u200b\u4f7f\u7528\u200b\u7edd\u5bf9\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff1b
"},{"location":"coding/dl-from-scratch/transformer-variants/#llama","title":"Llama","text":"Llama\u200b\u7684\u200b\u7ed3\u6784\u200b\u7279\u70b9\u200b\u4e3a\u200b\uff1a
- decoder-only\uff0c\u200b\u5373\u200b\u4f7f\u7528\u200bCausal self-attention\uff1b
- \u200b\u5168\u90e8\u200b\u4f7f\u7528\u200b\u4e0d\u5e26\u200b\u504f\u7f6e\u200b\u7684\u200b\u7ebf\u6027\u200b\u5c42\u200b\uff1b
- \u200b\u5728\u200bFFN\u200b\u4e2d\u200b\u4f7f\u7528\u200bSiLU\u200b\u914d\u5408\u200b\u95e8\u63a7\u200b\uff1b
- \u200b\u4f7f\u7528\u200bRoPE\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff1b
- \u200b\u4f7f\u7528\u200bRMSNorm\u200b\u5f52\u4e00\u5316\u200b\u5c42\u200b\u3002\u200b\u5f52\u4e00\u5316\u200b\u65b9\u5f0f\u200b\u4e3a\u200bpre-norm\uff0c\u200b\u5373\u5148\u200b\u8fdb\u884c\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u518d\u200b\u8fdb\u884c\u200b\u6ce8\u610f\u529b\u200b\u6216\u8005\u200b\u5168\u200b\u8fde\u63a5\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u7136\u540e\u200b\u52a0\u200b\u6b8b\u5dee\u200b\u3002
"},{"location":"coding/dl-from-scratch/transformer/","title":"\u5b9e\u73b0\u200btransformer","text":"In\u00a0[1]: Copied! import torch\n
import torch \u200b\u9996\u5148\u200b\u5b9e\u73b0\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u3002
In\u00a0[2]: Copied! class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadAttention, self).__init__()\n self.d_model = d_model\n self.num_heads = num_heads\n if d_model % num_heads != 0:\n raise ValueError(\"d_model must be divisible by num_heads\")\n\n self.d_k = d_model // num_heads\n self.sqrt_d_k = self.d_k ** 0.5\n\n self.W_Q = torch.nn.Linear(d_model, d_model)\n self.W_K = torch.nn.Linear(d_model, d_model)\n self.W_V = torch.nn.Linear(d_model, d_model)\n self.W_O = torch.nn.Linear(d_model, d_model)\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n N, L_Q, D = x_q.size()\n _, L_KV, _ = x_k.size()\n Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)\n K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n score = torch.einsum(\"nihd,njhd->nijh\", Q, K) / self.sqrt_d_k\n if mask is not None:\n # mask: (L, L)\n score = score.masked_fill(\n mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf')\n )\n score = torch.nn.functional.softmax(score, dim=2)\n value = torch.einsum(\"nijh,njhd->nihd\", score, V).reshape(N, L_Q, self.d_model)\n return self.W_O(value)\n\n\nclass MultiHeadSelfAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadSelfAttention, self).__init__(d_model, num_heads)\n\n def forward(self, x: torch.Tensor, mask: torch.Tensor | None = None) -> torch.Tensor:\n return super().forward(x, x, x, mask)\n\n\nclass MultiHeadCrossAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadCrossAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x_q: torch.Tensor, x_kv: torch.Tensor,\n mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n return super().forward(x_q, x_kv, x_kv, mask)\n
class MultiHeadAttention(torch.nn.Module): def __init__(self, d_model: int, num_heads: int): super(MultiHeadAttention, self).__init__() self.d_model = d_model self.num_heads = num_heads if d_model % num_heads != 0: raise ValueError(\"d_model must be divisible by num_heads\") self.d_k = d_model // num_heads self.sqrt_d_k = self.d_k ** 0.5 self.W_Q = torch.nn.Linear(d_model, d_model) self.W_K = torch.nn.Linear(d_model, d_model) self.W_V = torch.nn.Linear(d_model, d_model) self.W_O = torch.nn.Linear(d_model, d_model) def forward( self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor, mask: torch.Tensor | None = None ) -> torch.Tensor: N, L_Q, D = x_q.size() _, L_KV, _ = x_k.size() Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k) K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k) V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k) score = torch.einsum(\"nihd,njhd->nijh\", Q, K) / self.sqrt_d_k if mask is not None: # mask: (L, L) score = score.masked_fill( mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf') ) score = torch.nn.functional.softmax(score, dim=2) value = torch.einsum(\"nijh,njhd->nihd\", score, V).reshape(N, L_Q, self.d_model) return self.W_O(value) class MultiHeadSelfAttention(MultiHeadAttention): def __init__(self, d_model: int, num_heads: int): super(MultiHeadSelfAttention, self).__init__(d_model, num_heads) def forward(self, x: torch.Tensor, mask: torch.Tensor | None = None) -> torch.Tensor: return super().forward(x, x, x, mask) class MultiHeadCrossAttention(MultiHeadAttention): def __init__(self, d_model: int, num_heads: int): super(MultiHeadCrossAttention, self).__init__(d_model, num_heads) def forward( self, x_q: torch.Tensor, x_kv: torch.Tensor, mask: torch.Tensor | None = None ) -> torch.Tensor: return super().forward(x_q, x_kv, x_kv, mask) \u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\u7531\u200b\u4e24\u4e2a\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u548c\u200bReLU\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u7ec4\u6210\u200b
In\u00a0[3]: Copied! class FFN(torch.nn.Module):\n def __init__(self, input_dim: int, hidden_dim: int):\n super(FFN, self).__init__()\n self.fc1 = torch.nn.Linear(input_dim, hidden_dim)\n self.fc2 = torch.nn.Linear(hidden_dim, input_dim)\n self.relu = torch.nn.ReLU()\n\n def forward(self, x):\n return self.fc2(self.relu(self.fc1(x)))\n
class FFN(torch.nn.Module): def __init__(self, input_dim: int, hidden_dim: int): super(FFN, self).__init__() self.fc1 = torch.nn.Linear(input_dim, hidden_dim) self.fc2 = torch.nn.Linear(hidden_dim, input_dim) self.relu = torch.nn.ReLU() def forward(self, x): return self.fc2(self.relu(self.fc1(x))) \u200b\u7f16\u7801\u5668\u200b\u5c42\u200b\u7531\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200bc\u200b\u5c42\u200b\u548c\u200b\u524d\u9988\u200b\u795e\u7ecf\u200b\u7f51\u7edc\u5c42\u200b\u7ec4\u6210\u200b\uff0c\u200b\u4e00\u4e2a\u200b\u7f16\u7801\u5668\u200b\u7531\u200b\u591a\u4e2a\u200b\u8fd9\u6837\u200b\u7684\u200b\u5c42\u200b\u4e32\u8054\u200b\u7ec4\u6210\u200b
In\u00a0[4]: Copied! class EncoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6\n ):\n super(EncoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim)\n self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n def forward(self, x, mask):\n x = x + self.dropout1(self.attention(x, mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.ffn(x))\n x = self.norm2(x)\n\n return x\n\n\nclass Encoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6\n ):\n super(Encoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n EncoderLayer(input_dim, num_heads, ffn_dim, dropout, layer_norm_eps)\n for _ in range(num_layers)\n ])\n\n def forward(self, x, mask):\n # x: (N, L, D)\n for layer in self.layers:\n x = layer(x, mask)\n return x\n
class EncoderLayer(torch.nn.Module): def __init__( self, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6 ): super(EncoderLayer, self).__init__() if ffn_dim is None: ffn_dim = input_dim * 4 self.attention = MultiHeadSelfAttention(input_dim, num_heads) self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout1 = torch.nn.Dropout(dropout) self.ffn = FFN(input_dim, ffn_dim) self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout2 = torch.nn.Dropout(dropout) def forward(self, x, mask): x = x + self.dropout1(self.attention(x, mask)) x = self.norm1(x) x = x + self.dropout2(self.ffn(x)) x = self.norm2(x) return x class Encoder(torch.nn.Module): def __init__( self, num_layers: int, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6 ): super(Encoder, self).__init__() self.layers = torch.nn.ModuleList([ EncoderLayer(input_dim, num_heads, ffn_dim, dropout, layer_norm_eps) for _ in range(num_layers) ]) def forward(self, x, mask): # x: (N, L, D) for layer in self.layers: x = layer(x, mask) return x \u200b\u89e3\u7801\u5668\u200b\u5c42\u200b\u7531\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\uff0c\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\u548c\u200b\u524d\u9988\u200b\u795e\u7ecf\u200b\u7f51\u7edc\u5c42\u200b\u7ec4\u6210\u200b\u3002
In\u00a0[5]: Copied! class DecoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1\n ):\n super(DecoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.self_attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.cross_attention = MultiHeadCrossAttention(input_dim, num_heads)\n self.norm2 = torch.nn.LayerNorm(input_dim)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim)\n self.norm3 = torch.nn.LayerNorm(input_dim)\n self.dropout3 = torch.nn.Dropout(dropout)\n\n def forward(\n self, x: torch.Tensor, memory: torch.Tensor, tgt_mask: torch.Tensor | None = None\n ):\n\n x = x + self.dropout1(self.self_attention(x, tgt_mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.cross_attention(x, memory))\n x = self.norm2(x)\n\n x = x + self.dropout3(self.ffn(x))\n x = self.norm3(x)\n\n return x\n\n\nclass Decoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1\n ):\n super(Decoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n DecoderLayer(input_dim, num_heads, ffn_dim, dropout)\n for _ in range(num_layers)\n ])\n\n def forward(self, x, memory, tgt_mask):\n # x: (N, L, D)\n for layer in self.layers:\n x = layer(x, memory, tgt_mask)\n return x\n
class DecoderLayer(torch.nn.Module): def __init__( self, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1 ): super(DecoderLayer, self).__init__() if ffn_dim is None: ffn_dim = input_dim * 4 self.self_attention = MultiHeadSelfAttention(input_dim, num_heads) self.norm1 = torch.nn.LayerNorm(input_dim) self.dropout1 = torch.nn.Dropout(dropout) self.cross_attention = MultiHeadCrossAttention(input_dim, num_heads) self.norm2 = torch.nn.LayerNorm(input_dim) self.dropout2 = torch.nn.Dropout(dropout) self.ffn = FFN(input_dim, ffn_dim) self.norm3 = torch.nn.LayerNorm(input_dim) self.dropout3 = torch.nn.Dropout(dropout) def forward( self, x: torch.Tensor, memory: torch.Tensor, tgt_mask: torch.Tensor | None = None ): x = x + self.dropout1(self.self_attention(x, tgt_mask)) x = self.norm1(x) x = x + self.dropout2(self.cross_attention(x, memory)) x = self.norm2(x) x = x + self.dropout3(self.ffn(x)) x = self.norm3(x) return x class Decoder(torch.nn.Module): def __init__( self, num_layers: int, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1 ): super(Decoder, self).__init__() self.layers = torch.nn.ModuleList([ DecoderLayer(input_dim, num_heads, ffn_dim, dropout) for _ in range(num_layers) ]) def forward(self, x, memory, tgt_mask): # x: (N, L, D) for layer in self.layers: x = layer(x, memory, tgt_mask) return x Transformer\u200b\u6a21\u578b\u200b\u7531\u200b\u7f16\u7801\u5668\u200b\u548c\u200b\u89e3\u7801\u5668\u200b\u7ec4\u6210\u200b\uff0c\u200b\u7f16\u7801\u5668\u200b\u5904\u7406\u200b\u6e90\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5c06\u200b\u7f16\u7801\u200b\u540e\u200b\u7684\u200b\u5e8f\u5217\u200b\u8f93\u5165\u200b\u5230\u200b\u89e3\u7801\u5668\u200b\u4e2d\u200b\uff0c\u200b\u89e3\u7801\u5668\u200b\u751f\u6210\u200b\u76ee\u6807\u200b\u5e8f\u5217\u200b\u3002
In\u00a0[6]: Copied! class CustomTransformer(torch.nn.Module):\n def __init__(\n self, num_layers: int, num_decoder_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6\n ):\n super(CustomTransformer, self).__init__()\n self.encoder = Encoder(num_layers, input_dim, num_heads, ffn_dim, dropout, layer_norm_eps)\n self.decoder = Decoder(num_decoder_layers, input_dim, num_heads, ffn_dim, dropout)\n\n def forward(self, src, tgt, src_mask: torch.Tensor | None = None, tgt_mask: torch.Tensor | None = None):\n memory = self.encoder(src, src_mask)\n return self.decoder(tgt, memory, tgt_mask)\n
class CustomTransformer(torch.nn.Module): def __init__( self, num_layers: int, num_decoder_layers: int, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6 ): super(CustomTransformer, self).__init__() self.encoder = Encoder(num_layers, input_dim, num_heads, ffn_dim, dropout, layer_norm_eps) self.decoder = Decoder(num_decoder_layers, input_dim, num_heads, ffn_dim, dropout) def forward(self, src, tgt, src_mask: torch.Tensor | None = None, tgt_mask: torch.Tensor | None = None): memory = self.encoder(src, src_mask) return self.decoder(tgt, memory, tgt_mask) \u200b\u5c06\u200bPyTorch\u200b\u5185\u90e8\u200b\u5b9e\u73b0\u200b\u7684\u200bTransformer\u200b\u6743\u91cd\u200b\u590d\u5236\u5230\u200b\u5b9e\u73b0\u200b\u7684\u200bTransformer\u200b\u4e2d\u200b\u3002
In\u00a0[7]: Copied! def _attn_load_from_torch(\n custom_attn: MultiHeadAttention, torch_attn: torch.nn.MultiheadAttention\n):\n embed_dim = custom_attn.d_model\n\n def split_qkv(weight, embed_dim):\n return weight[:embed_dim], weight[embed_dim: 2 * embed_dim], weight[2 * embed_dim:3 * embed_dim]\n custom_attn.W_Q.weight.data, \\\n custom_attn.W_K.weight.data, \\\n custom_attn.W_V.weight.data = split_qkv(\n torch_attn.in_proj_weight.data, embed_dim\n )\n\n custom_attn.W_Q.bias.data, \\\n custom_attn.W_K.bias.data, \\\n custom_attn.W_V.bias.data = split_qkv(\n torch_attn.in_proj_bias.data, embed_dim\n )\n\n custom_attn.W_O.weight.data = torch_attn.out_proj.weight.data\n custom_attn.W_O.bias.data = torch_attn.out_proj.bias.data\n\n return custom_attn\n\n\ndef load_from_torch(\n custom_transformer: CustomTransformer, torch_transformer: torch.nn.Transformer\n):\n for custom_layer, torch_layer in zip(\n [*custom_transformer.encoder.layers, *custom_transformer.decoder.layers],\n [*torch_transformer.encoder.layers, *torch_transformer.decoder.layers],\n ):\n\n if hasattr(custom_layer, 'cross_attention'):\n # Decoder\n custom_layer.self_attention = _attn_load_from_torch(\n custom_layer.self_attention, torch_layer.self_attn\n )\n custom_layer.cross_attention = _attn_load_from_torch(\n custom_layer.cross_attention, torch_layer.multihead_attn\n )\n else:\n # Encoder\n custom_layer.attention = _attn_load_from_torch(\n custom_layer.attention, torch_layer.self_attn\n )\n\n layer_pairs = [\n (custom_layer.norm1, torch_layer.norm1),\n (custom_layer.ffn.fc1, torch_layer.linear1),\n (custom_layer.ffn.fc2, torch_layer.linear2),\n (custom_layer.norm2, torch_layer.norm2)\n ]\n for custom, torch in layer_pairs:\n custom.weight.data = torch.weight.data\n custom.bias.data = torch.bias.data\n return custom_transformer\n
def _attn_load_from_torch( custom_attn: MultiHeadAttention, torch_attn: torch.nn.MultiheadAttention ): embed_dim = custom_attn.d_model def split_qkv(weight, embed_dim): return weight[:embed_dim], weight[embed_dim: 2 * embed_dim], weight[2 * embed_dim:3 * embed_dim] custom_attn.W_Q.weight.data, \\ custom_attn.W_K.weight.data, \\ custom_attn.W_V.weight.data = split_qkv( torch_attn.in_proj_weight.data, embed_dim ) custom_attn.W_Q.bias.data, \\ custom_attn.W_K.bias.data, \\ custom_attn.W_V.bias.data = split_qkv( torch_attn.in_proj_bias.data, embed_dim ) custom_attn.W_O.weight.data = torch_attn.out_proj.weight.data custom_attn.W_O.bias.data = torch_attn.out_proj.bias.data return custom_attn def load_from_torch( custom_transformer: CustomTransformer, torch_transformer: torch.nn.Transformer ): for custom_layer, torch_layer in zip( [*custom_transformer.encoder.layers, *custom_transformer.decoder.layers], [*torch_transformer.encoder.layers, *torch_transformer.decoder.layers], ): if hasattr(custom_layer, 'cross_attention'): # Decoder custom_layer.self_attention = _attn_load_from_torch( custom_layer.self_attention, torch_layer.self_attn ) custom_layer.cross_attention = _attn_load_from_torch( custom_layer.cross_attention, torch_layer.multihead_attn ) else: # Encoder custom_layer.attention = _attn_load_from_torch( custom_layer.attention, torch_layer.self_attn ) layer_pairs = [ (custom_layer.norm1, torch_layer.norm1), (custom_layer.ffn.fc1, torch_layer.linear1), (custom_layer.ffn.fc2, torch_layer.linear2), (custom_layer.norm2, torch_layer.norm2) ] for custom, torch in layer_pairs: custom.weight.data = torch.weight.data custom.bias.data = torch.bias.data return custom_transformer \u200b\u901a\u8fc7\u200b\u4ee3\u7801\u200b\u9a8c\u8bc1\u200b\u5b9e\u73b0\u200b\u7684\u200bTransformer\u200b\u6a21\u578b\u200b\u7684\u200b\u6b63\u786e\u6027\u200b\u3002
In\u00a0[8]: Copied! transformer_config = {\n 'num_layers': 6,\n 'num_decoder_layers': 6,\n 'input_dim': 512,\n 'num_heads': 8,\n 'ffn_dim': 2048,\n 'dropout': 0.1,\n 'layer_norm_eps': 1e-6\n}\n\ncustom_transformer = CustomTransformer(**transformer_config)\ntorch_transformer = torch.nn.Transformer(\n d_model=transformer_config['input_dim'],\n nhead=transformer_config['num_heads'],\n num_encoder_layers=transformer_config['num_layers'],\n num_decoder_layers=transformer_config['num_decoder_layers'],\n dim_feedforward=transformer_config['ffn_dim'],\n dropout=transformer_config['dropout'],\n batch_first=True\n)\ncustom_transformer = load_from_torch(custom_transformer, torch_transformer)\ncustom_transformer.eval()\ntorch_transformer.eval()\n\nsrc = torch.randn(32, 10, transformer_config['input_dim'])\ntgt = torch.randn(32, 20, transformer_config['input_dim'])\ntgt_mask = 1 - torch.triu(torch.ones(20, 20), diagonal=1)\n\ncustom_output = custom_transformer(src, tgt, tgt_mask=tgt_mask)\ntorch_output = torch_transformer(src, tgt, tgt_mask=tgt_mask, tgt_is_causal=True)\ncustom_output[0, 0, :5], torch_output[0, 0, :5]\n
transformer_config = { 'num_layers': 6, 'num_decoder_layers': 6, 'input_dim': 512, 'num_heads': 8, 'ffn_dim': 2048, 'dropout': 0.1, 'layer_norm_eps': 1e-6 } custom_transformer = CustomTransformer(**transformer_config) torch_transformer = torch.nn.Transformer( d_model=transformer_config['input_dim'], nhead=transformer_config['num_heads'], num_encoder_layers=transformer_config['num_layers'], num_decoder_layers=transformer_config['num_decoder_layers'], dim_feedforward=transformer_config['ffn_dim'], dropout=transformer_config['dropout'], batch_first=True ) custom_transformer = load_from_torch(custom_transformer, torch_transformer) custom_transformer.eval() torch_transformer.eval() src = torch.randn(32, 10, transformer_config['input_dim']) tgt = torch.randn(32, 20, transformer_config['input_dim']) tgt_mask = 1 - torch.triu(torch.ones(20, 20), diagonal=1) custom_output = custom_transformer(src, tgt, tgt_mask=tgt_mask) torch_output = torch_transformer(src, tgt, tgt_mask=tgt_mask, tgt_is_causal=True) custom_output[0, 0, :5], torch_output[0, 0, :5] Out[8]: (tensor([ 0.6672, 0.4102, -0.2145, 1.8782, 0.4108], grad_fn=<SliceBackward0>),\n tensor([ 0.6672, 0.4102, -0.2145, 1.8781, 0.4108], grad_fn=<SliceBackward0>))
In\u00a0[9]: Copied! torch.allclose(custom_output, torch_output, atol=1e-4)\n
torch.allclose(custom_output, torch_output, atol=1e-4) Out[9]: True
"},{"location":"coding/dsa/","title":"\u6570\u636e\u7ed3\u6784","text":"\u200b\u4ee5\u4e0b\u200b\u6574\u7406\u200b\u4e86\u200b\u9093\u4fca\u8f89\u200b\u8001\u5e08\u200b\u300a\u200b\u6570\u636e\u7ed3\u6784\u200b\u300b\u200b\u8bfe\u7a0b\u200b\u7684\u200b\u5185\u5bb9\u200b\uff1a
- \u200b\u5411\u91cf\u200b\u4e0e\u200b\u5217\u8868\u200b
"},{"location":"coding/dsa/vector-and-list/","title":"\u5411\u91cf\u200b\u4e0e\u200b\u5217\u8868","text":"\u200b\u4e3b\u8981\u200b\u7684\u200b\u57fa\u7840\u200b\u7ebf\u6027\u200b\u6570\u636e\u7ed3\u6784\u200b\u662f\u200b\u5411\u91cf\u200b\u4e0e\u200b\u5217\u8868\u200b\u3002\u200b\u5728\u200b\u672c\u5408\u200b\u96c6\u4e2d\u200b\uff0c\u200b\u5411\u91cf\u200b\u6307\u4ee5\u200b\u6570\u7ec4\u200b\u65b9\u5f0f\u200b\u7ec4\u5408\u200b\u5e76\u200b\u5c01\u88c5\u200b\u901a\u7528\u200b\u62bd\u8c61\u200b\u63a5\u53e3\u200b\u7684\u200b\u6570\u636e\u7c7b\u578b\u200b\uff1b\u200b\u5217\u8868\u200b\u6307\u4ee5\u200b\u94fe\u8868\u200b\u65b9\u5f0f\u200b\u7ec4\u5408\u200b\u5e76\u200b\u5c01\u88c5\u200b\u901a\u7528\u200b\u62bd\u8c61\u200b\u63a5\u53e3\u200b\u7684\u200b\u6570\u636e\u7c7b\u578b\u200b\u3002
\u200b\u8f83\u4e3a\u200b\u9ad8\u7ea7\u200b\u7684\u200b\u6570\u636e\u7ed3\u6784\u200b\u2014\u2014\u200b\u6808\u200b\u4e0e\u200b\u961f\u5217\u200b\u5efa\u7acb\u200b\u5728\u200b\u5411\u91cf\u200b\u4e0e\u200b\u5217\u8868\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\u3002\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4e00\u4e9b\u200b\u53d7\u9650\u5236\u200b\u7684\u200b\u64cd\u4f5c\u200b\u63a5\u53e3\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_2","title":"\u7ebf\u6027\u200b\u6570\u636e\u7ed3\u6784","text":"\u200b\u5bf9\u4e8e\u200b\u57fa\u7840\u200b\u7684\u200b\u7ebf\u6027\u200b\u6570\u636e\u7ed3\u6784\u200b\uff0c\u200b\u4ee5\u4e0b\u200b\u7684\u200b\u63a5\u53e3\u200b\u53ef\u4ee5\u200b\u89c6\u4e3a\u200b\u901a\u7528\u200b\uff1a
\u200b\u64cd\u4f5c\u200b \u200b\u63cf\u8ff0\u200b \u200b\u901a\u7528\u6027\u200b size()
\u200b\u83b7\u53d6\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u6570\u76ee\u200b get()
\u200b\u83b7\u53d6\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u503c\u200b set()
\u200b\u4fee\u6539\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u503c\u200b insert()
\u200b\u5411\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u4f4d\u7f6e\u200b\u63d2\u5165\u200b\u5143\u7d20\u200b remove()
\u200b\u79fb\u9664\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b traverse()
\u200b\u904d\u5386\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\uff0c\u200b\u5e76\u200b\u6267\u884c\u200b\u67d0\u200b\u64cd\u4f5c\u200b find()
\u200b\u5728\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u67e5\u627e\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u4f4d\u7f6e\u200b search()
\u200b\u5728\u200b\u6709\u5e8f\u200b\u7684\u200b\u7ed3\u6784\u200b\u4e2d\u200b\u67e5\u627e\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u4f4d\u7f6e\u200b \u200b\u8981\u6c42\u200b\u6709\u5e8f\u200b sort()
\u200b\u6392\u5e8f\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b \u200b\u8981\u6c42\u200b\u91cd\u8f7d\u200b<
\u200b\u548c\u200b>
\u200b\u8fd0\u7b97\u7b26"},{"location":"coding/dsa/vector-and-list/#_3","title":"\u5411\u91cf","text":"\u200b\u5728\u200b\u5411\u91cf\u200b\u4e2d\u200b\uff0c\u200b\u6570\u636e\u200b\u5728\u200b\u5185\u5b58\u200b\u4e2d\u200b\u8fde\u7eed\u200b\u5b58\u50a8\u200b\uff0c\u200b\u5373\u200b\u4e0b\u6807\u200b\u76f8\u90bb\u200b\u7684\u200b\u6570\u636e\u200b\u5728\u200b\u5185\u5b58\u200b\u4e2d\u200b\u76f8\u90bb\u200b\u3002C/C++\u200b\u8bed\u8a00\u200b\u4e2d\u200b\u7684\u200b\u6570\u7ec4\u200b\u6570\u636e\u7ed3\u6784\u200b\u53ef\u4ee5\u200b\u89c6\u4e3a\u200b\u7b80\u5355\u200b\u7684\u200b\u5411\u91cf\u200b\u3002\u200b\u4f46\u200b\u6570\u7ec4\u200b\u4e0d\u200b\u63d0\u4f9b\u200b\u63d2\u5165\u200b\u3001\u200b\u5220\u9664\u200b\u7b49\u200b\u5177\u4f53\u200b\u7684\u200b\u64cd\u4f5c\u200b\u63a5\u53e3\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u7a0b\u5e8f\u4ee3\u7801\u200b\u4e2d\u200b\u624b\u52a8\u200b\u5b9e\u73b0\u200b\u3002\u200b\u5c06\u200b\u6570\u7ec4\u200b\u5c01\u88c5\u200b\u6210\u7c7b\u200b\u53ef\u4ee5\u200b\u63d0\u4f9b\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u64cd\u4f5c\u200b\u63a5\u53e3\u200b\uff0c\u200b\u5e76\u4e14\u200b\u4fdd\u8bc1\u6570\u636e\u200b\u88ab\u200b\u5408\u6cd5\u200b\u5730\u200b\u8bbf\u95ee\u200b\u53ca\u200b\u4fee\u6539\u200b\u3002
\u200b\u5411\u91cf\u200b\u662f\u200b\u6570\u7ec4\u200b\u7684\u200b\u62bd\u8c61\u200b\u6cdb\u5316\u200b\u3001\u200b\u652f\u6301\u200b\u6240\u6709\u200b\u6570\u7ec4\u200b\u7684\u200b\u529f\u80fd\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u5143\u7d20\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u7edf\u4e00\u200b\u7684\u200b\u64cd\u4f5c\u200b\u63a5\u53e3\u200b\u3002
C++\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u6a21\u677f\u200b\u7c7b\u200b\u7684\u200b\u529f\u80fd\u200b\u7528\u6765\u200b\u9488\u5bf9\u200b\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u5143\u7d20\u200b\u63d0\u4f9b\u200b\u76f8\u540c\u200b\u7684\u200b\u529f\u80fd\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u67d0\u4e2a\u200bADT\uff08\u200b\u4ee5\u200b\u5411\u91cf\u200b\u4e3a\u4f8b\u200b\uff09\uff0c\u200b\u5176\u200b\u5c5e\u6027\u200b\u548c\u200b\u63a5\u53e3\u200b\u7684\u200b\u7ec4\u7ec7\u200b\u65b9\u5f0f\u200b\u53ef\u200b\u9075\u5faa\u200b\u5982\u4e0b\u200b\u89c4\u5219\u200b\uff1a
template <typename T> class Vector { //\u200b\u5411\u91cf\u200b\u6a21\u677f\u200b\u7c7b\u200b\nprivate: Rank _size; int _capacity; T* _elem; //\u200b\u89c4\u6a21\u200b\u3001\u200b\u5bb9\u91cf\u200b\u3001\u200b\u6570\u636e\u200b\u533a\u200b\nprotected:\n/* ... \u200b\u5185\u90e8\u200b\u51fd\u6570\u200b */\npublic:\n/* ... \u200b\u6784\u9020\u51fd\u6570\u200b */\n/* ... \u200b\u6790\u6784\u200b\u51fd\u6570\u200b */\n/* ... \u200b\u53ea\u8bfb\u200b\u63a5\u53e3\u200b */\n/* ... \u200b\u53ef\u200b\u5199\u200b\u63a5\u53e3\u200b */\n/* ... \u200b\u904d\u5386\u200b\u63a5\u53e3\u200b */\n};\n
\u200b\u901a\u8fc7\u200b\u5bf9\u200b[]
\u200b\u8fd0\u7b97\u7b26\u200b\u8fdb\u884c\u200b\u91cd\u8f7d\u200b\uff0c\u200b\u5411\u91cf\u200b\u548c\u200b\u5217\u8868\u200b\u652f\u6301\u200b\u6570\u7ec4\u200b\u98ce\u683c\u200b\u7684\u200b\u8bbf\u95ee\u200b\u65b9\u5f0f\u200b\u3002
\u200b\u5177\u4f53\u200b\u4ee3\u7801\u200b\u53ef\u4ee5\u200b\u53c2\u89c1\u200b\uff1a
\u200b\u5411\u91cf\u200b\u6a21\u677f\u200b\u7c7b\u200b\u58f0\u660e\u200b /******************************************************************************************\n* Data Structures in C++\n* ISBN: 7-302-33064-6 & 7-302-33065-3 & 7-302-29652-2 & 7-302-26883-3\n* Junhui DENG, deng@tsinghua.edu.cn\n* Computer Science & Technology, Tsinghua University\n* Copyright (c) 2003-2020. All rights reserved.\n******************************************************************************************/\n\ntypedef int Rank; //\u200b\u79e9\u200b\n#define DEFAULT_CAPACITY 3 //\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u521d\u59cb\u200b\u5bb9\u91cf\u200b\uff08\u200b\u5b9e\u9645\u200b\u5e94\u7528\u200b\u4e2d\u200b\u53ef\u200b\u8bbe\u7f6e\u200b\u4e3a\u200b\u66f4\u200b\u5927\u200b\uff09\n\ntemplate <typename T> class Vector { //\u200b\u5411\u91cf\u200b\u6a21\u677f\u200b\u7c7b\u200b\nprotected:\n Rank _size; int _capacity; T* _elem; //\u200b\u89c4\u6a21\u200b\u3001\u200b\u5bb9\u91cf\u200b\u3001\u200b\u6570\u636e\u200b\u533a\u200b\n void copyFrom ( T const* A, Rank lo, Rank hi ); //\u200b\u590d\u5236\u200b\u6570\u7ec4\u200b\u533a\u95f4\u200bA[lo, hi)\n void expand(); //\u200b\u7a7a\u95f4\u200b\u4e0d\u8db3\u200b\u65f6\u200b\u6269\u5bb9\u200b\n void shrink(); //\u200b\u88c5\u586b\u200b\u56e0\u5b50\u200b\u8fc7\u200b\u5c0f\u65f6\u200b\u538b\u7f29\u200b\n bool bubble ( Rank lo, Rank hi ); //\u200b\u626b\u63cf\u200b\u4ea4\u6362\u200b\n void bubbleSort ( Rank lo, Rank hi ); //\u200b\u8d77\u6ce1\u200b\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\n Rank max ( Rank lo, Rank hi ); //\u200b\u9009\u53d6\u200b\u6700\u5927\u200b\u5143\u7d20\u200b\n void selectionSort ( Rank lo, Rank hi ); //\u200b\u9009\u62e9\u200b\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\n void merge ( Rank lo, Rank mi, Rank hi ); //\u200b\u5f52\u5e76\u200b\u7b97\u6cd5\u200b\n void mergeSort ( Rank lo, Rank hi ); //\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\n void heapSort ( Rank lo, Rank hi ); //\u200b\u5806\u6392\u5e8f\u200b\uff08\u200b\u7a0d\u540e\u200b\u7ed3\u5408\u200b\u5b8c\u5168\u200b\u5806\u200b\u8bb2\u89e3\u200b\uff09\n Rank partition ( Rank lo, Rank hi ); //\u200b\u8f74\u70b9\u200b\u6784\u9020\u200b\u7b97\u6cd5\u200b\n void quickSort ( Rank lo, Rank hi ); //\u200b\u5feb\u901f\u200b\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\n void shellSort ( Rank lo, Rank hi ); //\u200b\u5e0c\u5c14\u200b\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\npublic:\n// \u200b\u6784\u9020\u51fd\u6570\u200b\n Vector ( int c = DEFAULT_CAPACITY, int s = 0, T v = 0 ) //\u200b\u5bb9\u91cf\u200b\u4e3a\u200bc\u3001\u200b\u89c4\u6a21\u200b\u4e3a\u200bs\u3001\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u521d\u59cb\u200b\u4e3a\u200bv\n { _elem = new T[_capacity = c]; for ( _size = 0; _size < s; _elem[_size++] = v ); } //s<=c\n Vector ( T const* A, Rank n ) { copyFrom ( A, 0, n ); } //\u200b\u6570\u7ec4\u200b\u6574\u4f53\u200b\u590d\u5236\u200b\n Vector ( T const* A, Rank lo, Rank hi ) { copyFrom ( A, lo, hi ); } //\u200b\u533a\u95f4\u200b\n Vector ( Vector<T> const& V ) { copyFrom ( V._elem, 0, V._size ); } //\u200b\u5411\u91cf\u200b\u6574\u4f53\u200b\u590d\u5236\u200b\n Vector ( Vector<T> const& V, Rank lo, Rank hi ) { copyFrom ( V._elem, lo, hi ); } //\u200b\u533a\u95f4\u200b\n// \u200b\u6790\u6784\u200b\u51fd\u6570\u200b\n ~Vector() { delete [] _elem; } //\u200b\u91ca\u653e\u200b\u5185\u90e8\u7a7a\u95f4\u200b\n// \u200b\u53ea\u8bfb\u200b\u8bbf\u95ee\u200b\u63a5\u53e3\u200b\n Rank size() const { return _size; } //\u200b\u89c4\u6a21\u200b\n bool empty() const { return !_size; } //\u200b\u5224\u7a7a\u200b\n Rank find ( T const& e ) const { return find ( e, 0, _size ); } //\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u6574\u4f53\u200b\u67e5\u627e\u200b\n Rank find ( T const& e, Rank lo, Rank hi ) const; //\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u533a\u95f4\u200b\u67e5\u627e\u200b\n Rank search ( T const& e ) const //\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u6574\u4f53\u200b\u67e5\u627e\u200b\n { return ( 0 >= _size ) ? -1 : search ( e, 0, _size ); }\n Rank search ( T const& e, Rank lo, Rank hi ) const; //\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u533a\u95f4\u200b\u67e5\u627e\u200b\n// \u200b\u53ef\u200b\u5199\u8bbf\u95ee\u200b\u63a5\u53e3\u200b\n T& operator[] ( Rank r ); //\u200b\u91cd\u8f7d\u200b\u4e0b\u6807\u200b\u64cd\u4f5c\u7b26\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7c7b\u4f3c\u200b\u4e8e\u200b\u6570\u7ec4\u200b\u5f62\u5f0f\u200b\u5f15\u7528\u200b\u5404\u200b\u5143\u7d20\u200b\n const T& operator[] ( Rank r ) const; //\u200b\u4ec5\u9650\u4e8e\u200b\u505a\u53f3\u503c\u200b\u7684\u200b\u91cd\u8f7d\u200b\u7248\u672c\u200b\n Vector<T> & operator= ( Vector<T> const& ); //\u200b\u91cd\u8f7d\u200b\u8d4b\u503c\u200b\u64cd\u4f5c\u7b26\u200b\uff0c\u200b\u4ee5\u4fbf\u200b\u76f4\u63a5\u200b\u514b\u9686\u200b\u5411\u91cf\u200b\n T remove ( Rank r ); //\u200b\u5220\u9664\u200b\u79e9\u4e3a\u200br\u200b\u7684\u200b\u5143\u7d20\u200b\n int remove ( Rank lo, Rank hi ); //\u200b\u5220\u9664\u200b\u79e9\u5728\u200b\u533a\u95f4\u200b[lo, hi)\u200b\u4e4b\u5185\u200b\u7684\u200b\u5143\u7d20\u200b\n Rank insert ( Rank r, T const& e ); //\u200b\u63d2\u5165\u200b\u5143\u7d20\u200b\n Rank insert ( T const& e ) { return insert ( _size, e ); } //\u200b\u9ed8\u8ba4\u200b\u4f5c\u4e3a\u200b\u672b\u200b\u5143\u7d20\u200b\u63d2\u5165\u200b\n void sort ( Rank lo, Rank hi ); //\u200b\u5bf9\u200b[lo, hi)\u200b\u6392\u5e8f\u200b\n void sort() { sort ( 0, _size ); } //\u200b\u6574\u4f53\u200b\u6392\u5e8f\u200b\n void unsort ( Rank lo, Rank hi ); //\u200b\u5bf9\u200b[lo, hi)\u200b\u7f6e\u4e71\u200b\n void unsort() { unsort ( 0, _size ); } //\u200b\u6574\u4f53\u200b\u7f6e\u4e71\u200b\n int deduplicate(); //\u200b\u65e0\u5e8f\u200b\u53bb\u200b\u91cd\u200b\n int uniquify(); //\u200b\u6709\u5e8f\u200b\u53bb\u200b\u91cd\u200b\n// \u200b\u904d\u5386\u200b\n void traverse ( void (* ) ( T& ) ); //\u200b\u904d\u5386\u200b\uff08\u200b\u4f7f\u7528\u200b\u51fd\u6570\u6307\u9488\u200b\uff0c\u200b\u53ea\u8bfb\u200b\u6216\u200b\u5c40\u90e8\u6027\u200b\u4fee\u6539\u200b\uff09\n template <typename VST> void traverse ( VST& ); //\u200b\u904d\u5386\u200b\uff08\u200b\u4f7f\u7528\u200b\u51fd\u6570\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u53ef\u200b\u5168\u5c40\u6027\u200b\u4fee\u6539\u200b\uff09\n}; //Vector\n
Reference"},{"location":"coding/dsa/vector-and-list/#_4","title":"\u63d2\u5165","text":"\u200b\u5411\u91cf\u200b\u7684\u200b\u63d2\u5165\u200b\u64cd\u4f5c\u200b\u5206\u4e3a\u200b\u4e09\u6b65\u200b\uff1a
- \u200b\u68c0\u67e5\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u4e0e\u200b\u8f93\u5165\u200b\u4e0b\u200b\u6807\u7684\u200b\u5408\u6cd5\u6027\u200b\uff0c\u200b\u5fc5\u8981\u200b\u65f6\u200b\u6539\u53d8\u200b\u5411\u91cf\u200b\u7684\u200b\u957f\u5ea6\u200b\u4ee5\u200b\u5bb9\u7eb3\u200b\u8be5\u200b\u5143\u7d20\u200b
- \u200b\u5f53\u200b\u8f93\u5165\u200b\u4e0b\u6807\u200b\u4e0d\u662f\u200b\u5411\u91cf\u200b\u7684\u200b\u672b\u5c3e\u200b\u65f6\u200b\uff0c\u200b\u79fb\u52a8\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u5728\u200b\u5bf9\u5e94\u200b\u4f4d\u7f6e\u200b\u817e\u51fa\u200b\u7a7a\u95f4\u200b
- \u200b\u5c06\u200b\u6570\u636e\u200b\u5199\u5165\u200b\u5411\u91cf\u200b\u4e2d\u200b
\u200b\u5728\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u968f\u673a\u200b\u4f4d\u7f6e\u200b\u63d2\u5165\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u6539\u53d8\u200b\u5411\u91cf\u200b\u957f\u5ea6\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u65f6\u95f4\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)\uff0c\u200b\u79fb\u52a8\u200b\u5143\u7d20\u200b\u4ee5\u200b\u817e\u51fa\u200b\u7a7a\u95f4\u200b\u7684\u200b\u671f\u671b\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)\uff0c\u200b\u5199\u5165\u200b\u6570\u636e\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(1)\\)\uff0c\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)
"},{"location":"coding/dsa/vector-and-list/#_5","title":"\u53ef\u200b\u6269\u5145\u200b\u5411\u91cf","text":"\u200b\u5411\u91cf\u200b\u7684\u200b\u7a7a\u95f4\u200b\u662f\u200b\u6709\u9650\u200b\u7684\u200b\uff08\u200b\u5373\u200b\u4e3a\u200b\u5411\u91cf\u200b\u672c\u8eab\u200b\u7684\u200b\u957f\u5ea6\u200b\uff09\uff0c\u200b\u82e5\u5f53\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u4e0d\u8db3\u200b\u65f6\u4e3a\u200b\u5411\u91cf\u200b\u91cd\u65b0\u5206\u914d\u200b\u4e00\u5757\u200b\u66f4\u957f\u200b\u7684\u200b\u5185\u5b58\u200b\uff0c\u200b\u5c06\u200b\u539f\u200b\u6570\u636e\u200b\u590d\u5236\u5230\u200b\u65b0\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u4e2d\u4ee5\u200b\u5b9e\u73b0\u200b\u5bb9\u91cf\u200b\u7684\u200b\u6269\u589e\u200b\uff0c\u200b\u5219\u200b\u5411\u91cf\u200b\u7684\u200b\u7a7a\u95f4\u200b\u53ef\u4ee5\u200b\u8fd1\u4f3c\u200b\u89c6\u4e3a\u200b\u65e0\u9650\u200b\u3002\u200b\u4e00\u822c\u200b\u5b58\u5728\u200b\u4e24\u79cd\u200b\u6269\u5145\u200b\u7b97\u6cd5\u200b\uff1a
- \u200b\u5f53\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u4e0d\u8db3\u200b\u65f6\u200b\uff0c\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u589e\u52a0\u200b\u4e00\u4e2a\u200b\u5e38\u91cf\u200b\\(I\\)
- \u200b\u5f53\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u4e0d\u8db3\u200b\u65f6\u200b\uff0c\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u4e58\u4ee5\u200b\u4e00\u5b9a\u200b\u500d\u6570\u200b\\(k\\)\uff08\u200b\u901a\u5e38\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\\(k=2\\)\uff09
\u200b\u5bf9\u4e8e\u200b\u521d\u59cb\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(0\\)\u200b\u7684\u200b\u5411\u91cf\u200b\uff0c\u200b\u8003\u5bdf\u200b\u63d2\u5165\u200b\\(n\\gg 2\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\u4e0b\u200b\u4e24\u79cd\u200b\u6269\u5145\u200b\u7b97\u6cd5\u200b\u7684\u200b\u8c03\u7528\u200b\u6b21\u6570\u200b\u3002\u200b\u9012\u589e\u200b\u7b56\u7565\u200b\u4e0b\u200b\u63d2\u5165\u200b\u7b2c\u200b\\(mI+1, (m\\in \\mathbb N)\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\u65f6\u200b\u9700\u8981\u200b\u8fdb\u884c\u200b\u6269\u5145\u200b\uff0c\u200b\u603b\u200b\u7684\u200b\u8c03\u7528\u200b\u6b21\u6570\u200b\u4e3a\u200b\\(\\frac{n}{I}\\)\uff0c\u200b\u5373\u200b\\(\\mathcal O(n)\\)\u3002\u200b\u500d\u589e\u200b\u7b56\u7565\u200b\u4e0b\u200b\u63d2\u5165\u200b\u7b2c\u200b\\(1, 2, 3, 5\\dots 2^m+1, (m\\in \\mathbb N)\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\u65f6\u200b\u9700\u8981\u200b\u8fdb\u884c\u200b\u6269\u5145\u200b\uff0c\u200b\u603b\u200b\u7684\u200b\u8c03\u7528\u200b\u6b21\u6570\u200b\u4e3a\u200b\\(\\mathcal O(\\log n)\\)\u3002
\u200b\u590d\u5236\u200b\u6570\u636e\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)\uff0c\u200b\u56e0\u6b64\u200b\u9012\u589e\u200b\u7b56\u7565\u200b\u6bcf\u6b21\u200b\u6269\u5bb9\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u65f6\u95f4\u200b\u4e3a\u200b\\(0, I, 2I, \\dots\\)\uff0c\u200b\u5171\u200b\u9700\u8981\u200b\u6269\u5bb9\u200b\\(\\frac nI\\)\u200b\u6b21\u200b\uff0c\u200b\u6269\u5bb9\u200b\u64cd\u4f5c\u200b\u7684\u200b\u603b\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n^2)\\)\u3002\u200b\u6bcf\u6b21\u200b\u63d2\u5165\u200b\u64cd\u4f5c\u200b\u5206\u644a\u200b\\(\\mathcal O(n)\\)\u3002\u200b\u500d\u589e\u200b\u7b56\u7565\u200b\u6bcf\u6b21\u200b\u6269\u5bb9\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u65f6\u95f4\u200b\u4e3a\u200b\\(0, 1, 2, \\dots n\\)\uff0c\u200b\u5171\u200b\u9700\u8981\u200b\u6269\u5bb9\u200b\\(\\log n\\)\u200b\u6b21\u200b\u3002\u200b\u6269\u5bb9\u200b\u64cd\u4f5c\u200b\u7684\u200b\u603b\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)\uff0c\u200b\u6bcf\u6b21\u200b\u63d2\u5165\u200b\u64cd\u4f5c\u200b\u5206\u644a\u200b\\(\\mathcal O(1)\\)\u3002
\u200b\u4f46\u200b\u500d\u589e\u200b\u7b56\u7565\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u7a7a\u95f4\u200b\u6d6a\u8d39\u200b\uff0c\u200b\u5177\u4f53\u8868\u73b0\u200b\u4e3a\u200b\u5411\u91cf\u200b\u7684\u200b\u88c5\u8f7d\u200b\u56e0\u5b50\u200b\u8f83\u200b\u4f4e\u200b\u3002\u200b\u63d2\u5165\u200b\u5927\u91cf\u200b\u5143\u7d20\u200b\u65f6\u200b\uff0c\u200b\u500d\u589e\u200b\u7b56\u7565\u200b\u7684\u200b\u88c5\u8f7d\u200b\u56e0\u5b50\u200b\u53ea\u80fd\u200b\u4fdd\u8bc1\u200b\\(> 50\\)\uff0c\u200b\u800c\u200b\u9012\u589e\u200b\u7b56\u7565\u200b\u7684\u200b\u88c5\u8f7d\u200b\u56e0\u5b50\u200b\u53ef\u4ee5\u200b\u4fdd\u8bc1\u200b\u5728\u200b\\(1\\)\u200b\u5de6\u53f3\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_6","title":"\u5220\u9664","text":"\u200b\u5411\u91cf\u200b\u7684\u200b\u5220\u9664\u200b\u64cd\u4f5c\u200b\u4e3b\u8981\u200b\u4e3a\u200b\u533a\u95f4\u200b\u5220\u9664\u200b\u4e0e\u200b\u5355\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u5220\u9664\u200b\u3002\u200b\u5176\u4e2d\u200b\u540e\u8005\u200b\u53ef\u4ee5\u200b\u89c6\u4e3a\u200b\u524d\u8005\u200b\u7684\u200b\u7279\u6b8a\u200b\u60c5\u51b5\u200b\u3002\u200b\u5220\u9664\u200b\u64cd\u4f5c\u200b\u4e0d\u200b\u9700\u8981\u200b\u6267\u884c\u200b\u989d\u5916\u200b\u7684\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u53ea\u200b\u9700\u8981\u200b\u5c06\u200b\u5220\u9664\u200b\u533a\u95f4\u200b\u540e\u200b\u7684\u200b\u5143\u7d20\u200b\u5411\u524d\u200b\u79fb\u52a8\u200b\uff0c\u200b\u8986\u76d6\u200b\u5220\u9664\u200b\u533a\u95f4\u200b\u5185\u200b\u7684\u200b\u6570\u636e\u200b\u5e76\u200b\u66f4\u65b0\u200b\u64cd\u4f5c\u200b\u7ed3\u675f\u200b\u540e\u200b\u5411\u91cf\u200b\u7684\u200b\u957f\u5ea6\u200b\u5373\u53ef\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u53ef\u200b\u6269\u5145\u200b\u5411\u91cf\u200b\uff0c\u200b\u5220\u9664\u200b\u540e\u200b\u5e94\u5bf9\u200b\u5411\u91cf\u200b\u7684\u200b\u88c5\u586b\u200b\u56e0\u5b50\u200b\u8fdb\u884c\u200b\u68c0\u67e5\u200b\uff0c\u200b\u5728\u200b\u5fc5\u8981\u200b\u65f6\u200b\u6536\u7f29\u200b\u5411\u91cf\u200b\u3002
\u200b\u5982\u679c\u200b\u591a\u6b21\u200b\u8c03\u7528\u200b\u5220\u9664\u200b\u5355\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u63a5\u53e3\u200b\u5b9e\u73b0\u200b\u533a\u95f4\u200b\u5220\u9664\u200b\uff0c\u200b\u7531\u4e8e\u200b\u6bcf\u6b21\u200b\u5220\u9664\u200b\u90fd\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u4e00\u6b21\u200b\u6570\u636e\u200b\u7684\u200b\u79fb\u52a8\u200b\uff0c\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n^2)\\)
\u200b\u5220\u9664\u200b\u64cd\u4f5c\u200b\u9700\u8981\u200b\u5bf9\u200b\u5220\u9664\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5408\u6cd5\u6027\u200b\u8fdb\u884c\u200b\u68c0\u9a8c\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_7","title":"\u67e5\u627e","text":"\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u4e0e\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u67e5\u627e\u200b\u65b9\u6cd5\u200b\u4e0d\u540c\u200b\uff0c\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e5f\u200b\u4e0d\u540c\u200b\u3002\u200b\u5177\u4f53\u200b\u800c\u8a00\u200b\uff0c\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u987a\u5e8f\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u989d\u5916\u200b\u7684\u200b\u4fe1\u606f\u200b\uff0c\u200b\u4ece\u800c\u200b\u4f7f\u5f97\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u67e5\u627e\u200b\u64cd\u4f5c\u200b\u80fd\u591f\u200b\u5728\u200b\\(\\log n\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u5185\u200b\u5b8c\u6210\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_8","title":"\u987a\u5e8f\u200b\u67e5\u627e","text":"\u200b\u987a\u5e8f\u200b\u67e5\u627e\u200b\u64cd\u4f5c\u200b\u5047\u8bbe\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u7c7b\u578b\u5b9a\u4e49\u200b\u4e86\u200b==
\u200b\u8fd0\u7b97\u7b26\u200b\u4e0e\u200b!=
\u200b\u8fd0\u7b97\u7b26\u200b\u3002
\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u67e5\u627e\u200b\u53ea\u200b\u9700\u8981\u200b\u4ece\u200b\u5411\u91cf\u200b\u7684\u200b\u5f00\u5934\u200b\u4f9d\u6b21\u200b\u5bf9\u6bd4\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u4e0e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\uff0c\u200b\u5f53\u200b\u5143\u7d20\u200b\u76f8\u540c\u200b\u65f6\u200b\u8fd4\u56de\u200b\u5373\u53ef\u200b\u3002\u200b\u5e73\u5747\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)
"},{"location":"coding/dsa/vector-and-list/#_9","title":"\u4e8c\u5206\u200b\u67e5\u627e","text":"\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u67e5\u627e\u200b\u64cd\u4f5c\u200b\u5047\u8bbe\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u7c7b\u578b\u5b9a\u4e49\u200b\u7c7b\u200b==
\u200b\u8fd0\u7b97\u7b26\u200b\u3001!=
\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u56e0\u6b64\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u67e5\u627e\u200b\u65b9\u6cd5\u200b\u7ebf\u6027\u200b\u67e5\u627e\u200b\u3002\u200b\u82e5\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u5143\u7d20\u200b\u7c7b\u578b\u5b9a\u4e49\u200b\u4e86\u200b\u6bd4\u8f83\u200b\u8fd0\u7b97\u7b26\u200b<
\u200b\u4e0e\u200b>
\uff0c\u200b\u5219\u200b\u57fa\u4e8e\u200b\u6bd4\u8f83\u200b\u7684\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u964d\u200b\u81f3\u200b\\(\\mathcal O(\\log n)\\)\u3002
\u200b\u51cf\u800c\u6cbb\u200b\u4e4b\u200b\u662f\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u3002\u200b\u8003\u8651\u200b\u66f4\u200b\u4e00\u822c\u200b\u7684\u200b\u901a\u7528\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5728\u200b\\(\\lambda \\cdot n (0\\leq \\lambda\\leq 1)\\)\u200b\u5904\u8bbe\u200b\u4e3a\u8f74\u70b9\u200b\u3002\u200b\u6bcf\u6b21\u200b\u6bd4\u8f83\u200b\u5f53\u524d\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7684\u200b\u8f74\u70b9\u200b\\(B\\)\u200b\u4e0e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\\(A\\)\u3002\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u5bf9\u8f74\u70b9\u200b\u7684\u200b\u6bd4\u8f83\u200b\u6709\u200b\u4e09\u79cd\u200b\u53ef\u80fd\u200b\u7684\u200b\u7ed3\u679c\u200b\uff0c\u200b\u5047\u8bbe\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u6309\u7167\u200b\u5347\u5e8f\u200b\u6392\u5e8f\u200b\uff0c\u200b\u5219\u200b\uff1a
- \\(A<B\\)\uff0c\u200b\u8868\u793a\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u53ea\u200b\u53ef\u80fd\u200b\u51fa\u73b0\u200b\u5728\u200b\u8f74\u70b9\u200b\u5de6\u4fa7\u200b\uff0c\u200b\u5c06\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7f29\u5c0f\u200b\u81f3\u200b\u5de6\u534a\u200b\u90e8\u5206\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u67e5\u627e\u200b\u8fc7\u7a0b\u200b\uff1b
- \\(A=B\\)\uff0c\u200b\u8868\u793a\u200b\u8f74\u70b9\u200b\u5904\u200b\u51fa\u73b0\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\uff0c\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200b\u4e2d\u70b9\u200b\u7684\u200b\u4e0b\u6807\u200b\u5373\u53ef\u200b\uff1b
- \\(B<A\\)\uff0c\u200b\u8868\u793a\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u53ea\u200b\u53ef\u80fd\u200b\u51fa\u73b0\u200b\u5728\u200b\u8f74\u70b9\u200b\u53f3\u4fa7\u200b\uff0c\u200b\u5c06\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7f29\u5c0f\u200b\u81f3\u200b\u53f3\u534a\u200b\u90e8\u5206\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u67e5\u627e\u200b\u8fc7\u7a0b\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\uff0c\u200b\u8f74\u70b9\u200b\u4e3a\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7684\u200b\u4e2d\u70b9\u200b\uff0c\u200b\u5373\u200b\\(\\lambda = 0.5\\)\u3002
1234567891011
\u200b\u4f46\u200b\u8be5\u200b\u7248\u672c\u200b\u7684\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u6709\u200b\u591a\u79cd\u200b\u610f\u5916\u200b\u60c5\u5f62\u200b\uff0c\u200b\u5982\u200b\uff1a
- \u200b\u5411\u91cf\u200b\u4e2d\u200b\u627e\u200b\u4e0d\u5230\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\uff1b
- \u200b\u5411\u91cf\u200b\u4e2d\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u5b58\u5728\u200b\u591a\u4e2a\u200b\u3002
\u200b\u6b64\u65f6\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u7684\u200b\u7ed3\u679c\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u552f\u4e00\u200b\u3002\u200b\u7ea6\u5b9a\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7b97\u6cd5\u200b\u8fd4\u56de\u200b\u4e0d\u200b\u5927\u4e8e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002
\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u901a\u8fc7\u200b\u5c3d\u53ef\u80fd\u51cf\u5c11\u200b\u9012\u5f52\u200b\u6df1\u5ea6\u200b\u7684\u200b\u65b9\u5f0f\u200b\u51cf\u5c11\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\uff0c\u200b\u7531\u6b64\u200b\uff0c\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u9012\u5f52\u200b\u7684\u200b\u4e0d\u540c\u200b\u5206\u652f\u200b\u5e94\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u671f\u671b\u200b\u65f6\u95f4\u200b\u6d88\u8017\u200b\uff08\u200b\u5373\u200b\u8f6c\u5411\u200b\u6210\u672c\u200b\uff09\u3002\u200b\u6b64\u5904\u200b\u7684\u200b\u201c\u200b\u4e8c\u5206\u200b\u201d\u200b\u53ea\u662f\u200b\u5728\u200b\u6570\u7ec4\u200b\u533a\u95f4\u200b\u7684\u200b\u610f\u4e49\u200b\u4e0a\u200b\u4e8c\u7b49\u200b\u5206\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u8bed\u53e5\u200b\uff1a
if (A > B)\n // statement\nelse if (A < B)\n // statement\nelse\n // statement\n
\u200b\u5de6\u53f3\u4e24\u4e2a\u200b\u8df3\u8f6c\u200b\u4f4d\u4e8e\u200b\u4e0d\u540c\u200b\u7684\u200b\u5206\u652f\u200b\uff0c\u200b\u9700\u8981\u200b\u8fdb\u884c\u200b\u6bd4\u8f83\u200b\u7684\u200b\u6b21\u6570\u200b\u4e0d\u540c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u65f6\u95f4\u200b\u5728\u200b\u4e25\u683c\u200b\u610f\u4e49\u200b\u4e0a\u200b\u662f\u200b\u4e0d\u540c\u200b\u7684\u200b\u3002\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u6539\u53d8\u200b\u8f74\u70b9\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u5c06\u200b\u540c\u4e00\u200b\u9012\u5f52\u200b\u6df1\u5ea6\u200b\u4e0b\u200b\u6bd4\u8f83\u200b\u7684\u200b\u671f\u671b\u200b\u6b21\u6570\u200b\u8c03\u6574\u200b\u4e3a\u200b\u76f8\u540c\u200b\uff0c\u200b\u4ece\u800c\u200b\u964d\u4f4e\u200b\u5e73\u5747\u200b\u67e5\u627e\u200b\u957f\u5ea6\u200b\uff0c\u200b\u5728\u200b\u5e38\u200b\u7cfb\u6570\u200b\u7a0b\u5ea6\u200b\u4e0a\u200b\u5bf9\u200b\u7b97\u6cd5\u200b\u8fdb\u884c\u200b\u4f18\u5316\u200b\u3002
+1+2n\u03bbn(1 -\u03bb)\u00b7n
\u200b\u8bbe\u200b\u7b97\u6cd5\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\alpha(\\lambda) \\log n\\)\uff0c\u200b\u5219\u200b\uff1a
- \u200b\u5de6\u4fa7\u200b\u5b50\u200b\u95ee\u9898\u200b\u6d88\u8017\u200b\u7684\u200b\u65f6\u95f4\u200b\u7b49\u4e8e\u200b\u5224\u65ad\u200b\u6d88\u8017\u200b\u7684\u200b\u65f6\u95f4\u200b\u53ca\u200b\u89e3\u51b3\u200b\u5b50\u200b\u95ee\u9898\u200b\u6d88\u8017\u200b\u7684\u200b\u65f6\u95f4\u200b\uff0c\u200b\u5373\u200b\uff1a\\(\\lambda (1 + \\alpha(\\lambda) \\log (\\lambda n))\\)
- \u200b\u540c\u7406\u200b\uff0c\u200b\u53f3\u4fa7\u200b\u5b50\u200b\u95ee\u9898\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\uff1a\\((1 - \\lambda)(2+\\alpha(\\lambda)\\log((1-\\lambda)n))\\)
\u200b\u5f97\u200b\\(\\alpha(\\lambda) = \\frac{\\ln 2(\\lambda - 2)}{\\lambda \\cdot\\ln\\lambda+(1-\\lambda)\\cdot\\ln(1-\\lambda)}\\)
\u200b\u5f53\u200b\\(\\lambda=\\frac{\\sqrt 5-1}{2}\\approx 0.618\\)\u200b\u65f6\u200b\uff0c\\(\\alpha(\\lambda)\\)\u200b\u53d6\u200b\u6700\u5c0f\u503c\u200b\u3002
\u200b\u6d88\u9664\u200b\u4e0d\u200b\u5bf9\u79f0\u200b\u7684\u200b\u53e6\u200b\u4e00\u79cd\u200b\u65b9\u5f0f\u200b\u662f\u200b\u5c06\u200b\u4e09\u79cd\u200b\u6bd4\u8f83\u200b\u7ed3\u679c\u200b\u53d8\u4e3a\u200b\u4e24\u79cd\u200b\uff0c\u200b\u4ece\u800c\u200b\u4e00\u6b21\u200b\u6bd4\u8f83\u200b\u5373\u53ef\u200b\u8fdb\u884c\u200b\u5212\u5206\u200b\u3002\u200b\u8bb0\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u4e3a\u200b\\(A\\)\uff0c\u200b\u8f74\u70b9\u200b\u4e3a\u200b\\(B\\)\uff0c\u200b\u5219\u200b\uff1a
- \\(A<B\\)\uff1a\u200b\u5728\u200b\u8f74\u70b9\u200b\u5de6\u4fa7\u200b\u7684\u200b\u533a\u95f4\u200b\u4e2d\u200b\u67e5\u627e\u200b
- \\(A\\geq B\\)\uff1a\u200b\u5728\u200b\u8f74\u70b9\u200b\u53f3\u4fa7\u200b \uff08\u200b\u5305\u542b\u200b\u8f74\u70b9\u200b\uff09 \u200b\u7684\u200b\u533a\u95f4\u200b\u4e2d\u200b\u67e5\u627e\u200b
- \u200b\u5f53\u200b\u533a\u95f4\u200b\u957f\u5ea6\u200b\u7f29\u51cf\u200b\u4e3a\u200b1\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u67e5\u627e\u200b\u8fc7\u7a0b\u200b\u7ed3\u675f\u200b\u3002
\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u6700\u7ec8\u200b\u5b9e\u73b0\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b /******************************************************************************************\n* Data Structures in C++\n* ISBN: 7-302-33064-6 & 7-302-33065-3 & 7-302-29652-2 & 7-302-26883-3\n* Junhui DENG, deng@tsinghua.edu.cn\n* Computer Science & Technology, Tsinghua University\n* Copyright (c) 2003-2020. All rights reserved.\n******************************************************************************************/\n\n// \u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7b97\u6cd5\u200b\uff08\u200b\u7248\u672c\u200bC\uff09\uff1a\u200b\u5728\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u533a\u95f4\u200b[lo, hi)\u200b\u5185\u200b\u67e5\u627e\u200b\u5143\u7d20\u200be\uff0c0 <= lo <= hi <= _size\ntemplate <typename T> static Rank binSearch ( T* S, T const& e, Rank lo, Rank hi ) {\n while ( lo < hi ) { //\u200b\u6bcf\u6b65\u200b\u8fed\u4ee3\u200b\u4ec5\u200b\u9700\u200b\u505a\u200b\u4e00\u6b21\u200b\u6bd4\u8f83\u200b\u5224\u65ad\u200b\uff0c\u200b\u6709\u200b\u4e24\u4e2a\u200b\u5206\u652f\u200b\n Rank mi = ( lo + hi ) >> 1; //\u200b\u4ee5\u4e2d\u70b9\u200b\u4e3a\u8f74\u70b9\u200b\uff08\u200b\u533a\u95f4\u200b\u5bbd\u5ea6\u200b\u7684\u200b\u6298\u534a\u200b\uff0c\u200b\u7b49\u6548\u4e8e\u200b\u5bbd\u5ea6\u200b\u4e4b\u200b\u6570\u503c\u200b\u8868\u793a\u200b\u7684\u200b\u53f3\u79fb\u200b\uff09\n ( e < S[mi] ) ? hi = mi : lo = mi + 1; //\u200b\u7ecf\u200b\u6bd4\u8f83\u200b\u540e\u200b\u786e\u5b9a\u200b\u6df1\u5165\u200b[lo, mi)\u200b\u6216\u200b(mi, hi)\n } //\u200b\u6210\u529f\u200b\u67e5\u627e\u200b\u4e0d\u80fd\u200b\u63d0\u524d\u200b\u7ec8\u6b62\u200b\n return lo - 1; //\u200b\u5faa\u73af\u200b\u7ed3\u675f\u200b\u65f6\u200b\uff0clo\u200b\u4e3a\u200b\u5927\u4e8e\u200be\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u6700\u5c0f\u200b\u79e9\u200b\uff0c\u200b\u6545\u200blo - 1\u200b\u5373\u200b\u4e0d\u200b\u5927\u4e8e\u200be\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u6700\u5927\u200b\u79e9\u200b\n} //\u200b\u6709\u200b\u591a\u4e2a\u200b\u547d\u4e2d\u200b\u5143\u7d20\u200b\u65f6\u200b\uff0c\u200b\u603b\u80fd\u200b\u4fdd\u8bc1\u200b\u8fd4\u56de\u200b\u79e9\u200b\u6700\u5927\u8005\u200b\uff1b\u200b\u67e5\u627e\u200b\u5931\u8d25\u200b\u65f6\u200b\uff0c\u200b\u80fd\u591f\u200b\u8fd4\u56de\u200b\u5931\u8d25\u200b\u7684\u200b\u4f4d\u7f6e\u200b\n
Reference"},{"location":"coding/dsa/vector-and-list/#_10","title":"\u63d2\u503c\u200b\u67e5\u627e","text":"\u200b\u5047\u8bbe\u200b\u533a\u95f4\u200b\u5185\u200b\u5143\u7d20\u200b\u5206\u5e03\u200b\u7684\u200b\u89c4\u5f8b\u200b\u5df2\u77e5\u200b\uff0c\u200b\u6839\u636e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u5728\u200b\u8be5\u200b\u5206\u5e03\u200b\u4e2d\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u63a8\u65ad\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u5728\u200b\u533a\u95f4\u200b\u7684\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u4ee5\u6b64\u200b\u786e\u5b9a\u200b\u5212\u5206\u200b\u7684\u200b\u8f74\u70b9\u200b\u4f4d\u7f6e\u200b\u3002
\u200b\u5047\u8bbe\u200b\u533a\u95f4\u200b\u5185\u200b\u5143\u7d20\u200b\u670d\u4ece\u200b\u72ec\u7acb\u200b\u7684\u200b\u5e73\u5747\u200b\u5206\u5e03\u200b\uff0c\u200b\u5219\u200b\u6bcf\u6b21\u200b\u67e5\u627e\u200b\u5e73\u5747\u200b\u4f7f\u5f97\u200b\u533a\u95f4\u200b\u7f29\u51cf\u200b\u81f3\u200b\u539f\u6765\u200b\u7684\u200b\\(\\sqrt n\\)\uff0c\u200b\u5e73\u5747\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(\\log\\log n)\\)\u3002
"},{"location":"coding/dsa/vector-and-list/#_11","title":"\u53bb\u200b\u91cd","text":"\u200b\u5bf9\u4e8e\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\uff0c\u200b\u53bb\u200b\u91cd\u200b\u64cd\u4f5c\u200b\u53ef\u4ee5\u200b\u5728\u200b\u7ebf\u6027\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u5185\u200b\u5b8c\u6210\u200b\uff0c\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u53bb\u200b\u91cd\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n^2)\\)
"},{"location":"coding/dsa/vector-and-list/#_12","title":"\u65e0\u5e8f\u200b\u5411\u91cf","text":"\u200b\u4f7f\u7528\u200b\u6307\u9488\u200b\u6807\u8bb0\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u5df2\u7ecf\u200b\u5b8c\u6210\u200b\u53bb\u200b\u91cd\u200b\u7684\u200b\u90e8\u5206\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u672a\u53bb\u200b\u91cd\u200b\u90e8\u5206\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u5728\u200b\u672a\u200b\u53bb\u200b\u91cd\u200b\u90e8\u5206\u200b\u7684\u200b\u540e\u200b\u534a\u200b\u90e8\u5206\u200b\u4e2d\u200b\u67e5\u627e\u200b\u662f\u5426\u200b\u5b58\u5728\u200b\u76f8\u540c\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u5982\u679c\u200b\u627e\u5230\u200b\u76f8\u540c\u200b\u7684\u200b\u5143\u7d20\u200b\u5219\u200b\u5220\u9664\u200b\u3002\u200b\u5b8c\u6210\u200b\u67e5\u627e\u200b\u540e\u200b\u6307\u9488\u200b\u540e\u79fb\u200b\uff0c\u200b\u5c06\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u6807\u8bb0\u200b\u4e3a\u200b\u5df2\u7ecf\u200b\u5b8c\u6210\u200b\u53bb\u200b\u91cd\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_13","title":"\u6709\u5e8f\u200b\u5411\u91cf","text":"\u200b\u4f7f\u7528\u200b\u53cc\u200b\u6307\u9488\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u4e00\u4e2a\u200b\u6307\u9488\u200b\\(P\\)\u200b\u6807\u8bb0\u200b\u5df2\u53bb\u200b\u91cd\u200b\u90e8\u5206\u200b\u7684\u200b\u7ed3\u5c3e\u200b\uff0c\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u6307\u9488\u200b\\(Q\\)\u200b\u6807\u8bb0\u200b\u672a\u53bb\u200b\u91cd\u200b\u90e8\u5206\u200b\u7684\u200b\u5f00\u5934\u200b\uff0c\u200b\u521d\u59cb\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\\(P\\)\u200b\u4f4d\u4e8e\u200b\u5411\u91cf\u200b\u7b2c\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u4e14\u200b\\(P+1=Q\\)\u3002\u200b\u5f53\u200b\\(P\\)\u200b\u6307\u5411\u200b\u7684\u200b\u5bf9\u8c61\u200b\u4e0e\u200b\\(Q\\)\u200b\u6307\u5411\u200b\u7684\u200b\u5bf9\u8c61\u200b\u76f8\u540c\u200b\u65f6\u200b\uff0c\\(Q\\)\u200b\u9012\u589e\u200b\u800c\u200b\\(P\\)\u200b\u4e0d\u200b\u79fb\u52a8\u200b\uff0c\u200b\u5426\u5219\u200b\u5c06\u200b\\(Q\\)\u200b\u5904\u200b\u7684\u200b\u5143\u7d20\u200b\u590d\u5236\u5230\u200b\\(P+1\\)\u200b\u5904\u200b\uff0c\u200b\u4e24\u200b\u6307\u9488\u200b\u540c\u65f6\u200b\u9012\u589e\u200b\u3002
33355558815333555588153355555881535555588815355558881515
"},{"location":"coding/dsa/vector-and-list/#_14","title":"\u6392\u5e8f","text":"\u200b\u6b64\u5904\u200b\u4ecb\u7ecd\u200b\u5bf9\u200b\u5411\u91cf\u200b\u7684\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u4e0e\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\uff0c\u200b\u5176\u4ed6\u200b\u6392\u5e8f\u200b\u65b9\u5f0f\u200b\u5c06\u200b\u5728\u200b\u4ee5\u540e\u200b\u8fdb\u884c\u200b\u4ecb\u7ecd\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_15","title":"\u5192\u6ce1\u6392\u5e8f","text":"\u200b\u5bf9\u4e8e\u200b\u6570\u5217\u200b\\(\\{a_1, \\cdots, a_n\\}\\)\uff0c\u200b\u82e5\u200b\\(a_i>a_{i+1}\\)\uff0c\u200b\u79f0\u200b\\((a_i, a_{i+1})\\)\u200b\u4e3a\u200b\u4e00\u5bf9\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u3002\u200b\u5426\u5219\u200b\u79f0\u4e3a\u200b\u987a\u5e8f\u200b\u5bf9\u200b\u3002\u200b\u5219\u200b\u6709\u5e8f\u200b\u6570\u5217\u200b\u4e2d\u200b\u4e0d\u200b\u5b58\u5728\u200b\u9006\u5e8f\u200b\u5bf9\u200b\uff0c\u200b\u65e0\u5e8f\u200b\u6570\u5217\u200b\u4e2d\u200b\u81f3\u5c11\u200b\u6709\u200b\u4e00\u4e2a\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u3002\u200b\u5982\u679c\u200b\u80fd\u591f\u200b\u901a\u8fc7\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u7684\u200b\u4ea4\u6362\u200b\u4f7f\u5f97\u200b\u6570\u5217\u200b\u4e2d\u200b\u6240\u6709\u200b\u7684\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u8f6c\u4e3a\u200b\u987a\u5e8f\u200b\uff0c\u200b\u5373\u53ef\u200b\u5b8c\u6210\u200b\u5bf9\u200b\u6570\u7ec4\u200b\u7684\u200b\u6392\u5e8f\u200b\u3002\u200b\u8fd9\u662f\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u3002
- \u200b\u8bbe\u200b\u5411\u91cf\u200b\uff08\u200b\u6570\u7ec4\u200b\uff09\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(n\\)\uff0c\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u4e0b\u6807\u200b\u4e3a\u200b\\([0,n)\\)
- \u200b\u6bcf\u200b\u4e00\u6b21\u200b\u626b\u63cf\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u4e2d\u200b\u7684\u200b\u76f8\u90bb\u200b\u6570\u636e\u200b\uff0c\u200b\u82e5\u200b\u4e3a\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u5219\u200b\u4ea4\u6362\u200b\u4e4b\u200b
- \u200b\u626b\u63cf\u200b\u7ed3\u675f\u200b\u540e\u200b\uff0c\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u6700\u5927\u200b\u5143\u7d20\u200b\u79fb\u52a8\u200b\u5230\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u672b\u5c3e\u200b\uff0c\u200b\u5373\u200b\u4e3a\u200b\u5df2\u200b\u6392\u5e8f\u200b
- \u200b\u4e00\u8d9f\u200b\u626b\u63cf\u200b\u540e\u200b\u5c06\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u672b\u5c3e\u200b\u5143\u7d20\u200b\u5212\u5165\u200b\u5df2\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u3002
- \u200b\u91cd\u590d\u200b\u626b\u63cf\u200b\uff0c\u200b\u76f4\u5230\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u957f\u5ea6\u200b\u7f29\u5c0f\u200b\u4e3a\u200b0\uff0c\u200b\u5373\u200b\u5b8c\u6210\u200b\u6392\u5e8f\u200b\u3002
\u200b\u63d0\u524d\u200b\u7ec8\u6b62\u200b\uff1a\u200b\u82e5\u200b\u67d0\u6b21\u200b\u626b\u63cf\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u6ca1\u6709\u200b\u53d1\u751f\u200b\u4ea4\u6362\u200b\uff0c\u200b\u8bf4\u660e\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u5df2\u7ecf\u200b\u6709\u5e8f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u63d0\u524d\u7ed3\u675f\u200b\u7b97\u6cd5\u200b
\u200b\u7531\u4e8e\u200b\u63d0\u524d\u200b\u7ec8\u6b62\u200b\u7684\u200b\u5b58\u5728\u200b\uff0c\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u5728\u200b\u6700\u597d\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)\uff0c\u200b\u5bf9\u5e94\u200b\u8f93\u5165\u200b\u6570\u636e\u200b\u5df2\u7ecf\u200b\u6709\u5e8f\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\u200b\u5e73\u5747\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n^2)\\)\u3002
\u200b\u5728\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u4e2d\u200b\uff0c\u200b\u76f8\u7b49\u200b\u7684\u200b\u5143\u7d20\u200b\u4e0d\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u3002\u200b\u5982\u679c\u200b\u5c06\u200b\u76f8\u7b49\u200b\u7684\u200b\u5143\u7d20\u200b\u89c6\u4e3a\u200b\u9006\u5e8f\u200b\u5bf9\u200b\uff0c\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u5c06\u200b\u5931\u53bb\u200b\u7a33\u5b9a\u6027\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_16","title":"\u5f52\u5e76\u200b\u6392\u5e8f","text":"\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\u91c7\u7528\u200b\u5206\u800c\u6cbb\u4e4b\u200b\u7684\u200b\u65b9\u6cd5\u200b\u5bf9\u200b\u6570\u7ec4\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\uff0c\u200b\u5176\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u9012\u5f52\u200b\u3002\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\u7684\u200b\u7b97\u6cd5\u200b\u8fc7\u7a0b\u200b\u4e3b\u8981\u200b\u5206\u4e3a\u200b\u4e09\u6b65\u200b\uff1a
- \u201c\u200b\u5206\u200b\u201d\uff1a\u200b\u5c06\u200b\u5411\u91cf\u200b\u5212\u5206\u200b\u4e3a\u200b\u4e24\u4e2a\u200b\uff08\u200b\u8fd1\u4f3c\u200b\uff09\u200b\u7b49\u957f\u200b\u7684\u200b\u90e8\u5206\u200b\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(1)\\)
- \u201c\u200b\u6cbb\u200b\u201d\uff1a\u200b\u5bf9\u200b\u4e24\u200b\u90e8\u5206\u200b\u5206\u522b\u200b\u8fdb\u884c\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\uff08\u200b\u5df2\u77e5\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(1\\)\u200b\u7684\u200b\u5411\u91cf\u200b\u662f\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\uff09\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(2\\times T(n/2)\\)
- \u201c\u200b\u5408\u200b\u201d\uff1a\u200b\u5c06\u200b\u6392\u5e8f\u200b\u540e\u200b\u7684\u200b\u4e24\u200b\u90e8\u5206\u200b\u5408\u5e76\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u6709\u5e8f\u200b\u7684\u200b\u6574\u4f53\u200b\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)
- \u200b\u7b97\u6cd5\u200b\u6574\u4f53\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n\\log n)\\)\uff0c\u200b\u5373\u4f7f\u200b\u662f\u200b\u5728\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u6709\u5e8f\u200b\u6216\u200b\u63a5\u8fd1\u200b\u6709\u5e8f\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u3002\u200b\u5f52\u5e76\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)
\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b template <typename T> void Vector<T>::mergeSort( Rank lo, Rank hi ) {\n if ( hi - lo < 2 ) return; //\u200b\u5355\u200b\u5143\u7d20\u200b\u533a\u95f4\u200b\u81ea\u7136\u200b\u6709\u5e8f\u200b\uff0c\u200b\u5426\u5219\u200b...\n int mi = (lo + hi) >> 1; //\u200b\u4ee5\u4e2d\u70b9\u200b\u4e3a\u754c\u200b\n mergeSort( lo, mi ); //\u200b\u5bf9\u200b\u524d\u534a\u6bb5\u200b\u6392\u5e8f\u200b\n mergeSort( mi, hi ); //\u200b\u5bf9\u200b\u540e\u534a\u6bb5\u200b\u6392\u5e8f\u200b\n merge( lo, mi, hi ); //\u200b\u5f52\u5e76\u200b\n}\n
Reference \u200b\u5f52\u5e76\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u5373\u200b\u6309\u200b\u987a\u5e8f\u200b\u904d\u5386\u200b\u4e24\u200b\u90e8\u5206\u200b\uff0c\u200b\u5c06\u200b\u6700\u5c0f\u200b\u7684\u200b\u5199\u5165\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u3002
\u200b\u5b9e\u9645\u200b\u6267\u884c\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\uff0c\u200b\u53ea\u200b\u9700\u200b\u5c06\u200b\u6570\u7ec4\u200b\u7684\u200b\u524d\u534a\u90e8\u200b\u5206\u200b\u590d\u5236\u200b\u4e00\u4efd\u200b\uff0c\u200b\u7136\u540e\u200b\u8fdb\u884c\u200b\u5408\u5e76\u200b\u5373\u53ef\u200b\u3002
- \u200b\u82e5\u200b\u524d\u534a\u90e8\u200b\u5206\u200b\u63d0\u524d\u7ed3\u675f\u200b\uff0c\u200b\u7531\u4e8e\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u7684\u200b\u540e\u200b\u534a\u200b\u90e8\u5206\u200b\u4e0e\u200b\u539f\u200b\u6570\u7ec4\u200b\u7684\u200b\u540e\u200b\u534a\u200b\u90e8\u5206\u200b\u91cd\u5408\u200b\uff0c\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u81ea\u52a8\u200b\u6210\u4e3a\u200b\u6709\u5e8f\u200b
- \u200b\u82e5\u540e\u200b\u534a\u200b\u90e8\u5206\u200b\u63d0\u524d\u7ed3\u675f\u200b\uff0c\u200b\u5c06\u200b\u524d\u534a\u90e8\u200b\u5206\u200b\u5269\u4f59\u200b\u7684\u200b\u6570\u636e\u200b\u590d\u5236\u5230\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u540e\u200b\u534a\u200b\u90e8\u5206\u200b\u5bf9\u5e94\u200b\u4f4d\u7f6e\u200b\u5373\u53ef\u200b
\u200b\u5982\u4e0b\u200b\u56fe\u200b\uff1a
\u200b\u82e5\u200b\u5728\u200b\u5f52\u5e76\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u76f8\u540c\u200b\u5143\u7d20\u200b\uff0c\u200b\u5de6\u4fa7\u200b\u7684\u200b\u5143\u7d20\u200b\u4f18\u5148\u200b\u5f52\u5165\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u4fdd\u8bc1\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\u7684\u200b\u7a33\u5b9a\u6027\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_17","title":"\u4f4d\u200b\u56fe","text":"\u200b\u4f4d\u56fe\u200b\u662f\u200b\u5176\u4e2d\u200b\u5143\u7d20\u200b\u53ea\u80fd\u200b\u53d6\u200b0/1\u200b\u7684\u200b\u5411\u91cf\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u6709\u9650\u200b\u7684\u200b\u6574\u6570\u200b\u96c6\u5408\u200b\\(U\\)\uff0c\u200b\u4f4d\u200b\u56fe\u200b\u6784\u5efa\u200b\u4e86\u200b\\(U\\)\u200b\u7684\u200b\u5b50\u96c6\u200b\\(S\\)\uff0c\u200b\u5176\u4e2d\u200b\\(k\\in S\\)\u200b\u7b49\u4ef7\u200b\u4e8e\u4f4d\u200b\u56fe\u4e2d\u200b\u4e0b\u6807\u200b\u4e3a\u200b\\(k\\)\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u53d6\u503c\u200b\u4e3a\u200b\\(1\\)\u3002\u200b\u4f4d\u200b\u56fe\u200b\u63d0\u4f9b\u200b\u4e86\u200bset()
\u3001get()
\u3001clear()
\u200b\u4e09\u4e2a\u200b\u63a5\u53e3\u200b\uff0c\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u4e8e\u4f4d\u200b\u56fe\u200b\u7684\u200b\u5199\u5165\u200b\u3001\u200b\u67e5\u8be2\u200b\u3001\u200b\u6e05\u9664\u200b\u64cd\u4f5c\u200b\u3002
byte11010011
\u200b\u57fa\u4e8e\u200b\u4f4d\u200b\u8fd0\u7b97\u200b\u7684\u200b\u5b9e\u73b0\u200b\u5982\u4e0b\u200b\uff1a
\u200b\u4f4d\u200b\u56fe\u200b\u65b9\u6cd5\u200b\u5b9e\u73b0\u200b bool test( int k ) { return M[ k >> 3 ] & ( 0x80 >> (k & 0x07) ); }\nvoid set( int k ) { expand( k ); M[ k >> 3 ] |= ( 0x80 >> (k & 0x07) ); }\nvoid clear( int k ) { expand( k ); M[ k >> 3 ] &= ~( 0x80 >> (k & 0x07) ); }\n
Reference \u200b\u8bfb\u53d6\u200b\u5b57\u8282\u200b\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u4f4d\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b&
\u200b\u8fd0\u7b97\u7b26\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u5411\u200b\u5b57\u8282\u200b\u4e2d\u200b\u8bbe\u7f6e\u200b\u67d0\u4e2a\u200b\u4f4d\u4e3a\u200b\\(1\\)\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b|=
\u200b\u8fd0\u7b97\u7b26\u200b\u5b9e\u73b0\u200b\u3002
\u200b\u4f4d\u56fe\u200b\u7684\u200b\u5e94\u7528\u200b\u573a\u666f\u200b\uff1a
- \u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u53bb\u200b\u91cd\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u501f\u52a9\u200b\u4f4d\u200b\u56fe\u200b\u53ef\u4ee5\u200b\u5728\u200b\\(O(n)\\)\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u5185\u200b\u5b8c\u6210\u200b\uff0c\u200b\u540c\u65f6\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u5b8c\u6210\u200b\u76f8\u5e94\u200b\u7684\u200b\u6392\u5e8f\u200b\u64cd\u4f5c\u200b\u3002
- \u200b\u8d28\u6570\u200b\u8ba1\u7b97\u200b\uff1aEratosthenes\u200b\u7b5b\u200b
"},{"location":"coding/dsa/vector-and-list/#_18","title":"\u5feb\u901f\u200b\u521d\u59cb\u5316","text":"\u200b\u5728\u200b\u4e25\u683c\u200b\u610f\u4e49\u200b\u4e0a\u200b\u8bb2\u200b\uff0c\u200b\u5373\u4f7f\u200b\u8c03\u7528\u200bmemset()
\u200b\u51fd\u6570\u200b\uff0c\u200b\u4f4d\u56fe\u200b\u7684\u200b\u521d\u59cb\u5316\u200b\uff08\u200b\u6e05\u7a7a\u200b\uff09\u200b\u4e5f\u200b\u9700\u8981\u200b\\(\\mathcal O(n)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u3002\u200b\u501f\u52a9\u200b\u6821\u9a8c\u200b\u73af\u200b\u7ed3\u6784\u200b\u53ef\u4ee5\u200b\u5c06\u4f4d\u200b\u56fe\u200b\u7684\u200b\u521d\u59cb\u5316\u200b\u590d\u6742\u5ea6\u200b\u7531\u200b\\(\\mathcal O(n)\\)\u200b\u63d0\u9ad8\u200b\u5230\u200b\\(\\mathcal O(1)\\)\uff08\u200b\u4f46\u200b\u76f8\u5e94\u200b\u5730\u200b\uff0c\u200b\u4f4d\u56fe\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u4f4d\u200b\u9700\u8981\u200b\u4e24\u4e2a\u200bint
\u200b\u7c7b\u578b\u200b\u5373\u200b64\u200b\u5b57\u8282\u200b\u8fdb\u884c\u200b\u5b58\u50a8\u200b\uff0c\u200b\u9020\u6210\u200b\u7a7a\u95f4\u200b\u7684\u200b\u5927\u91cf\u200b\u6d6a\u8d39\u200b\uff09\u3002
\u200b\u5c06\u4f4d\u200b\u56fe\u200b\u7684\u200b\u6570\u7ec4\u200b\u62c6\u200b\u5206\u4e3a\u200bA[]
\u3001B[]
\u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u7b2c\u200bk
\u200b\u4f4d\u200b\uff0c\u200b\u6ee1\u8db3\u200b\uff1a
\u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u6784\u6210\u200b\u4e86\u200b\u76f8\u4e92\u200b\u6821\u9a8c\u200b\u7684\u200b\u5173\u7cfb\u200b\uff0c\u200b\u6309\u7167\u200b\u4e0b\u6807\u200b\u67e5\u8be2\u200b\uff0c\u200b\u7b26\u5408\u200b\u6821\u9a8c\u200b\u6761\u4ef6\u200b\u7684\u200b\u4e0b\u6807\u200b\u5b58\u50a8\u200b\u7684\u200b\u4f4d\u4e3a\u200b1
\uff0c\u200b\u5426\u5219\u200b\u4e3a\u200b0
\u3002
0AB0112512234567
\u200b\u53cc\u200b\u6570\u7ec4\u200b\u6a21\u5f0f\u200b\u4e0b\u200b\uff0c\u200b\u6570\u7ec4\u200bB
\u200b\u4e3a\u200b\u7c7b\u4f3c\u200b\u4e8e\u6808\u200b\u7684\u200b\u7ed3\u6784\u200b\uff0c\u200b\u4ece\u200b\u5f00\u5934\u200b\u9010\u6e10\u200b\u5411\u200b\u540e\u200b\u5ef6\u4f38\u200b\uff0c\u200b\u7ef4\u62a4\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200btop
\u200b\u8bb0\u5f55\u200bB
\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u6570\u91cf\u200b\u3002\u200b\u6570\u7ec4\u200bA
\u200b\u968f\u673a\u200b\u8bbf\u95ee\u200b\u3002
set(k)
\uff1a\u200b\u5728\u200b\u6570\u7ec4\u200bB
\u200b\u4e2d\u200b\u8ffd\u52a0\u200b\u4e00\u4e2a\u200b\u503c\u4e3a\u200bk
\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u5728\u200bA[k]
\u200b\u4e2d\u200b\u5b58\u50a8\u200bB
\u200b\u4e2d\u200b\u5bf9\u5e94\u200b\u5143\u7d20\u200b\u7684\u200b\u4e0b\u6807\u200b\uff1b get(k)
\uff1a\u200b\u82e5\u200bB[A[k]] == k
\u200b\u4e14\u200bA[k]
\u200b\u5c0f\u4e8e\u200b\u6808\u9876\u200b\u4f4d\u7f6e\u200b\u5219\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5426\u5219\u200b\u4e3a\u200b\u5047\u200b\uff1b clear()
\uff1a\u200b\u6e05\u7a7a\u200b\u6570\u7ec4\u200bB
\uff0c\u200b\u5373\u5c06\u200btop
\u200b\u7f6e\u200b0
\u3002 remove(k)
\uff1a\u200b\u5148\u200b\u5c06\u200bA-B
\u200b\u6821\u9a8c\u200b\u73af\u4e2d\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u5bf9\u200b\uff08\u200b\u5bf9\u5e94\u200bB[top - 1]
\uff09\u200b\u590d\u5236\u5230\u200bB[A[k]]
\u200b\u7684\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u518d\u200btop--
\u200b\u5220\u9664\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u3002
\u201c\u200b\u6821\u9a8c\u200b\u73af\u200b\u201d\u200b\u4f4d\u56fe\u200b\u7684\u200b\u5b9e\u73b0\u200b\uff1a
\u200b\u4f4d\u200b\u56fe\u200b void set(int k)\n{\n A[k] = top;\n B[top++] = A[k];\n}\nint get(int k)\n{\n return B[A[k]] == k && A[k] < top;\n}\nvoid remove(int k)\n{\n A[B[--top]] = k;\n B[k] = B[top];\n}\nvoid clear(int k)\n{\n top = 0;\n}\n
"},{"location":"coding/dsa/vector-and-list/#_19","title":"\u5217\u8868","text":"\u200b\u5411\u91cf\u200b\u662f\u200b\u9759\u6001\u200b\u7684\u200b\u6570\u636e\u7ed3\u6784\u200b\uff0c\u200b\u4e00\u6b21\u200b\u53ea\u80fd\u200b\u5206\u914d\u200b\u56fa\u5b9a\u200b\u957f\u5ea6\u200b\u7684\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u5411\u91cf\u200b\u7684\u200b\u6269\u589e\u200b\u9700\u8981\u200b\u5206\u914d\u200b\u4e00\u5757\u200b\u65b0\u200b\u7684\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u7136\u540e\u200b\u5c06\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u590d\u5236\u5230\u200b\u65b0\u200b\u7684\u200b\u5411\u91cf\u200b\u4e2d\u200b\u3002\u200b\u800c\u200b\u5217\u8868\u200b\u4e0e\u200b\u4e4b\u200b\u4e0d\u540c\u200b\uff0c\u200b\u5217\u8868\u200b\u7684\u200b\u5143\u7d20\u200b\u53ef\u4ee5\u200b\u52a8\u6001\u5206\u914d\u200b\uff0c\u200b\u5217\u8868\u200b\u7684\u200b\u6269\u589e\u200b\u53ea\u200b\u9700\u8981\u200b\u5206\u914d\u200b\u6269\u589e\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u7a7a\u95f4\u200b\u5373\u53ef\u200b\u3002
\u200b\u5217\u8868\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u6392\u5217\u200b\u4e0e\u200b\u5217\u8868\u200b\u5143\u7d20\u200b\u5728\u200b\u5185\u5b58\u200b\u4e2d\u200b\u7684\u200b\u6392\u5217\u200b\u987a\u5e8f\u200b\u6ca1\u6709\u200b\u5fc5\u7136\u200b\u7684\u200b\u5173\u7cfb\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u5143\u7d20\u200b\u5728\u200b\u903b\u8f91\u200b\u4e0a\u200b\u5f62\u6210\u200b\u4e00\u4e2a\u200b\u5e8f\u5217\u200b\u3002\u200b\u5217\u8868\u200b\u7684\u200b\u5143\u7d20\u200b\u53c8\u79f0\u200b\u8282\u70b9\u200b\uff0c\u200b\u76f8\u90bb\u200b\u7684\u200b\u8282\u70b9\u200b\u4e92\u79f0\u200b\u524d\u9a71\u200b\u4e0e\u200b\u540e\u7ee7\u200b\u3002\u200b\u6ca1\u6709\u200b\u524d\u9a71\u200b\u7684\u200b\u8282\u70b9\u200b\u79f0\u4e3a\u200b\u9996\u200b\u8282\u70b9\u200b\uff0c\u200b\u6ca1\u6709\u200b\u540e\u7ee7\u200b\u7684\u200b\u8282\u70b9\u200b\u79f0\u4e3a\u200b\u5c3e\u200b\u8282\u70b9\u200b\u3002\u200b\u8282\u70b9\u200b\u9700\u8981\u200b\u989d\u5916\u200b\u7684\u200b\u7a7a\u95f4\u200b\u8bb0\u5f55\u200b\u76f8\u90bb\u200b\u8282\u70b9\u200b\u7684\u200b\u5730\u5740\u200b\u4ee5\u200b\u6784\u5efa\u200b\u903b\u8f91\u200b\u4e0a\u200b\u7684\u200b\u987a\u5e8f\u200b\u5173\u7cfb\u200b\u3002
\u200b\u8fd9\u79cd\u200b\u65b9\u6cd5\u200b\u7684\u200b\u7f3a\u70b9\u200b\u5728\u4e8e\u200b\u5217\u8868\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u4e0d\u80fd\u200b\u76f4\u63a5\u200b\u6309\u7167\u200b\u4e0b\u6807\u200b\u8fdb\u884c\u200b\u8bbf\u95ee\u200b\uff0c\u200b\u53ea\u80fd\u200b\u4ece\u200b\u5217\u8868\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u5f00\u59cb\u200b\uff0c\u200b\u4f9d\u5e8f\u200b\u8bbf\u95ee\u200b\u8282\u70b9\u200b\u76f4\u5230\u200b\u8bbf\u95ee\u200b\u5230\u200b\u5bf9\u5e94\u200b\u4e0b\u200b\u6807\u7684\u200b\u8282\u70b9\u200b\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)
"},{"location":"coding/dsa/vector-and-list/#_20","title":"\u8282\u70b9\u200b\u7c7b\u578b","text":"\u200b\u4e3a\u200b\u5b9e\u73b0\u200b\u5217\u8868\u200b\u7684\u200b\u5404\u9879\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u8282\u70b9\u200b\u7c7b\u578b\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200b\u4ee5\u4e0b\u200b\u63a5\u53e3\u200b\uff1a
- \u200b\u83b7\u53d6\u200b\u4e0e\u200b\u8bbe\u7f6e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u524d\u9a71\u200b
- \u200b\u83b7\u53d6\u200b\u4e0e\u200b\u8bbe\u7f6e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u540e\u7ee7\u200b
- \u200b\u83b7\u53d6\u200b\u4e0e\u200b\u8bbe\u7f6e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u53d6\u503c\u200b
- \u200b\u63d2\u5165\u200b\u524d\u9a71\u200b\u8282\u70b9\u200b
- \u200b\u63d2\u5165\u200b\u540e\u7ee7\u200b\u8282\u70b9\u200b
\u200b\u6ce8\u610f\u200b\uff1a \u200b\u53cc\u5411\u200b\u94fe\u8868\u200b\u5728\u200b\u5b9e\u73b0\u200b\u65f6\u6709\u200b\u6f5c\u5728\u200b\u7684\u200b\u6570\u636e\u200b\u4e0d\u200b\u4e00\u81f4\u200b\u7684\u200b\u98ce\u9669\u200b\u3002\uff08\u200b\u524d\u9a71\u200b\u8282\u70b9\u200b\u7684\u200b\u540e\u7ee7\u200b\u4e0d\u200b\u7b49\u4e8e\u200b\u540e\u7ee7\u200b\u8282\u70b9\u200b\u7684\u200b\u524d\u9a71\u200b\uff09
\u200b\u5982\u4e0b\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u7c7b\u200b\u7684\u200b\u793a\u4f8b\u200b\u63a5\u53e3\u200b\uff0c\u200b\u6ca1\u6709\u200b\u5305\u542b\u200b\u63a5\u53e3\u200b\u7684\u200b\u5177\u4f53\u200b\u5b9e\u73b0\u200b\u3002
\u200b\u5217\u8868\u200b\u8282\u70b9\u200b\u7c7b\u200b /******************************************************************************************\n * Data Structures in C++\n * ISBN: 7-302-33064-6 & 7-302-33065-3 & 7-302-29652-2 & 7-302-26883-3\n * Junhui DENG, deng@tsinghua.edu.cn\n * Computer Science & Technology, Tsinghua University\n * Copyright (c) 2003-2020. All rights reserved.\n ******************************************************************************************/\n\ntypedef int Rank; //\u200b\u79e9\u200b\n#define ListNodePosi(T) ListNode<T>* //\u200b\u5217\u8868\u200b\u8282\u70b9\u200b\u4f4d\u7f6e\u200b\n\ntemplate <typename T> struct ListNode { //\u200b\u5217\u8868\u200b\u8282\u70b9\u200b\u6a21\u677f\u200b\u7c7b\u200b\uff08\u200b\u4ee5\u200b\u53cc\u5411\u200b\u94fe\u8868\u200b\u5f62\u5f0f\u200b\u5b9e\u73b0\u200b\uff09\n// \u200b\u6210\u5458\u200b\n T data; ListNodePosi(T) pred; ListNodePosi(T) succ; //\u200b\u6570\u503c\u200b\u3001\u200b\u524d\u9a71\u200b\u3001\u200b\u540e\u7ee7\u200b\n// \u200b\u6784\u9020\u51fd\u6570\u200b\n ListNode() {} //\u200b\u9488\u5bf9\u200bheader\u200b\u548c\u200btrailer\u200b\u7684\u200b\u6784\u9020\u200b\n ListNode ( T e, ListNodePosi(T) p = NULL, ListNodePosi(T) s = NULL )\n : data ( e ), pred ( p ), succ ( s ) {} //\u200b\u9ed8\u8ba4\u200b\u6784\u9020\u200b\u5668\u200b\n// \u200b\u64cd\u4f5c\u200b\u63a5\u53e3\u200b\n ListNodePosi(T) insertAsPred ( T const& e ); //\u200b\u7d27\u9760\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u4e4b\u524d\u200b\u63d2\u5165\u200b\u65b0\u200b\u8282\u70b9\u200b\n ListNodePosi(T) insertAsSucc ( T const& e ); //\u200b\u7d27\u968f\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u4e4b\u540e\u200b\u63d2\u5165\u200b\u65b0\u200b\u8282\u70b9\u200b\n};\n
Reference"},{"location":"coding/dsa/vector-and-list/#_21","title":"\u63d2\u5165\u200b\u4e0e\u200b\u5220\u9664","text":"\u200b\u5411\u200b\u5217\u8868\u200b\u4e2d\u200b\u63d2\u5165\u200b\u6570\u636e\u200b\u9700\u8981\u200b\u5982\u4e0b\u200b\u8fc7\u7a0b\u200b\uff1a
- \u200b\u5b9a\u4f4d\u200b\u5230\u200b\u8282\u70b9\u200b
- \u200b\u5206\u914d\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u8282\u70b9\u200b
- \u200b\u66f4\u65b0\u200b\u8282\u70b9\u200b\u4e4b\u95f4\u200b\u7684\u200b\u6307\u9488\u200b\uff0c\u200b\u5c06\u200b\u65b0\u200b\u8282\u70b9\u200b\u4e0e\u200b\u5176\u4ed6\u200b\u8282\u70b9\u200b\u76f8\u8fde\u63a5\u200b
\u200b\u5220\u9664\u200b\u8fc7\u7a0b\u200b\u662f\u200b\u63d2\u5165\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u53cd\u5411\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u66f4\u65b0\u200b\u8282\u70b9\u200b\u4e4b\u95f4\u200b\u6307\u9488\u200b\uff0c\u200b\u5c06\u200b\u5220\u9664\u200b\u8282\u70b9\u200b\u6392\u9664\u200b\u5728\u5916\u200b\u5373\u53ef\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_22","title":"\u67e5\u627e\u200b\u4e0e\u200b\u53bb\u200b\u91cd","text":"\u200b\u65e0\u5e8f\u200b\u5217\u8868\u200b\u7684\u200b\u67e5\u627e\u200b\u4e0e\u200b\u53bb\u200b\u91cd\u200b\u64cd\u4f5c\u200b\u4e0e\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u67e5\u627e\u200b\u4e0e\u200b\u53bb\u200b\u91cd\u200b\u64cd\u4f5c\u200b\u7684\u200b\u57fa\u672c\u601d\u8def\u200b\u76f8\u540c\u200b\uff0c\u200b\u6b64\u5904\u200b\u4e0d\u518d\u200b\u8d58\u8ff0\u200b\u3002
\u200b\u6709\u200b\u5e8f\u5217\u8868\u200b\u7684\u200b\u67e5\u627e\u200b\u4e0d\u80fd\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u800c\u200b\u53ea\u80fd\u200b\u987a\u5e8f\u200b\u67e5\u627e\u200b\u3002
\u200b\u6709\u200b\u5e8f\u5217\u8868\u200b\u7684\u200b\u53bb\u200b\u91cd\u200b\uff1a\u200b\u53cd\u590d\u200b\u8003\u5bdf\u200b\u76f8\u90bb\u200b\u7684\u200b\u8282\u70b9\u200b\uff0c\u200b\u82e5\u200b\u8282\u70b9\u200b\u76f8\u540c\u200b\uff0c\u200b\u5219\u200b\u5220\u9664\u200b\u540e\u8fb9\u200b\u7684\u200b\u8282\u70b9\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u8003\u5bdf\u200b\uff0c\u200b\u5426\u5219\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u5411\u200b\u540e\u200b\u79fb\u52a8\u200b\uff0c\u200b\u91cd\u590d\u200b\u8003\u5bdf\u200b\u8fc7\u7a0b\u200b\u3002\u200b\u76f4\u5230\u200b\u5217\u8868\u200b\u5230\u8fbe\u200b\u7ed3\u5c3e\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u7ed3\u675f\u200b\u3002
"},{"location":"coding/leetcode/","title":"Leetcode \u200b\u9898\u76ee","text":"\u200b\u6309\u200b\u6807\u7b7e\u200b\u5206\u7c7b\u200b\u7684\u200b\u9898\u76ee\u200b\u5217\u8868\u200b\u53ef\u4ee5\u200b\u53c2\u89c1\u200b\u8fd9\u91cc\u200b
\u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 1. \u200b\u4e24\u6570\u200b\u4e4b\u200b\u548c\u200b 2. \u200b\u4e24\u200b\u6570\u200b\u76f8\u52a0\u200b 3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b 7. \u200b\u6574\u6570\u200b\u53cd\u8f6c\u200b 8. \u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u6574\u6570\u200b (atoi) 9. \u200b\u56de\u6587\u200b\u6570\u200b 11. \u200b\u76db\u200b\u6700\u591a\u6c34\u200b\u7684\u200b\u5bb9\u5668\u200b 13. \u200b\u7f57\u9a6c\u6570\u5b57\u200b\u8f6c\u200b\u6574\u6570\u200b 14. \u200b\u6700\u957f\u200b\u516c\u5171\u200b\u524d\u7f00\u200b 17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b 19. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u7684\u200b\u5012\u6570\u7b2c\u200b N \u200b\u4e2a\u200b\u7ed3\u70b9\u200b 20. \u200b\u6709\u6548\u200b\u7684\u200b\u62ec\u53f7\u200b 21. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u94fe\u8868\u200b 22. \u200b\u62ec\u53f7\u200b\u751f\u6210\u200b 23. \u200b\u5408\u5e76\u200bK\u200b\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868\u200b 24. \u200b\u4e24\u200b\u4e24\u200b\u4ea4\u6362\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b 25. K \u200b\u4e2a\u200b\u4e00\u7ec4\u200b\u7ffb\u8f6c\u200b\u94fe\u8868\u200b 26. \u200b\u5220\u9664\u200b\u6709\u5e8f\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u91cd\u590d\u200b\u9879\u200b 27. \u200b\u79fb\u9664\u200b\u5143\u7d20\u200b 28. \u200b\u5b9e\u73b0\u200b strStr() 35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b 36. \u200b\u6709\u6548\u200b\u7684\u200b\u6570\u72ec\u200b 37. \u200b\u89e3\u6570\u200b\u72ec\u200b 38. \u200b\u5916\u89c2\u200b\u6570\u5217\u200b 42. \u200b\u63a5\u200b\u96e8\u6c34\u200b 43. \u200b\u5b57\u7b26\u4e32\u200b\u76f8\u4e58\u200b 46. \u200b\u5168\u200b\u6392\u5217\u200b 48. \u200b\u65cb\u8f6c\u200b\u56fe\u50cf\u200b 50. Pow(x, n) 53. \u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c\u200b 55. \u200b\u8df3\u8dc3\u200b\u6e38\u620f\u200b 56. \u200b\u5408\u5e76\u200b\u533a\u95f4\u200b 59. \u200b\u87ba\u65cb\u200b\u77e9\u9635\u200b II 61. \u200b\u65cb\u8f6c\u200b\u94fe\u8868\u200b 62. \u200b\u4e0d\u540c\u200b\u8def\u5f84\u200b 64. \u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 66. \u200b\u52a0\u4e00\u200b 69. x \u200b\u7684\u200b\u5e73\u65b9\u6839\u200b 70. \u200b\u722c\u697c\u68af\u200b 73. \u200b\u77e9\u9635\u200b\u7f6e\u200b\u96f6\u200b 74. \u200b\u641c\u7d22\u200b\u4e8c\u7ef4\u200b\u77e9\u9635\u200b 75. \u200b\u989c\u8272\u200b\u5206\u7c7b\u200b 78. \u200b\u5b50\u96c6\u200b 79. \u200b\u5355\u8bcd\u200b\u641c\u7d22\u200b 87. \u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b 88. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u6570\u7ec4\u200b 90. \u200b\u5b50\u96c6\u200b II 92. \u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b II 98. \u200b\u9a8c\u8bc1\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b 101. \u200b\u5bf9\u79f0\u200b\u4e8c\u53c9\u6811\u200b 102. \u200b\u4e8c\u53c9\u6811\u200b\u7684\u200b\u5c42\u5e8f\u200b\u904d\u5386\u200b 115. \u200b\u4e0d\u540c\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b 118. \u200b\u6768\u8f89\u4e09\u89d2\u200b 119. \u200b\u6768\u8f89\u4e09\u89d2\u200b II 120. \u200b\u4e09\u89d2\u5f62\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 121. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b 122. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b II 125. \u200b\u9a8c\u8bc1\u200b\u56de\u6587\u200b\u4e32\u200b 136. \u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u7684\u200b\u6570\u5b57\u200b 150. \u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u6c42\u503c\u200b 155. \u200b\u6700\u5c0f\u200b\u6808\u200b 189. \u200b\u65cb\u8f6c\u200b\u6570\u7ec4\u200b 198. \u200b\u6253\u5bb6\u52ab\u820d\u200b 204. \u200b\u8ba1\u6570\u200b\u8d28\u6570\u200b 206. \u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b 217. \u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b 234. \u200b\u56de\u6587\u200b\u94fe\u8868\u200b 237. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b 242. \u200b\u6709\u6548\u200b\u7684\u200b\u5b57\u6bcd\u200b\u5f02\u4f4d\u200b\u8bcd\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570\u200b 341. \u200b\u6241\u5e73\u5316\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u8fed\u4ee3\u200b\u5668\u200b 344. \u200b\u53cd\u8f6c\u200b\u5b57\u7b26\u4e32\u200b 350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II 368. \u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b 377. \u200b\u7ec4\u5408\u200b\u603b\u548c\u200b \u2163 384. \u200b\u6253\u4e71\u200b\u6570\u7ec4\u200b 387. \u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u5b57\u7b26\u200b 403. \u200b\u9752\u86d9\u200b\u8fc7\u6cb3\u200b 433. \u200b\u6700\u5c0f\u200b\u57fa\u56e0\u200b\u53d8\u5316\u200b 488. \u200b\u7956\u739b\u200b\u6e38\u620f\u200b 509. \u200b\u6590\u6ce2\u200b\u90a3\u200b\u5951\u6570\u200b 779. \u200b\u7b2c\u200bK\u200b\u4e2a\u200b\u8bed\u6cd5\u200b\u7b26\u53f7\u200b 781. \u200b\u68ee\u6797\u200b\u4e2d\u200b\u7684\u200b\u5154\u5b50\u200b 917. \u200b\u4ec5\u4ec5\u200b\u53cd\u8f6c\u200b\u5b57\u6bcd\u200b 1006. \u200b\u7b28\u200b\u9636\u4e58\u200b 1011. \u200b\u5728\u200b D \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u5305\u88f9\u200b\u7684\u200b\u80fd\u529b\u200b 1283. \u200b\u4f7f\u200b\u7ed3\u679c\u200b\u4e0d\u200b\u8d85\u8fc7\u200b\u9608\u503c\u200b\u7684\u200b\u6700\u5c0f\u200b\u9664\u6570\u200b 1300. \u200b\u8f6c\u53d8\u200b\u6570\u7ec4\u200b\u540e\u200b\u6700\u200b\u63a5\u8fd1\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u6570\u7ec4\u200b\u548c\u200b 1603. \u200b\u8bbe\u8ba1\u200b\u505c\u8f66\u200b\u7cfb\u7edf\u200b 1835. \u200b\u6240\u6709\u200b\u6570\u5bf9\u200b\u6309\u4f4d\u200b\u4e0e\u200b\u7ed3\u679c\u200b\u7684\u200b\u5f02\u6216\u200b\u548c"},{"location":"coding/leetcode/1/","title":"1. \u200b\u4e24\u6570\u200b\u4e4b\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/1/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200bnums
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u503c\u200btarget
\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u5728\u200b\u8be5\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u627e\u51fa\u200b\u548c\u200b\u4e3a\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u90a3\u200b\u00a0\u200b\u4e24\u4e2a\u200b\u00a0\u200b\u6574\u6570\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u4ed6\u4eec\u200b\u7684\u200b\u6570\u7ec4\u200b\u4e0b\u6807\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u6bcf\u79cd\u200b\u8f93\u5165\u200b\u53ea\u4f1a\u200b\u5bf9\u5e94\u200b\u4e00\u4e2a\u200b\u7b54\u6848\u200b\u3002\u200b\u4f46\u662f\u200b\uff0c\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u540c\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u4e0d\u80fd\u200b\u4f7f\u7528\u200b\u4e24\u904d\u200b\u3002
\u200b\u793a\u4f8b\u200b:
\u200b\u7ed9\u5b9a\u200b nums = [2, 7, 11, 15], target = 9\n\n\u200b\u56e0\u4e3a\u200b nums[0] + nums[1] = 2 + 7 = 9\n\u200b\u6240\u4ee5\u200b\u8fd4\u56de\u200b [0, 1]\n
Reference
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/1/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a
\u200b\u5c06\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u5b58\u50a8\u200b\u5728\u200b\u54c8\u5e0c\u200b\u8868\u4e2d\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u5728\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u67e5\u627e\u200b\u76ee\u6807\u503c\u200b\u4e0e\u200b\u5f53\u524d\u200b\u503c\u4e4b\u5dee\u200b\u662f\u5426\u200b\u5728\u200b\u54c8\u5e0c\u200b\u8868\u4e2d\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\n#define MAX(a, b) (a > b ? a : b)\n#define MIN(a, b) (a < b ? a : b)\nstruct cell\n{\n int value;\n int flag;\n};\nint* twoSum(int* nums, int numsSize, int target, int* returnSize){\n *returnSize = 2;\n int i = 0, mapSize = numsSize * 2, cur, *ret = malloc(sizeof(int) * 2), targetval, j = 0;\n struct cell *hashMap = (struct cell *)memset(malloc(sizeof(struct cell) * mapSize), 0, sizeof(struct cell) * mapSize);\n for (i = 0; i < numsSize; i++)\n {\n cur = (nums[i] > 0 ? nums[i] : -nums[i]) % mapSize;\n while(hashMap[cur].flag != 0 && hashMap[cur].value != nums[i])\n {\n cur++;\n cur = cur == mapSize ? 0 : cur;\n }\n if (hashMap[cur].flag == 0)\n hashMap[cur].value = nums[i];\n hashMap[cur].flag++;\n }\n for (i = 0; i < numsSize; i++)\n {\n targetval = target - nums[i];\n cur = (targetval > 0 ? targetval : -targetval) % mapSize;\n while(hashMap[cur].flag != 0 && hashMap[cur].value != targetval)\n {\n cur++;\n cur = cur == mapSize ? 0 : cur;\n }\n if (hashMap[cur].value == targetval)\n {\n for (j = 0; j < numsSize; j++)\n if (nums[j] == targetval && j != i)\n break;\n if (j != numsSize)\n break;\n }\n }\n ret[0] = MIN(i, j);\n ret[1] = MAX(i, j);\n if (nums[i] + nums[j] == target)\n return ret;\n *returnSize = 0;\n return NULL;\n}\n
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/1006/","title":"1006. \u200b\u7b28\u200b\u9636\u4e58","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/1006/#_1","title":"\u9898\u76ee","text":"\u200b\u901a\u5e38\u200b\uff0c\u200b\u6b63\u6574\u6570\u200b n
\u200b\u7684\u200b\u9636\u4e58\u200b\u662f\u200b\u6240\u6709\u200b\u5c0f\u4e8e\u200b\u6216\u200b\u7b49\u4e8e\u200b n
\u200b\u7684\u200b\u6b63\u6574\u6570\u200b\u7684\u200b\u4e58\u79ef\u200b\u3002\u200b\u4f8b\u5982\u200b\uff0cfactorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
\u3002
\u200b\u76f8\u53cd\u200b\uff0c\u200b\u6211\u4eec\u200b\u8bbe\u8ba1\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u7b28\u200b\u9636\u4e58\u200b clumsy
\uff1a\u200b\u5728\u200b\u6574\u6570\u200b\u7684\u200b\u9012\u51cf\u200b\u5e8f\u5217\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u4ee5\u200b\u4e00\u4e2a\u200b\u56fa\u5b9a\u200b\u987a\u5e8f\u200b\u7684\u200b\u64cd\u4f5c\u7b26\u200b\u5e8f\u5217\u200b\u6765\u200b\u4f9d\u6b21\u200b\u66ff\u6362\u200b\u539f\u6709\u200b\u7684\u200b\u4e58\u6cd5\u200b\u64cd\u4f5c\u7b26\u200b\uff1a\u200b\u4e58\u6cd5\u200b(*)\uff0c\u200b\u9664\u6cd5\u200b(/)\uff0c\u200b\u52a0\u6cd5\u200b(+)\u200b\u548c\u200b\u51cf\u6cd5\u200b(-)\u3002
\u200b\u4f8b\u5982\u200b\uff0cclumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1
\u3002\u200b\u7136\u800c\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u8fd0\u7b97\u200b\u4ecd\u7136\u200b\u4f7f\u7528\u200b\u901a\u5e38\u200b\u7684\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u200b\u987a\u5e8f\u200b\uff1a\u200b\u6211\u4eec\u200b\u5728\u200b\u4efb\u4f55\u200b\u52a0\u200b\u3001\u200b\u51cf\u200b\u6b65\u9aa4\u200b\u4e4b\u524d\u200b\u6267\u884c\u200b\u6240\u6709\u200b\u7684\u200b\u4e58\u6cd5\u200b\u548c\u200b\u9664\u6cd5\u200b\u6b65\u9aa4\u200b\uff0c\u200b\u5e76\u4e14\u200b\u6309\u200b\u4ece\u5de6\u5230\u53f3\u200b\u5904\u7406\u200b\u4e58\u6cd5\u200b\u548c\u200b\u9664\u6cd5\u200b\u6b65\u9aa4\u200b\u3002
\u200b\u53e6\u5916\u200b\uff0c\u200b\u6211\u4eec\u200b\u4f7f\u7528\u200b\u7684\u200b\u9664\u6cd5\u200b\u662f\u200b\u5730\u677f\u200b\u9664\u6cd5\u200b\uff08floor division\uff09\uff0c\u200b\u6240\u4ee5\u200b\u00a010 * 9 / 8
\u00a0\u200b\u7b49\u4e8e\u200b\u00a011
\u3002\u200b\u8fd9\u200b\u4fdd\u8bc1\u200b\u7ed3\u679c\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u3002
\u200b\u5b9e\u73b0\u200b\u4e0a\u9762\u200b\u5b9a\u4e49\u200b\u7684\u200b\u7b28\u200b\u51fd\u6570\u200b\uff1a\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b N
\uff0c\u200b\u5b83\u200b\u8fd4\u56de\u200b N
\u200b\u7684\u200b\u7b28\u200b\u9636\u4e58\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a4\n\u200b\u8f93\u51fa\u200b\uff1a7\n\u200b\u89e3\u91ca\u200b\uff1a7 = 4 * 3 / 2 + 1\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1a10\n\u200b\u8f93\u51fa\u200b\uff1a12\n\u200b\u89e3\u91ca\u200b\uff1a12 = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= N <= 10000
-2^31 <= answer <= 2^31 - 1
\uff08\u200b\u7b54\u6848\u200b\u4fdd\u8bc1\u200b\u7b26\u5408\u200b 32
\u200b\u4f4d\u200b\u6574\u6570\u200b\u3002\uff09
Reference
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/1006/#_2","title":"\u9898\u89e3","text":"\u200b\u5bf9\u200b\u8ba1\u7b97\u200b\u8fc7\u7a0b\u200b\u8fdb\u884c\u200b\u6a21\u62df\u200b\u5373\u53ef\u200b\uff1a
int clumsy(int N){\n int ret = 0, i = N;\n bool flag = true, minus = false;\n for (i = N; i > 0;)\n {\n if (flag)\n {\n if (i >= 3)\n ret += (minus ? -1 : 1) * i * (i - 1) / (i - 2);\n else if (i == 2)\n ret += (minus ? -1 : 1) * i * (i - 1);\n else if (i == 1)\n ret += (minus ? -1 : 1) * i;\n i -= 3;\n }\n else\n ret += i--;\n flag = !flag;\n minus = true;\n }\n return ret;\n}\n
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/101/","title":"101. \u200b\u5bf9\u79f0\u200b\u4e8c\u53c9\u6811","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/101/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u4e8c\u53c9\u6811\u200b\uff0c\u200b\u68c0\u67e5\u200b\u5b83\u200b\u662f\u5426\u662f\u200b\u955c\u50cf\u200b\u5bf9\u79f0\u200b\u7684\u200b\u3002
\u200b\u4f8b\u5982\u200b\uff0c\u200b\u4e8c\u53c9\u6811\u200b[1,2,2,3,4,4,3]
\u200b\u662f\u200b\u5bf9\u79f0\u200b\u7684\u200b\u3002
1\n / \\\n 2 2\n / \\ / \\\n3 4 4 3\n
\u200b\u4f46\u662f\u200b\u4e0b\u9762\u200b\u8fd9\u4e2a\u200b[1,2,2,null,3,null,3]
\u200b\u5219\u200b\u4e0d\u662f\u200b\u955c\u50cf\u200b\u5bf9\u79f0\u200b\u7684\u200b:
1\n / \\\n 2 2\n \\ \\\n 3 3\n
\u200b\u8fdb\u9636\u200b\uff1a
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u8fd0\u7528\u200b\u9012\u5f52\u200b\u548c\u200b\u8fed\u4ee3\u200b\u4e24\u79cd\u200b\u65b9\u6cd5\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\u5417\u200b\uff1f
Reference
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/101/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u9012\u5f52\u200b\u5224\u65ad\u200b\u4e24\u4e2a\u200b\u6839\u200b\u8282\u70b9\u200b\u662f\u5426\u200b\u6210\u200b\u955c\u50cf\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for a binary tree node.\n * struct TreeNode {\n * int val;\n * struct TreeNode *left;\n * struct TreeNode *right;\n * };\n */\nbool isMirrored(struct TreeNode *root1, struct TreeNode *root2)\n{\n if (!root1 || !root2)\n return root1 == root2;\n if (root1->val != root2->val)\n return false;\n return isMirrored(root1->left, root2->right) && isMirrored(root2->left, root1->right);\n}\n\nbool isSymmetric(struct TreeNode* root){\n if (root == NULL)\n return true;\n return isMirrored(root->left, root->right);\n}\n
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/1011/","title":"1011. \u200b\u5728\u200b D \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u5305\u88f9\u200b\u7684\u200b\u80fd\u529b","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1011/#_1","title":"\u9898\u76ee","text":"\u200b\u4f20\u9001\u5e26\u200b\u4e0a\u200b\u7684\u200b\u5305\u88f9\u200b\u5fc5\u987b\u200b\u5728\u200b D
\u200b\u5929\u5185\u200b\u4ece\u200b\u4e00\u4e2a\u200b\u6e2f\u53e3\u200b\u8fd0\u9001\u200b\u5230\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u6e2f\u53e3\u200b\u3002
\u200b\u4f20\u9001\u5e26\u200b\u4e0a\u200b\u7684\u200b\u7b2c\u200b i
\u00a0\u200b\u4e2a\u200b\u5305\u88f9\u200b\u7684\u200b\u91cd\u91cf\u200b\u4e3a\u200b\u00a0weights[i]
\u3002\u200b\u6bcf\u200b\u4e00\u5929\u200b\uff0c\u200b\u6211\u4eec\u200b\u90fd\u200b\u4f1a\u200b\u6309\u200b\u7ed9\u51fa\u200b\u91cd\u91cf\u200b\u7684\u200b\u987a\u5e8f\u200b\u5f80\u200b\u4f20\u9001\u5e26\u200b\u4e0a\u200b\u88c5\u8f7d\u200b\u5305\u88f9\u200b\u3002\u200b\u6211\u4eec\u200b\u88c5\u8f7d\u200b\u7684\u200b\u91cd\u91cf\u200b\u4e0d\u4f1a\u200b\u8d85\u8fc7\u200b\u8239\u200b\u7684\u200b\u6700\u5927\u200b\u8fd0\u8f7d\u200b\u91cd\u91cf\u200b\u3002
\u200b\u8fd4\u56de\u200b\u80fd\u200b\u5728\u200b D
\u200b\u5929\u5185\u200b\u5c06\u200b\u4f20\u9001\u5e26\u200b\u4e0a\u200b\u7684\u200b\u6240\u6709\u200b\u5305\u88f9\u200b\u9001\u8fbe\u200b\u7684\u200b\u8239\u200b\u7684\u200b\u6700\u4f4e\u200b\u8fd0\u8f7d\u200b\u80fd\u529b\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aweights = [1,2,3,4,5,6,7,8,9,10], D = 5\n\u200b\u8f93\u51fa\u200b\uff1a15\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u8239\u8236\u200b\u6700\u4f4e\u200b\u8f7d\u91cd\u200b 15 \u200b\u5c31\u200b\u80fd\u591f\u200b\u5728\u200b 5 \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u6240\u6709\u200b\u5305\u88f9\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a\n\u200b\u7b2c\u200b 1 \u200b\u5929\u200b\uff1a1, 2, 3, 4, 5\n\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\uff1a6, 7\n\u200b\u7b2c\u200b 3 \u200b\u5929\u200b\uff1a8\n\u200b\u7b2c\u200b 4 \u200b\u5929\u200b\uff1a9\n\u200b\u7b2c\u200b 5 \u200b\u5929\u200b\uff1a10\n\n\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u8d27\u7269\u200b\u5fc5\u987b\u200b\u6309\u7167\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u987a\u5e8f\u200b\u88c5\u8fd0\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4f7f\u7528\u200b\u8f7d\u91cd\u200b\u80fd\u529b\u200b\u4e3a\u200b 14 \u200b\u7684\u200b\u8239\u8236\u200b\u5e76\u200b\u5c06\u200b\u5305\u88c5\u200b\u5206\u6210\u200b (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) \u200b\u662f\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u7684\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aweights = [3,2,2,4,1,4], D = 3\n\u200b\u8f93\u51fa\u200b\uff1a6\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u8239\u8236\u200b\u6700\u4f4e\u200b\u8f7d\u91cd\u200b 6 \u200b\u5c31\u200b\u80fd\u591f\u200b\u5728\u200b 3 \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u6240\u6709\u200b\u5305\u88f9\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a\n\u200b\u7b2c\u200b 1 \u200b\u5929\u200b\uff1a3, 2\n\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\uff1a2, 4\n\u200b\u7b2c\u200b 3 \u200b\u5929\u200b\uff1a1, 4\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1aweights = [1,2,3,1,1], D = 4\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u7b2c\u200b 1 \u200b\u5929\u200b\uff1a1\n\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\uff1a2\n\u200b\u7b2c\u200b 3 \u200b\u5929\u200b\uff1a3\n\u200b\u7b2c\u200b 4 \u200b\u5929\u200b\uff1a1, 1\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= D <= weights.length <= 50000
1 <= weights[i] <= 500
Reference
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1011/#_2","title":"\u9898\u89e3","text":"\u200b\u8bbe\u200b\u5217\u8868\u200b\u4e3a\u200b\\(A=\\{a_i\\}_n\\)\uff0c\u200b\u5219\u200b\u6700\u7ec8\u200b\u7ed3\u679c\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\([\\max_{i} \\{a_i\\}, \\sum_{i} a_i]\\)\u3002\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u5728\u200b\u533a\u95f4\u200b\u4e2d\u200b\u67e5\u627e\u200b\u80fd\u591f\u200b\u6ee1\u8db3\u200b\u5728\u200b\\(D\\)\u200b\u5929\u200b\u5185\u200b\u8fd0\u8f93\u200b\u5168\u90e8\u200b\u5305\u88f9\u200b\u7684\u200b\u6700\u5c0f\u200b\u8f7d\u91cd\u200b\u3002
\u200b\u6709\u5173\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u8be6\u7ec6\u200b\u8ba8\u8bba\u200b\uff0c\u200b\u8bf7\u200b\u53c2\u89c1\u200b35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b
#define MAX(x, y) ((x) > (y) ? (x) : (y))\n\nbool verify(int *weights, int weightsSize, int D, int limit)\n{\n int i = 0, ub = limit;\n for (i = 0; i < weightsSize; i++)\n {\n if (weights[i] > ub)\n {\n D--;\n ub = limit;\n }\n ub -= weights[i];\n if (D <= 0)\n return false;\n }\n return true;\n}\n\nint bSearch(int *weights, int weightsSize, int D, int lo, int hi)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (verify(weights, weightsSize, D, mid))\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo;\n}\n\nint shipWithinDays(int* weights, int weightsSize, int D) {\n int i = 0, sum = 0, max = 0;\n printf(\"%d\", verify(weights, weightsSize, D, 6));\n for (i = 0; i < weightsSize; i++)\n {\n sum += weights[i];\n max = MAX(max, weights[i]);\n }\n return bSearch(weights, weightsSize, D, max, sum);\n}\n
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/102/","title":"102. \u200b\u4e8c\u53c9\u6811\u200b\u7684\u200b\u5c42\u5e8f\u200b\u904d\u5386","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6811","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/102/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u4e8c\u53c9\u6811\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8fd4\u56de\u200b\u5176\u200b\u6309\u200b \u200b\u5c42\u5e8f\u200b\u904d\u5386\u200b \u200b\u5f97\u5230\u200b\u7684\u200b\u8282\u70b9\u200b\u503c\u200b\u3002 \uff08\u200b\u5373\u200b\u9010\u5c42\u200b\u5730\u200b\uff0c\u200b\u4ece\u5de6\u5230\u53f3\u200b\u8bbf\u95ee\u200b\u6240\u6709\u200b\u8282\u70b9\u200b\uff09\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u4e8c\u53c9\u6811\u200b\uff1a[3,9,20,null,null,15,7]
,
3\n / \\\n 9 20\n / \\\n 15 7\n
\u200b\u8fd4\u56de\u200b\u5176\u200b\u5c42\u6b21\u200b\u904d\u5386\u200b\u7ed3\u679c\u200b\uff1a
[\n [3],\n [9,20],\n [15,7]\n]\n
Reference
","tags":["\u6811","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/102/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u7b2c\u4e00\u5c42\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u5373\u6839\u200b\u8282\u70b9\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u518d\u5c42\u5e8f\u200b\u904d\u5386\u200b\u5de6\u5b50\u200b\u6811\u200b\u548c\u200b\u53f3\u5b50\u200b\u6811\u200b\uff0c\u200b\u5408\u5e76\u200b\u540c\u5c42\u200b\u7684\u200b\u7ed3\u679c\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for a binary tree node.\n * struct TreeNode {\n * int val;\n * struct TreeNode *left;\n * struct TreeNode *right;\n * };\n */\n/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\n#define MAX(x, y) (x > y ? x : y)\nint *merge(int *leftBranch, int leftSize, int *rightBranch, int rightSize, int *returnSize)\n{\n *returnSize = leftSize + rightSize;\n int *ret = (int *)malloc(sizeof(int) * (leftSize + rightSize));\n if (leftSize != 0)\n {\n memcpy(ret, leftBranch, sizeof(int) * leftSize);\n free(leftBranch);\n }\n if (rightSize != 0)\n {\n memcpy(ret + leftSize, rightBranch, sizeof(int) * rightSize);\n free(rightBranch);\n }\n return ret;\n}\nint** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){\n if (root == NULL)\n {\n *returnSize = 0;\n *returnColumnSizes = NULL;\n return NULL;\n }\n int leftBranchSize = 0, *leftColumnSizes = NULL, **leftBranch = levelOrder(root->left, &leftBranchSize, &leftColumnSizes),\n rightBranchSize = 0, *rightColumnSizes = NULL, **rightBranch = levelOrder(root->right, &rightBranchSize, &rightColumnSizes);\n *returnSize = 1 + MAX(leftBranchSize, rightBranchSize);\n int **ret = (int **)malloc(sizeof(int *) * *returnSize), *returnCols = (int *)malloc(sizeof(int) * *returnSize), i = 0;\n *returnColumnSizes = returnCols;\n *returnCols = 1;\n *ret = malloc(sizeof(int));\n **ret = root->val;\n for (i = 1; i < *returnSize; i++)\n {\n if (i <= leftBranchSize && i <= rightBranchSize)\n ret[i] = merge(leftBranch[i - 1], leftColumnSizes[i - 1], rightBranch[i - 1], rightColumnSizes[i - 1], returnCols + i);\n else if (i <= leftBranchSize)\n ret[i] = merge(leftBranch[i-1], leftColumnSizes[i-1], NULL, 0, returnCols + i);\n else if (i <= rightBranchSize)\n ret[i] = merge(NULL, 0, rightBranch[i-1], rightColumnSizes[i-1], returnCols + i);\n }\n free(leftBranch);\n free(rightBranch);\n free(leftColumnSizes);\n free(rightColumnSizes);\n return ret;\n}\n
","tags":["\u6811","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/11/","title":"11. \u200b\u76db\u200b\u6700\u591a\u6c34\u200b\u7684\u200b\u5bb9\u5668","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/11/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b n
\u200b\u4e2a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b a_1\uff0ca_2\uff0c...\uff0ca_n
\uff0c\u200b\u6bcf\u4e2a\u200b\u6570\u200b\u4ee3\u8868\u200b\u5750\u6807\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u70b9\u200b\u00a0(i,\u00a0a_i)
\u3002\u200b\u5728\u200b\u5750\u6807\u200b\u5185\u200b\u753b\u200b n
\u200b\u6761\u200b\u5782\u76f4\u7ebf\u200b\uff0c\u200b\u5782\u76f4\u7ebf\u200b i
\u00a0\u200b\u7684\u200b\u4e24\u4e2a\u200b\u7aef\u70b9\u200b\u5206\u522b\u200b\u4e3a\u200b\u00a0(i,\u00a0a_i)
\u200b\u548c\u200b (i, 0)
\u3002\u200b\u627e\u51fa\u200b\u5176\u4e2d\u200b\u7684\u200b\u4e24\u6761\u7ebf\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u5b83\u4eec\u200b\u4e0e\u200b\u00a0x
\u00a0\u200b\u8f74\u200b\u5171\u540c\u200b\u6784\u6210\u200b\u7684\u200b\u5bb9\u5668\u200b\u53ef\u4ee5\u200b\u5bb9\u7eb3\u200b\u6700\u591a\u200b\u7684\u200b\u6c34\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u503e\u659c\u200b\u5bb9\u5668\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a[1,8,6,2,5,4,8,3,7]\n\u200b\u8f93\u51fa\u200b\uff1a49 \n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u56fe\u4e2d\u200b\u5782\u76f4\u7ebf\u200b\u4ee3\u8868\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b [1,8,6,2,5,4,8,3,7]\u3002\u200b\u5728\u200b\u6b64\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u5bb9\u5668\u200b\u80fd\u591f\u200b\u5bb9\u7eb3\u200b\u6c34\u200b\uff08\u200b\u8868\u793a\u200b\u4e3a\u200b\u84dd\u8272\u200b\u90e8\u5206\u200b\uff09\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u4e3a\u200b\u00a049\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aheight = [1,1]\n\u200b\u8f93\u51fa\u200b\uff1a1\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1aheight = [4,3,2,1,4]\n\u200b\u8f93\u51fa\u200b\uff1a16\n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1aheight = [1,2,1]\n\u200b\u8f93\u51fa\u200b\uff1a2\n
\u200b\u63d0\u793a\u200b\uff1a
n = height.length
- 2 <= n <= 3 * 104
- 0 <= height[i] <= 3 * 104
Reference
","tags":["\u6570\u5b66","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/11/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u53cc\u200b\u6307\u9488\u200b\u6cd5\u200b\uff0c\u200b\u4e24\u4e2a\u200b\u6307\u9488\u200b\u5206\u522b\u200b\u6307\u5411\u200b\u76db\u6c34\u200b\u533a\u57df\u200b\u7684\u200b\u8fb9\u754c\u200b\u3002\u200b\u6bcf\u6b21\u200b\u5faa\u73af\u200b\u5c06\u200b\u8f83\u200b\u4f4e\u200b\u7684\u200b\u8fb9\u754c\u200b\u5411\u200b\u4e2d\u95f4\u200b\u6536\u7f29\u200b\uff0c\u200b\u5e76\u200b\u5c1d\u8bd5\u200b\u66f4\u65b0\u200b\u6700\u5927\u200b\u7684\u200b\u76db\u6c34\u200b\u533a\u57df\u200b\u3002
#define MIN(x, y) (x < y ? x : y)\n#define MAX(x, y) (x > y ? x : y)\nint maxArea(int* height, int heightSize){\n int left = 0, right = heightSize - 1,\n ret = (right - left) * MIN(height[left], height[right]), cur;\n while (left < right)\n {\n if (height[left] < height[right])\n left++;\n else\n right--;\n cur = (right - left) * MIN(height[left], height[right]);\n ret = MAX(cur, ret);\n }\n return ret;\n}\n
","tags":["\u6570\u5b66","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/115/","title":"115. \u200b\u4e0d\u540c\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/115/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b s
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b t
\uff0c\u200b\u8ba1\u7b97\u200b\u5728\u200b s
\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b\u4e2d\u200b t
\u200b\u51fa\u73b0\u200b\u7684\u200b\u4e2a\u6570\u200b\u3002
\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u4e00\u4e2a\u200b \u200b\u5b50\u200b\u5e8f\u5217\u200b \u200b\u662f\u200b\u6307\u200b\uff0c\u200b\u901a\u8fc7\u200b\u5220\u9664\u200b\u4e00\u4e9b\u200b\uff08\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u5220\u9664\u200b\uff09\u200b\u5b57\u7b26\u200b\u4e14\u200b\u4e0d\u200b\u5e72\u6270\u200b\u5269\u4f59\u200b\u5b57\u7b26\u200b\u76f8\u5bf9\u200b\u4f4d\u7f6e\u200b\u6240\u200b\u7ec4\u6210\u200b\u7684\u200b\u65b0\u200b\u5b57\u7b26\u4e32\u200b\u3002\uff08\u200b\u4f8b\u5982\u200b\uff0c\"ACE\"
\u00a0\u200b\u662f\u200b\u00a0\"ABCDE\"
\u00a0\u200b\u7684\u200b\u4e00\u4e2a\u200b\u5b50\u200b\u5e8f\u5217\u200b\uff0c\u200b\u800c\u200b\u00a0\"AEC\"
\u00a0\u200b\u4e0d\u662f\u200b\uff09
\u200b\u9898\u76ee\u200b\u6570\u636e\u200b\u4fdd\u8bc1\u200b\u7b54\u6848\u200b\u7b26\u5408\u200b 32 \u200b\u4f4d\u200b\u5e26\u7b26\u53f7\u200b\u6574\u6570\u200b\u8303\u56f4\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"rabbbit\", t = \"rabbit\"\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u5982\u4e0b\u200b\u56fe\u200b\u6240\u793a\u200b, \u200b\u6709\u200b 3 \u200b\u79cd\u200b\u53ef\u4ee5\u200b\u4ece\u200b s \u200b\u4e2d\u200b\u5f97\u5230\u200b \"rabbit\" \u200b\u7684\u200b\u65b9\u6848\u200b\u3002\n(\u200b\u4e0a\u200b\u7bad\u5934\u200b\u7b26\u53f7\u200b ^ \u200b\u8868\u793a\u200b\u9009\u53d6\u200b\u7684\u200b\u5b57\u6bcd\u200b)\nrabbbit\n^^^^ ^^\nrabbbit\n^^ ^^^^\nrabbbit\n^^^ ^^^\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"babgbag\", t = \"bag\"\n\u200b\u8f93\u51fa\u200b\uff1a5\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u5982\u4e0b\u200b\u56fe\u200b\u6240\u793a\u200b, \u200b\u6709\u200b 5 \u200b\u79cd\u200b\u53ef\u4ee5\u200b\u4ece\u200b s \u200b\u4e2d\u200b\u5f97\u5230\u200b \"bag\" \u200b\u7684\u200b\u65b9\u6848\u200b\u3002 \n(\u200b\u4e0a\u200b\u7bad\u5934\u200b\u7b26\u53f7\u200b ^ \u200b\u8868\u793a\u200b\u9009\u53d6\u200b\u7684\u200b\u5b57\u6bcd\u200b)\nbabgbag\n^^ ^\nbabgbag\n^^ ^\nbabgbag\n^ ^^\nbabgbag\n ^ ^^\nbabgbag\n ^^^\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= s.length, t.length <= 1000
s
\u200b\u548c\u200b t
\u200b\u7531\u200b\u82f1\u6587\u5b57\u6bcd\u200b\u7ec4\u6210\u200b
Reference
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/115/#_2","title":"\u9898\u89e3","text":"\u200b\u89e3\u9898\u200b\u601d\u8def\u200b\uff1a\u200b\u8bbe\u200b\\(f(x, y)\\)\u200b\u4e3a\u200b\u5b57\u7b26\u4e32\u200b\\(x\\)\u200b\u4e2d\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u5b57\u7b26\u4e32\u200b\\(y\\)\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b\u3002\u200b\u5e76\u4e14\u200b\u4f7f\u7528\u200b\\(x + 1\\)\u200b\u8868\u793a\u200b\u5b57\u7b26\u4e32\u200b\\(x\\)\u200b\u4ece\u200b\u7b2c\u4e8c\u4e2a\u200b\u5b57\u7b26\u200b\u5f00\u59cb\u200b\u7684\u200b\u5b50\u4e32\u200b\u3002
\u200b\u5219\u200b\uff1a
- \u200b\u5f53\u200b\\(x, y\\)\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u4e0d\u200b\u540c\u65f6\u200b\uff0c\u200b\u6709\u200b\\(f(x, y) = f(x + 1, y)\\)
- \u200b\u5f53\u200b\\(x, y\\)\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u5339\u914d\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(f(x, y) = f(x + 1, y + 1) + f(x + 1, y)\\)
\u200b\u7279\u6b8a\u200b\u5730\u200b\uff0c\u200b\u5f53\u200b\\(y\\)\u200b\u4e3a\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u65f6\u200b\uff0c\u200b\u8bf4\u660e\u200b\u5b57\u7b26\u4e32\u200b\u5339\u914d\u200b\u7ed3\u675f\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u4e00\u4e2a\u200b\u5339\u914d\u200b\u6210\u529f\u200b\u7684\u200b\u5b50\u4e32\u200b\uff0c\u200b\u56e0\u6b64\u200b\\(f(x, \\varnothing) = 1\\)\u3002\u200b\u5f53\u200b\\(x\\)\u200b\u4e3a\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u4e14\u200b\\(y\\)\u200b\u4e0d\u4e3a\u200b\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u65f6\u200b\uff0c\u200b\u8bf4\u660e\u200b\u5b57\u7b26\u4e32\u200b\u5339\u914d\u200b\u5931\u8d25\u200b\uff0c\\(f(\\varnothing, y) = \\left\\{\\begin{aligned}&0 &y\\not = \\varnothing \\\\ & 1 &y=\\varnothing\\end{aligned}\\right .\\)\u3002
\u200b\u7531\u6b64\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u521d\u6b65\u200b\u5f97\u51fa\u200b\u9012\u5f52\u200b\u4ee3\u7801\u200b\uff1a
int numDistinct(char * s, char * t){\n if (!*t)\n return 1;\n if (!*s)\n return 0;\n int ret = 0;\n if (*s == *t)\n ret += numDistinct(s + 1, t + 1);\n ret += numDistinct(s + 1, t);\n return ret;\n}\n
\u200b\u5982\u200b\u4e0a\u200b\u4ee3\u7801\u200b\u4f1a\u200b\u9020\u6210\u200b\u8d85\u65f6\u200b\uff0c\u200b\u539f\u56e0\u200b\u662f\u200b\u9012\u5f52\u200b\u65f6\u200b\u51fa\u73b0\u200b\u4e86\u200b\u5206\u652f\u200b\u5bfc\u81f4\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(2^n\\)\u3002\u200b\u4f7f\u7528\u200b\u6570\u7ec4\u200b\u5b58\u50a8\u200b\u5386\u53f2\u200b\u7ed3\u679c\u200b\u53ef\u4ee5\u200b\u907f\u514d\u200b\u9012\u5f52\u200b\u4ea7\u751f\u200b\u5206\u652f\u200b\uff0c\u200b\u4f18\u5316\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\uff1a
int cached(char *s, char *t, int x, int y, int **buffer) {\n int ret = 0;\n if (!*t)\n ret = 1;\n else if (!*s)\n ret = 0;\n else\n {\n if (buffer[x][y] >= 0)\n return buffer[x][y];\n if (*s == *t)\n ret += cached(s + 1, t + 1, x + 1, y + 1, buffer);\n ret += cached(s + 1, t, x + 1, y, buffer);\n buffer[x][y] = ret;\n }\n return ret;\n}\nint numDistinct(char * s, char * t){\n int x = strlen(s), y = strlen(t);\n int *_buffer = (int *)malloc(sizeof(int) * x * y);\n int **buffer = (int **)malloc(sizeof(int *) * x);\n for (int i = 0; i < x; i++)\n buffer[i] = _buffer + i * y;\n memset(_buffer, 0xff, sizeof(int) * x * y);\n return cached(s, t, 0, 0, buffer);\n}\n
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/118/","title":"118. \u200b\u6768\u8f89\u4e09\u89d2","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/118/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200bnumRows\uff0c\u200b\u751f\u6210\u200b\u6768\u8f89\u4e09\u89d2\u200b\u7684\u200b\u524d\u200bnumRows\u200b\u884c\u200b\u3002
\u200b\u5728\u200b\u6768\u8f89\u4e09\u89d2\u200b\u4e2d\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u6570\u662f\u200b\u5b83\u200b\u5de6\u4e0a\u65b9\u200b\u548c\u200b\u53f3\u4e0a\u65b9\u200b\u7684\u200b\u6570\u200b\u7684\u200b\u548c\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b: 5\n\u200b\u8f93\u51fa\u200b:\n[\n [1],\n [1,1],\n [1,2,1],\n [1,3,3,1],\n [1,4,6,4,1]\n]\n
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/118/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6839\u636e\u200b\u6768\u8f89\u4e09\u89d2\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u901a\u8fc7\u200b\u9012\u5f52\u200b\u9010\u884c\u200b\u6784\u9020\u200b\u51fa\u200b\u6bcf\u200b\u4e00\u884c\u200b\u7684\u200b\u503c\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\nint **generate(int numRows, int *returnSize, int **returnColumnSizes)\n{\n *returnSize = numRows;\n if (numRows == 0)\n return NULL;\n if (numRows == 1)\n {\n *returnColumnSizes = (int *)malloc(sizeof(int));\n **returnColumnSizes = 1;\n int **ret = (int **)malloc(sizeof(int *));\n *ret = (int *)malloc(sizeof(int));\n **ret = 1;\n return ret;\n }\n int retSize = 0,\n *oldRetColSizes = NULL,\n **rec = generate(numRows - 1, &retSize, &oldRetColSizes), \n i = 0;\n **ret = (int **)memcpy(malloc(sizeof(int *) * numRows), rec, (numRows - 1) * sizeof(int *));\n *newRetColSizes = memcpy((int *)malloc(sizeof(int) * numRows), oldRetColSizes, (numRows - 1) * sizeof(int));\n *tempArray = (int *)malloc(sizeof(int) * numRows);\n\n free(oldRetColSizes);\n free(rec);\n\n newRetColSizes[numRows - 1] = numRows;\n for (i = 1; i < numRows - 1; i++)\n tempArray[i] = *(ret[numRows - 2] + i) + *(ret[numRows - 2] + i - 1);\n tempArray[0] = 1;\n tempArray[numRows - 1] = 1;\n ret[numRows - 1] = tempArray;\n\n *returnColumnSizes = newRetColSizes;\n return ret;\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/119/","title":"119. \u200b\u6768\u8f89\u4e09\u89d2\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/119/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u975e\u8d1f\u200b\u7d22\u5f15\u200b\\(k\\)\uff0c\u200b\u5176\u4e2d\u200b\\(k\\leq33\\)\uff0c\u200b\u8fd4\u56de\u200b\u6768\u8f89\u4e09\u89d2\u200b\u7684\u200b\u7b2c\u200b\\(k\\) \u200b\u884c\u200b\u3002
\u200b\u5728\u200b\u6768\u8f89\u4e09\u89d2\u200b\u4e2d\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u6570\u662f\u200b\u5b83\u200b\u5de6\u4e0a\u65b9\u200b\u548c\u200b\u53f3\u4e0a\u65b9\u200b\u7684\u200b\u6570\u200b\u7684\u200b\u548c\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b: 3\n\u200b\u8f93\u51fa\u200b: [1,3,3,1]\n
\u200b\u8fdb\u9636\u200b\uff1a \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u4f18\u5316\u200b\u4f60\u200b\u7684\u200b\u7b97\u6cd5\u200b\u5230\u200b\\(O(k)\\)\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u5417\u200b\uff1f
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/119/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5f53\u524d\u200b\u884c\u200b\u7684\u200b\u7ed3\u679c\u200b\u4ec5\u200b\u4f9d\u8d56\u4e8e\u200b\u4e0a\u200b\u4e00\u884c\u200b\u7684\u200b\u7ed3\u679c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\nvoid recur(int rowIndex, int *Filling)\n{\n if (rowIndex <= 1)\n return;\n recur(rowIndex - 1, Filling);\n for (int i = rowIndex - 1; i > 0; i--)\n Filling[i] += Filling[i - 1];\n}\n\nint* getRow(int rowIndex, int* returnSize){\n *returnSize = rowIndex + 1;\n int *ret = (int *)memset(malloc(sizeof(int) * *returnSize), 0, sizeof(int) * *returnSize);\n ret[0] = 1;\n recur(*returnSize, ret);\n return ret;\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/120/","title":"120. \u200b\u4e09\u89d2\u5f62\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/120/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u4e09\u89d2\u5f62\u200b\uff0c\u200b\u627e\u51fa\u200b\u81ea\u9876\u5411\u4e0b\u200b\u7684\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b\u3002\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u53ea\u80fd\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0b\u200b\u4e00\u884c\u200b\u4e2d\u200b\u76f8\u90bb\u200b\u7684\u200b\u7ed3\u70b9\u200b\u4e0a\u200b\u3002
\u200b\u76f8\u90bb\u200b\u7684\u200b\u7ed3\u70b9\u200b \u200b\u5728\u200b\u8fd9\u91cc\u200b\u6307\u200b\u7684\u200b\u662f\u200b \u200b\u4e0b\u6807\u200b
\u200b\u4e0e\u200b \u200b\u4e0a\u200b\u4e00\u5c42\u200b\u7ed3\u70b9\u200b\u4e0b\u6807\u200b
\u200b\u76f8\u540c\u200b\u6216\u8005\u200b\u7b49\u4e8e\u200b \u200b\u4e0a\u200b\u4e00\u5c42\u200b\u7ed3\u70b9\u200b\u4e0b\u6807\u200b + 1
\u200b\u7684\u200b\u4e24\u4e2a\u200b\u7ed3\u70b9\u200b\u3002
\u200b\u4f8b\u5982\u200b\uff0c\u200b\u7ed9\u5b9a\u200b\u4e09\u89d2\u5f62\u200b\uff1a
[\n [2],\n [3,4],\n [6,5,7],\n [4,1,8,3]\n]\n
\u200b\u81ea\u9876\u5411\u4e0b\u200b\u7684\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b\u4e3a\u200b11
\uff08\u200b\u5373\u200b\uff0c2\u00a0+\u00a03\u00a0+\u00a05\u00a0+\u00a01\u00a0= 11\uff09\u3002
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u5982\u679c\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u53ea\u200b\u4f7f\u7528\u200b\\(O(n)\\)\u200b\u7684\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\uff08\\(n\\)\u200b\u4e3a\u200b\u4e09\u89d2\u5f62\u200b\u7684\u200b\u603b\u884c\u200b\u6570\u200b\uff09\u200b\u6765\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\uff0c\u200b\u90a3\u4e48\u200b\u4f60\u200b\u7684\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u5f88\u200b\u52a0\u5206\u200b\u3002
Reference
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/120/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\uff0c\u200b\u4f7f\u7528\u200b\u4e09\u89d2\u5f62\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u5b58\u653e\u200b\u6700\u5c0f\u200b\u7684\u200b\u548c\u200b\uff0c\u200b\u4ece\u200b\u4e0b\u200b\u5f80\u200b\u4e0a\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
#define MIN(x, y) (x < y ? x : y)\nint minimumTotal(int **triangle, int triangleSize, int *triangleColSize)\n{\n if (!triangleSize)\n return 0;\n int *dp1 = triangle[triangleSize - 1], i = 0, j = 0;\n for (i = triangleSize - 1; i > 0; i--)\n for (j = 0; j < triangleColSize[i - 1]; j++)\n dp1[j] = triangle[i - 1][j] + MIN(dp1[j], dp1[j + 1]);\n return dp1[0];\n}\n
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/121/","title":"121. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/121/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5b83\u200b\u7684\u200b\u7b2c\u200b\u00a0i \u200b\u4e2a\u200b\u5143\u7d20\u200b\u662f\u200b\u4e00\u652f\u200b\u7ed9\u5b9a\u200b\u80a1\u7968\u200b\u7b2c\u200b i \u200b\u5929\u200b\u7684\u200b\u4ef7\u683c\u200b\u3002
\u200b\u5982\u679c\u200b\u4f60\u200b\u6700\u200b\u591a\u53ea\u200b\u5141\u8bb8\u200b\u5b8c\u6210\u200b\u4e00\u7b14\u200b\u4ea4\u6613\u200b\uff08\u200b\u5373\u200b\u4e70\u5165\u200b\u548c\u200b\u5356\u51fa\u200b\u4e00\u652f\u200b\u80a1\u7968\u200b\u4e00\u6b21\u200b\uff09\uff0c\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u7b97\u6cd5\u200b\u6765\u200b\u8ba1\u7b97\u200b\u4f60\u200b\u6240\u80fd\u200b\u83b7\u53d6\u200b\u7684\u200b\u6700\u5927\u200b\u5229\u6da6\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u5728\u200b\u4e70\u5165\u200b\u80a1\u7968\u200b\u524d\u200b\u5356\u51fa\u200b\u80a1\u7968\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [7,1,5,3,6,4]\n\u200b\u8f93\u51fa\u200b: 5\n\u200b\u89e3\u91ca\u200b: \u200b\u5728\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 1\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u4e70\u5165\u200b\uff0c\u200b\u5728\u200b\u7b2c\u200b 5 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 6\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u5356\u51fa\u200b\uff0c\u200b\u6700\u5927\u200b\u5229\u6da6\u200b = 6-1 = 5 \u3002\n \u200b\u6ce8\u610f\u200b\u5229\u6da6\u200b\u4e0d\u80fd\u200b\u662f\u200b 7-1 = 6, \u200b\u56e0\u4e3a\u200b\u5356\u51fa\u200b\u4ef7\u683c\u200b\u9700\u8981\u200b\u5927\u4e8e\u200b\u4e70\u5165\u200b\u4ef7\u683c\u200b\uff1b\u200b\u540c\u65f6\u200b\uff0c\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u5728\u200b\u4e70\u5165\u200b\u524d\u200b\u5356\u51fa\u200b\u80a1\u7968\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: [7,6,4,3,1]\n\u200b\u8f93\u51fa\u200b: 0\n\u200b\u89e3\u91ca\u200b: \u200b\u5728\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\u4e0b\u200b, \u200b\u6ca1\u6709\u200b\u4ea4\u6613\u200b\u5b8c\u6210\u200b, \u200b\u6240\u4ee5\u200b\u6700\u5927\u200b\u5229\u6da6\u200b\u4e3a\u200b 0\u3002\n
Reference
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/121/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u627e\u51fa\u200b\u76f8\u5dee\u200b\u6700\u5927\u200b\u7684\u200b\u6ee1\u8db3\u200b\\(a_i < a_j\\)\u200b\u4e14\u200b\\(i < j\\)\u200b\u7684\u200b\u4e24\u4e2a\u200b\u6570\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int maxProfit(int* prices, int pricesSize){\n int max = 0, i = pricesSize - 1, value = 0, profit = 0;\n for (; i>=0; i--)\n {\n if (prices[i] > value)\n value = prices[i];\n else\n profit = value - prices[i];\n max = max > profit ? max : profit;\n }\n return max;\n}\n
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/122/","title":"122. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u8d2a\u5fc3\u7b97\u6cd5","\u6570\u7ec4"]},{"location":"coding/leetcode/122/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5b83\u200b\u7684\u200b\u7b2c\u200b\u00a0i \u200b\u4e2a\u200b\u5143\u7d20\u200b\u662f\u200b\u4e00\u652f\u200b\u7ed9\u5b9a\u200b\u80a1\u7968\u200b\u7b2c\u200b i \u200b\u5929\u200b\u7684\u200b\u4ef7\u683c\u200b\u3002
\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u7b97\u6cd5\u200b\u6765\u200b\u8ba1\u7b97\u200b\u4f60\u200b\u6240\u80fd\u200b\u83b7\u53d6\u200b\u7684\u200b\u6700\u5927\u200b\u5229\u6da6\u200b\u3002\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5c3d\u53ef\u80fd\u200b\u5730\u200b\u5b8c\u6210\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u4ea4\u6613\u200b\uff08\u200b\u591a\u6b21\u200b\u4e70\u5356\u200b\u4e00\u652f\u200b\u80a1\u7968\u200b\uff09\u3002
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u540c\u65f6\u200b\u53c2\u4e0e\u200b\u591a\u7b14\u200b\u4ea4\u6613\u200b\uff08\u200b\u4f60\u200b\u5fc5\u987b\u200b\u5728\u200b\u518d\u6b21\u200b\u8d2d\u4e70\u200b\u524d\u200b\u51fa\u552e\u200b\u6389\u200b\u4e4b\u524d\u200b\u7684\u200b\u80a1\u7968\u200b\uff09\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [7,1,5,3,6,4]\n\u200b\u8f93\u51fa\u200b: 7\n\u200b\u89e3\u91ca\u200b: \u200b\u5728\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 1\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u4e70\u5165\u200b\uff0c\u200b\u5728\u200b\u7b2c\u200b 3 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 5\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u5356\u51fa\u200b, \u200b\u8fd9\u7b14\u200b\u4ea4\u6613\u6240\u200b\u80fd\u200b\u83b7\u5f97\u200b\u5229\u6da6\u200b = 5-1 = 4 \u3002\n\u00a0 \u200b\u968f\u540e\u200b\uff0c\u200b\u5728\u200b\u7b2c\u200b 4 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 3\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u4e70\u5165\u200b\uff0c\u200b\u5728\u200b\u7b2c\u200b 5 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 6\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u5356\u51fa\u200b, \u200b\u8fd9\u7b14\u200b\u4ea4\u6613\u6240\u200b\u80fd\u200b\u83b7\u5f97\u200b\u5229\u6da6\u200b = 6-3 = 3 \u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: [1,2,3,4,5]\n\u200b\u8f93\u51fa\u200b: 4\n\u200b\u89e3\u91ca\u200b: \u200b\u5728\u200b\u7b2c\u200b 1 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 1\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u4e70\u5165\u200b\uff0c\u200b\u5728\u200b\u7b2c\u200b 5 \u200b\u5929\u200b \uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 5\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u5356\u51fa\u200b, \u200b\u8fd9\u7b14\u200b\u4ea4\u6613\u6240\u200b\u80fd\u200b\u83b7\u5f97\u200b\u5229\u6da6\u200b = 5-1 = 4 \u3002\n\u00a0 \u200b\u6ce8\u610f\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u5728\u200b\u7b2c\u200b 1 \u200b\u5929\u200b\u548c\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\u63a5\u8fde\u200b\u8d2d\u4e70\u200b\u80a1\u7968\u200b\uff0c\u200b\u4e4b\u540e\u200b\u518d\u200b\u5c06\u200b\u5b83\u4eec\u200b\u5356\u51fa\u200b\u3002\n\u00a0 \u200b\u56e0\u4e3a\u200b\u8fd9\u6837\u200b\u5c5e\u4e8e\u200b\u540c\u65f6\u200b\u53c2\u4e0e\u200b\u4e86\u200b\u591a\u7b14\u200b\u4ea4\u6613\u200b\uff0c\u200b\u4f60\u200b\u5fc5\u987b\u200b\u5728\u200b\u518d\u6b21\u200b\u8d2d\u4e70\u200b\u524d\u200b\u51fa\u552e\u200b\u6389\u200b\u4e4b\u524d\u200b\u7684\u200b\u80a1\u7968\u200b\u3002\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a
\u200b\u8f93\u5165\u200b: [7,6,4,3,1]\n\u200b\u8f93\u51fa\u200b: 0\n\u200b\u89e3\u91ca\u200b: \u200b\u5728\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\u4e0b\u200b, \u200b\u6ca1\u6709\u200b\u4ea4\u6613\u200b\u5b8c\u6210\u200b, \u200b\u6240\u4ee5\u200b\u6700\u5927\u200b\u5229\u6da6\u200b\u4e3a\u200b 0\u3002\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= prices.length <= 3 * 10 ^ 4
0 <= prices[i]\u00a0<= 10 ^ 4
Reference
","tags":["\u8d2a\u5fc3\u7b97\u6cd5","\u6570\u7ec4"]},{"location":"coding/leetcode/122/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a
- \u200b\u5f53\u200b\u6570\u7ec4\u200b\u957f\u5ea6\u200b\u4e3a\u200b1\u200b\u65f6\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u83b7\u53d6\u200b\u4efb\u4f55\u200b\u5229\u6da6\u200b\uff0c\u200b\u8fd4\u56de\u200b
0
\uff1b - \u200b\u4ece\u200b\u6570\u7ec4\u200b\u672b\u5c3e\u200b\u5f00\u59cb\u200b\u641c\u7d22\u200b\u7b2c\u4e00\u4e2a\u200b\u80fd\u200b\u76c8\u5229\u200b\u7684\u200b\u70b9\u200b\uff0c\u200b\u5219\u200b\u6700\u5927\u200b\u5229\u6da6\u200b\u4e3a\u200b\u672c\u6b21\u200b\u76c8\u5229\u200b\u4e0e\u200b\u4e4b\u524d\u200b\u6700\u5927\u200b\u76c8\u5229\u200b\u4e4b\u200b\u548c\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int maxProfit(int* prices, int pricesSize){\n if (pricesSize < 2)\n return 0;\n int *cur = prices + pricesSize - 1, currentVal = *cur, len = pricesSize;\n while(cur > prices)\n {\n if (*cur < *(cur - 1))\n break;\n len--;\n cur--;\n }\n return (currentVal - *cur) + maxProfit(prices, len - 1);\n}\n
","tags":["\u8d2a\u5fc3\u7b97\u6cd5","\u6570\u7ec4"]},{"location":"coding/leetcode/125/","title":"125. \u200b\u9a8c\u8bc1\u200b\u56de\u6587\u200b\u4e32","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/125/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u9a8c\u8bc1\u200b\u5b83\u200b\u662f\u5426\u662f\u200b\u56de\u6587\u200b\u4e32\u200b\uff0c\u200b\u53ea\u200b\u8003\u8651\u200b\u5b57\u6bcd\u200b\u548c\u200b\u6570\u5b57\u200b\u5b57\u7b26\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5ffd\u7565\u200b\u5b57\u6bcd\u200b\u7684\u200b\u5927\u5c0f\u5199\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a \u200b\u672c\u9898\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u5c06\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\u6709\u6548\u200b\u7684\u200b\u56de\u6587\u200b\u4e32\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: \"A man, a plan, a canal: Panama\"\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: \"race a car\"\n\u200b\u8f93\u51fa\u200b: false\n
Reference
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/125/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u53cc\u200b\u6307\u9488\u200b\u6cd5\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b\uff0c\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b\u5982\u4e0b\u200b\u7279\u6b8a\u200b\u60c5\u51b5\u200b
- \u200b\u9700\u8981\u200b\u5ffd\u7565\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b26\u53f7\u200b\u800c\u200b\u53ea\u200b\u8003\u8651\u200b\u5b57\u6bcd\u200b\u548c\u200b\u6570\u5b57\u200b
- \u200b\u5927\u5c0f\u5199\u200b\u7684\u200bASCII\u200b\u6570\u503c\u200b\u76f8\u5dee\u200b32\uff0c\u200b\u4f46\u200bASCII\u200b\u6570\u503c\u200b\u76f8\u5dee\u200b32\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u5927\u5c0f\u5199\u200b\u5173\u7cfb\u200b\uff0c\u200b\u5982\u200b
'0'
(48)\u200b\u4e0e\u200b'P'
(80)
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
bool isText(char s)\n{\n return (s >= 'A' && s <= 'Z') || (s >= 'a' && s <= 'z') || (s >= '0' && s <= '9');\n}\nbool isSame(char s1, char s2)\n{\n return (s1 == s2) || (s2 >= 'A' && s1 - s2 == 32) || (s1 >= 'A' && s2 - s1 == 32);\n}\nbool isPalindrome(char * s){\n int len = strlen(s), head = 0, tail = len - 1;\n while (head < len && !isText(s[head]))\n head++;\n while (tail >= 0 && !isText(s[tail]))\n tail--;\n while(tail > head && head < len && tail >= 0)\n {\n if (!isSame(s[head], s[tail]))\n return false;\n head++;\n tail--;\n while (!isText(s[head]))\n head++;\n while (!isText(s[tail]))\n tail--;\n }\n return true;\n}\n
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/1283/","title":"1283. \u200b\u4f7f\u200b\u7ed3\u679c\u200b\u4e0d\u200b\u8d85\u8fc7\u200b\u9608\u503c\u200b\u7684\u200b\u6700\u5c0f\u200b\u9664\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1283/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u00a0nums
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\u00a0threshold
\u00a0\uff0c\u200b\u4f60\u200b\u9700\u8981\u200b\u9009\u62e9\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\u4f5c\u4e3a\u200b\u9664\u6570\u200b\uff0c\u200b\u7136\u540e\u200b\u5c06\u200b\u6570\u7ec4\u200b\u91cc\u200b\u6bcf\u4e2a\u200b\u6570\u90fd\u200b\u9664\u4ee5\u200b\u5b83\u200b\uff0c\u200b\u5e76\u200b\u5bf9\u200b\u9664\u6cd5\u200b\u7ed3\u679c\u200b\u6c42\u548c\u200b\u3002
\u200b\u8bf7\u200b\u4f60\u200b\u627e\u51fa\u200b\u80fd\u591f\u200b\u4f7f\u200b\u4e0a\u8ff0\u200b\u7ed3\u679c\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b\u9608\u503c\u200b\u00a0threshold
\u00a0\u200b\u7684\u200b\u9664\u6570\u200b\u4e2d\u200b \u200b\u6700\u5c0f\u200b \u200b\u7684\u200b\u90a3\u4e2a\u200b\u3002
\u200b\u6bcf\u4e2a\u200b\u6570\u200b\u9664\u4ee5\u200b\u9664\u6570\u200b\u540e\u200b\u90fd\u200b\u5411\u4e0a\u200b\u53d6\u6574\u200b\uff0c\u200b\u6bd4\u65b9\u8bf4\u200b 7/3 = 3 \uff0c 10/2 = 5 \u3002
\u200b\u9898\u76ee\u200b\u4fdd\u8bc1\u200b\u4e00\u5b9a\u200b\u6709\u89e3\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,5,9], threshold = 6\n\u200b\u8f93\u51fa\u200b\uff1a5\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5982\u679c\u200b\u9664\u6570\u200b\u4e3a\u200b 1 \uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u548c\u200b\u4e3a\u200b 17 \uff081+2+5+9\uff09\u3002\n\u200b\u5982\u679c\u200b\u9664\u6570\u200b\u4e3a\u200b 4 \uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u548c\u200b\u4e3a\u200b 7 (1+1+2+3) \u3002\u200b\u5982\u679c\u200b\u9664\u6570\u200b\u4e3a\u200b 5 \uff0c\u200b\u548c\u200b\u4e3a\u200b 5 (1+1+1+2)\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [2,3,5,7,11], threshold = 11\n\u200b\u8f93\u51fa\u200b\uff1a3\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [19], threshold = 5\n\u200b\u8f93\u51fa\u200b\uff1a4\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 5 * 10^4
1 <= nums[i] <= 10^6
nums.length <=\u00a0threshold <= 10^6
Reference
","tags":["\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1283/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u627e\u5230\u200b\u6700\u5c0f\u200b\u7684\u200b\u9664\u6570\u200b
\u200b\u5982\u679c\u200b\u7ed3\u679c\u200b\u5927\u4e8e\u200bthreshold
\uff0c\u200b\u8bf4\u660e\u200b\u9664\u6570\u200b\u8fc7\u200b\u5c0f\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u53f3\u4fa7\u200b\u67e5\u627e\u200b\uff0c\u200b\u5426\u5219\u200b\u5728\u200b\u5de6\u4fa7\u200b\u67e5\u627e\u200b
bool test(int *nums, int numsSize, int threshold, int x)\n{\n if (!x)\n return INT_MAX;\n int ret = 0, i = 0;\n for (i = 0; i < numsSize; i++)\n ret += (nums[i] + x - 1) / x;\n return ret <= threshold;\n}\n\nint bSearch(int *nums, int numsSize, int threshold, int lo, int hi)\n{\n if (hi - lo == 1)\n return hi;\n int mid = (hi + lo) >> 1;\n if (!test(nums, numsSize, threshold, mid))\n return bSearch(nums, numsSize, threshold, mid, hi);\n else\n return bSearch(nums, numsSize, threshold, lo, mid);\n}\n\nint smallestDivisor(int* nums, int numsSize, int threshold){\n int max = 0, i = 0;\n for (i = 0; i < numsSize; i++)\n if (max < nums[i])\n max = nums[i];\n return bSearch(nums, numsSize, threshold, 0, max);\n}\n
class Solution:\n def bSearch(self, nums: List[int], threshold: int, lo: int, hi: int) -> int:\n if hi - lo == 1:\n return hi\n mid = (lo + hi) >> 1\n return self.bSearch(nums, threshold, lo, mid) \\\n if sum([math.ceil(_ / mid) for _ in nums]) <= threshold \\\n else self.bSearch(nums, threshold, mid, hi)\n def smallestDivisor(self, nums: List[int], threshold: int) -> int:\n return self.bSearch(nums, threshold, 0, max(nums));\n
","tags":["\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/13/","title":"13. \u200b\u7f57\u9a6c\u6570\u5b57\u200b\u8f6c\u200b\u6574\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/13/#_1","title":"\u9898\u76ee","text":"\u200b\u7f57\u9a6c\u6570\u5b57\u200b\u5305\u542b\u200b\u4ee5\u4e0b\u200b\u4e03\u79cd\u200b\u5b57\u7b26\u200b:I
\uff0cV
\uff0cX
\uff0cL
\uff0cC
\uff0cD
\u200b\u548c\u200bM
\u3002
\u200b\u5b57\u7b26\u200b \u200b\u6570\u503c\u200b\nI 1\nV 5\nX 10\nL 50\nC 100\nD 500\nM 1000\n
\u200b\u4f8b\u5982\u200b\uff0c \u200b\u7f57\u9a6c\u6570\u5b57\u200b 2 \u200b\u5199\u200b\u505a\u200bII
\u00a0\uff0c\u200b\u5373\u200b\u4e3a\u200b\u4e24\u4e2a\u200b\u5e76\u5217\u200b\u7684\u200b 1\u300212 \u200b\u5199\u200b\u505a\u200bXII
\u00a0\uff0c\u200b\u5373\u200b\u4e3a\u200bX
\u00a0+\u00a0II
\u3002 27 \u200b\u5199\u200b\u505a\u200bXXVII
, \u200b\u5373\u200b\u4e3a\u200b\u00a0XX
\u00a0+\u00a0V
\u00a0+\u00a0II
\u3002 \u200b\u901a\u5e38\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u7f57\u9a6c\u6570\u5b57\u200b\u4e2d\u5c0f\u200b\u7684\u200b\u6570\u5b57\u200b\u5728\u200b\u5927\u200b\u7684\u200b\u6570\u5b57\u200b\u7684\u200b\u53f3\u8fb9\u200b\u3002\u200b\u4f46\u200b\u4e5f\u200b\u5b58\u5728\u200b\u7279\u4f8b\u200b\uff0c\u200b\u4f8b\u5982\u200b 4 \u200b\u4e0d\u5199\u200b\u505a\u200bIIII
\uff0c\u200b\u800c\u662f\u200bIV
\u3002\u200b\u6570\u5b57\u200b 1 \u200b\u5728\u200b\u6570\u5b57\u200b 5 \u200b\u7684\u200b\u5de6\u8fb9\u200b\uff0c\u200b\u6240\u200b\u8868\u793a\u200b\u7684\u200b\u6570\u200b\u7b49\u4e8e\u200b\u5927\u6570\u200b 5 \u200b\u51cf\u5c0f\u200b\u6570\u200b 1 \u200b\u5f97\u5230\u200b\u7684\u200b\u6570\u503c\u200b 4 \u3002\u200b\u540c\u6837\u200b\u5730\u200b\uff0c\u200b\u6570\u5b57\u200b 9 \u200b\u8868\u793a\u200b\u4e3a\u200bIX
\u3002\u200b\u8fd9\u4e2a\u200b\u7279\u6b8a\u200b\u7684\u200b\u89c4\u5219\u200b\u53ea\u200b\u9002\u7528\u200b\u4e8e\u200b\u4ee5\u4e0b\u200b\u516d\u79cd\u200b\u60c5\u51b5\u200b\uff1a
I
\u200b\u53ef\u4ee5\u200b\u653e\u5728\u200b\u00a0V
\u00a0(5) \u200b\u548c\u200b\u00a0X
\u00a0(10) \u200b\u7684\u200b\u5de6\u8fb9\u200b\uff0c\u200b\u6765\u200b\u8868\u793a\u200b 4 \u200b\u548c\u200b 9\u3002 X
\u200b\u53ef\u4ee5\u200b\u653e\u5728\u200b\u00a0L
\u00a0(50) \u200b\u548c\u200b\u00a0C
\u00a0(100) \u200b\u7684\u200b\u5de6\u8fb9\u200b\uff0c\u200b\u6765\u200b\u8868\u793a\u200b 40 \u200b\u548c\u200b\u00a090\u3002\u00a0 C
\u200b\u53ef\u4ee5\u200b\u653e\u5728\u200b\u00a0D
\u00a0(500) \u200b\u548c\u200b\u00a0M
\u00a0(1000) \u200b\u7684\u200b\u5de6\u8fb9\u200b\uff0c\u200b\u6765\u200b\u8868\u793a\u200b\u00a0400 \u200b\u548c\u200b\u00a0900\u3002 \u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u7f57\u9a6c\u6570\u5b57\u200b\uff0c\u200b\u5c06\u200b\u5176\u200b\u8f6c\u6362\u6210\u200b\u6574\u6570\u200b\u3002\u200b\u8f93\u5165\u200b\u786e\u4fdd\u200b\u5728\u200b 1\u00a0\u200b\u5230\u200b 3999 \u200b\u7684\u200b\u8303\u56f4\u200b\u5185\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b:\u00a0\"III\"\n\u200b\u8f93\u51fa\u200b: 3\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b:\u00a0\"IV\"\n\u200b\u8f93\u51fa\u200b: 4\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a
\u200b\u8f93\u5165\u200b:\u00a0\"IX\"\n\u200b\u8f93\u51fa\u200b: 9\n
\u200b\u793a\u4f8b\u200b\u00a04\uff1a
\u200b\u8f93\u5165\u200b:\u00a0\"LVIII\"\n\u200b\u8f93\u51fa\u200b: 58\n\u200b\u89e3\u91ca\u200b: L = 50, V= 5, III = 3.\n
\u200b\u793a\u4f8b\u200b\u00a05\uff1a
\u200b\u8f93\u5165\u200b:\u00a0\"MCMXCIV\"\n\u200b\u8f93\u51fa\u200b: 1994\n\u200b\u89e3\u91ca\u200b: M = 1000, CM = 900, XC = 90, IV = 4.\n
\u200b\u63d0\u793a\u200b\uff1a
\u200b\u9898\u76ee\u200b\u6240\u200b\u7ed9\u200b\u6d4b\u8bd5\u7528\u4f8b\u200b\u7686\u200b\u7b26\u5408\u200b\u7f57\u9a6c\u6570\u5b57\u200b\u4e66\u5199\u200b\u89c4\u5219\u200b\uff0c\u200b\u4e0d\u4f1a\u200b\u51fa\u73b0\u200b\u8de8\u4f4d\u200b\u7b49\u200b\u60c5\u51b5\u200b\u3002
IC
\u200b\u548c\u200bIM
\u200b\u8fd9\u6837\u200b\u7684\u200b\u4f8b\u5b50\u200b\u5e76\u200b\u4e0d\u200b\u7b26\u5408\u200b\u9898\u76ee\u200b\u8981\u6c42\u200b\uff0c49 \u200b\u5e94\u8be5\u200b\u5199\u4f5c\u200bXLIX
\uff0c999 \u200b\u5e94\u8be5\u200b\u5199\u4f5c\u200b CMXCIX
\u3002
\u200b\u5173\u4e8e\u200b\u7f57\u9a6c\u6570\u5b57\u200b\u7684\u200b\u8be6\u5c3d\u200b\u4e66\u5199\u200b\u89c4\u5219\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u53c2\u8003\u200b\u7f57\u9a6c\u6570\u5b57\u200b - Mathematics\u3002
Reference
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/13/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u9010\u4f4d\u200b\u5904\u7406\u200b\u5373\u53ef\u200b\uff0c\u200b\u6ce8\u610f\u200b\u5c0f\u200b\u7684\u200b\u6570\u5b57\u200b\u5728\u200b\u5927\u200b\u7684\u200b\u6570\u5b57\u200b\u5de6\u8fb9\u200b\u7684\u200b\u7279\u6b8a\u200b\u60c5\u51b5\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int romanToInt(char * s){\n char *cur = s;\n int ret = 0;\n while(*cur)\n {\n switch(*cur)\n {\n case 'I':\n if (*(cur + 1) == 'V' || *(cur + 1) == 'X')\n ret -= 1;\n else\n ret += 1;\n break;\n case 'V':\n ret += 5;\n break;\n case 'X':\n if (*(cur + 1) == 'L' || *(cur + 1) == 'C')\n ret -= 10;\n else\n ret += 10;\n break;\n case 'L':\n ret += 50;\n break;\n case 'C':\n if (*(cur + 1) == 'D' || *(cur + 1) == 'M')\n ret -= 100;\n else\n ret += 100;\n break;\n case 'M':\n ret += 500;\n case 'D':\n ret += 500;\n }\n cur++;\n }\n return ret;\n}\n
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/1300/","title":"1300. \u200b\u8f6c\u53d8\u200b\u6570\u7ec4\u200b\u540e\u200b\u6700\u200b\u63a5\u8fd1\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u6570\u7ec4\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1300/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u00a0arr
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u503c\u200b\u00a0target
\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u00a0value
\u00a0\uff0c\u200b\u4f7f\u5f97\u200b\u5c06\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u6240\u6709\u200b\u5927\u4e8e\u200b\u00a0value
\u200b\u7684\u200b\u503c\u200b\u53d8\u6210\u200b\u00a0value
\u200b\u540e\u200b\uff0c\u200b\u6570\u7ec4\u200b\u7684\u200b\u548c\u200b\u6700\u200b\u63a5\u8fd1\u200b target
\uff08\u200b\u6700\u200b\u63a5\u8fd1\u200b\u8868\u793a\u200b\u4e24\u8005\u200b\u4e4b\u5dee\u200b\u7684\u200b\u7edd\u5bf9\u503c\u200b\u6700\u5c0f\u200b\uff09\u3002
\u200b\u5982\u679c\u200b\u6709\u200b\u591a\u79cd\u200b\u4f7f\u5f97\u200b\u548c\u200b\u6700\u200b\u63a5\u8fd1\u200b\u00a0target
\u00a0\u200b\u7684\u200b\u65b9\u6848\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8fd4\u56de\u200b\u8fd9\u4e9b\u200b\u6574\u6570\u200b\u4e2d\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\u3002
\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u7b54\u6848\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u00a0arr
\u200b\u4e2d\u200b\u7684\u200b\u6570\u5b57\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aarr = [4,9,3], target = 10\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5f53\u200b\u9009\u62e9\u200b value \u200b\u4e3a\u200b 3 \u200b\u65f6\u200b\uff0c\u200b\u6570\u7ec4\u200b\u4f1a\u200b\u53d8\u6210\u200b [3, 3, 3]\uff0c\u200b\u548c\u200b\u4e3a\u200b 9 \uff0c\u200b\u8fd9\u200b\u662f\u200b\u6700\u200b\u63a5\u8fd1\u200b target \u200b\u7684\u200b\u65b9\u6848\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aarr = [2,3,5], target = 10\n\u200b\u8f93\u51fa\u200b\uff1a5\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1aarr = [60864,25176,27249,21296,20204], target = 56803\n\u200b\u8f93\u51fa\u200b\uff1a11361\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= arr.length <= 10^4
1 <= arr[i], target <= 10^5
Reference
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1300/#_2","title":"\u9898\u89e3","text":"\u200b\u5728\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\\((lo, hi)\\)\u200b\u4e2d\u200b\u786e\u5b9a\u200b\u4e09\u7b49\u5206\u200b\u70b9\u200b\\(x_1, x_2 (x_1 < x_2)\\)\uff0c\u200b\u5206\u522b\u200b\u8ba1\u7b97\u200b\u4e24\u4e2a\u200b\u4e09\u7b49\u5206\u200b\u70b9\u5904\u200b\u7684\u200b\u5dee\u503c\u200b\u3002\u200b\u8bbe\u200b\\(f(x)\\)\u200b\u4e3a\u200b\u5c06\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5927\u4e8e\u200b\\(x\\)\u200b\u7684\u200b\u6570\u503c\u200b\u8f6c\u53d8\u200b\u4e3a\u200b\\(x\\)\u200b\u540e\u200b\u6570\u7ec4\u200b\u6c42\u548c\u200b\u4e0e\u200b\u76ee\u6807\u503c\u200b\u4e4b\u5dee\u200b\u7684\u200b\u7edd\u5bf9\u503c\u200b\u3002
- \u200b\u5f53\u200b\\(f(x_1) < f(x_2)\\)\u200b\u65f6\u200b\uff0c\u200b\u5c06\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7f29\u51cf\u200b\u4e3a\u200b\\((lo, x_2)\\)
- \u200b\u5f53\u200b\\(f(x_1) > f(x_2)\\)\u200b\u65f6\u200b\uff0c\u200b\u5c06\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7f29\u51cf\u200b\u4e3a\u200b\\((x_1, hi)\\)
\\(f(x)\\)\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b+\u200b\u9884\u5904\u7406\u200b\u5728\u200b\\(\\mathcal O(\\log N)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u5185\u200b\u8ba1\u7b97\u200b\u5b8c\u6210\u200b\u3002\u200b\u9884\u5904\u7406\u200b\u9700\u8981\u200b\u82b1\u8d39\u200b\\(\\mathcal O(N)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u3002\u200b\u6392\u5e8f\u200b\u9700\u8981\u200b\u82b1\u8d39\u200b\\(\\mathcal O(N\\log N)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u3002\u200b\u9700\u8981\u200b\\(\\mathcal O(\\log N)\\)\u200b\u6b21\u200b\u4e09\u5206\u200b\u67e5\u627e\u200b\u3002\u200b\u56e0\u6b64\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(N\\log N)\\)\uff08\u200b\u9884\u5904\u7406\u200b\u9636\u6bb5\u200b\uff09
#define ABS(x) ((x) > 0 ? (x) : -(x))\n\nint cmp(const void *a, const void *b)\n{\n return *((int *)a) - *((int *)b);\n}\n\nint bSearch(int *arr, int target, int lo, int hi)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (arr[mid] < target)\n lo = mid + 1;\n else\n hi = mid;\n }\n return lo - 1;\n}\n\nint test(int *arr, int arrSize, int target, int val, int *presum)\n{\n int i = bSearch(arr, val, 0, arrSize), ret = val * (arrSize - i - 1) - target;\n if (i >= 0)\n ret += presum[i];\n return ABS(ret);\n}\n\nint tSearch(int *arr, int arrSize, int target, int lo, int hi, int *presum)\n{\n int left, right;\n while (hi - lo > 2)\n {\n left = (2 * lo + hi) / 3;\n right = (2 * hi + lo) / 3;\n if (test(arr, arrSize, target, left, presum) <= test(arr, arrSize, target, right, presum))\n hi = right;\n else\n lo = left;\n }\n return (2 * hi + lo) / 3;\n}\n\nint findBestValue(int* arr, int arrSize, int target){\n int i = 0, presum[arrSize];\n qsort(arr, arrSize, sizeof(int), cmp);\n presum[0] = arr[0];\n for (i = 1; i < arrSize; i++)\n presum[i] = presum[i - 1] + arr[i];\n\n return tSearch(arr, arrSize, target, -1, arr[arrSize - 1] + 1, presum);\n}\n
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/136/","title":"136. \u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u7684\u200b\u6570\u5b57","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u4f4d\u8fd0\u7b97","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/136/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u975e\u7a7a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\uff0c\u200b\u9664\u4e86\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u4ee5\u5916\u200b\uff0c\u200b\u5176\u4f59\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u5747\u200b\u51fa\u73b0\u200b\u4e24\u6b21\u200b\u3002\u200b\u627e\u51fa\u200b\u90a3\u4e2a\u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e86\u200b\u4e00\u6b21\u200b\u7684\u200b\u5143\u7d20\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u4f60\u200b\u7684\u200b\u7b97\u6cd5\u200b\u5e94\u8be5\u200b\u5177\u6709\u200b\u7ebf\u6027\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u3002 \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u4f7f\u7528\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\u6765\u200b\u5b9e\u73b0\u200b\u5417\u200b\uff1f
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [2,2,1]\n\u200b\u8f93\u51fa\u200b: 1\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b: [4,1,2,1,2]\n\u200b\u8f93\u51fa\u200b: 4\n
Reference
","tags":["\u4f4d\u8fd0\u7b97","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/136/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5f02\u6216\u200b\u8fd0\u7b97\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \u200b\u4ea4\u6362\u5f8b\u200b\uff1a
a ^ b = b ^ a
- \u200b\u7ed3\u5408\u5f8b\u200b\uff1a
(a ^ b) ^ c = a ^ (b ^ c)
- \u200b\u82e5\u200b
a ^ b = c
\uff0c\u200b\u5219\u200ba ^ c = b
\u3001b ^ c = a
a ^ a = 0
\u200b\u6839\u636e\u200b\u6027\u8d28\u200b1\u30012\uff0c\u200b\u5f02\u6216\u200b\u8fd0\u7b97\u200b\u7684\u200b\u7ed3\u679c\u200b\u4e0e\u200b\u53c2\u4e0e\u200b\u8fd0\u7b97\u200b\u7684\u200b\u6240\u6709\u200b\u6570\u503c\u200b\u7684\u200b\u6392\u5217\u200b\u987a\u5e8f\u200b\u65e0\u5173\u200b\u3002\u200b\u6839\u636e\u200b\u6027\u8d28\u200b3\u30014\uff0c\u200b\u76f8\u540c\u200b\u6574\u6570\u200b\u7684\u200b\u5f02\u6216\u200b\u503c\u4e3a\u200b0\uff0c0\u200b\u4e0e\u200b\u4efb\u4f55\u200b\u6570\u200b\u5f02\u6216\u200b\u4ecd\u4e3a\u200b\u8be5\u6570\u200b\u3002\u200b\u56e0\u6b64\u200b\u5c06\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5404\u200b\u5143\u7d20\u200b\u8fdb\u884c\u200b\u6309\u4f4d\u200b\u5f02\u6216\u200b\uff0c\u200b\u5f97\u5230\u200b\u7684\u200b\u7ed3\u679c\u200b\u5373\u200b\u4e3a\u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u7684\u200b\u6570\u503c\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int singleNumber(int* nums, int numsSize){\n int ret = 0, i = 0;\n for (i = 0; i < numsSize; i++)\n ret ^= nums[i];\n return ret;\n}\n
","tags":["\u4f4d\u8fd0\u7b97","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/14/","title":"14. \u200b\u6700\u957f\u200b\u516c\u5171\u200b\u524d\u7f00","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/14/#_1","title":"\u9898\u76ee","text":"\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u6765\u200b\u67e5\u627e\u200b\u5b57\u7b26\u4e32\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u6700\u957f\u200b\u516c\u5171\u200b\u524d\u7f00\u200b\u3002
\u200b\u5982\u679c\u200b\u4e0d\u200b\u5b58\u5728\u200b\u516c\u5171\u200b\u524d\u7f00\u200b\uff0c\u200b\u8fd4\u56de\u200b\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\"\"
\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b: [\"flower\",\"flow\",\"flight\"]\n\u200b\u8f93\u51fa\u200b: \"fl\"\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b: [\"dog\",\"racecar\",\"car\"]\n\u200b\u8f93\u51fa\u200b: \"\"\n\u200b\u89e3\u91ca\u200b: \u200b\u8f93\u5165\u200b\u4e0d\u200b\u5b58\u5728\u200b\u516c\u5171\u200b\u524d\u7f00\u200b\u3002\n
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u6240\u6709\u200b\u8f93\u5165\u200b\u53ea\u200b\u5305\u542b\u200b\u5c0f\u5199\u5b57\u6bcd\u200ba-z
\u3002
Reference
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/14/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5728\u200b\u6bd4\u8f83\u200b\u524d\u7f00\u200b\u65f6\u200b\u53ea\u200b\u9700\u8981\u200b\u5c06\u200b\u524d\u200b n \u200b\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u516c\u5171\u200b\u524d\u7f00\u200b\u4e0e\u200b\u7b2c\u200b n+1 \u200b\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u8fdb\u884c\u200b\u6bd4\u8f83\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
char *compareTwo(char *str1, char *str2)\n{\n char *cur1 = str1, *cur2 = str2, *ret = NULL;\n int len = 0;\n while (*cur1 && *cur2)\n {\n if (*cur1 != *cur2)\n break;\n else\n len++;\n cur1++;\n cur2++;\n }\n ret = (char *)memset(malloc(sizeof(char) * (len + 1)), 0, sizeof(char) * (len + 1));\n return memcpy(ret, str1, sizeof(char) * len);\n}\n\nchar * longestCommonPrefix(char ** strs, int strsSize){\n if (strsSize == 0)\n return memset(malloc(sizeof(char)), 0, sizeof(char));\n if (strsSize == 1)\n return strs[0];\n if (strsSize == 2)\n return compareTwo(strs[0], strs[1]);\n int rec_size = (strsSize + 1) >> 1, i = 0;\n char **rec = (char **)memset(malloc(sizeof(char *) * rec_size), 0, sizeof(char *) * rec_size);\n for (i = 0; i < strsSize >> 1; i++)\n rec[i] = compareTwo(strs[2 * i], strs[2 * i + 1]);\n if (strsSize & 1)\n rec[rec_size - 1] = strs[strsSize - 1];\n return longestCommonPrefix(rec, rec_size);\n}\n
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/150/","title":"150. \u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u6c42\u503c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6808"]},{"location":"coding/leetcode/150/#_1","title":"\u9898\u76ee","text":"\u200b\u6839\u636e\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u793a\u6cd5\u200b\uff0c\u200b\u6c42\u200b\u8868\u8fbe\u5f0f\u200b\u7684\u200b\u503c\u200b\u3002
\u200b\u6709\u6548\u200b\u7684\u200b\u7b97\u7b26\u200b\u5305\u62ec\u200b+
\u3001-
\u3001*
\u3001/
\u3002\u200b\u6bcf\u4e2a\u200b\u8fd0\u7b97\u200b\u5bf9\u8c61\u200b\u53ef\u4ee5\u200b\u662f\u200b\u6574\u6570\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a
- \u200b\u6574\u6570\u200b\u9664\u6cd5\u200b\u53ea\u200b\u4fdd\u7559\u200b\u6574\u6570\u200b\u90e8\u5206\u200b\u3002
- \u200b\u7ed9\u5b9a\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u603b\u662f\u200b\u6709\u6548\u200b\u7684\u200b\u3002\u200b\u6362\u53e5\u8bdd\u8bf4\u200b\uff0c\u200b\u8868\u8fbe\u5f0f\u200b\u603b\u4f1a\u200b\u5f97\u51fa\u200b\u6709\u6548\u200b\u6570\u503c\u200b\u4e14\u200b\u4e0d\u200b\u5b58\u5728\u200b\u9664\u6570\u200b\u4e3a\u200b
0
\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b\uff1atokens = [\"2\",\"1\",\"+\",\"3\",\"*\"]\n\u200b\u8f93\u51fa\u200b\uff1a9\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8be5\u200b\u7b97\u5f0f\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u5e38\u89c1\u200b\u7684\u200b\u4e2d\u7f00\u200b\u7b97\u672f\u200b\u8868\u8fbe\u5f0f\u200b\u4e3a\u200b\uff1a((2 + 1) * 3) = 9\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b\uff1atokens = [\"4\",\"13\",\"5\",\"/\",\"+\"]\n\u200b\u8f93\u51fa\u200b\uff1a6\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8be5\u200b\u7b97\u5f0f\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u5e38\u89c1\u200b\u7684\u200b\u4e2d\u7f00\u200b\u7b97\u672f\u200b\u8868\u8fbe\u5f0f\u200b\u4e3a\u200b\uff1a(4 + (13 / 5)) = 6\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a
\u200b\u8f93\u5165\u200b\uff1atokens = [\"10\",\"6\",\"9\",\"3\",\"+\",\"-11\",\"*\",\"/\",\"*\",\"17\",\"+\",\"5\",\"+\"]\n\u200b\u8f93\u51fa\u200b\uff1a22\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u8be5\u200b\u7b97\u5f0f\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u5e38\u89c1\u200b\u7684\u200b\u4e2d\u7f00\u200b\u7b97\u672f\u200b\u8868\u8fbe\u5f0f\u200b\u4e3a\u200b\uff1a\n ((10 * (6 / ((9 + 3) * -11))) + 17) + 5\n= ((10 * (6 / (12 * -11))) + 17) + 5\n= ((10 * (6 / -132)) + 17) + 5\n= ((10 * 0) + 17) + 5\n= (0 + 17) + 5\n= 17 + 5\n= 22\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= tokens.length <= 10^4
tokens[i]
\u200b\u8981\u4e48\u200b\u662f\u200b\u4e00\u4e2a\u200b\u7b97\u7b26\u200b\uff08\"+\"
\u3001\"-\"
\u3001\"*\"
\u200b\u6216\u200b \"/\"
\uff09\uff0c\u200b\u8981\u4e48\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5728\u200b\u8303\u56f4\u200b [-200, 200]
\u200b\u5185\u200b\u7684\u200b\u6574\u6570\u200b
\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\uff1a
\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u662f\u200b\u4e00\u79cd\u200b\u540e\u7f00\u200b\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u6240\u8c13\u200b\u540e\u7f00\u200b\u5c31\u662f\u6307\u200b\u7b97\u7b26\u200b\u5199\u200b\u5728\u200b\u540e\u9762\u200b\u3002
\u200b\u5e73\u5e38\u200b\u4f7f\u7528\u200b\u7684\u200b\u7b97\u5f0f\u200b\u5219\u200b\u662f\u200b\u4e00\u79cd\u200b\u4e2d\u7f00\u200b\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u5982\u200b ( 1 + 2 ) * ( 3 + 4 )
\u3002 \u200b\u8be5\u200b\u7b97\u5f0f\u200b\u7684\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u5199\u6cd5\u200b\u4e3a\u200b ( ( 1 2 + ) ( 3 4 + ) * )
\u3002 \u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u4e3b\u8981\u200b\u6709\u200b\u4ee5\u4e0b\u200b\u4e24\u4e2a\u200b\u4f18\u70b9\u200b\uff1a
\u200b\u53bb\u6389\u200b\u62ec\u53f7\u200b\u540e\u200b\u8868\u8fbe\u5f0f\u200b\u65e0\u200b\u6b67\u4e49\u200b\uff0c\u200b\u4e0a\u200b\u5f0f\u200b\u5373\u4fbf\u200b\u5199\u6210\u200b 1 2 + 3 4 + *
\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4f9d\u636e\u200b\u6b21\u5e8f\u200b\u8ba1\u7b97\u200b\u51fa\u200b\u6b63\u786e\u200b\u7ed3\u679c\u200b\u3002 \u200b\u9002\u5408\u200b\u7528\u6808\u200b\u64cd\u4f5c\u200b\u8fd0\u7b97\u200b\uff1a\u200b\u9047\u5230\u200b\u6570\u5b57\u200b\u5219\u200b\u5165\u6808\u200b\uff1b\u200b\u9047\u5230\u200b\u7b97\u7b26\u200b\u5219\u200b\u53d6\u51fa\u200b\u6808\u9876\u200b\u4e24\u4e2a\u200b\u6570\u5b57\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u5e76\u200b\u5c06\u200b\u7ed3\u679c\u200b\u538b\u5165\u200b\u6808\u200b\u4e2d\u200b\u3002
Reference
","tags":["\u6808"]},{"location":"coding/leetcode/150/#_2","title":"\u9898\u89e3","text":"\u200b\u6839\u636e\u200b\u9898\u76ee\u200b\u4e2d\u200b\u7684\u200b\u63d0\u793a\u200b\u5373\u53ef\u200b\uff1a
\u200b\u9002\u5408\u200b\u7528\u6808\u200b\u64cd\u4f5c\u200b\u8fd0\u7b97\u200b\uff1a\u200b\u9047\u5230\u200b\u6570\u5b57\u200b\u5219\u200b\u5165\u6808\u200b\uff1b\u200b\u9047\u5230\u200b\u7b97\u7b26\u200b\u5219\u200b\u53d6\u51fa\u200b\u6808\u9876\u200b\u4e24\u4e2a\u200b\u6570\u5b57\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u5e76\u200b\u5c06\u200b\u7ed3\u679c\u200b\u538b\u5165\u200b\u6808\u200b\u4e2d\u200b\u3002
struct ListNode *getNode(int val, struct ListNode *next)\n{\n struct ListNode *ret = (struct ListNode *)malloc(sizeof(struct ListNode));\n ret->val = val;\n ret->next = next;\n return ret;\n}\nstruct ListNode *operand(struct ListNode *Stack, char operand)\n{\n struct ListNode *cur1 = Stack, *cur2 = Stack->next, *temp = cur2->next;\n int ret;\n switch (operand)\n {\n case '+':\n ret = cur1->val + cur2->val;\n break;\n case '-':\n ret = cur2->val - cur1->val;\n break;\n case '*':\n ret = cur1->val * cur2->val;\n break;\n case '/':\n ret = cur2->val / cur1->val;\n break;\n }\n free(cur1);\n free(cur2);\n return getNode(ret, temp);\n}\nint evalRPN(char ** tokens, int tokensSize){\n struct ListNode *Stack = NULL;\n int i = 0;\n char *cur;\n for (i = 0; i < tokensSize; i++)\n {\n cur = tokens[i];\n if (*cur >= '0' && *cur <= '9' || strlen(cur) > 1)\n Stack = getNode(atoi(cur), Stack);\n else\n Stack = operand(Stack, *cur);\n }\n return Stack->val;\n}\n
","tags":["\u6808"]},{"location":"coding/leetcode/155/","title":"155. \u200b\u6700\u5c0f\u200b\u6808","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/155/#_1","title":"\u9898\u76ee","text":"\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u652f\u6301\u200b push
\uff0cpop
\uff0ctop
\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u5e76\u200b\u80fd\u200b\u5728\u200b\u5e38\u6570\u200b\u65f6\u95f4\u200b\u5185\u200b\u68c0\u7d22\u200b\u5230\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b\u7684\u200b\u6808\u200b\u3002
push(x)
\u2014\u2014 \u200b\u5c06\u200b\u5143\u7d20\u200b x \u200b\u63a8\u5165\u200b\u6808\u4e2d\u200b\u3002 pop()
\u00a0\u2014\u2014 \u200b\u5220\u9664\u200b\u6808\u9876\u200b\u7684\u200b\u5143\u7d20\u200b\u3002 top()
\u00a0\u2014\u2014 \u200b\u83b7\u53d6\u200b\u6808\u9876\u200b\u5143\u7d20\u200b\u3002 getMin()
\u2014\u2014 \u200b\u68c0\u7d22\u200b\u6808\u4e2d\u200b\u7684\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b\uff1a\n[\"MinStack\",\"push\",\"push\",\"push\",\"getMin\",\"pop\",\"top\",\"getMin\"]\n[[],[-2],[0],[-3],[],[],[],[]]\n\n\u200b\u8f93\u51fa\u200b\uff1a\n[null,null,null,null,-3,null,0,-2]\n\n\u200b\u89e3\u91ca\u200b\uff1a\nMinStack minStack = new MinStack();\nminStack.push(-2);\nminStack.push(0);\nminStack.push(-3);\nminStack.getMin(); --> \u200b\u8fd4\u56de\u200b -3.\nminStack.pop();\nminStack.top(); --> \u200b\u8fd4\u56de\u200b 0.\nminStack.getMin(); --> \u200b\u8fd4\u56de\u200b -2.\n
\u200b\u63d0\u793a\u200b\uff1a
pop
\u3001top
\u200b\u548c\u200b getMin
\u200b\u64cd\u4f5c\u200b\u603b\u662f\u200b\u5728\u200b \u200b\u975e\u7a7a\u6808\u200b \u200b\u4e0a\u200b\u8c03\u7528\u200b\u3002
Reference
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/155/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u4e24\u4e2a\u200b\u57df\u200b\u5206\u522b\u200b\u5b58\u50a8\u200b\u5f53\u524d\u200b\u6570\u503c\u200b\u548c\u200b\u5f53\u524d\u200b\u6808\u4e2d\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
#define MIN(x, y) (x < y ? x : y)\nstruct cell\n{\n int val;\n int curMin;\n};\ntypedef struct {\n struct cell values[10000];\n int top;\n} MinStack;\n/** initialize your data structure here. */\nMinStack *minStackCreate() \n{\n return (MinStack *)memset(malloc(sizeof(MinStack)), 0, sizeof(MinStack));\n}\nvoid minStackPush(MinStack* obj, int x)\n{\n obj->values[obj->top].val = x;\n obj->values[obj->top].curMin = obj->top > 0 ? MIN(x, obj->values[obj->top - 1].curMin) : x;\n obj->top++;\n}\nvoid minStackPop(MinStack *obj)\n{\n obj->top--;\n}\nint minStackTop(MinStack* obj)\n{\n return obj->values[obj->top - 1].val;\n}\nint minStackGetMin(MinStack* obj)\n{\n return obj->values[obj->top - 1].curMin;\n}\nvoid minStackFree(MinStack* obj)\n{\n free(obj);\n}\n/**\n * Your MinStack struct will be instantiated and called as such:\n * MinStack* obj = minStackCreate();\n * minStackPush(obj, x);\n\n * minStackPop(obj);\n\n * int param_3 = minStackTop(obj);\n\n * int param_4 = minStackGetMin(obj);\n\n * minStackFree(obj);\n*/\n
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/1603/","title":"1603. \u200b\u8bbe\u8ba1\u200b\u505c\u8f66\u200b\u7cfb\u7edf","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u8bbe\u8ba1"]},{"location":"coding/leetcode/1603/#_1","title":"\u9898\u76ee","text":"\u200b\u8bf7\u200b\u4f60\u200b\u7ed9\u200b\u4e00\u4e2a\u200b\u505c\u8f66\u573a\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u505c\u8f66\u200b\u7cfb\u7edf\u200b\u3002\u200b\u505c\u8f66\u573a\u200b\u603b\u5171\u200b\u6709\u200b\u4e09\u79cd\u200b\u4e0d\u540c\u200b\u5927\u5c0f\u200b\u7684\u200b\u8f66\u4f4d\u200b\uff1a\u200b\u5927\u200b\uff0c\u200b\u4e2d\u200b\u548c\u200b\u5c0f\u200b\uff0c\u200b\u6bcf\u79cd\u200b\u5c3a\u5bf8\u200b\u5206\u522b\u200b\u6709\u200b\u56fa\u5b9a\u200b\u6570\u76ee\u200b\u7684\u200b\u8f66\u4f4d\u200b\u3002
\u200b\u8bf7\u200b\u4f60\u200b\u5b9e\u73b0\u200b\u00a0ParkingSystem
\u00a0\u200b\u7c7b\u200b\uff1a
ParkingSystem(int big, int medium, int small)``\u00a0\u200b\u521d\u59cb\u5316\u200b\u00a0ParkingSystem\u00a0\u200b\u7c7b\u200b\uff0c\u200b\u4e09\u4e2a\u200b\u53c2\u6570\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u6bcf\u79cd\u200b\u505c\u8f66\u4f4d\u200b\u7684\u200b\u6570\u76ee\u200b\u3002
bool addCar(int carType)
\u00a0\u200b\u68c0\u67e5\u200b\u662f\u5426\u200b\u6709\u200b\u00a0carType
\u00a0\u200b\u5bf9\u5e94\u200b\u7684\u200b\u505c\u8f66\u4f4d\u200b\u3002\u00a0carType
\u00a0\u200b\u6709\u200b\u4e09\u79cd\u200b\u7c7b\u578b\u200b\uff1a\u200b\u5927\u200b\uff0c\u200b\u4e2d\u200b\uff0c\u200b\u5c0f\u200b\uff0c\u200b\u5206\u522b\u200b\u7528\u200b\u6570\u5b57\u200b\u00a01
\uff0c\u00a02
\u00a0\u200b\u548c\u200b\u00a03
\u00a0\u200b\u8868\u793a\u200b\u3002\u200b\u4e00\u8f86\u8f66\u200b\u53ea\u80fd\u200b\u505c\u200b\u5728\u200b\u00a0carType
\u00a0\u200b\u5bf9\u5e94\u200b\u5c3a\u5bf8\u200b\u7684\u200b\u505c\u8f66\u4f4d\u200b\u4e2d\u200b\u3002\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u7a7a\u8f66\u200b\u4f4d\u200b\uff0c\u200b\u8bf7\u200b\u8fd4\u56de\u200b\u00a0false
\u00a0\uff0c\u200b\u5426\u5219\u200b\u5c06\u200b\u8be5\u8f66\u200b\u505c\u5165\u200b\u8f66\u4f4d\u200b\u5e76\u200b\u8fd4\u56de\u200b\u00a0true
\u00a0\u3002\u00a0
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a\n[\"ParkingSystem\", \"addCar\", \"addCar\", \"addCar\", \"addCar\"]\n[[1, 1, 0], [1], [2], [3], [1]]\n\u200b\u8f93\u51fa\u200b\uff1a\n[null, true, true, false, false]\n
\u200b\u89e3\u91ca\u200b\uff1a
ParkingSystem parkingSystem = new ParkingSystem(1, 1, 0);\nparkingSystem.addCar(1); // \u200b\u8fd4\u56de\u200b true \uff0c\u200b\u56e0\u4e3a\u200b\u6709\u200b 1 \u200b\u4e2a\u7a7a\u200b\u7684\u200b\u5927\u200b\u8f66\u4f4d\u200b\nparkingSystem.addCar(2); // \u200b\u8fd4\u56de\u200b true \uff0c\u200b\u56e0\u4e3a\u200b\u6709\u200b 1 \u200b\u4e2a\u7a7a\u200b\u7684\u200b\u4e2d\u200b\u8f66\u4f4d\u200b\nparkingSystem.addCar(3); // \u200b\u8fd4\u56de\u200b false \uff0c\u200b\u56e0\u4e3a\u200b\u6ca1\u6709\u200b\u7a7a\u200b\u7684\u200b\u5c0f\u8f66\u200b\u4f4d\u200b\nparkingSystem.addCar(1); // \u200b\u8fd4\u56de\u200b false \uff0c\u200b\u56e0\u4e3a\u200b\u6ca1\u6709\u200b\u7a7a\u200b\u7684\u200b\u5927\u200b\u8f66\u4f4d\u200b\uff0c\u200b\u552f\u4e00\u200b\u4e00\u4e2a\u200b\u5927\u200b\u8f66\u4f4d\u200b\u5df2\u7ecf\u200b\u88ab\u200b\u5360\u636e\u200b\u4e86\u200b\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= big, medium, small <= 1000
carType
\u00a0\u200b\u53d6\u503c\u200b\u4e3a\u200b\u00a01
\uff0c\u00a02
\u00a0\u200b\u6216\u200b\u00a03
- \u200b\u6700\u591a\u4f1a\u200b\u8c03\u7528\u200b\u00a0
addCar
\u00a0\u200b\u51fd\u6570\u200b\u00a01000\u00a0\u200b\u6b21\u200b
Reference
","tags":["\u8bbe\u8ba1"]},{"location":"coding/leetcode/1603/#_2","title":"\u9898\u89e3","text":"typedef struct {\n int cars[3];\n} ParkingSystem;\n\n\nParkingSystem* parkingSystemCreate(int big, int medium, int small) {\n ParkingSystem *ret = (ParkingSystem *)malloc(sizeof(ParkingSystem));\n ret->cars[0] = big;\n ret->cars[1] = medium;\n ret->cars[2] = small;\n return ret;\n}\n\nbool parkingSystemAddCar(ParkingSystem* obj, int carType) {\n if (obj->cars[carType - 1] == 0)\n return false;\n else\n {\n obj->cars[carType - 1]--;\n return true;\n }\n}\n\nvoid parkingSystemFree(ParkingSystem* obj) {\n free(obj);\n}\n\n/**\n * Your ParkingSystem struct will be instantiated and called as such:\n * ParkingSystem* obj = parkingSystemCreate(big, medium, small);\n * bool param_1 = parkingSystemAddCar(obj, carType);\n\n * parkingSystemFree(obj);\n*/\n
","tags":["\u8bbe\u8ba1"]},{"location":"coding/leetcode/17.21/","title":"\u9762\u8bd5\u9898\u200b 17.21. \u200b\u76f4\u65b9\u56fe\u200b\u7684\u200b\u6c34\u91cf","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
"},{"location":"coding/leetcode/17.21/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u76f4\u65b9\u56fe\u200b(\u200b\u4e5f\u200b\u79f0\u200b\u67f1\u72b6\u56fe\u200b)\uff0c\u200b\u5047\u8bbe\u200b\u6709\u4eba\u200b\u4ece\u200b\u4e0a\u9762\u200b\u6e90\u6e90\u4e0d\u65ad\u200b\u5730\u200b\u5012\u6c34\u200b\uff0c\u200b\u6700\u540e\u200b\u76f4\u65b9\u56fe\u200b\u80fd\u5b58\u200b\u591a\u5c11\u200b\u6c34\u91cf\u200b?\u200b\u76f4\u65b9\u56fe\u200b\u7684\u200b\u5bbd\u5ea6\u200b\u4e3a\u200b 1
\u3002
\u200b\u4e0a\u9762\u200b\u662f\u200b\u7531\u200b\u6570\u7ec4\u200b [0,1,0,2,1,0,1,3,2,1,2,1]
\u200b\u8868\u793a\u200b\u7684\u200b\u76f4\u65b9\u56fe\u200b\uff0c\u200b\u5728\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u63a5\u200b 6
\u200b\u4e2a\u200b\u5355\u4f4d\u200b\u7684\u200b\u6c34\u200b\uff08\u200b\u84dd\u8272\u200b\u90e8\u5206\u200b\u8868\u793a\u200b\u6c34\u200b\uff09\u3002\u00a0\u200b\u611f\u8c22\u200b Marcos \u200b\u8d21\u732e\u200b\u6b64\u56fe\u200b\u3002
\u200b\u793a\u4f8b\u200b:
\u200b\u8f93\u5165\u200b: [0,1,0,2,1,0,1,3,2,1,2,1]\n\u200b\u8f93\u51fa\u200b: 6\n
Reference
\u200b\u6ce8\u200b\uff1a\u200b\u672c\u9898\u200b\u4e0e\u200b42. \u200b\u63a5\u200b\u96e8\u6c34\u200b\u76f8\u540c\u200b\u3002
"},{"location":"coding/leetcode/17.21/#_2","title":"\u9898\u89e3","text":"#define MAX(x, y) ((x) > (y) ? x : y)\n#define MIN(x, y) ((x) < (y) ? x : y)\n#define ABS(x) ((x) > 0 ? (x) : -(x))\nint trap(int* height, int heightSize){\n int highest = 0, higher = 0, highestIndex = -1, higherIndex = -1, i = 0, ret = 0;\n for (i = 0; i < heightSize; i++)\n {\n if (height[i] > highest)\n {\n higher = highest;\n higherIndex = highestIndex;\n highest = height[i];\n highestIndex = i;\n }\n else if (height[i] > higher)\n {\n higher = height[i];\n higherIndex = i;\n }\n }\n if (heightSize <= 2 || higherIndex < 0 || highestIndex < 0)\n return 0;\n ret = higher * (ABS(higherIndex - highestIndex) - 1);\n int left = MIN(higherIndex, highestIndex) + 1, right = MAX(higherIndex, highestIndex);\n for (i = left; i < right; i++)\n ret -= height[i];\n return ret + trap(height, left) + trap(height + right, heightSize - right);\n}\n
"},{"location":"coding/leetcode/17/","title":"17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52","\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/17/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u4ec5\u200b\u5305\u542b\u200b\u6570\u5b57\u200b\u00a02-9
\u00a0\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u8fd4\u56de\u200b\u6240\u6709\u200b\u5b83\u200b\u80fd\u200b\u8868\u793a\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b\u3002\u200b\u7b54\u6848\u200b\u53ef\u4ee5\u200b\u6309\u200b \u200b\u4efb\u610f\u200b\u987a\u5e8f\u200b \u200b\u8fd4\u56de\u200b\u3002
\u200b\u7ed9\u51fa\u200b\u6570\u5b57\u200b\u5230\u200b\u5b57\u6bcd\u200b\u7684\u200b\u6620\u5c04\u200b\u5982\u4e0b\u200b\uff08\u200b\u4e0e\u200b\u7535\u8bdd\u200b\u6309\u952e\u200b\u76f8\u540c\u200b\uff09\u3002\u200b\u6ce8\u610f\u200b 1 \u200b\u4e0d\u200b\u5bf9\u5e94\u200b\u4efb\u4f55\u200b\u5b57\u6bcd\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1adigits = \"23\"\n\u200b\u8f93\u51fa\u200b\uff1a[\"ad\",\"ae\",\"af\",\"bd\",\"be\",\"bf\",\"cd\",\"ce\",\"cf\"]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1adigits = \"\"\n\u200b\u8f93\u51fa\u200b\uff1a[]\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1adigits = \"2\"\n\u200b\u8f93\u51fa\u200b\uff1a[\"a\",\"b\",\"c\"]\n
\u200b\u63d0\u793a\u200b\uff1a
- 0 <= digits.length <= 4
- digits[i] \u200b\u662f\u200b\u8303\u56f4\u200b ['2', '9'] \u200b\u7684\u200b\u4e00\u4e2a\u200b\u6570\u5b57\u200b\u3002
Reference
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52","\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/17/#_2","title":"\u9898\u89e3","text":"/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\nvoid dfs(char *digits, char **ret, int *subscript, char *current, int end, char **map)\n{\n if (*digits == 0)\n {\n strcpy(ret[(*subscript)++], current);\n return;\n }\n int i = 0, target = *digits - '2';\n char *cur = map[target];\n while(*cur)\n {\n current[end] = *cur;\n dfs(digits + 1, ret, subscript, current, end + 1, map);\n cur++;\n }\n}\nchar ** letterCombinations(char * digits, int* returnSize){\n *returnSize = 1;\n char *cur = digits, len = 0, *charMap[] = {\"abc\", \"def\", \"ghi\", \"jkl\", \"mno\", \"pqrs\", \"tuv\", \"wxyz\"};\n while(*cur)\n {\n *returnSize *= (*cur == '7' || *cur == '9') ? 4 : 3;\n cur++;\n len++;\n }\n if (len == 0)\n {\n *returnSize = 0;\n return NULL;\n }\n char **ret = (char **)malloc(sizeof(char *) * *returnSize),\n *current = (char *)memset(malloc(sizeof(char) * (len + 1)), 0, sizeof(char) * (len + 1));\n for (int i = 0; i < *returnSize; i++)\n ret[i] = (int *)memset(malloc(sizeof(char) * (len + 1)), 0, sizeof(char) * (len + 1));\n int subscript = 0;\n dfs(digits, ret, &subscript, current, 0, charMap);\n return ret;\n}\n
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52","\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/1835/","title":"1835. \u200b\u6240\u6709\u200b\u6570\u5bf9\u200b\u6309\u4f4d\u200b\u4e0e\u200b\u7ed3\u679c\u200b\u7684\u200b\u5f02\u6216\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/1835/#_1","title":"\u9898\u76ee","text":"\u200b\u5217\u8868\u200b\u7684\u200b \u200b\u5f02\u6216\u200b\u548c\u200b\uff08XOR sum\uff09\u200b\u6307\u5bf9\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u8fdb\u884c\u200b\u6309\u4f4d\u200b XOR
\u200b\u8fd0\u7b97\u200b\u7684\u200b\u7ed3\u679c\u200b\u3002\u200b\u5982\u679c\u200b\u5217\u8868\u200b\u4e2d\u4ec5\u200b\u6709\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5176\u200b \u200b\u5f02\u6216\u200b\u548c\u200b \u200b\u5c31\u200b\u7b49\u4e8e\u200b\u8be5\u200b\u5143\u7d20\u200b\u3002
- \u200b\u4f8b\u5982\u200b\uff0c
[1,2,3,4]
\u200b\u7684\u200b \u200b\u5f02\u6216\u200b\u548c\u200b \u200b\u7b49\u4e8e\u200b 1 XOR 2 XOR 3 XOR 4 = 4
\uff0c\u200b\u800c\u200b [3]
\u200b\u7684\u200b \u200b\u5f02\u6216\u200b\u548c\u200b \u200b\u7b49\u4e8e\u200b 3
\u3002
\u200b\u7ed9\u200b\u4f60\u200b\u4e24\u4e2a\u200b\u4e0b\u6807\u200b \u200b\u4ece\u200b 0 \u200b\u5f00\u59cb\u200b \u200b\u8ba1\u6570\u200b\u7684\u200b\u6570\u7ec4\u200b arr1
\u200b\u548c\u200b arr2
\uff0c\u200b\u4e24\u200b\u6570\u7ec4\u200b\u5747\u200b\u7531\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u7ec4\u6210\u200b\u3002
\u200b\u6839\u636e\u200b\u6bcf\u4e2a\u200b\u00a0(i, j)
\u200b\u6570\u5bf9\u200b\uff0c\u200b\u6784\u9020\u200b\u4e00\u4e2a\u200b\u7531\u200b arr1[i] AND arr2[j]
\uff08\u200b\u6309\u4f4d\u200b AND
\u200b\u8fd0\u7b97\u200b\uff09\u200b\u7ed3\u679c\u200b\u7ec4\u6210\u200b\u7684\u200b\u5217\u8868\u200b\u3002\u200b\u5176\u4e2d\u200b 0 <= i < arr1.length
\u200b\u4e14\u200b 0 <= j < arr2.length
\u3002
\u200b\u8fd4\u56de\u200b\u4e0a\u8ff0\u200b\u5217\u8868\u200b\u7684\u200b \u200b\u5f02\u6216\u200b\u548c\u200b \u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aarr1 = [1,2,3], arr2 = [6,5]\n\u200b\u8f93\u51fa\u200b\uff1a0\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5217\u8868\u200b = [1 AND 6, 1 AND 5, 2 AND 6, 2 AND 5, 3 AND 6, 3 AND 5] = [0,1,2,0,2,1] \uff0c\n\u200b\u5f02\u6216\u200b\u548c\u200b = 0 XOR 1 XOR 2 XOR 0 XOR 2 XOR 1 = 0 \u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aarr1 = [12], arr2 = [4]\n\u200b\u8f93\u51fa\u200b\uff1a4\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5217\u8868\u200b = [12 AND 4] = [4] \uff0c\u200b\u5f02\u6216\u200b\u548c\u200b = 4 \u3002\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= arr1.length, arr2.length <= 105
0 <= arr1[i], arr2[j] <= 109
Reference
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/1835/#_2","title":"\u9898\u89e3","text":"\u200b\u8bbe\u200b\u4e24\u4e2a\u200b\u6570\u5217\u200b\\(A=\\{a_i\\}_m\\)\u200b\u4e0e\u200b\\(B=\\{b_j\\}_n\\)\uff0c\u200b\u5e76\u200b\u4f7f\u7528\u200b\u8fd0\u7b97\u7b26\u200b\\(\\otimes\\)\u200b\u8868\u793a\u200b \u200b\u5f02\u6216\u200b \u200b\u64cd\u4f5c\u200b\uff0c\u200b\u4f7f\u7528\u200b\u8fd0\u7b97\u7b26\u200b\\(\\land\\)\u200b\u8868\u793a\u200b \u200b\u4e0e\u200b \u200b\u64cd\u4f5c\u200b\uff0c\u200b\u5219\u200b\u672c\u9898\u200b\u7684\u200b\u7ed3\u679c\u200b\u4e3a\u200b\uff1a
\\[ f(A, B) = \\bigotimes_{i=1}^{m} \\bigotimes_{j=1}^n a_i\\land b_j \\] \u200b\u8003\u8651\u200b\u8868\u8fbe\u5f0f\u200b\\((a\\otimes b) \\land (a \\otimes c)\\)\uff1a
\\[ \\begin{aligned} & (a\\otimes b) \\land (a \\otimes c) \\\\ \\Leftrightarrow & ((a\\lor b)\\land (\\lnot a\\lor\\lnot b)) \\land ((a\\lor c)\\land (\\lnot a\\lor\\lnot c)) \\\\ \\Leftrightarrow & (a\\lor b)\\land (\\lnot a\\lor\\lnot b) \\land (a\\lor c)\\land (\\lnot a\\lor\\lnot c) \\\\ \\Leftrightarrow & (a\\land (b\\lor c)) \\land (a\\land (\\lnot b\\lor\\lnot c)) \\\\ \\Leftrightarrow & a\\land (b\\otimes c) \\end{aligned} \\] \u200b\u56e0\u6b64\u200b\uff0c\\(\\otimes\\)\u200b\u8fd0\u7b97\u200b\u5bf9\u200b\\(\\land\\)\u200b\u8fd0\u7b97\u200b\u6ee1\u8db3\u200b\u5206\u914d\u5f8b\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ \\begin{aligned} f(A, B) &= \\bigotimes_{i=1}^{m} \\bigotimes_{j=1}^n a_i\\land b_j \\\\ &= \\bigotimes_{i=1}^{m} \\left(a_{i}\\land\\bigotimes_{j=1}^n b_j\\right) \\\\ &= \\left(\\bigotimes_{i=1}^{m} a_i\\right)\\land\\left(\\bigotimes_{j=1}^n b_j\\right) \\end{aligned} \\] int getXORSum(int* arr1, int arr1Size, int* arr2, int arr2Size){\n int a = 0, b = 0, i = 0;\n for (i = 0; i < arr1Size; i++)\n a ^= arr1[i];\n for (i = 0; i < arr2Size; i++)\n b ^= arr2[i];\n return a & b;\n}\n
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/189/","title":"189. \u200b\u65cb\u8f6c\u200b\u6570\u7ec4","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/189/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5c06\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u00a0k\u00a0\u200b\u4e2a\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u5176\u4e2d\u200b\u00a0k\u00a0\u200b\u662f\u975e\u200b\u8d1f\u6570\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [1,2,3,4,5,6,7] \u200b\u548c\u200b k = 3\n\u200b\u8f93\u51fa\u200b: [5,6,7,1,2,3,4]\n\u200b\u89e3\u91ca\u200b:\n\u200b\u5411\u200b\u53f3\u200b\u65cb\u8f6c\u200b 1 \u200b\u6b65\u200b: [7,1,2,3,4,5,6]\n\u200b\u5411\u200b\u53f3\u200b\u65cb\u8f6c\u200b 2 \u200b\u6b65\u200b: [6,7,1,2,3,4,5]\n\u200b\u5411\u200b\u53f3\u200b\u65cb\u8f6c\u200b 3 \u200b\u6b65\u200b: [5,6,7,1,2,3,4]\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b: [-1,-100,3,99] \u200b\u548c\u200b k = 2\n\u200b\u8f93\u51fa\u200b: [3,99,-1,-100]\n\u200b\u89e3\u91ca\u200b: \n\u200b\u5411\u200b\u53f3\u200b\u65cb\u8f6c\u200b 1 \u200b\u6b65\u200b: [99,-1,-100,3]\n\u200b\u5411\u200b\u53f3\u200b\u65cb\u8f6c\u200b 2 \u200b\u6b65\u200b: [3,99,-1,-100]\n
\u200b\u8bf4\u660e\u200b\uff1a
- \u200b\u5c3d\u53ef\u80fd\u200b\u60f3\u51fa\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\uff0c\u200b\u81f3\u5c11\u200b\u6709\u200b\u4e09\u79cd\u200b\u4e0d\u540c\u200b\u7684\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\u3002
- \u200b\u8981\u6c42\u200b\u4f7f\u7528\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(1)\\)\u200b\u7684\u200b\u539f\u5730\u200b\u7b97\u6cd5\u200b\u3002
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/189/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5148\u200b\u53cd\u8f6c\u200b\u6574\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u518d\u200b\u4ee5\u200b\u7b2c\u200b\\(k\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\u4e3a\u754c\u200b\uff0c\u200b\u5206\u522b\u200b\u53cd\u8f6c\u200b\\(k\\)\u200b\u4e4b\u524d\u200b\u7684\u200b\u90e8\u5206\u200b\u4e0e\u200b\\(k\\)\u200b\u53ca\u200b\\(k\\)\u200b\u4e4b\u540e\u200b\u7684\u200b\u90e8\u5206\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
void Reverse(int* nums, int numsSize)\n{\n int head = 0, tail = numsSize - 1, temp = 0;\n while(tail > head)\n {\n temp = nums[head];\n nums[head] = nums[tail];\n nums[tail] = temp;\n tail--;\n head++;\n }\n}\nvoid rotate(int* nums, int numsSize, int k){\n if (numsSize < 2)\n return;\n k %= numsSize;\n Reverse(nums, numsSize);\n Reverse(nums, k);\n Reverse(nums + k, numsSize - k);\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/19/","title":"19. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u7684\u200b\u5012\u6570\u7b2c\u200bN\u200b\u4e2a\u200b\u8282\u70b9","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/19/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\uff0c\u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u7684\u200b\u5012\u6570\u7b2c\u200b\u00a0n\u00a0\u200b\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u5e76\u4e14\u200b\u8fd4\u56de\u200b\u94fe\u8868\u200b\u7684\u200b\u5934\u200b\u7ed3\u70b9\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
`` \u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b: 1->2->3->4->5, \u200b\u548c\u200b n = 2.
\u200b\u5f53\u200b\u5220\u9664\u200b\u4e86\u200b\u5012\u6570\u200b\u7b2c\u4e8c\u4e2a\u200b\u8282\u70b9\u200b\u540e\u200b\uff0c\u200b\u94fe\u8868\u200b\u53d8\u4e3a\u200b 1->2->3->5. ``
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u7ed9\u5b9a\u200b\u7684\u200b n\u00a0\u200b\u4fdd\u8bc1\u200b\u662f\u200b\u6709\u6548\u200b\u7684\u200b\u3002
\u200b\u8fdb\u9636\u200b\uff1a
\u200b\u4f60\u200b\u80fd\u200b\u5c1d\u8bd5\u200b\u4f7f\u7528\u200b\u4e00\u8d9f\u200b\u626b\u63cf\u200b\u5b9e\u73b0\u200b\u5417\u200b\uff1f
Reference
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/19/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5148\u200b\u627e\u5230\u200b\u5012\u6570\u7b2c\u200b n \u200b\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u518d\u200b\u8fdb\u884c\u200b\u5220\u9664\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode* removeNthFromEnd(struct ListNode* head, int n){\n struct ListNode *cur = head, *temp = NULL;\n int length = 1, i = 0;\n while(cur->next != NULL)\n {\n cur = cur->next;\n length++;\n }\n cur = head;\n for (i = 0; i < length - n - 1; i++)\n cur = cur->next;\n if (n == length)\n return cur->next;\n if (cur->next)\n {\n cur->next = cur->next->next;\n return head;\n }\n return NULL;\n}\n
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/198/","title":"198. \u200b\u6253\u5bb6\u52ab\u820d","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/198/#_1","title":"\u9898\u76ee","text":"\u200b\u4f60\u200b\u662f\u200b\u4e00\u4e2a\u200b\u4e13\u4e1a\u200b\u7684\u200b\u5c0f\u5077\u200b\uff0c\u200b\u8ba1\u5212\u200b\u5077\u7a83\u200b\u6cbf\u8857\u200b\u7684\u200b\u623f\u5c4b\u200b\u3002\u200b\u6bcf\u95f4\u623f\u200b\u5185\u200b\u90fd\u200b\u85cf\u6709\u200b\u4e00\u5b9a\u200b\u7684\u200b\u73b0\u91d1\u200b\uff0c\u200b\u5f71\u54cd\u200b\u4f60\u200b\u5077\u7a83\u200b\u7684\u200b\u552f\u4e00\u200b\u5236\u7ea6\u200b\u56e0\u7d20\u200b\u5c31\u662f\u200b\u76f8\u90bb\u200b\u7684\u200b\u623f\u5c4b\u200b\u88c5\u6709\u200b\u76f8\u4e92\u200b\u8fde\u901a\u200b\u7684\u200b\u9632\u76d7\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u5982\u679c\u200b\u4e24\u95f4\u200b\u76f8\u90bb\u200b\u7684\u200b\u623f\u5c4b\u200b\u5728\u200b\u540c\u4e00\u200b\u665a\u4e0a\u200b\u88ab\u200b\u5c0f\u5077\u200b\u95ef\u5165\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u62a5\u8b66\u200b\u3002
\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u4ee3\u8868\u200b\u6bcf\u4e2a\u200b\u623f\u5c4b\u200b\u5b58\u653e\u200b\u91d1\u989d\u200b\u7684\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u4f60\u200b \u200b\u4e0d\u200b\u89e6\u52a8\u200b\u8b66\u62a5\u200b\u88c5\u7f6e\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b \uff0c\u200b\u4e00\u591c\u200b\u4e4b\u5185\u200b\u80fd\u591f\u200b\u5077\u7a83\u200b\u5230\u200b\u7684\u200b\u6700\u9ad8\u200b\u91d1\u989d\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a[1,2,3,1]\n\u200b\u8f93\u51fa\u200b\uff1a4\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5077\u7a83\u200b 1 \u200b\u53f7\u200b\u623f\u5c4b\u200b (\u200b\u91d1\u989d\u200b = 1) \uff0c\u200b\u7136\u540e\u200b\u5077\u7a83\u200b 3 \u200b\u53f7\u200b\u623f\u5c4b\u200b (\u200b\u91d1\u989d\u200b = 3)\u3002\n\u00a0 \u200b\u5077\u7a83\u200b\u5230\u200b\u7684\u200b\u6700\u9ad8\u200b\u91d1\u989d\u200b = 1 + 3 = 4 \u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1a[2,7,9,3,1]\n\u200b\u8f93\u51fa\u200b\uff1a12\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5077\u7a83\u200b 1 \u200b\u53f7\u200b\u623f\u5c4b\u200b (\u200b\u91d1\u989d\u200b = 2), \u200b\u5077\u7a83\u200b 3 \u200b\u53f7\u200b\u623f\u5c4b\u200b (\u200b\u91d1\u989d\u200b = 9)\uff0c\u200b\u63a5\u7740\u200b\u5077\u7a83\u200b 5 \u200b\u53f7\u200b\u623f\u5c4b\u200b (\u200b\u91d1\u989d\u200b = 1)\u3002\n\u00a0 \u200b\u5077\u7a83\u200b\u5230\u200b\u7684\u200b\u6700\u9ad8\u200b\u91d1\u989d\u200b = 2 + 9 + 1 = 12 \u3002\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= nums.length <= 100\n0 <= nums[i] <= 400\n
Reference
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/198/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\uff0c\u200b\u4ee4\u200b\\(f(i)\\)\u200b\u8868\u793a\u200b\u524d\u200b\\(i\\)\u200b\u4e2a\u200b\u623f\u95f4\u200b\u6240\u200b\u80fd\u200b\u83b7\u53d6\u200b\u7684\u200b\u6700\u5927\u200b\u91d1\u989d\u200b\uff0c\u200b\u5219\u200b\u6709\u200b\uff1a
\\[ f(i + 1) = \\max\\left\\{f(i), a_{i + 1} + f(i - 1)\\right\\} \\] \u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
#define MAX(x, y) (x > y ? x : y)\nint rob(int* nums, int numsSize){\n if (numsSize < 2)\n return numsSize ? *nums : 0;\n int *dp = (int *)memset(malloc(sizeof(int) * (numsSize)), 0, sizeof(int) * (numsSize)), i = 0;\n dp[0] = *nums;\n dp[1] = MAX(nums[0], nums[1]);\n for (i = 2; i < numsSize; i++)\n dp[i] = MAX(dp[i-2] + nums[i], dp[i-1]);\n return dp[numsSize-1];\n}\n
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/2/","title":"2. \u200b\u4e24\u200b\u6570\u200b\u76f8\u52a0","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u9012\u5f52","\u94fe\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/2/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e24\u4e2a\u200b\u00a0\u200b\u975e\u7a7a\u200b \u200b\u7684\u200b\u94fe\u8868\u200b\uff0c\u200b\u8868\u793a\u200b\u4e24\u4e2a\u200b\u975e\u8d1f\u200b\u7684\u200b\u6574\u6570\u200b\u3002\u200b\u5b83\u4eec\u200b\u6bcf\u4f4d\u200b\u6570\u5b57\u200b\u90fd\u200b\u662f\u200b\u6309\u7167\u200b\u00a0\u200b\u9006\u5e8f\u200b\u00a0\u200b\u7684\u200b\u65b9\u5f0f\u200b\u5b58\u50a8\u200b\u7684\u200b\uff0c\u200b\u5e76\u4e14\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\u53ea\u80fd\u200b\u5b58\u50a8\u200b\u00a0\u200b\u4e00\u4f4d\u200b\u00a0\u200b\u6570\u5b57\u200b\u3002
\u200b\u8bf7\u200b\u4f60\u200b\u5c06\u200b\u4e24\u4e2a\u200b\u6570\u200b\u76f8\u52a0\u200b\uff0c\u200b\u5e76\u200b\u4ee5\u200b\u76f8\u540c\u200b\u5f62\u5f0f\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u8868\u793a\u200b\u548c\u200b\u7684\u200b\u94fe\u8868\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u9664\u4e86\u200b\u6570\u5b57\u200b 0
\u200b\u4e4b\u5916\u200b\uff0c\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u6570\u90fd\u200b\u4e0d\u4f1a\u200b\u4ee5\u200b 0
\u00a0\u200b\u5f00\u5934\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1al1 = [2,4,3], l2 = [5,6,4]\n\u200b\u8f93\u51fa\u200b\uff1a[7,0,8]\n\u200b\u89e3\u91ca\u200b\uff1a342 + 465 = 807.\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1al1 = [0], l2 = [0]\n\u200b\u8f93\u51fa\u200b\uff1a[0]\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1al1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]\n\u200b\u8f93\u51fa\u200b\uff1a[8,9,9,9,0,0,0,1]\n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u6bcf\u4e2a\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b\u6570\u5728\u200b\u8303\u56f4\u200b
[1, 100]
\u200b\u5185\u200b 0 <= Node.val <= 9
- \u200b\u9898\u76ee\u200b\u6570\u636e\u200b\u4fdd\u8bc1\u200b\u5217\u8868\u200b\u8868\u793a\u200b\u7684\u200b\u6570\u5b57\u200b\u4e0d\u200b\u542b\u200b\u524d\u5bfc\u200b\u96f6\u200b
","tags":["\u9012\u5f52","\u94fe\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/2/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u9012\u5f52\u200b\u7684\u200b\u601d\u60f3\u200b\uff0c\u200b\u5c06\u200b\u8ba1\u7b97\u200b\u52a0\u6cd5\u200b\u7684\u200b\u95ee\u9898\u200b\u5206\u89e3\u200b\u4e3a\u200b\u8ba1\u7b97\u200b\u6700\u540e\u200b\u4e00\u4f4d\u200b\u76f8\u52a0\u200b\u548c\u200b\u8ba1\u7b97\u200b\u5269\u4f59\u200b\u90e8\u5206\u200b\u76f8\u52a0\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u95ee\u9898\u200b\u3002
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode *getNode(int val, struct ListNode *next)\n{\n struct ListNode *ret = (struct ListNode *)malloc(sizeof(struct ListNode));\n ret->val = val;\n ret->next = next;\n return ret;\n}\nstruct ListNode *recur(struct ListNode *l1, struct ListNode *l2, int flag)\n{\n if (!l1)\n return flag ? recur(getNode(1, NULL), l2, 0) : l2;\n if (!l2)\n return flag ? recur(getNode(1, NULL), l1, 0) : l1;\n int ret = l1->val + l2->val + (flag ? 1 : 0);\n return getNode(ret - (ret >= 10 ? 10 : 0), recur(l1->next, l2->next, ret >= 10));\n}\nstruct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){\n return recur(l1, l2, 0);\n}\n
Reference
","tags":["\u9012\u5f52","\u94fe\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/20/","title":"20. \u200b\u6709\u6548\u200b\u7684\u200b\u62ec\u53f7","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6808","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/20/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u53ea\u200b\u5305\u62ec\u200b '('
\uff0c')'
\uff0c'{'
\uff0c'}'
\uff0c'['
\uff0c']'
\u00a0\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b s
\uff0c\u200b\u5224\u65ad\u200b\u5b57\u7b26\u4e32\u200b\u662f\u5426\u200b\u6709\u6548\u200b\u3002
\u200b\u6709\u6548\u200b\u5b57\u7b26\u4e32\u200b\u9700\u200b\u6ee1\u8db3\u200b\uff1a
- \u200b\u5de6\u200b\u62ec\u53f7\u200b\u5fc5\u987b\u200b\u7528\u200b\u76f8\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u53f3\u200b\u62ec\u53f7\u200b\u95ed\u5408\u200b\u3002
- \u200b\u5de6\u200b\u62ec\u53f7\u200b\u5fc5\u987b\u200b\u4ee5\u200b\u6b63\u786e\u200b\u7684\u200b\u987a\u5e8f\u200b\u95ed\u5408\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"()\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"()[]{}\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"(]\"\n\u200b\u8f93\u51fa\u200b\uff1afalse\n
\u200b\u793a\u4f8b\u200b\u00a04\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"([)]\"\n\u200b\u8f93\u51fa\u200b\uff1afalse\n
\u200b\u793a\u4f8b\u200b\u00a05\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"{[]}\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
Reference
","tags":["\u6808","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/20/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u6808\u200b\u6a21\u62df\u200b\u5339\u914d\u200b\u8fc7\u7a0b\u200b
- \u200b\u9047\u5230\u200b\u5de6\u200b\u62ec\u53f7\u200b\u65f6\u5165\u200b\u6808\u200b\uff1b
- \u200b\u9047\u5230\u200b\u53f3\u200b\u62ec\u53f7\u200b\u65f6\u200b\uff0c\u200b\u68c0\u67e5\u200b\u6808\u9876\u200b\u62ec\u53f7\u200b\u662f\u5426\u200b\u4e0e\u200b\u53f3\u200b\u62ec\u53f7\u200b\u5339\u914d\u200b\uff0c\u200b\u82e5\u200b\u5339\u914d\u200b\u5219\u200b\u51fa\u6808\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b
false
\uff1b - \u200b\u5b8c\u6210\u200b\u5339\u914d\u200b\u8fc7\u7a0b\u200b\u540e\u200b\u68c0\u67e5\u200b\u6808\u200b\u662f\u5426\u200b\u4e3a\u7a7a\u200b\uff0c\u200b\u82e5\u4e3a\u200b\u7a7a\u200b\u8fd4\u56de\u200b
true
\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bfalse
\u3002
bool isValid(char * s){\n int maxLen = strlen(s), top = 0;\n char *holding = malloc(sizeof(char) * maxLen), *cur = s;\n while(*cur)\n {\n switch(*cur)\n {\n case '(':\n case '[':\n case '{':\n holding[top] = *cur;\n top++;\n break;\n case ')':\n if (top == 0 || holding[top - 1] != '(')\n return false;\n top--;\n break;\n case ']':\n case '}':\n if (top == 0 || holding[top - 1] != (*cur) - 2)\n return false;\n top--;\n break;\n }\n cur++;\n }\n return !top;\n}\n
","tags":["\u6808","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/204/","title":"204. \u200b\u8ba1\u6570\u200b\u8d28\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/204/#_1","title":"\u9898\u76ee","text":"\u200b\u7edf\u8ba1\u200b\u6240\u6709\u200b\u5c0f\u4e8e\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b n \u200b\u7684\u200b\u8d28\u6570\u200b\u7684\u200b\u6570\u91cf\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b: 10\n\u200b\u8f93\u51fa\u200b: 4\n\u200b\u89e3\u91ca\u200b: \u200b\u5c0f\u4e8e\u200b 10 \u200b\u7684\u200b\u8d28\u6570\u200b\u4e00\u5171\u200b\u6709\u200b 4 \u200b\u4e2a\u200b, \u200b\u5b83\u4eec\u200b\u662f\u200b 2, 3, 5, 7 \u3002\n
Reference
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/204/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4ece\u200b2\u200b\u5f00\u59cb\u200b\uff0c\u200b\u5728\u200b\u6570\u5217\u200b\\(2, 3, \\cdots, n\\)\u200b\u4e2d\u5212\u200b\u53bb\u200b\u6240\u6709\u200b2\u200b\u7684\u200b\u500d\u6570\u200b\uff0c\u200b\u5269\u4e0b\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6ca1\u6709\u200b\u88ab\u5212\u200b\u53bb\u200b\u7684\u200b\u6570\u5b57\u200b3\u200b\u5373\u200b\u4e3a\u200b\u8d28\u6570\u200b\uff0c\u200b\u518d\u200b\u82b1\u65d7\u200b\u6240\u6709\u200b3\u200b\u7684\u200b\u500d\u6570\u200b\uff0c\u200b\u5269\u4e0b\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6ca1\u6709\u200b\u88ab\u5212\u200b\u53bb\u200b\u7684\u200b\u6570\u5b57\u200b5\u200b\u5373\u200b\u4e3a\u200b\u8d28\u6570\u200b\u3002\u200b\u91cd\u590d\u200b\u5982\u200b\u4e0a\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u76f4\u5230\u200b\u68c0\u67e5\u200b\u5b8c\u200b\u6240\u6709\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b\\(\\sqrt n\\)\u200b\u7684\u200b\u6574\u6570\u200b\uff0c\u200b\u5373\u200b\u5b8c\u6210\u200b\u3002
\u200b\u6570\u5b57\u200b\u662f\u5426\u200b\u5212\u53bb\u200b\u7684\u200b\u72b6\u6001\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u63a7\u5236\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200b\u4e00\u4e2a\u200b\u7c7b\u578b\u200b\u4e2d\u200b\u7684\u200b1\u200b\u4f4d\u200b\u8868\u793a\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int countPrimes(int n)\n{\n unsigned char *map = memset(malloc(sizeof(unsigned char) * ((n + 1 >> 3) + 1)), 0x55, sizeof(unsigned char) * ((n + 1 >> 3) + 1));\n int i = 0, j, ret = 0, sq = (int)sqrt(n), increment = 1, start = 2;\n *map = 0x51;\n for (i = 3; i <= sq; i++)\n if (!(map[i >> 3] & (unsigned char)1 << (i & 7)))\n for (j = i * 3; j <= n; j += i << 1)\n map[j >> 3] |= (unsigned char)1 << (j & 7);\n for (i = 2; i < n; i++)\n if (!(map[i >> 3] & (unsigned char)1 << (i & 7)))\n ret++;\n return ret;\n}\n
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/206/","title":"206. \u200b\u53cd\u8f6c\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/206/#_1","title":"\u9898\u76ee","text":"\u200b\u53cd\u8f6c\u200b\u4e00\u4e2a\u200b\u5355\u94fe\u200b\u8868\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b: 1->2->3->4->5->NULL\n\u200b\u8f93\u51fa\u200b: 5->4->3->2->1->NULL\n
\u200b\u8fdb\u9636\u200b\uff1a \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u8fed\u4ee3\u200b\u6216\u200b\u9012\u5f52\u200b\u5730\u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b\u3002\u200b\u4f60\u200b\u80fd\u5426\u200b\u7528\u200b\u4e24\u79cd\u200b\u65b9\u6cd5\u200b\u89e3\u51b3\u200b\u8fd9\u9053\u9898\u200b\uff1f
Reference
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/206/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u53ea\u200b\u9700\u8981\u200b\u5c06\u200b\u94fe\u8868\u200b\u7ed3\u6784\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u6307\u9488\u200b\u53cd\u8f6c\u200b\uff0c\u200b\u5373\u200b\u6307\u5411\u200b\u524d\u200b\u4e00\u200b\u8282\u70b9\u200b\u7684\u200b\u6307\u9488\u200b\u73b0\u5728\u200b\u6307\u5411\u200b\u540e\u200b\u4e00\u200b\u8282\u70b9\u200b\u3002\u200b\u5b9a\u4e49\u200b\u4e24\u4e2a\u200b\u6307\u9488\u200b\u6307\u5411\u200b\u9700\u8981\u200b\u53cd\u8f6c\u200b\u90e8\u5206\u200b\u7684\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u5c06\u200b\u540e\u200b\u4e00\u200b\u6307\u9488\u200b\u7684\u200bnext
\u200b\u57df\u200b\u6307\u5411\u200b\u524d\u200b\u4e00\u200b\u6307\u9488\u200b\u3002\u200b\u6539\u200b\u53cd\u8f6c\u200b\u64cd\u4f5c\u200b\u7834\u574f\u200b\u4e86\u200b\u540e\u200b\u4e00\u200b\u6307\u9488\u200b\u539f\u6709\u200b\u7684\u200bnext
\u200b\u57df\u200b\uff0c\u200b\u9700\u8981\u200b\u4e00\u4e2a\u200b\u989d\u5916\u200b\u7684\u200b\u6307\u9488\u200b\u7528\u4e8e\u200b\u5411\u524d\u200b\u79fb\u52a8\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\n\nstruct ListNode* reverseList(struct ListNode* head){\n if (!head || !(head->next))\n return head;\n struct ListNode *cur1 = head, *cur2 = head->next, *cur3 = cur2->next;\n head->next = NULL;\n while (cur3)\n {\n cur2->next = cur1;\n cur1 = cur2;\n cur2 = cur3;\n cur3 = cur3->next;\n }\n cur2->next = cur1;\n return cur2;\n}\n
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/21/","title":"21. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/21/#_1","title":"\u9898\u76ee","text":"\u200b\u5c06\u200b\u4e24\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868\u200b\u5408\u5e76\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b \u200b\u5347\u5e8f\u200b \u200b\u94fe\u8868\u200b\u5e76\u200b\u8fd4\u56de\u200b\u3002\u200b\u65b0\u200b\u94fe\u8868\u200b\u662f\u200b\u901a\u8fc7\u200b\u62fc\u63a5\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u4e24\u4e2a\u200b\u94fe\u8868\u200b\u7684\u200b\u6240\u6709\u200b\u8282\u70b9\u200b\u7ec4\u6210\u200b\u7684\u200b\u3002\u00a0
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b\uff1a1->2->4, 1->3->4\n\u200b\u8f93\u51fa\u200b\uff1a1->1->2->3->4->4\n
Reference
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/21/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6bd4\u8f83\u200b\u4e24\u4e2a\u200b\u94fe\u8868\u200b\u7684\u200b\u5934\u200b\u8282\u70b9\u200b\uff0c\u200b\u5c06\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u8282\u70b9\u200b\u5e76\u5165\u200b\u7ed3\u679c\u200b\u94fe\u8868\u200b\u4e2d\u200b\uff0c\u200b\u540c\u65f6\u200b\u94fe\u8868\u200b\u5934\u200b\u540e\u79fb\u200b\uff0c\u200b\u9012\u5f52\u200b\u5904\u7406\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){\n if (!l1)\n return l2;\n if (!l2)\n return l1;\n if (l1->val < l2->val)\n {\n l1->next = mergeTwoLists(l1->next, l2);\n return l1;\n }\n else\n {\n l2->next = mergeTwoLists(l1, l2->next);\n return l2;\n }\n}\n
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/217/","title":"217. \u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/217/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5224\u65ad\u200b\u662f\u5426\u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\u3002
\u200b\u5982\u679c\u200b\u4efb\u610f\u200b\u4e00\u503c\u200b\u5728\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u81f3\u5c11\u200b\u4e24\u6b21\u200b\uff0c\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200btrue
\u3002\u200b\u5982\u679c\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u90fd\u200b\u4e0d\u200b\u76f8\u540c\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bfalse
\u3002\u00a0
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [1,2,3,1]\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: [1,2,3,4]\n\u200b\u8f93\u51fa\u200b: false\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a
\u200b\u8f93\u5165\u200b: [1,1,1,3,3,4,3,2,4,2]\n\u200b\u8f93\u51fa\u200b: true\n
Reference
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/217/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5c06\u200b\u6570\u7ec4\u200b\u6392\u5e8f\u200b\u540e\u200b\u68c0\u67e5\u200b\u662f\u5426\u200b\u6709\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int comp(const void *a, const void *b)\n{\n return *(int*)a - *(int*)b;\n}\nbool containsDuplicate(int* nums, int numsSize){\n if (numsSize < 2)\n return false;\n qsort(nums, numsSize, sizeof(int), comp);\n int i = 0;\n for (i = 1; i<numsSize; i++)\n if (nums[i] == nums[i - 1])\n return true;\n return false;\n}\n
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/22/","title":"22. \u200b\u62ec\u53f7\u200b\u751f\u6210","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/22/#_1","title":"\u9898\u76ee","text":"\u200b\u6570\u5b57\u200b n
\u00a0\u200b\u4ee3\u8868\u200b\u751f\u6210\u200b\u62ec\u53f7\u200b\u7684\u200b\u5bf9\u6570\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u80fd\u591f\u200b\u751f\u6210\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u5e76\u4e14\u200b \u200b\u6709\u6548\u200b\u7684\u200b \u200b\u62ec\u53f7\u200b\u7ec4\u5408\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1an = 3\n\u200b\u8f93\u51fa\u200b\uff1a[\"((()))\",\"(()())\",\"(())()\",\"()(())\",\"()()()\"]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1an = 1\n\u200b\u8f93\u51fa\u200b\uff1a[\"()\"]\n
\u200b\u63d0\u793a\u200b\uff1a
Reference
","tags":["\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/22/#_2","title":"\u9898\u89e3","text":"\u200b\u56de\u6eaf\u200b\u7b97\u6cd5\u200b
- \u200b\u5f53\u200b\u5de6\u200b\u62ec\u53f7\u200b\u6570\u91cf\u200b\u5c0f\u4e8e\u200b\u62ec\u53f7\u200b\u5bf9\u6570\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6dfb\u52a0\u200b\u5de6\u200b\u62ec\u53f7\u200b
- \u200b\u5f53\u53f3\u200b\u62ec\u53f7\u200b\u6570\u91cf\u200b\u5c0f\u4e8e\u200b\u5de6\u200b\u62ec\u53f7\u200b\u6570\u91cf\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6dfb\u52a0\u200b\u53f3\u200b\u62ec\u53f7\u200b
\u200b\u6309\u7167\u200b\u5982\u200b\u4e0a\u200b\u65b9\u6cd5\u200b\u751f\u6210\u200b\u7684\u200b\u62ec\u53f7\u200b\u7ec4\u5408\u200b\u53ef\u4ee5\u200b\u4fdd\u8bc1\u200b\u4e00\u5b9a\u200b\u662f\u200b\u6709\u6548\u200b\u7684\u200b\u3002
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\n\nvoid dfs(char *currentStr, int n, int left, int right, char **ret, int *returnSize)\n{\n if (left == n && right == n)\n {\n ret[*returnSize] = (char *)malloc(sizeof(char) * (2 * n + 1));\n strcpy(ret[*returnSize], currentStr);\n *returnSize += 1;\n return;\n }\n if (left < n)\n {\n currentStr[left + right] = '(';\n dfs(currentStr, n, left + 1, right, ret, returnSize);\n }\n if (right < left)\n {\n currentStr[left + right] = ')';\n dfs(currentStr, n, left, right + 1, ret, returnSize);\n }\n}\nchar ** generateParenthesis(int n, int* returnSize){\n const int maxLen = 10000;\n *returnSize = 0;\n char **ret = (char **)malloc(sizeof(char *) * maxLen),\n *buffer = (char *)memset(malloc(sizeof(char) * (2 * n + 1)), 0, sizeof(char) * (2 * n + 1));\n dfs(buffer, n, 0, 0, ret, returnSize);\n return ret;\n}\n
","tags":["\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/23/","title":"23. \u200b\u5408\u5e76\u200bK\u200b\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u5806","\u94fe\u8868","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/23/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\u6570\u7ec4\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u94fe\u8868\u200b\u90fd\u200b\u5df2\u7ecf\u200b\u6309\u200b\u5347\u5e8f\u200b\u6392\u5217\u200b\u3002
\u200b\u8bf7\u200b\u4f60\u200b\u5c06\u200b\u6240\u6709\u200b\u94fe\u8868\u200b\u5408\u5e76\u200b\u5230\u200b\u4e00\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868\u200b\u4e2d\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5408\u5e76\u200b\u540e\u200b\u7684\u200b\u94fe\u8868\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1alists = [[1,4,5],[1,3,4],[2,6]]\n\u200b\u8f93\u51fa\u200b\uff1a[1,1,2,3,4,4,5,6]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u94fe\u8868\u200b\u6570\u7ec4\u200b\u5982\u4e0b\u200b\uff1a\n[\n 1->4->5,\n 1->3->4,\n 2->6\n]\n\u200b\u5c06\u200b\u5b83\u4eec\u200b\u5408\u5e76\u200b\u5230\u200b\u4e00\u4e2a\u200b\u6709\u5e8f\u200b\u94fe\u8868\u200b\u4e2d\u200b\u5f97\u5230\u200b\u3002\n1->1->2->3->4->4->5->6\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1alists = []\n\u200b\u8f93\u51fa\u200b\uff1a[]\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1alists = [[]]\n\u200b\u8f93\u51fa\u200b\uff1a[]\n
\u200b\u63d0\u793a\u200b\uff1a
k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 500
-10^4 <= lists[i][j] <= 10^4
lists[i]
\u200b\u6309\u200b \u200b\u5347\u5e8f\u200b \u200b\u6392\u5217\u200b lists[i].length
\u200b\u7684\u200b\u603b\u548c\u200b\u4e0d\u200b\u8d85\u8fc7\u200b 10^4
Reference
","tags":["\u5806","\u94fe\u8868","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/23/#_2","title":"\u9898\u89e3","text":"\u200b\u6700\u200b\u76f4\u63a5\u200b\u7684\u200b\u5408\u5e76\u200b\u601d\u8def\u200b\u662f\u200b\u6309\u7167\u200b\u987a\u5e8f\u200b\u5bf9\u200b\u94fe\u8868\u200b\u8fdb\u884c\u200b\u5408\u5e76\u200b\u3002\u200b\u8003\u8651\u200b\u5230\u200b\u5408\u5e76\u200b\u540e\u200b\u94fe\u8868\u200b\u53d8\u200b\u957f\u200b\uff0c\u200b\u5e73\u5747\u200b\u6bcf\u6b21\u200b\u5408\u5e76\u200b\u9700\u8981\u200b\u82b1\u8d39\u200b\\(\\mathcal O(MN)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\uff0c\u200b\u5171\u9700\u200b\u5408\u5e76\u200b\\(\\mathcal O(M)\\)\u200b\u6b21\u200b\uff0c\u200b\u56e0\u6b64\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(M^2N)\\)
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\n\nstruct ListNode* mergeLists(struct ListNode* l1, struct ListNode* l2);\nstruct ListNode* mergeKLists(struct ListNode** lists, int listsSize){\n if (!listsSize)\n return NULL;\n struct ListNode *head = lists[0];\n for (int i = 1; i<listsSize; i++)\n {\n if (!head)\n {\n head = lists[i];\n continue;\n }\n head = mergeLists(head, lists[i]);\n }\n return head;\n}\n\nstruct ListNode* mergeLists(struct ListNode* l1, struct ListNode* l2){\n if (!l1)\n return l2;\n if (!l2)\n return l1;\n if (l1->val < l2->val)\n {\n l1->next = mergeLists(l1->next, l2);\n return l1;\n }\n else\n {\n l2->next = mergeLists(l1, l2->next);\n return l2;\n }\n}\n
\u200b\u5982\u679c\u200b\u4f7f\u7528\u200b\u4e24\u200b\u4e24\u200b\u5408\u5e76\u200b\u7684\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5408\u5e76\u200b\u64cd\u4f5c\u200b\u7684\u200b\u5e73\u5747\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u964d\u4f4e\u200b\u81f3\u200b\\(\\mathcal O(N\\log M)\\)\uff0c\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u53d8\u4e3a\u200b\\(\\mathcal O(MN\\log M)\\)\u3002
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\n\nstruct ListNode* mergeLists(struct ListNode* l1, struct ListNode* l2);\nstruct ListNode* mergeKLists(struct ListNode** lists, int listsSize){\n if (!listsSize)\n return NULL;\n else if (listsSize == 1)\n return lists[0];\n else if (listsSize == 2)\n return mergeLists(lists[0], lists[1]);\n struct ListNode *head = lists[0];\n int step = (listsSize + 1) >> 1;\n for (int i = 0; i < step; i++)\n {\n if (i + step < listsSize)\n lists[i] = mergeLists(lists[i], lists[i + step]);\n }\n return mergeKLists(lists, step);\n}\n\nstruct ListNode* mergeLists(struct ListNode* l1, struct ListNode* l2){\n if (!l1)\n return l2;\n if (!l2)\n return l1;\n if (l1->val < l2->val)\n {\n l1->next = mergeLists(l1->next, l2);\n return l1;\n }\n else\n {\n l2->next = mergeLists(l1, l2->next);\n return l2;\n }\n}\n
","tags":["\u5806","\u94fe\u8868","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/234/","title":"234. \u200b\u56de\u6587\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/234/#_1","title":"\u9898\u76ee","text":"\u200b\u8bf7\u200b\u5224\u65ad\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\u662f\u5426\u200b\u4e3a\u200b\u56de\u6587\u200b\u94fe\u8868\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: 1->2\n\u200b\u8f93\u51fa\u200b: false\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: 1->2->2->1\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u8fdb\u9636\u200b\uff1a
\u200b\u4f60\u200b\u80fd\u5426\u200b\u7528\u200b\\(O(n)\\)\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u548c\u200b\\(O(1)\\)\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u89e3\u51b3\u200b\u6b64\u9898\u200b\uff1f
Reference
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/234/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u53cd\u5e8f\u200b\u6784\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u94fe\u8868\u200b\uff0c\u200b\u6bd4\u8f83\u200b\u4e24\u4e2a\u200b\u94fe\u8868\u200b\u662f\u5426\u200b\u76f8\u540c\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode *getNode(int val, struct ListNode *next)\n{\n struct ListNode *ret = (struct ListNode *)malloc(sizeof(struct ListNode));\n ret->val = val;\n ret->next = next;\n return ret;\n}\n\nbool isPalindrome(struct ListNode* head){\n int len = 0;\n struct ListNode *reversed = NULL, *cur1 = head, *cur2 = NULL;\n while(cur1 != NULL)\n {\n reversed = getNode(cur1->val, reversed);\n cur1 = cur1->next;\n len++;\n }\n cur1 = head;\n cur2 = reversed;\n for (int i = 0; i < len / 2; i++)\n {\n if (cur1->val != cur2->val)\n return false;\n cur1 = cur1->next;\n cur2 = cur2->next;\n }\n return true;\n}\n
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/237/","title":"237. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/237/#_1","title":"\u9898\u76ee","text":"\u200b\u8bf7\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u53ef\u4ee5\u200b\u5220\u9664\u200b\u67d0\u4e2a\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7ed9\u5b9a\u200b\u7684\u200b\uff08\u200b\u975e\u200b\u672b\u5c3e\u200b\uff09\u200b\u8282\u70b9\u200b\u3002\u200b\u4f20\u5165\u200b\u51fd\u6570\u200b\u7684\u200b\u552f\u4e00\u200b\u53c2\u6570\u200b\u4e3a\u200b \u200b\u8981\u200b\u88ab\u200b\u5220\u9664\u200b\u7684\u200b\u8282\u70b9\u200b \u3002
\u200b\u73b0\u6709\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b --\u00a0head =\u00a0[4,5,1,9]\uff0c\u200b\u5b83\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b:
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [4,5,1,9], node = 5\n\u200b\u8f93\u51fa\u200b\uff1a[4,1,9]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u7ed9\u5b9a\u200b\u4f60\u200b\u94fe\u8868\u200b\u4e2d\u503c\u200b\u4e3a\u200b\u00a05\u00a0\u200b\u7684\u200b\u7b2c\u4e8c\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5728\u200b\u8c03\u7528\u200b\u4e86\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u4e4b\u540e\u200b\uff0c\u200b\u8be5\u200b\u94fe\u8868\u200b\u5e94\u53d8\u200b\u4e3a\u200b 4 -> 1 -> 9.\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [4,5,1,9], node = 1\n\u200b\u8f93\u51fa\u200b\uff1a[4,5,9]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u7ed9\u5b9a\u200b\u4f60\u200b\u94fe\u8868\u200b\u4e2d\u503c\u200b\u4e3a\u200b\u00a01\u00a0\u200b\u7684\u200b\u7b2c\u4e09\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5728\u200b\u8c03\u7528\u200b\u4e86\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u4e4b\u540e\u200b\uff0c\u200b\u8be5\u200b\u94fe\u8868\u200b\u5e94\u53d8\u200b\u4e3a\u200b 4 -> 5 -> 9.\n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u94fe\u8868\u200b\u81f3\u5c11\u200b\u5305\u542b\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\u3002
- \u200b\u94fe\u8868\u200b\u4e2d\u200b\u6240\u6709\u200b\u8282\u70b9\u200b\u7684\u200b\u503c\u200b\u90fd\u200b\u662f\u200b\u552f\u4e00\u200b\u7684\u200b\u3002
- \u200b\u7ed9\u5b9a\u200b\u7684\u200b\u8282\u70b9\u200b\u4e3a\u200b\u975e\u200b\u672b\u5c3e\u200b\u8282\u70b9\u200b\u5e76\u4e14\u200b\u4e00\u5b9a\u200b\u662f\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u6709\u6548\u200b\u8282\u70b9\u200b\u3002
- \u200b\u4e0d\u8981\u200b\u4ece\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u4e2d\u200b\u8fd4\u56de\u200b\u4efb\u4f55\u200b\u7ed3\u679c\u200b\u3002
Reference
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/237/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5c06\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u7684\u200b\u503c\u200b\u590d\u5236\u5230\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\uff0c\u200b\u7136\u540e\u200b\u5220\u53bb\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u3002\uff08\u200b\u5df2\u77e5\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u4e00\u5b9a\u200b\u4e0d\u662f\u200b\u672b\u5c3e\u200b\u8282\u70b9\u200b\uff09
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
void deleteNode(struct ListNode* node) {\n node->val = node->next->val;\n node->next = node->next->next;\n}\n
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/24/","title":"24. \u200b\u4e24\u200b\u4e24\u200b\u4ea4\u6362\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/24/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\uff0c\u200b\u4e24\u200b\u4e24\u200b\u4ea4\u6362\u200b\u5176\u4e2d\u200b\u76f8\u90bb\u200b\u7684\u200b\u8282\u70b9\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u4ea4\u6362\u200b\u540e\u200b\u7684\u200b\u94fe\u8868\u200b\u3002
\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u53ea\u662f\u200b\u5355\u7eaf\u200b\u7684\u200b\u6539\u53d8\u200b\u8282\u70b9\u200b\u5185\u90e8\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u800c\u662f\u200b\u9700\u8981\u200b\u5b9e\u9645\u200b\u7684\u200b\u8fdb\u884c\u200b\u8282\u70b9\u200b\u4ea4\u6362\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u7ed9\u5b9a\u200b 1->2->3->4, \u200b\u4f60\u200b\u5e94\u8be5\u200b\u8fd4\u56de\u200b 2->1->4->3.\n
Reference
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/24/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5148\u200b\u4ea4\u6362\u200b\u524d\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u518d\u200b\u9012\u5f52\u200b\u5904\u7406\u200b\u540e\u9762\u200b\u7684\u200b\u8282\u70b9\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\n\nstruct ListNode* swapPairs(struct ListNode* head){\n if (!head || !(head->next))\n return head;\n struct ListNode *temp1 = head->next, *temp2 = temp1->next;\n temp1->next = head;\n head->next = swapPairs(temp2);\n return temp1;\n}\n
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/242/","title":"242. \u200b\u6709\u6548\u200b\u7684\u200b\u5b57\u6bcd\u200b\u5f02\u4f4d\u200b\u8bcd","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/242/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b s \u200b\u548c\u200b t \uff0c\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u6765\u200b\u5224\u65ad\u200b t \u200b\u662f\u5426\u662f\u200b s \u200b\u7684\u200b\u5b57\u6bcd\u200b\u5f02\u4f4d\u200b\u8bcd\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b: s = \"anagram\", t = \"nagaram\"\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: s = \"rat\", t = \"car\"\n\u200b\u8f93\u51fa\u200b: false\n
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u5b57\u7b26\u4e32\u200b\u53ea\u200b\u5305\u542b\u200b\u5c0f\u5199\u5b57\u6bcd\u200b\u3002
\u200b\u8fdb\u9636\u200b\uff1a
\u200b\u5982\u679c\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u5305\u542b\u200b unicode \u200b\u5b57\u7b26\u200b\u600e\u4e48\u529e\u200b\uff1f\u200b\u4f60\u200b\u80fd\u5426\u200b\u8c03\u6574\u200b\u4f60\u200b\u7684\u200b\u89e3\u6cd5\u200b\u6765\u200b\u5e94\u5bf9\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\uff1f
Reference
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/242/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u7edf\u8ba1\u200b\u5e76\u200b\u6bd4\u8f83\u200b\u4e24\u4e2a\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u5404\u200b\u5b57\u7b26\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
bool isAnagram(char * s, char * t){\n int hashMap1[26] = {0}, hashMap2[26] = {0};\n char *cur = s;\n while(*cur)\n {\n hashMap1[*cur - 'a']++;\n cur++;\n }\n cur = t;\n while(*cur)\n {\n hashMap2[*cur - 'a']++;\n cur++;\n }\n int i = 0;\n for (i = 0; i < 26; i++)\n if (hashMap1[i] != hashMap2[i])\n return false;\n return true;\n}\n
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/25/","title":"25. K \u200b\u4e2a\u200b\u4e00\u7ec4\u200b\u7ffb\u8f6c\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/25/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\uff0c\u200b\u6bcf\u200b\u00a0k\u00a0\u200b\u4e2a\u200b\u8282\u70b9\u200b\u4e00\u7ec4\u200b\u8fdb\u884c\u200b\u7ffb\u8f6c\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8fd4\u56de\u200b\u7ffb\u8f6c\u200b\u540e\u200b\u7684\u200b\u94fe\u8868\u200b\u3002
k\u00a0\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\uff0c\u200b\u5b83\u200b\u7684\u200b\u503c\u200b\u5c0f\u4e8e\u200b\u6216\u200b\u7b49\u4e8e\u200b\u94fe\u8868\u200b\u7684\u200b\u957f\u5ea6\u200b\u3002
\u200b\u5982\u679c\u200b\u8282\u70b9\u200b\u603b\u6570\u200b\u4e0d\u662f\u200b\u00a0k\u00a0\u200b\u7684\u200b\u6574\u6570\u500d\u200b\uff0c\u200b\u90a3\u4e48\u200b\u8bf7\u200b\u5c06\u200b\u6700\u540e\u200b\u5269\u4f59\u200b\u7684\u200b\u8282\u70b9\u200b\u4fdd\u6301\u200b\u539f\u6709\u200b\u987a\u5e8f\u200b\u3002
\u200b\u8fdb\u9636\u200b\uff1a
- \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u53ea\u200b\u4f7f\u7528\u200b\u5e38\u6570\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\u7684\u200b\u7b97\u6cd5\u200b\u6765\u200b\u89e3\u51b3\u200b\u6b64\u200b\u95ee\u9898\u200b\u5417\u200b\uff1f
- \u200b\u4f60\u200b\u4e0d\u80fd\u200b\u53ea\u662f\u200b\u5355\u7eaf\u200b\u7684\u200b\u6539\u53d8\u200b\u8282\u70b9\u200b\u5185\u90e8\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u800c\u662f\u200b\u9700\u8981\u200b\u5b9e\u9645\u200b\u8fdb\u884c\u200b\u8282\u70b9\u200b\u4ea4\u6362\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1,2,3,4,5], k = 2\n\u200b\u8f93\u51fa\u200b\uff1a[2,1,4,3,5]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1,2,3,4,5], k = 3\n\u200b\u8f93\u51fa\u200b\uff1a[3,2,1,4,5]\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1,2,3,4,5], k = 1\n\u200b\u8f93\u51fa\u200b\uff1a[1,2,3,4,5]\n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1], k = 1\n\u200b\u8f93\u51fa\u200b\uff1a[1]\n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u5217\u8868\u200b\u4e2d\u200b\u8282\u70b9\u200b\u7684\u200b\u6570\u91cf\u200b\u5728\u200b\u8303\u56f4\u200b
sz
\u200b\u5185\u200b 1 <= sz <= 5000
0 <= Node.val <= 1000
1 <= k <= sz
Reference
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/25/#_2","title":"\u9898\u89e3","text":"\u200b\u904d\u5386\u200b k \u200b\u4e2a\u200b\u5143\u7d20\u200b\u540e\u200b\u5c06\u200b\u94fe\u8868\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u8bbe\u200b\u4e3a\u200bNULL
\uff0c\u200b\u6267\u884c\u200b\u53cd\u8f6c\u200b\u64cd\u4f5c\u200b\u540e\u200b\u63a5\u4e0a\u200b\u540e\u9762\u200b\u7684\u200b\u94fe\u8868\u200b\u3002
\u200b\u6ce8\u610f\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\(\\mathcal O(1)\\)\u200b\u7684\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b\u3002
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode *reverse(struct ListNode *head)\n{\n struct ListNode *prev = NULL, *cur = head, *next = head->next;\n while (next != NULL)\n {\n cur->next = prev;\n prev = cur;\n cur = next;\n next = next->next;\n }\n cur->next = prev;\n return cur;\n}\n\nstruct ListNode* reverseKGroup(struct ListNode* head, int k){\n int i = 0;\n struct ListNode *ret = NULL, *tempHead = NULL, *cur = head;\n for (i = 0; i < k - 1 && cur != NULL; i++)\n cur = cur->next;\n if (cur == NULL)\n return head;\n tempHead = cur->next;\n cur->next = NULL;\n ret = reverse(head);\n head->next = reverseKGroup(tempHead, k);\n return ret;\n}\n
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/26/","title":"26. \u200b\u5220\u9664\u200b\u6392\u5e8f\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u91cd\u590d\u200b\u9879","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/26/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6392\u5e8f\u200b\u6570\u7ec4\u200b\uff0c\u200b\u4f60\u200b\u9700\u8981\u200b\u5728\u200b\u539f\u5730\u200b\u5220\u9664\u200b\u91cd\u590d\u200b\u51fa\u73b0\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\uff0c\u200b\u8fd4\u56de\u200b\u79fb\u9664\u200b\u540e\u200b\u6570\u7ec4\u200b\u7684\u200b\u65b0\u200b\u957f\u5ea6\u200b\u3002
\u200b\u4e0d\u8981\u200b\u4f7f\u7528\u200b\u989d\u5916\u200b\u7684\u200b\u6570\u7ec4\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4f60\u200b\u5fc5\u987b\u200b\u5728\u200b\u539f\u5730\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b \u200b\u5e76\u200b\u5728\u200b\u4f7f\u7528\u200b\\(O(1)\\)\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\u7684\u200b\u6761\u4ef6\u200b\u4e0b\u200b\u5b8c\u6210\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u7ed9\u5b9a\u200b\u6570\u7ec4\u200b nums = [1,1,2], \n\n\u200b\u51fd\u6570\u200b\u5e94\u8be5\u200b\u8fd4\u56de\u200b\u65b0\u200b\u7684\u200b\u957f\u5ea6\u200b 2, \u200b\u5e76\u4e14\u200b\u539f\u200b\u6570\u7ec4\u200b nums \u200b\u7684\u200b\u524d\u200b\u4e24\u4e2a\u200b\u5143\u7d20\u200b\u88ab\u200b\u4fee\u6539\u200b\u4e3a\u200b 1, 2\u3002 \n\n\u200b\u4f60\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u8d85\u51fa\u200b\u65b0\u200b\u957f\u5ea6\u200b\u540e\u9762\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u7ed9\u5b9a\u200b nums = [0,0,1,1,1,2,2,3,3,4],\n\n\u200b\u51fd\u6570\u200b\u5e94\u8be5\u200b\u8fd4\u56de\u200b\u65b0\u200b\u7684\u200b\u957f\u5ea6\u200b 5, \u200b\u5e76\u4e14\u200b\u539f\u200b\u6570\u7ec4\u200b nums \u200b\u7684\u200b\u524d\u200b\u4e94\u4e2a\u200b\u5143\u7d20\u200b\u88ab\u200b\u4fee\u6539\u200b\u4e3a\u200b 0, 1, 2, 3, 4\u3002\n\n\u200b\u4f60\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u8d85\u51fa\u200b\u65b0\u200b\u957f\u5ea6\u200b\u540e\u9762\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\n
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u4e3a\u4ec0\u4e48\u200b\u8fd4\u56de\u200b\u6570\u503c\u200b\u662f\u200b\u6574\u6570\u200b\uff0c\u200b\u4f46\u200b\u8f93\u51fa\u200b\u7684\u200b\u7b54\u6848\u200b\u662f\u200b\u6570\u7ec4\u200b\u5462\u200b?
\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u662f\u200b\u4ee5\u200b \u300c\u200b\u5f15\u7528\u200b\u300d \u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\u7684\u200b\uff0c\u200b\u8fd9\u200b\u610f\u5473\u7740\u200b\u5728\u200b\u51fd\u6570\u200b\u91cc\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u5bf9\u4e8e\u200b\u8c03\u7528\u8005\u200b\u662f\u200b\u53ef\u89c1\u200b\u7684\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u60f3\u8c61\u200b\u5185\u90e8\u200b\u64cd\u4f5c\u200b\u5982\u4e0b\u200b:
// nums \u200b\u662f\u200b\u4ee5\u200b\u201c\u200b\u5f15\u7528\u200b\u201d\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\u7684\u200b\u3002\u200b\u4e5f\u5c31\u662f\u8bf4\u200b\uff0c\u200b\u4e0d\u200b\u5bf9\u200b\u5b9e\u53c2\u200b\u505a\u200b\u4efb\u4f55\u200b\u62f7\u8d1d\u200b\nint len = removeDuplicates(nums);\n\n// \u200b\u5728\u200b\u51fd\u6570\u200b\u91cc\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u5bf9\u4e8e\u200b\u8c03\u7528\u8005\u200b\u662f\u200b\u53ef\u89c1\u200b\u7684\u200b\u3002\n// \u200b\u6839\u636e\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u7684\u200b\u957f\u5ea6\u200b, \u200b\u5b83\u4f1a\u200b\u6253\u5370\u200b\u51fa\u200b\u6570\u7ec4\u200b\u4e2d\u8be5\u200b\u957f\u5ea6\u200b\u8303\u56f4\u200b\u5185\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u3002\nfor (int i = 0; i < len; i++) {\n\u00a0 \u00a0 print(nums[i]);\n}\n
Reference
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/26/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a
- \u200b\u5f53\u200b\u6570\u7ec4\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u65f6\u200b\uff0c\u200b\u4e0d\u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\uff1b
- \u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6307\u9488\u200b\u5206\u522b\u200b\u6307\u5411\u200b\u5220\u9664\u200b\u91cd\u590d\u200b\u503c\u540e\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u672b\u5c3e\u200b\uff0c\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u6570\u503c\u200b\u8868\u793a\u200b\u5220\u53bb\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int removeDuplicates(int* nums, int numsSize){\n if (numsSize < 2)\n return numsSize;\n int steps = 0, i = 0;\n while(i < numsSize - steps - 1)\n {\n if (steps)\n nums[i + 1] = nums[i + steps + 1];\n if (nums[i] == nums[i + steps + 1])\n steps++;\n else\n i++;\n }\n return numsSize - steps;\n}\n
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/27/","title":"27. \u200b\u79fb\u9664\u200b\u5143\u7d20","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/27/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b nums
\u00a0\u200b\u548c\u200b\u4e00\u4e2a\u200b\u503c\u200b val
\uff0c\u200b\u4f60\u200b\u9700\u8981\u200b \u200b\u539f\u5730\u200b \u200b\u79fb\u9664\u200b\u6240\u6709\u200b\u6570\u503c\u200b\u7b49\u4e8e\u200b\u00a0val
\u00a0\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u79fb\u9664\u200b\u540e\u200b\u6570\u7ec4\u200b\u7684\u200b\u65b0\u200b\u957f\u5ea6\u200b\u3002
\u200b\u4e0d\u8981\u200b\u4f7f\u7528\u200b\u989d\u5916\u200b\u7684\u200b\u6570\u7ec4\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4f60\u200b\u5fc5\u987b\u200b\u4ec5\u200b\u4f7f\u7528\u200b O(1)
\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\u5e76\u200b \u200b\u539f\u5730\u200b \u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u3002
\u200b\u5143\u7d20\u200b\u7684\u200b\u987a\u5e8f\u200b\u53ef\u4ee5\u200b\u6539\u53d8\u200b\u3002\u200b\u4f60\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u8d85\u51fa\u200b\u65b0\u200b\u957f\u5ea6\u200b\u540e\u9762\u200b\u7684\u200b\u5143\u7d20\u200b\u3002
\u200b\u8bf4\u660e\u200b:
\u200b\u4e3a\u4ec0\u4e48\u200b\u8fd4\u56de\u200b\u6570\u503c\u200b\u662f\u200b\u6574\u6570\u200b\uff0c\u200b\u4f46\u200b\u8f93\u51fa\u200b\u7684\u200b\u7b54\u6848\u200b\u662f\u200b\u6570\u7ec4\u200b\u5462\u200b?
\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u662f\u200b\u4ee5\u200b\u300c\u200b\u5f15\u7528\u200b\u300d\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\u7684\u200b\uff0c\u200b\u8fd9\u200b\u610f\u5473\u7740\u200b\u5728\u200b\u51fd\u6570\u200b\u91cc\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u5bf9\u4e8e\u200b\u8c03\u7528\u8005\u200b\u662f\u200b\u53ef\u89c1\u200b\u7684\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u60f3\u8c61\u200b\u5185\u90e8\u200b\u64cd\u4f5c\u200b\u5982\u4e0b\u200b:
// nums \u200b\u662f\u200b\u4ee5\u200b\u201c\u200b\u5f15\u7528\u200b\u201d\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\u7684\u200b\u3002\u200b\u4e5f\u5c31\u662f\u8bf4\u200b\uff0c\u200b\u4e0d\u200b\u5bf9\u200b\u5b9e\u53c2\u200b\u4f5c\u200b\u4efb\u4f55\u200b\u62f7\u8d1d\u200b\nint len = removeElement(nums, val);\n\n// \u200b\u5728\u200b\u51fd\u6570\u200b\u91cc\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u5bf9\u4e8e\u200b\u8c03\u7528\u8005\u200b\u662f\u200b\u53ef\u89c1\u200b\u7684\u200b\u3002\n// \u200b\u6839\u636e\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u7684\u200b\u957f\u5ea6\u200b, \u200b\u5b83\u4f1a\u200b\u6253\u5370\u200b\u51fa\u200b\u6570\u7ec4\u200b\u4e2d\u200b \u200b\u8be5\u200b\u957f\u5ea6\u200b\u8303\u56f4\u200b\u5185\u200b \u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u3002\nfor (int i = 0; i < len; i++) {\n\u00a0 \u00a0 print(nums[i]);\n}\n
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [3,2,2,3], val = 3\n\u200b\u8f93\u51fa\u200b\uff1a2, nums = [2,2]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u51fd\u6570\u200b\u5e94\u8be5\u200b\u8fd4\u56de\u200b\u65b0\u200b\u7684\u200b\u957f\u5ea6\u200b 2, \u200b\u5e76\u4e14\u200b nums \u200b\u4e2d\u200b\u7684\u200b\u524d\u200b\u4e24\u4e2a\u200b\u5143\u7d20\u200b\u5747\u200b\u4e3a\u200b 2\u3002\u200b\u4f60\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u8d85\u51fa\u200b\u65b0\u200b\u957f\u5ea6\u200b\u540e\u9762\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\u200b\u4f8b\u5982\u200b\uff0c\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u7684\u200b\u65b0\u200b\u957f\u5ea6\u200b\u4e3a\u200b 2 \uff0c\u200b\u800c\u200b nums = [2,2,3,3] \u200b\u6216\u200b nums = [2,2,0,0]\uff0c\u200b\u4e5f\u200b\u4f1a\u200b\u88ab\u200b\u89c6\u4f5c\u200b\u6b63\u786e\u200b\u7b54\u6848\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [0,1,2,2,3,0,4,2], val = 2\n\u200b\u8f93\u51fa\u200b\uff1a5, nums = [0,1,4,0,3]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u51fd\u6570\u200b\u5e94\u8be5\u200b\u8fd4\u56de\u200b\u65b0\u200b\u7684\u200b\u957f\u5ea6\u200b 5, \u200b\u5e76\u4e14\u200b nums \u200b\u4e2d\u200b\u7684\u200b\u524d\u200b\u4e94\u4e2a\u200b\u5143\u7d20\u200b\u4e3a\u200b 0, 1, 3, 0, 4\u3002\u200b\u6ce8\u610f\u200b\u8fd9\u200b\u4e94\u4e2a\u200b\u5143\u7d20\u200b\u53ef\u200b\u4e3a\u200b\u4efb\u610f\u200b\u987a\u5e8f\u200b\u3002\u200b\u4f60\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u8d85\u51fa\u200b\u65b0\u200b\u957f\u5ea6\u200b\u540e\u9762\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100
Reference
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/27/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u53cc\u200b\u6307\u9488\u200b\u6cd5\u200b\uff0c\u200b\u4e24\u4e2a\u200b\u6307\u9488\u200b\u5206\u522b\u200b\u6307\u5411\u200b\uff1a
- \u200b\u5c1a\u672a\u200b\u68c0\u67e5\u200b\u8fc7\u200b\u7684\u200b\u90e8\u5206\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u5143\u7d20\u200b
- \u200b\u5df2\u7ecf\u200b\u68c0\u67e5\u200b\u8fc7\u200b\u7684\u200b\u90e8\u5206\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b
\u200b\u5f53\u200b\u4e24\u4e2a\u200b\u6307\u9488\u200b\u91cd\u5408\u200b\u65f6\u200b\u4e0d\u200b\u9700\u8981\u200b\u8fdb\u884c\u200b\u590d\u5236\u200b\u64cd\u4f5c\u200b\u3002
int removeElement(int* nums, int numsSize, int val){\n int slow = 0, fast = 0, ret = numsSize;\n if (numsSize == 0)\n return 0;\n do\n {\n if (fast > slow)\n nums[slow] = nums[fast];\n if (nums[fast] == val)\n ret--;\n else\n slow++;\n fast++;\n }\n while (fast < numsSize);\n return ret;\n}\n
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/28/","title":"28. \u200b\u5b9e\u73b0\u200b strStr()","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/28/#_1","title":"\u9898\u76ee","text":"\u200b\u5b9e\u73b0\u200bstrStr()
\u200b\u51fd\u6570\u200b\u3002
\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200bhaystack
\u200b\u5b57\u7b26\u4e32\u200b\u548c\u200b\u4e00\u4e2a\u200bneedle
\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u5728\u200bhaystack
\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u627e\u51fa\u200b needle \u200b\u5b57\u7b26\u4e32\u200b\u51fa\u73b0\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u4f4d\u7f6e\u200b (\u200b\u4ece\u200b0\u200b\u5f00\u59cb\u200b)\u3002\u200b\u5982\u679c\u200b\u4e0d\u200b\u5b58\u5728\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200b\u00a0-1\u3002
\u200b\u793a\u4f8b\u200b 1:
\u200b\u8f93\u5165\u200b: haystack = \"hello\", needle = \"ll\"\n\u200b\u8f93\u51fa\u200b: 2\n
\u200b\u793a\u4f8b\u200b 2:
\u200b\u8f93\u5165\u200b: haystack = \"aaaaa\", needle = \"bba\"\n\u200b\u8f93\u51fa\u200b: -1\n
\u200b\u8bf4\u660e\u200b:
\u200b\u5f53\u200bneedle
\u200b\u662f\u200b\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u65f6\u200b\uff0c\u200b\u6211\u4eec\u200b\u5e94\u5f53\u200b\u8fd4\u56de\u200b\u4ec0\u4e48\u200b\u503c\u200b\u5462\u200b\uff1f\u200b\u8fd9\u662f\u200b\u4e00\u4e2a\u200b\u5728\u200b\u9762\u8bd5\u200b\u4e2d\u200b\u5f88\u200b\u597d\u200b\u7684\u200b\u95ee\u9898\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u672c\u9898\u200b\u800c\u8a00\u200b\uff0c\u200b\u5f53\u200bneedle
\u200b\u662f\u200b\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u65f6\u200b\u6211\u4eec\u200b\u5e94\u5f53\u200b\u8fd4\u56de\u200b 0 \u3002\u200b\u8fd9\u200b\u4e0e\u200bC\u200b\u8bed\u8a00\u200b\u7684\u200bstrstr()
\u200b\u4ee5\u53ca\u200bJava\u200b\u7684\u200bindexOf()
\u200b\u5b9a\u4e49\u200b\u76f8\u7b26\u200b\u3002
Reference
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/28/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u66b4\u529b\u200b\u6309\u4f4d\u200b\u5339\u914d\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int strStr(char * haystack, char * needle){\n int len1 = strlen(haystack), len2 = strlen(needle), cur1 = 0, cur2 = 0, cur3 = 0, success = 1;\n if (!len2)\n return 0;\n if (len1 < len2)\n return -1;\n do\n {\n success = 1;\n if (haystack[cur1] == needle[0])\n {\n cur2 = 0;\n cur3 = 0;\n while(cur2 < len2 && cur3 + cur1 < len1 && success)\n {\n if(haystack[cur1 + cur3] != needle[cur2])\n success = 0;\n cur3++;\n cur2++;\n }\n if (success)\n return cur1;\n }\n cur1++;\n }\n while (haystack[cur1 + len2 - 1]);\n return -1;\n}\n
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/3/","title":"3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u5b57\u7b26\u4e32","Sliding Window"]},{"location":"coding/leetcode/3/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u627e\u51fa\u200b\u5176\u4e2d\u200b\u4e0d\u200b\u542b\u6709\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u00a0\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b\u00a0\u200b\u7684\u200b\u957f\u5ea6\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01:
\u200b\u8f93\u5165\u200b: s = \"abcabcbb\"\n\u200b\u8f93\u51fa\u200b: 3 \n\u200b\u89e3\u91ca\u200b: \u200b\u56e0\u4e3a\u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b\u662f\u200b \"abc\"\uff0c\u200b\u6240\u4ee5\u200b\u5176\u200b\u957f\u5ea6\u200b\u4e3a\u200b 3\u3002\n
\u200b\u793a\u4f8b\u200b 2:
\u200b\u8f93\u5165\u200b: s = \"bbbbb\"\n\u200b\u8f93\u51fa\u200b: 1\n\u200b\u89e3\u91ca\u200b: \u200b\u56e0\u4e3a\u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b\u662f\u200b \"b\"\uff0c\u200b\u6240\u4ee5\u200b\u5176\u200b\u957f\u5ea6\u200b\u4e3a\u200b 1\u3002\n
\u200b\u793a\u4f8b\u200b 3:
\u200b\u8f93\u5165\u200b: s = \"pwwkew\"\n\u200b\u8f93\u51fa\u200b: 3\n\u200b\u89e3\u91ca\u200b: \u200b\u56e0\u4e3a\u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b\u662f\u200b\u00a0\"wke\"\uff0c\u200b\u6240\u4ee5\u200b\u5176\u200b\u957f\u5ea6\u200b\u4e3a\u200b 3\u3002\n\u00a0 \u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u4f60\u200b\u7684\u200b\u7b54\u6848\u200b\u5fc5\u987b\u200b\u662f\u200b \u200b\u5b50\u4e32\u200b \u200b\u7684\u200b\u957f\u5ea6\u200b\uff0c\"pwke\"\u00a0\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5b50\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e0d\u662f\u200b\u5b50\u4e32\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 4:
\u200b\u8f93\u5165\u200b: s = \"\"\n\u200b\u8f93\u51fa\u200b: 0\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= s.length <= 5 * 104
s
\u00a0\u200b\u7531\u200b\u82f1\u6587\u5b57\u6bcd\u200b\u3001\u200b\u6570\u5b57\u200b\u3001\u200b\u7b26\u53f7\u200b\u548c\u200b\u7a7a\u683c\u200b\u7ec4\u6210\u200b
","tags":["\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u5b57\u7b26\u4e32","Sliding Window"]},{"location":"coding/leetcode/3/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b \uff1a\u200b\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u5b58\u50a8\u200b\u5404\u200b\u5b57\u6bcd\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b\uff08\u200b\u54c8\u5e0c\u200b\u8868\u200b\uff09\u3002\u200b\u5f53\u200b\u4e0d\u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5b57\u6bcd\u200b\u65f6\u200b\u6ed1\u52a8\u200b\u7a97\u53e3\u200b\u4e0d\u65ad\u200b\u5411\u200b\u53f3\u200b\u5ef6\u4f38\u200b\uff0c\u200b\u76f4\u5230\u200b\u51fa\u73b0\u200b\u91cd\u590d\u200b\u5b57\u6bcd\u200b\u6216\u200b\u5230\u8fbe\u200b\u5b57\u7b26\u4e32\u200b\u7ed3\u5c3e\u200b\u3002\u200b\u68c0\u6d4b\u200b\u5230\u200b\u91cd\u590d\u200b\u5b57\u6bcd\u200b\u540e\u200b\uff0c\u200b\u4ece\u200b\u5de6\u5411\u53f3\u200b\u6536\u7f29\u200b\u6ed1\u52a8\u200b\u7a97\u53e3\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u6536\u7f29\u200b\u90fd\u200b\u5bf9\u200b\u54c8\u5e0c\u200b\u8868\u200b\u8fdb\u884c\u200b\u66f4\u65b0\u200b\u3002\u200b\u76f4\u5230\u200b\u4e0d\u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5b57\u6bcd\u200b\u65f6\u200b\uff0c\u200b\u6ed1\u52a8\u200b\u7a97\u53e3\u200b\u624d\u200b\u505c\u6b62\u200b\u6536\u7f29\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u5411\u200b\u53f3\u200b\u5ef6\u4f38\u200b\u3002
\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b \uff1a\\(O(N)\\)
\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b \uff1a\\(O(1)\\)\uff0c\u200b\u4e0e\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u65e0\u5173\u200b\uff0c\u200b\u4f46\u200b\u4e0e\u200b\u5355\u4e2a\u200b\u5b57\u7b26\u200b\u7684\u200b\u5bbd\u5ea6\u200b\u6709\u5173\u200b\u3002
int lengthOfLongestSubstring(char * s){\n int length = 0, ret = 0;\n char hashMap[256] = {0}, *cur = s;\n while(*cur)\n {\n while(hashMap[*cur])\n {\n hashMap[*(cur - length)] -= 1;\n length--;\n }\n hashMap[*cur] = 1;\n length++;\n ret = ret > length ? ret : length;\n cur++;\n }\n return ret;\n}\n
Reference
","tags":["\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u5b57\u7b26\u4e32","Sliding Window"]},{"location":"coding/leetcode/315/","title":"315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u6392\u5e8f","\u6811\u72b6\u6570\u7ec4","\u7ebf\u6bb5\u6811","\u4e8c\u5206\u67e5\u627e","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/315/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b nums \uff0c\u200b\u6309\u200b\u8981\u6c42\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u6570\u7ec4\u200b\u00a0counts \u3002\u200b\u6570\u7ec4\u200b counts \u200b\u6709\u200b\u8be5\u200b\u6027\u8d28\u200b\uff1acounts[i]
\u200b\u7684\u200b\u503c\u200b\u662f\u200bnums[i]
\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200bnums[i]
\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u6570\u91cf\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [5,2,6,1]\n\u200b\u8f93\u51fa\u200b\uff1a[2,1,1,0] \n\u200b\u89e3\u91ca\u200b\uff1a\n5 \u200b\u7684\u200b\u53f3\u4fa7\u200b\u6709\u200b 2 \u200b\u4e2a\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5143\u7d20\u200b (2 \u200b\u548c\u200b 1)\n2 \u200b\u7684\u200b\u53f3\u4fa7\u200b\u4ec5\u200b\u6709\u200b 1 \u200b\u4e2a\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5143\u7d20\u200b (1)\n6 \u200b\u7684\u200b\u53f3\u4fa7\u200b\u6709\u200b 1 \u200b\u4e2a\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5143\u7d20\u200b (1)\n1 \u200b\u7684\u200b\u53f3\u4fa7\u200b\u6709\u200b 0 \u200b\u4e2a\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5143\u7d20\u200b\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= nums.length <= 10^5
-10^4\u00a0<= nums[i] <= 10^4
Reference
","tags":["\u6392\u5e8f","\u6811\u72b6\u6570\u7ec4","\u7ebf\u6bb5\u6811","\u4e8c\u5206\u67e5\u627e","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/315/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4ece\u540e\u200b\u5f80\u524d\u200b\u6784\u9020\u200b\u4e00\u4e2a\u200b\u4e8c\u53c9\u200b\u67e5\u627e\u200b\u6811\u200b\uff0c\u200b\u5728\u200b\u4e8c\u53c9\u200b\u67e5\u627e\u200b\u6811\u4e2d\u200b\u7ef4\u62a4\u200b\u6811\u4e2d\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u6570\u5b57\u200b\u7684\u200b\u4e2a\u6570\u200b\u3002
\u200b\u4e8c\u53c9\u6811\u200b\u9700\u8981\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u57df\u200b\u7528\u4e8e\u200b\u8ba1\u7b97\u200b\u5de6\u5b50\u200b\u6811\u200b\u7684\u200b\u5143\u7d20\u200b\u603b\u6570\u200b\uff0c\u200b\u5373\u200b\u5f53\u524d\u200b\u6811\u4e2d\u200b\u6570\u503c\u200b\u5c0f\u4e8e\u200b\u8be5\u200b\u8282\u70b9\u200b\u7684\u200b\u5143\u7d20\u200b\u603b\u6570\u200b\u3002\u200b\u5b9e\u73b0\u200b\u65b9\u6cd5\u200b\u662f\u200b\u5728\u200b\u5de6\u5b50\u200b\u6811\u200b\u6dfb\u52a0\u200b\u5143\u7d20\u200b\u540e\u200b\u8be5\u57df\u200b\u7684\u200b\u503c\u200b\u589e\u52a0\u200b1\u3002
\u200b\u5728\u200b\u8282\u70b9\u200b\u7684\u200b\u53f3\u5b50\u200b\u6811\u200b\u6dfb\u52a0\u200b\u5143\u7d20\u200b\u65f6\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u548c\u200b\u8282\u70b9\u200b\u5de6\u5b50\u200b\u6811\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u8282\u70b9\u200b\u90fd\u200b\u662f\u200b\u7b26\u5408\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u8282\u70b9\u200b\u3002\u200b\u5728\u200b\u9012\u5f52\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u9700\u8981\u200b\u4f20\u9012\u200b\u4e00\u4e2a\u200b\u7528\u4f5c\u200b\u8ba1\u6570\u5668\u200b\u7684\u200b\u6307\u9488\u200b\u53c2\u6570\u200b\uff08\u200b\u8ba1\u6570\u200b\u7684\u200b\u6570\u503c\u200b\u5373\u200b\u4e3a\u200b\u6240\u6c42\u200b\u7684\u200b\u7ed3\u679c\u200b\uff09\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\nstruct TreeNode2\n{\n struct TreeNode2 *left;\n struct TreeNode2 *right;\n int val;\n int subs;\n};\n\nstruct TreeNode2 *insert(struct TreeNode2 *dest, int src, int *depth)\n{\n if (dest == NULL)\n {\n struct TreeNode2 *ret = (struct TreeNode2 *)malloc(sizeof(struct TreeNode2));\n ret->left = NULL;\n ret->right = NULL;\n ret->val = src;\n ret->subs = 0;\n return ret;\n }\n if (src > dest->val)\n {\n *depth += 1 + dest->subs;\n dest->right = insert(dest->right, src, depth);\n }\n else\n {\n dest->subs++;\n dest->left = insert(dest->left, src, depth);\n }\n return dest;\n}\n\nint *countSmaller(int *nums, int numsSize, int *returnSize)\n{\n *returnSize = numsSize;\n int *ret = (int *)memset(malloc(sizeof(int) * numsSize), 0, sizeof(int) * numsSize), i = 0;\n if (numsSize <= 1)\n return ret;\n struct TreeNode2 *tempTree = NULL;\n for (i = numsSize - 1; i >= 0; i--)\n tempTree = insert(tempTree, nums[i], ret + i);\n return ret;\n}\n
","tags":["\u6392\u5e8f","\u6811\u72b6\u6570\u7ec4","\u7ebf\u6bb5\u6811","\u4e8c\u5206\u67e5\u627e","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/341/","title":"341. \u200b\u6241\u5e73\u5316\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u8fed\u4ee3\u200b\u5668","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/341/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u5d4c\u5957\u200b\u7684\u200b\u6574\u578b\u200b\u5217\u8868\u200b\u3002\u200b\u8bf7\u200b\u4f60\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u8fed\u4ee3\u200b\u5668\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u80fd\u591f\u200b\u904d\u5386\u200b\u8fd9\u4e2a\u200b\u6574\u578b\u200b\u5217\u8868\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u6574\u6570\u200b\u3002
\u200b\u5217\u8868\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e00\u9879\u200b\u6216\u8005\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\uff0c\u200b\u6216\u8005\u200b\u662f\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u5217\u8868\u200b\u3002\u200b\u5176\u4e2d\u200b\u5217\u8868\u200b\u7684\u200b\u5143\u7d20\u200b\u4e5f\u200b\u53ef\u80fd\u200b\u662f\u200b\u6574\u6570\u200b\u6216\u662f\u200b\u5176\u4ed6\u200b\u5217\u8868\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [[1,1],2,[1,1]]\n\u200b\u8f93\u51fa\u200b: [1,1,2,1,1]\n\u200b\u89e3\u91ca\u200b: \u200b\u901a\u8fc7\u200b\u91cd\u590d\u200b\u8c03\u7528\u200b\u00a0next \u200b\u76f4\u5230\u200b\u00a0hasNext \u200b\u8fd4\u56de\u200b false\uff0cnext\u00a0\u200b\u8fd4\u56de\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u987a\u5e8f\u200b\u5e94\u8be5\u200b\u662f\u200b: [1,1,2,1,1]\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: [1,[4,[6]]]\n\u200b\u8f93\u51fa\u200b: [1,4,6]\n\u200b\u89e3\u91ca\u200b: \u200b\u901a\u8fc7\u200b\u91cd\u590d\u200b\u8c03\u7528\u200b\u00a0next\u00a0\u200b\u76f4\u5230\u200b\u00a0hasNext \u200b\u8fd4\u56de\u200b false\uff0cnext\u00a0\u200b\u8fd4\u56de\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u987a\u5e8f\u200b\u5e94\u8be5\u200b\u662f\u200b: [1,4,6]\u3002\n
Reference
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/341/#_2","title":"\u9898\u89e3","text":"C\u200b\u8bed\u8a00\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u94fe\u8868\u200b\uff0c\u200b\u7136\u540e\u200b\u5bf9\u200b\u94fe\u8868\u200b\u8fdb\u884c\u200b\u8fed\u4ee3\u200b\uff1a
/**\n * *********************************************************************\n * // This is the interface that allows for creating nested lists.\n * // You should not implement it, or speculate about its implementation\n * *********************************************************************\n *\n * // Return true if this NestedInteger holds a single integer, rather than a nested list.\n * bool NestedIntegerIsInteger(struct NestedInteger *);\n *\n * // Return the single integer that this NestedInteger holds, if it holds a single integer\n * // The result is undefined if this NestedInteger holds a nested list\n * int NestedIntegerGetInteger(struct NestedInteger *);\n *\n * // Return the nested list that this NestedInteger holds, if it holds a nested list\n * // The result is undefined if this NestedInteger holds a single integer\n * struct NestedInteger **NestedIntegerGetList(struct NestedInteger *);\n *\n * // Return the nested list's size that this NestedInteger holds, if it holds a nested list\n * // The result is undefined if this NestedInteger holds a single integer\n * int NestedIntegerGetListSize(struct NestedInteger *);\n * };\n */\nstruct NestedIterator {\n struct ListNode *list;\n struct ListNode *current;\n};\n\nstruct ListNode *getNode(int val, struct ListNode *next)\n{\n struct ListNode *ret = (struct ListNode *)malloc(sizeof(struct ListNode));\n ret->val = val;\n ret->next = next;\n return ret;\n}\n\nstruct ListNode *toList(struct NestedInteger *src, struct ListNode **tail)\n{\n if (NestedIntegerIsInteger(src))\n {\n struct ListNode *ret = getNode(NestedIntegerGetInteger(src), NULL);\n if (tail)\n *tail = ret;\n return ret;\n }\n else\n {\n struct NestedInteger **content = NestedIntegerGetList(src);\n struct ListNode *ret = NULL, *temp = NULL;\n int i = 0, size = NestedIntegerGetListSize(src);\n for (i = 0; i < size; i++)\n {\n if (!ret)\n ret = toList(content[i], &temp);\n else\n (*tail)->next = toList(content[i], &temp);\n if (temp)\n *tail = temp;\n }\n return ret;\n }\n}\n\nstruct NestedIterator *nestedIterCreate(struct NestedInteger** nestedList, int nestedListSize) {\n struct NestedIterator *ret = (struct NestedIterator *)malloc(sizeof(struct NestedIterator));\n ret->list = NULL;\n ret->current = NULL;\n struct ListNode *temp = NULL;\n for (int i = 0; i < nestedListSize; i++)\n {\n if (!ret->list)\n ret->list = toList(nestedList[i], &temp);\n else\n ret->current->next = toList(nestedList[i], &temp);\n ret->current = temp;\n }\n ret->current = ret->list;\n return ret;\n}\n\nbool nestedIterHasNext(struct NestedIterator *iter) {\n return iter->current;\n}\n\nint nestedIterNext(struct NestedIterator *iter) {\n int ret = iter->current->val;\n iter->current = iter->current->next;\n return ret;\n}\n\n/** Deallocates memory previously allocated for the iterator */\nvoid nestedIterFree(struct NestedIterator *iter) {\n while (iter->list)\n {\n iter->current = iter->list->next;\n free(iter->list);\n iter->list = iter->current;\n }\n free(iter);\n}\n\n/**\n * Your NestedIterator will be called like this:\n * struct NestedIterator *i = nestedIterCreate(nestedList, nestedListSize);\n * while (nestedIterHasNext(i)) printf(\"%d\\n\", nestedIterNext(i));\n * nestedIterFree(i);\n */\n
Python\u200b\u8bed\u8a00\u200b\u652f\u6301\u200byield
\u200b\u8bed\u53e5\u200b\u4e0e\u200byield from
\u200b\u8bed\u53e5\u200b\uff0c\u200b\u56e0\u6b64\u200b\u76f4\u63a5\u200b\u8fed\u4ee3\u200b\u751f\u6210\u5668\u200b\u5373\u53ef\u200b
# \"\"\"\n# This is the interface that allows for creating nested lists.\n# You should not implement it, or speculate about its implementation\n# \"\"\"\n#class NestedInteger:\n# def isInteger(self) -> bool:\n# \"\"\"\n# @return True if this NestedInteger holds a single integer, rather than a nested list.\n# \"\"\"\n#\n# def getInteger(self) -> int:\n# \"\"\"\n# @return the single integer that this NestedInteger holds, if it holds a single integer\n# Return None if this NestedInteger holds a nested list\n# \"\"\"\n#\n# def getList(self) -> [NestedInteger]:\n# \"\"\"\n# @return the nested list that this NestedInteger holds, if it holds a nested list\n# Return None if this NestedInteger holds a single integer\n# \"\"\"\n\ndef listIter(nestNode):\n for node in nestNode:\n if node.isInteger():\n yield node.getInteger()\n else:\n yield from listIter(node.getList())\n\nclass NestedIterator:\n def __init__(self, nestedList):\n self.nextvalue = 0\n self.iterator = listIter(nestedList)\n\n def next(self):\n return self.nextvalue\n\n def hasNext(self):\n try:\n self.nextvalue = next(self.iterator)\n except StopIteration:\n return False\n return True\n\n# Your NestedIterator object will be instantiated and called as such:\n# i, v = NestedIterator(nestedList), []\n# while i.hasNext(): v.append(i.next())\n
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/344/","title":"344. \u200b\u53cd\u8f6c\u200b\u5b57\u7b26\u4e32","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/344/#_1","title":"\u9898\u76ee","text":"\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u5176\u200b\u4f5c\u7528\u200b\u662f\u200b\u5c06\u200b\u8f93\u5165\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\u53cd\u8f6c\u200b\u8fc7\u6765\u200b\u3002\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u4ee5\u200b\u5b57\u7b26\u200b\u6570\u7ec4\u200b char[] \u200b\u7684\u200b\u5f62\u5f0f\u200b\u7ed9\u51fa\u200b\u3002
\u200b\u4e0d\u8981\u200b\u7ed9\u200b\u53e6\u5916\u200b\u7684\u200b\u6570\u7ec4\u200b\u5206\u914d\u200b\u989d\u5916\u200b\u7684\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4f60\u200b\u5fc5\u987b\u200b\u539f\u5730\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u3001\u200b\u4f7f\u7528\u200b O(1) \u200b\u7684\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\u89e3\u51b3\u200b\u8fd9\u4e00\u200b\u95ee\u9898\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5b57\u7b26\u200b\u90fd\u200b\u662f\u200b ASCII \u200b\u7801\u8868\u200b\u4e2d\u200b\u7684\u200b\u53ef\u200b\u6253\u5370\u200b\u5b57\u7b26\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a[\"h\",\"e\",\"l\",\"l\",\"o\"]\n\u200b\u8f93\u51fa\u200b\uff1a[\"o\",\"l\",\"l\",\"e\",\"h\"]\n
\u200b\u793a\u4f8b\u200b 2\uff1a \u200b\u8f93\u5165\u200b\uff1a[\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\n\u200b\u8f93\u51fa\u200b\uff1a[\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n
Reference
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/344/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5206\u522b\u200b\u4f7f\u7528\u200b\u4e24\u4e2a\u200b\u6307\u9488\u200b\u6307\u5411\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5f00\u5934\u200b\u4e0e\u200b\u7ed3\u5c3e\u200b\uff0c\u200b\u4ea4\u6362\u200b\u4e24\u8005\u200b\u7684\u200b\u503c\u200b\u540e\u200b\u6536\u7f29\u200b\u6307\u9488\u200b\u3002\uff08\u200b\u5de6\u200b\u6307\u9488\u200b\u53f3\u79fb\u200b\uff0c\u200b\u53f3\u200b\u6307\u9488\u200b\u5de6\u79fb\u200b\uff09
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
void reverseString(char* s, int sSize)\n{\n if (sSize <= 1)\n return;\n char temp = 0;\n temp = *s;\n *s = s[sSize - 1];\n s[sSize - 1] = temp;\n reverseString(s + 1, sSize - 2);\n}\n
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/35/","title":"35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/35/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6392\u5e8f\u200b\u6570\u7ec4\u200b\u548c\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u5728\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u627e\u5230\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5176\u200b\u7d22\u5f15\u200b\u3002\u200b\u5982\u679c\u200b\u76ee\u6807\u503c\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e8e\u200b\u6570\u7ec4\u200b\u4e2d\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5b83\u200b\u5c06\u200b\u4f1a\u200b\u88ab\u200b\u6309\u200b\u987a\u5e8f\u200b\u63d2\u5165\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u65e0\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\u3002
\u200b\u793a\u4f8b\u200b 1:
\u200b\u8f93\u5165\u200b: [1,3,5,6], 5\n\u200b\u8f93\u51fa\u200b: 2\n
\u200b\u793a\u4f8b\u200b\u00a02:
\u200b\u8f93\u5165\u200b: [1,3,5,6], 2\n\u200b\u8f93\u51fa\u200b: 1\n
\u200b\u793a\u4f8b\u200b 3:
\u200b\u8f93\u5165\u200b: [1,3,5,6], 7\n\u200b\u8f93\u51fa\u200b: 4\n
\u200b\u793a\u4f8b\u200b 4:
\u200b\u8f93\u5165\u200b: [1,3,5,6], 0\n\u200b\u8f93\u51fa\u200b: 0\n
Reference
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/35/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u3002
\u200b\u8bbe\u200b\u6570\u5217\u200b\\(\\{a_i\\}\\)\u200b\u4e3a\u200b\u5347\u5e8f\u200b\u6570\u5217\u200b\uff0c\u200b\u76ee\u6807\u503c\u200b\\(b\\)\u200b\u7684\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b\\(j\\)\u200b\u6ee1\u8db3\u200b\uff1a
- \\(b \\leq a_j\\)
- \\(b > a_{j - 1}\\)
\u200b\u6ce8\u610f\u200b\u672c\u9898\u200b\u8981\u6c42\u200b\u7684\u200b\u6570\u636e\u200b\u4e0e\u200b\u666e\u901a\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u610f\u4e49\u200b\u4e0d\u540c\u200b\u3002
- \u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u8fd4\u56de\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u4e0d\u200b\u5927\u4e8e\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u5143\u7d20\u200b\u4e0b\u6807\u200b\u3002
- \u200b\u672c\u9898\u200b\u8981\u6c42\u200b\u8fd4\u56de\u200b\u7b2c\u4e00\u4e2a\u200b\u4e0d\u200b\u5c0f\u4e8e\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u5143\u7d20\u200b\u4e0b\u6807\u200b\u3002
int bSearch(int *nums, int lo, int hi, int target)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (nums[mid] >= target)\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo;\n}\n\nint searchInsert(int* nums, int numsSize, int target){\n return bSearch(nums, 0, numsSize, target);\n}\n
\u200b\u9644\u200b\uff1a\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u4f9b\u200b\u6bd4\u8f83\u200b
int bSearch(int *nums, int lo, int hi, int target)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (nums[mid] > target)\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo - 1;\n}\n
\u200b\u5728\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u4e2d\u200b\uff0c\u200b\u59cb\u7ec8\u200b\u6709\u200b\uff1a
nums[lo - 1]
\u200b\u662f\u200b\u622a\u81f3\u200b\u5f53\u524d\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u4e0d\u200b\u5927\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5927\u200b\u5143\u7d20\u200b nums[hi]
\u200b\u662f\u200b\u622a\u81f3\u200b\u5f53\u524d\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u5927\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b
\u200b\u800c\u200b\u5728\u200b\u672c\u9898\u200b\u7b97\u6cd5\u200b\u4e2d\u200b\uff0c\u200b\u59cb\u7ec8\u200b\u6709\u200b\uff1a
nums[lo - 1]
\u200b\u662f\u200b\u622a\u81f3\u200b\u5f53\u524d\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u5c0f\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5927\u200b\u5143\u7d20\u200b nums[hi]
\u200b\u662f\u200b\u622a\u81f3\u200b\u5f53\u524d\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u4e0d\u200b\u5c0f\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b
\u200b\u539f\u56e0\u200b\u5728\u4e8e\u200b\uff0c\u200b\u4e24\u200b\u7b97\u6cd5\u200b\u5bf9\u200b\u7b49\u4e8e\u200b\u7684\u200b\u60c5\u51b5\u200b\u7684\u200b\u5904\u7406\u200b\u4e0d\u540c\u200b\uff0c\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u5bf9\u200bnums[mid] == target
\u200b\u60c5\u51b5\u200b\u7684\u200b\u5904\u7406\u200b\u4e3a\u200b lo = mid + 1
\uff0c\u200b\u4ec5\u5f53\u200bnums[mid] > target
\u200b\u65f6\u624d\u200b\u6267\u884c\u200bhi = mid
\u3002\u200b\u7531\u4e8e\u200b[lo, hi)
\u200b\u662f\u200b\u5f53\u524d\u200b\u5df2\u200b \u200b\u786e\u8ba4\u200b\u7684\u200b\u533a\u95f4\u200b\uff0c\u200b\u5219\u200bnums[hi]
\u200b\u4e3a\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u5927\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b\uff0c\u200b\u800c\u200bnums[lo - 1]
\u200b\u4e3a\u200b\u4e0d\u200b\u5927\u4e8e\u200b target
\u200b\u7684\u200b\u6700\u5927\u200b\u5143\u7d20\u200b\u3002\u200b\u800c\u200b\u672c\u9898\u200b\u7b97\u6cd5\u200b\u5bf9\u200bnums[mid] == target
\u200b\u60c5\u51b5\u200b\u7684\u200b\u5904\u7406\u200b\u4e3a\u200bhi = mid
\uff0c\u200b\u4ec5\u5f53\u200b nums[mid] < target
\u200b\u65f6\u624d\u200b\u6267\u884c\u200blo = mid + 1
\uff0c\u200b\u5219\u200bnums[hi]
\u200b\u4e3a\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u4e0d\u200b\u5c0f\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5c0f\u200b \u200b\u5143\u7d20\u200b\uff0cnums[lo - 1]
\u200b\u4e3a\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u5c0f\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5927\u200b\u5143\u7d20\u200b\u3002
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/350/","title":"350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/350/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u6765\u200b\u8ba1\u7b97\u200b\u5b83\u4eec\u200b\u7684\u200b\u4ea4\u96c6\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums1 = [1,2,2,1], nums2 = [2,2]\n\u200b\u8f93\u51fa\u200b\uff1a[2,2]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums1 = [4,9,5], nums2 = [9,4,9,8,4]\n\u200b\u8f93\u51fa\u200b\uff1a[4,9]\n
\u200b\u8bf4\u660e\u200b\uff1a
- \u200b\u8f93\u51fa\u200b\u7ed3\u679c\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b\uff0c\u200b\u5e94\u200b\u4e0e\u200b\u5143\u7d20\u200b\u5728\u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\u4e00\u81f4\u200b\u3002
- \u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u8003\u8651\u200b\u8f93\u51fa\u200b\u7ed3\u679c\u200b\u7684\u200b\u987a\u5e8f\u200b\u3002
\u200b\u8fdb\u9636\u200b\uff1a
- \u200b\u5982\u679c\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u6570\u7ec4\u200b\u5df2\u7ecf\u200b\u6392\u597d\u5e8f\u200b\u5462\u200b\uff1f\u200b\u4f60\u200b\u5c06\u200b\u5982\u4f55\u200b\u4f18\u5316\u200b\u4f60\u200b\u7684\u200b\u7b97\u6cd5\u200b\uff1f
- \u200b\u5982\u679c\u200b
nums1
\u200b\u7684\u200b\u5927\u5c0f\u200b\u6bd4\u200bnums2
\u200b\u5c0f\u200b\u5f88\u591a\u200b\uff0c\u200b\u54ea\u200b\u79cd\u200b\u65b9\u6cd5\u200b\u66f4\u4f18\u200b\uff1f - \u200b\u5982\u679c\u200b
nums2
\u200b\u7684\u200b\u5143\u7d20\u200b\u5b58\u50a8\u200b\u5728\u200b\u78c1\u76d8\u200b\u4e0a\u200b\uff0c\u200b\u5185\u5b58\u200b\u662f\u200b\u6709\u9650\u200b\u7684\u200b\uff0c\u200b\u5e76\u4e14\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u4e00\u6b21\u200b\u52a0\u8f7d\u200b\u6240\u6709\u200b\u7684\u200b\u5143\u7d20\u200b\u5230\u200b\u5185\u5b58\u200b\u4e2d\u200b\uff0c\u200b\u4f60\u200b\u8be5\u200b\u600e\u4e48\u529e\u200b\uff1f
Reference
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/350/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u54c8\u5e0c\u200b\u8868\u200b\u5b58\u50a8\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5404\u200b\u5143\u7d20\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b\uff0c\u200b\u6ce8\u610f\u200b\u6570\u503c\u200b\u5728\u200b\u4ea4\u200b\u96c6\u4e2d\u200b\u53ef\u4ee5\u200b\u91cd\u590d\u200b\u51fa\u73b0\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
#define MIN(x, y) (x > y ? y : x)\nstruct cell\n{\n int value;\n int times1;\n int times2;\n};\nint* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){\n int i = 0, cur, mapSize = nums1Size + nums2Size, *ret = (int *)malloc(sizeof(int) * (nums1Size + nums2Size));\n *returnSize = 0;\n struct cell *hashMap = (struct cell *)memset(malloc(sizeof(struct cell) * mapSize), 0, sizeof(struct cell) * mapSize);\n for (i = 0; i < nums1Size; i++)\n {\n cur = (nums1[i] > 0 ? 1 : -1) * (nums1[i] % mapSize);\n while((hashMap[cur].times1 != 0 || hashMap[cur].times2) && hashMap[cur].value != nums1[i])\n {\n cur++;\n cur = cur == mapSize ? 0 : cur;\n }\n if (hashMap[cur].times1 == 0 && hashMap[cur].times2 == 0)\n hashMap[cur].value = nums1[i];\n hashMap[cur].times1++;\n }\n for (i = 0; i < nums2Size; i++)\n {\n cur = (nums2[i] > 0 ? 1 : -1) * (nums2[i] % mapSize);\n while((hashMap[cur].times1 != 0 || hashMap[cur].times2) && hashMap[cur].value != nums2[i])\n {\n cur++;\n cur = cur == mapSize ? 0 : cur;\n }\n if (hashMap[cur].times1 == 0 && hashMap[cur].times2 == 0)\n hashMap[cur].value = nums2[i];\n hashMap[cur].times2++;\n }\n for (i = 0; i < mapSize; i++)\n while ((hashMap[i].times2--) && (hashMap[i].times1--))\n ret[(*returnSize)++] = hashMap[i].value;\n return ret;\n}\n
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/36/","title":"36. \u200b\u6709\u6548\u200b\u7684\u200b\u6570\u72ec","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/36/#_1","title":"\u9898\u76ee","text":"\u200b\u5224\u65ad\u200b\u4e00\u4e2a\u200b\u00a09x9 \u200b\u7684\u200b\u6570\u72ec\u200b\u662f\u5426\u200b\u6709\u6548\u200b\u3002\u200b\u53ea\u200b\u9700\u8981\u200b\u6839\u636e\u200b\u4ee5\u4e0b\u200b\u89c4\u5219\u200b\uff0c\u200b\u9a8c\u8bc1\u200b\u5df2\u7ecf\u200b\u586b\u5165\u200b\u7684\u200b\u6570\u5b57\u200b\u662f\u5426\u200b\u6709\u6548\u200b\u5373\u53ef\u200b\u3002
- \u200b\u6570\u5b57\u200b
1-9
\u200b\u5728\u200b\u6bcf\u200b\u4e00\u884c\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002 - \u200b\u6570\u5b57\u200b
1-9
\u200b\u5728\u200b\u6bcf\u200b\u4e00\u5217\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002 - \u200b\u6570\u5b57\u200b
1-9
\u200b\u5728\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u4ee5\u200b\u7c97\u200b\u5b9e\u7ebf\u200b\u5206\u9694\u200b\u7684\u200b3x3
\u200b\u5bab\u5185\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002
\u200b\u4e0a\u56fe\u200b\u662f\u200b\u4e00\u4e2a\u200b\u90e8\u5206\u200b\u586b\u5145\u200b\u7684\u200b\u6709\u6548\u200b\u7684\u200b\u6570\u72ec\u200b\u3002
\u200b\u6570\u72ec\u200b\u90e8\u5206\u200b\u7a7a\u683c\u200b\u5185\u200b\u5df2\u200b\u586b\u5165\u200b\u4e86\u200b\u6570\u5b57\u200b\uff0c\u200b\u7a7a\u767d\u200b\u683c\u7528\u200b'.'
\u200b\u8868\u793a\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b:\n[\n [\"5\",\"3\",\".\",\".\",\"7\",\".\",\".\",\".\",\".\"],\n [\"6\",\".\",\".\",\"1\",\"9\",\"5\",\".\",\".\",\".\"],\n [\".\",\"9\",\"8\",\".\",\".\",\".\",\".\",\"6\",\".\"],\n [\"8\",\".\",\".\",\".\",\"6\",\".\",\".\",\".\",\"3\"],\n [\"4\",\".\",\".\",\"8\",\".\",\"3\",\".\",\".\",\"1\"],\n [\"7\",\".\",\".\",\".\",\"2\",\".\",\".\",\".\",\"6\"],\n [\".\",\"6\",\".\",\".\",\".\",\".\",\"2\",\"8\",\".\"],\n [\".\",\".\",\".\",\"4\",\"1\",\"9\",\".\",\".\",\"5\"],\n [\".\",\".\",\".\",\".\",\"8\",\".\",\".\",\"7\",\"9\"]\n]\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b:\n[\n\u00a0 [\"8\",\"3\",\".\",\".\",\"7\",\".\",\".\",\".\",\".\"],\n\u00a0 [\"6\",\".\",\".\",\"1\",\"9\",\"5\",\".\",\".\",\".\"],\n\u00a0 [\".\",\"9\",\"8\",\".\",\".\",\".\",\".\",\"6\",\".\"],\n\u00a0 [\"8\",\".\",\".\",\".\",\"6\",\".\",\".\",\".\",\"3\"],\n\u00a0 [\"4\",\".\",\".\",\"8\",\".\",\"3\",\".\",\".\",\"1\"],\n\u00a0 [\"7\",\".\",\".\",\".\",\"2\",\".\",\".\",\".\",\"6\"],\n\u00a0 [\".\",\"6\",\".\",\".\",\".\",\".\",\"2\",\"8\",\".\"],\n\u00a0 [\".\",\".\",\".\",\"4\",\"1\",\"9\",\".\",\".\",\"5\"],\n\u00a0 [\".\",\".\",\".\",\".\",\"8\",\".\",\".\",\"7\",\"9\"]\n]\n\u200b\u8f93\u51fa\u200b: false\n\u200b\u89e3\u91ca\u200b: \u200b\u9664\u4e86\u200b\u7b2c\u4e00\u884c\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6570\u5b57\u200b\u4ece\u200b 5 \u200b\u6539\u4e3a\u200b 8 \u200b\u4ee5\u5916\u200b\uff0c\u200b\u7a7a\u683c\u200b\u5185\u200b\u5176\u4ed6\u200b\u6570\u5b57\u200b\u5747\u200b\u4e0e\u200b \u200b\u793a\u4f8b\u200b1 \u200b\u76f8\u540c\u200b\u3002\n \u200b\u4f46\u200b\u7531\u4e8e\u200b\u4f4d\u4e8e\u200b\u5de6\u4e0a\u89d2\u200b\u7684\u200b 3x3 \u200b\u5bab\u5185\u200b\u6709\u200b\u4e24\u4e2a\u200b 8 \u200b\u5b58\u5728\u200b, \u200b\u56e0\u6b64\u200b\u8fd9\u4e2a\u200b\u6570\u72ec\u200b\u662f\u200b\u65e0\u6548\u200b\u7684\u200b\u3002\n
\u200b\u8bf4\u660e\u200b\uff1a
- \u200b\u4e00\u4e2a\u200b\u6709\u6548\u200b\u7684\u200b\u6570\u72ec\u200b\uff08\u200b\u90e8\u5206\u200b\u5df2\u200b\u88ab\u200b\u586b\u5145\u200b\uff09\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u53ef\u89e3\u200b\u7684\u200b\u3002
- \u200b\u53ea\u200b\u9700\u8981\u200b\u6839\u636e\u200b\u4ee5\u4e0a\u200b\u89c4\u5219\u200b\uff0c\u200b\u9a8c\u8bc1\u200b\u5df2\u7ecf\u200b\u586b\u5165\u200b\u7684\u200b\u6570\u5b57\u200b\u662f\u5426\u200b\u6709\u6548\u200b\u5373\u53ef\u200b\u3002
- \u200b\u7ed9\u200b\u5b9a\u6570\u200b\u72ec\u200b\u5e8f\u5217\u200b\u53ea\u200b\u5305\u542b\u200b\u6570\u5b57\u200b\u00a01-9\u00a0\u200b\u548c\u200b\u5b57\u7b26\u200b\u00a0'.'\u00a0\u3002
- \u200b\u7ed9\u200b\u5b9a\u6570\u200b\u72ec\u200b\u6c38\u8fdc\u200b\u662f\u200b\u00a09x9\u00a0\u200b\u5f62\u5f0f\u200b\u7684\u200b\u3002
Reference
","tags":["\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/36/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6839\u636e\u200b\u5b9a\u4e49\u200b\u76f4\u63a5\u5224\u65ad\u200b\u8f93\u5165\u200b\u7684\u200b\u6570\u7ec4\u200b\u662f\u5426\u200b\u6ee1\u8db3\u200b\u6570\u72ec\u200b\u7684\u200b3\u200b\u4e2a\u200b\u6761\u4ef6\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
bool isValidSudoku(char** board, int boardSize, int* boardColSize){\n int i = 0, j = 0, positions1[boardSize], positions2[boardSize], k = 0;\n for (i = 0; i < boardSize; i++)\n {\n memset(positions1, 0, sizeof(int) * boardSize);\n memset(positions2, 0, sizeof(int) * boardSize);\n for (j = 0; j < boardSize; j++)\n {\n if (board[i][j] > '0' && positions1[board[i][j] - '1'])\n return false;\n if (board[j][i] > '0' && positions2[board[j][i] - '1'])\n return false;\n if (board[i][j] > '0')\n positions1[board[i][j] - '1'] = 1;\n if (board[j][i] > '0')\n positions2[board[j][i] - '1'] = 1;\n }\n }\n for (i = 0; i < 3; i++)\n {\n for (j = 0; j < 3; j++)\n {\n memset(positions1, 0, sizeof(int) * boardSize);\n for (k = 0; k < boardSize; k++)\n {\n if (board[i * 3 + k % 3][j * 3 + k / 3] > '0' && positions1[board[i * 3 + k % 3][j * 3 + k / 3] - '1'])\n return false;\n if (board[i * 3 + k % 3][j * 3 + k / 3] > '0')\n positions1[board[i * 3 + k % 3][j * 3 + k / 3] - '1'] = 1;\n }\n }\n }\n return true;\n}\n
","tags":["\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/368/","title":"368. \u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/368/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u7531\u200b \u200b\u65e0\u200b\u91cd\u590d\u200b \u200b\u6b63\u6574\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b nums
\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u627e\u51fa\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5176\u4e2d\u200b\u6700\u5927\u200b\u7684\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b answer
\uff0c\u200b\u5b50\u200b\u96c6\u4e2d\u200b\u6bcf\u4e00\u200b\u5143\u7d20\u200b\u5bf9\u200b (answer[i], answer[j])
\u200b\u90fd\u200b\u5e94\u5f53\u200b\u6ee1\u8db3\u200b\uff1a
answer[i] % answer[j] == 0
\uff0c\u200b\u6216\u200b answer[j] % answer[i] == 0
\u200b\u5982\u679c\u200b\u5b58\u5728\u200b\u591a\u4e2a\u200b\u6709\u6548\u200b\u89e3\u200b\u5b50\u96c6\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5176\u4e2d\u200b\u4efb\u4f55\u200b\u4e00\u4e2a\u200b\u5747\u200b\u53ef\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,3]\n\u200b\u8f93\u51fa\u200b\uff1a[1,2]\n\u200b\u89e3\u91ca\u200b\uff1a[1,3] \u200b\u4e5f\u200b\u4f1a\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u6b63\u786e\u200b\u7b54\u6848\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,4,8]\n\u200b\u8f93\u51fa\u200b\uff1a[1,2,4,8]\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 1000
1 <= nums[i] <= 2 * 10^9
nums
\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u6574\u6570\u200b \u200b\u4e92\u4e0d\u200b\u76f8\u540c\u200b
Reference
","tags":["\u6570\u5b66","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/368/#_2","title":"\u9898\u89e3","text":"\u200b\u6574\u6570\u200b\u4e4b\u95f4\u200b\u7684\u200b\u6574\u9664\u200b\u5173\u7cfb\u200b\u6ee1\u8db3\u200b\u81ea\u53cd\u6027\u200b\u3001\u200b\u53cd\u5bf9\u79f0\u6027\u200b\u548c\u200b\u4f20\u9012\u6027\u200b\uff0c\u200b\u4f7f\u7528\u200b\\(a|b\\)\u200b\u8868\u793a\u200b\\(a\\)\u200b\u53ef\u4ee5\u200b\u88ab\u200b\\(b\\)\u200b\u6574\u9664\u200b\uff0c\u200b\u5219\u200b\uff1a
- \u200b\u81ea\u53cd\u6027\u200b\uff1a\\(a|a = T\\)
- \u200b\u53cd\u5bf9\u79f0\u6027\u200b\uff1a\\(a|b \\overline \\lor b|a = T\\)
- \u200b\u4f20\u9012\u6027\u200b\uff1a\\(a|b \\land b|c\\Rightarrow a|c\\)
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u6574\u9664\u200b\u5173\u7cfb\u200b\u662f\u200b\u6b63\u6574\u6570\u200b\u96c6\u200b\\(N_+\\)\u200b\u4e0a\u200b\u7684\u200b\u76f8\u5bb9\u200b\u5173\u7cfb\u200b\u4e0e\u200b\u504f\u5e8f\u200b\u5173\u7cfb\u200b\u3002
\u200b\u8bbe\u200b\u6b63\u6574\u6570\u200b\u96c6\u5408\u200b\u4e3a\u200b\\(S\\)\uff0c\u200b\u4ee5\u4e0b\u200b\u57fa\u4e8e\u200b\u504f\u5e8f\u200b\u5173\u7cfb\u200b\\(R\\)\u200b\u4e0e\u200b\u504f\u5e8f\u200b\u96c6\u200b\\(S\\)\u200b\u5b9a\u4e49\u200b\u94fe\u200b\u7684\u200b\u6982\u5ff5\u200b\uff1a
- \u200b\u82e5\u200b\\(a\\in S, b\\in S\\)\uff0c\u200b\u4e14\u200b\\(a|b \\lor b|a\\)\uff0c\u200b\u5219\u200b\\(a, b\\)\u200b\u662f\u200b\u53ef\u6bd4\u200b\u7684\u200b\uff1b
- \u200b\u82e5\u200b\u96c6\u5408\u200b\\(B\\subseteq S\\)\uff0c\u200b\u4e14\u200b\u5bf9\u4e8e\u200b\\(B\\)\u200b\u4e2d\u200b\u4efb\u610f\u200b\u4e00\u5bf9\u200b\u5143\u7d20\u200b\\(x, y\\)\u200b\u90fd\u200b\u662f\u200b\u53ef\u6bd4\u200b\u7684\u200b\uff0c\u200b\u5219\u200b\u79f0\u200b\\(B\\)\u200b\u4e3a\u200b\u504f\u5e8f\u200b\u96c6\u200b\\(S\\)\u200b\u4e0a\u200b\u7684\u200b\u94fe\u200b\u3002
- \u200b\u504f\u5e8f\u200b\u96c6\u200b\\(S\\)\u200b\u4e2d\u200b\u5305\u542b\u200b\u5143\u7d20\u200b\u6700\u591a\u200b\u7684\u200b\u94fe\u200b\u79f0\u4e3a\u200b\u6700\u957f\u200b\u94fe\u200b\u3002
\u200b\u7531\u6b64\u53ef\u89c1\u200b\uff0c\u200b\u6240\u6c42\u200b\u7684\u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b\u5373\u200b\u4e3a\u200b\\(S\\)\u200b\u4e0a\u200b\u7684\u200b\u6700\u957f\u200b\u94fe\u200b\u3002
\u200b\u504f\u5e8f\u200b\u96c6\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u54c8\u65af\u200b\u56fe\u200b\u8fdb\u884c\u200b\u8868\u793a\u200b\uff0c\u200b\u5982\u200b\u96c6\u5408\u200b\\(\\{2,3,4,6,8\\}\\)\u200b\u4e0a\u200b\u7684\u200b\u504f\u5e8f\u200b\u5173\u7cfb\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
\u200b\u54c8\u65af\u200b\u56fe\u662f\u200b\u6709\u200b\u5411\u200b\u65e0\u200b\u73af\u56fe\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u8fde\u901a\u200b\u3002\u200b\u94fe\u200b\u5728\u200b\u54c8\u65af\u200b\u56fe\u4e2d\u200b\u8868\u73b0\u200b\u4e3a\u200b\u4e00\u6bb5\u200b\u8def\u5f84\u200b\uff0c\u200b\u6700\u957f\u200b\u94fe\u5373\u200b\u4e3a\u200b\u54c8\u65af\u200b\u56fe\u4e2d\u200b\u7684\u200b\u6700\u957f\u200b\u8def\u5f84\u200b\uff0c\u200b\u5373\u200b\u5404\u200b\u5206\u91cf\u200b\u7684\u200b\u6700\u957f\u200b\u76f4\u5f84\u200b\uff0c\u200b\u5982\u56fe\u200b\u4e2d\u52a0\u200b\u7c97\u7ebf\u6761\u200b\u6240\u793a\u200b\u3002
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u56fe\u200b\u89e3\u51b3\u200b\u672c\u9898\u200b\uff0c\u200b\u7b2c\u4e00\u6b65\u200b\u6784\u9020\u200b\u504f\u5e8f\u200b\u96c6\u200b\u7684\u200b\u54c8\u65af\u200b\u56fe\u200b\uff0c\u200b\u6d41\u7a0b\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u5bf9\u200b\u96c6\u5408\u200b\u6392\u5e8f\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u5728\u200b\u56fe\u200b\u4e2d\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u4e0e\u200b\u4e4b\u200b\u5bf9\u5e94\u200b\uff1b
- \u200b\u4ece\u540e\u200b\u5411\u524d\u200b\u904d\u5386\u200b\u96c6\u5408\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\\(a_i\\)\uff1a
- \u200b\u4ece\u200b\u7b2c\u200b\\(i + 1\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\u5f00\u59cb\u200b\uff0c\u200b\u5411\u200b\u540e\u200b\u904d\u5386\u200b\u96c6\u5408\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\\(a_j\\)\uff0c\u200b\u82e5\u200b\\(a_j|a_i\\)\uff0c\u200b\u5e76\u4e14\u200b\u4e0d\u200b\u5b58\u5728\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u8282\u70b9\u200b\u4e0e\u200b\\(a_i\\)\u200b\u76f8\u8fde\u200b\uff0c\u200b\u5219\u200b\u5c06\u200b\u8282\u70b9\u200b\\(i\\)\u200b\u4e0e\u200b\u8282\u70b9\u200b\\(j\\)\u200b\u76f8\u8fde\u63a5\u200b\u3002
\u200b\u4e3a\u4e86\u200b\u5feb\u901f\u200b\u6c42\u51fa\u200b\u56fe\u200b\u7684\u200b\u76f4\u5f84\u200b\uff0c\u200b\u53ef\u200b\u5728\u200b\u8282\u70b9\u200b\u4e2d\u200b\u5b58\u50a8\u200b\u4e24\u4e2a\u200b\u503c\u200b\uff0c\u200b\u5373\u200b\uff1a
- \u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u8ddd\u79bb\u200b\u672b\u7aef\u200b\u8282\u70b9\u200b\uff08\u200b\u51fa\u5ea6\u200b\u4e3a\u200b\\(0\\)\u200b\u7684\u200b\u8282\u70b9\u200b\uff09\u200b\u7684\u200b\u6700\u5927\u200b\u8ddd\u79bb\u200b
- \u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u8ddd\u79bb\u200b\u672b\u7aef\u200b\u8282\u70b9\u200b\u6700\u5927\u200b\u8ddd\u79bb\u200b\u6240\u200b\u5bf9\u5e94\u200b\u7684\u200b\u51fa\u8fb9\u200b
\u200b\u7531\u4e8e\u200b\u6574\u9664\u200b\u5173\u7cfb\u200b\u8574\u542b\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b\u5173\u7cfb\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5728\u200b\u6784\u9020\u200b\u54c8\u65af\u200b\u56fe\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u540c\u65f6\u200b\u6784\u9020\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u503c\u200b\u3002
\u200b\u7b2c\u4e8c\u6b65\u200b\u5373\u53ef\u200b\u627e\u51fa\u200b\u6700\u957f\u200b\u76f4\u5f84\u200b\u3002\u200b\u904d\u5386\u200b\u6240\u6709\u200b\u5165\u5ea6\u200b\u4e3a\u200b\\(0\\)\u200b\u7684\u200b\u8282\u70b9\u200b\uff0c\u200b\u627e\u51fa\u200b\u5e76\u200b\u8bb0\u4e0b\u200b\u8ddd\u79bb\u200b\u672b\u7aef\u200b\u8282\u70b9\u200b\u6700\u8fdc\u200b\u7684\u200b\u8282\u70b9\u200b\u3002\u200b\u518d\u200b\u6839\u636e\u200b\u8282\u70b9\u200b\u4e2d\u200b\u5b58\u50a8\u200b\u7684\u200b\u51fa\u8fb9\u200b\u4fe1\u606f\u200b\u5373\u53ef\u200b\u5b8c\u6574\u200b\u6784\u9020\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b\u3002
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\n#define MAX(x, y) ((x) > (y) ? (x) : (y))\nstruct Edge;\nstruct Vertex;\nstruct Edge\n{\n struct Vertex *dest;\n struct Edge *next;\n};\nstruct Vertex\n{\n int val;\n int status;\n struct Edge *edges;\n int height;\n struct Edge *maxHeight;\n};\nstruct Edge *getEdge(struct Vertex *dest, struct Edge *next)\n{\n struct Edge *cur = next;\n while (cur)\n {\n if (dest->val % cur->dest->val == 0)\n return next;\n cur = cur->next;\n }\n struct Edge *ret = (struct Edge *)malloc(sizeof(struct Edge));\n ret->dest = dest;\n ret->next = next;\n return ret;\n}\nint cmp(const void *a, const void *b)\n{\n return *((int *)a) - *((int *)b);\n}\nvoid dfs(struct Vertex *graph)\n{\n if (graph == NULL)\n return;\n graph->status = true;\n struct Edge *edge = graph->edges;\n while (edge)\n {\n dfs(edge->dest);\n edge = edge->next;\n }\n}\nint* largestDivisibleSubset(int* nums, int numsSize, int* returnSize){\n struct Vertex *nodes = (struct Vertex *)malloc(sizeof(struct Vertex) * numsSize), *maxVertex = NULL;\n int i = 0, j = 0, max = -1, *ret = NULL;\n qsort(nums, numsSize, sizeof(int), cmp);\n for (i = 0; i < numsSize; i++)\n {\n nodes[i].val = nums[i];\n nodes[i].status = 0;\n nodes[i].edges = NULL;\n nodes[i].height = 0;\n nodes[i].maxHeight = NULL;\n }\n for (i = numsSize - 1; i >= 0; i--)\n {\n for (j = i + 1; j < numsSize; j++)\n {\n if (nodes[j].val % nodes[i].val)\n continue;\n nodes[i].edges = getEdge(nodes + j, nodes[i].edges);\n if (nodes[i].height < nodes[j].height + 1)\n {\n nodes[i].height = nodes[j].height + 1;\n nodes[i].maxHeight = nodes[i].edges;\n }\n }\n }\n for (i = 0; i < numsSize; i++)\n {\n if (nodes[i].status)\n continue;\n if (nodes[i].height > max)\n {\n max = nodes[i].height;\n maxVertex = nodes + i;\n }\n dfs(nodes + i);\n }\n *returnSize = max + 1;\n ret = (int *)malloc(sizeof(int) * (max + 1));\n for (i = 0; i <= max; i++)\n {\n ret[i] = maxVertex->val;\n if (maxVertex->maxHeight == NULL)\n break;\n maxVertex = maxVertex->maxHeight->dest;\n }\n return ret;\n}\n
","tags":["\u6570\u5b66","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/37/","title":"37. \u200b\u89e3\u6570\u200b\u72ec","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u54c8\u5e0c\u8868","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/37/#_1","title":"\u9898\u76ee","text":"\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u7a0b\u5e8f\u200b\uff0c\u200b\u901a\u8fc7\u200b\u586b\u5145\u200b\u7a7a\u683c\u200b\u6765\u200b\u89e3\u51b3\u200b\u6570\u72ec\u200b\u95ee\u9898\u200b\u3002
\u200b\u6570\u72ec\u200b\u7684\u200b\u89e3\u6cd5\u200b\u9700\u200b \u200b\u9075\u5faa\u200b\u5982\u4e0b\u200b\u89c4\u5219\u200b\uff1a
\u200b\u6570\u5b57\u200b\u00a01-9
\u00a0\u200b\u5728\u200b\u6bcf\u200b\u4e00\u884c\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002 \u200b\u6570\u5b57\u200b\u00a01-9
\u00a0\u200b\u5728\u200b\u6bcf\u200b\u4e00\u5217\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002 \u200b\u6570\u5b57\u200b\u00a01-9
\u00a0\u200b\u5728\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u4ee5\u200b\u7c97\u200b\u5b9e\u7ebf\u200b\u5206\u9694\u200b\u7684\u200b\u00a03x3
\u00a0\u200b\u5bab\u5185\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002\uff08\u200b\u8bf7\u200b\u53c2\u8003\u200b\u793a\u4f8b\u200b\u56fe\u200b\uff09 \u200b\u6570\u72ec\u200b\u90e8\u5206\u200b\u7a7a\u683c\u200b\u5185\u200b\u5df2\u200b\u586b\u5165\u200b\u4e86\u200b\u6570\u5b57\u200b\uff0c\u200b\u7a7a\u767d\u200b\u683c\u7528\u200b\u00a0'.'
\u00a0\u200b\u8868\u793a\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = [\n [\"5\",\"3\",\".\",\".\",\"7\",\".\",\".\",\".\",\".\"],\n [\"6\",\".\",\".\",\"1\",\"9\",\"5\",\".\",\".\",\".\"],\n [\".\",\"9\",\"8\",\".\",\".\",\".\",\".\",\"6\",\".\"],\n [\"8\",\".\",\".\",\".\",\"6\",\".\",\".\",\".\",\"3\"],\n [\"4\",\".\",\".\",\"8\",\".\",\"3\",\".\",\".\",\"1\"],\n [\"7\",\".\",\".\",\".\",\"2\",\".\",\".\",\".\",\"6\"],\n [\".\",\"6\",\".\",\".\",\".\",\".\",\"2\",\"8\",\".\"],\n [\".\",\".\",\".\",\"4\",\"1\",\"9\",\".\",\".\",\"5\"],\n [\".\",\".\",\".\",\".\",\"8\",\".\",\".\",\"7\",\"9\"]\n]\n\u200b\u8f93\u51fa\u200b\uff1a[\n [\"5\",\"3\",\"4\",\"6\",\"7\",\"8\",\"9\",\"1\",\"2\"],\n [\"6\",\"7\",\"2\",\"1\",\"9\",\"5\",\"3\",\"4\",\"8\"],\n [\"1\",\"9\",\"8\",\"3\",\"4\",\"2\",\"5\",\"6\",\"7\"],\n [\"8\",\"5\",\"9\",\"7\",\"6\",\"1\",\"4\",\"2\",\"3\"],\n [\"4\",\"2\",\"6\",\"8\",\"5\",\"3\",\"7\",\"9\",\"1\"],\n [\"7\",\"1\",\"3\",\"9\",\"2\",\"4\",\"8\",\"5\",\"6\"],\n [\"9\",\"6\",\"1\",\"5\",\"3\",\"7\",\"2\",\"8\",\"4\"],\n [\"2\",\"8\",\"7\",\"4\",\"1\",\"9\",\"6\",\"3\",\"5\"],\n [\"3\",\"4\",\"5\",\"2\",\"8\",\"6\",\"1\",\"7\",\"9\"]\n]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8f93\u5165\u200b\u7684\u200b\u6570\u72ec\u200b\u5982\u4e0a\u56fe\u200b\u6240\u793a\u200b\uff0c\u200b\u552f\u4e00\u200b\u6709\u6548\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a\n
\u200b\u63d0\u793a\u200b\uff1a
board.length == 9
board[i].length == 9
board[i][j]
\u200b\u662f\u200b\u4e00\u4f4d\u200b\u6570\u5b57\u200b\u6216\u8005\u200b '.'
- \u200b\u9898\u76ee\u200b\u6570\u636e\u200b \u200b\u4fdd\u8bc1\u200b \u200b\u8f93\u5165\u200b\u6570\u72ec\u4ec5\u200b\u6709\u200b\u4e00\u4e2a\u200b\u89e3\u200b
Reference
","tags":["\u54c8\u5e0c\u8868","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/37/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u56de\u6eaf\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u7a7a\u200b\u5355\u5143\u683c\u200b\uff0c\u200b\u68c0\u67e5\u200b\u5176\u200b\u6240\u5728\u200b\u884c\u200b\uff0c\u200b\u6240\u5728\u200b\u5217\u200b\u4e0e\u200b\u6240\u5728\u200b\u65b9\u683c\u200b\uff0c\u200b\u9010\u4e2a\u200b\u68c0\u67e5\u200b\u5176\u200b\u53ef\u4ee5\u200b\u586b\u5165\u200b\u7684\u200b\u6570\u503c\u200b\u3002\u200b\u5982\u679c\u200b \u200b\u6709\u200b\u53ef\u4ee5\u200b\u586b\u5165\u200b\u7684\u200b\u5b57\u7b26\u200b\uff0c\u200b\u5219\u200b\u4f9d\u6b21\u200b\u8fdb\u884c\u200b\u5c1d\u8bd5\u200b\u3002\u200b\u82e5\u200b\u67d0\u4e2a\u200b\u7a7a\u683c\u200b\u6ca1\u6709\u200b\u4efb\u4f55\u200b\u53ef\u4ee5\u200b\u586b\u5165\u200b\u7684\u200b\u6570\u503c\u200b\uff0c\u200b\u6216\u200b\u6240\u6709\u200b\u53ef\u200b\u586b\u5165\u200b\u7684\u200b\u503c\u200b\u90fd\u200b\u662f\u200b\u9519\u8bef\u200b\u7684\u200b \uff0c\u200b\u610f\u5473\u7740\u200b\u5f53\u524d\u200b\u641c\u7d22\u200b\u8def\u5f84\u200b\u5b58\u5728\u200b\u9519\u8bef\u200b\uff0c\u200b\u9700\u8981\u200b\u8fd4\u56de\u200b\u4e0a\u200b\u4e00\u4e2a\u200b\u72b6\u6001\u200b\u8fdb\u884c\u200b\u4e0b\u200b\u4e00\u6b65\u200b\u5c1d\u8bd5\u200b\u3002
\u200b\u5982\u679c\u200b\u65b9\u683c\u200b\u88ab\u200b\u5b8c\u5168\u200b\u586b\u6ee1\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u7acb\u5373\u200b\u8fd4\u56de\u200b\u3002\u200b\u5e76\u200b\u901a\u8fc7\u200b\u8fd4\u56de\u503c\u200b\u544a\u8bc9\u200b\u4e0a\u200b\u4e00\u6b65\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200b\u7ed3\u679c\u200b\u3002
bool dfs(char **board, int boardSize, int *boardColSize)\n{\n int x = 0, y = 0, i = 0, j = 0;\n bool flag = true, candidate[9] = {false};\n for (x = 0; x < 9 && flag; x++)\n for (y = 0; y < 9 && flag; y++)\n if (board[x][y] == '.')\n flag = false;\n if (flag)\n return true;\n x--;\n y--;\n for (i = 0; i < 9; i++)\n {\n if (board[x][i] != '.')\n candidate[board[x][i] - '1'] = true;\n if (board[i][y] != '.')\n candidate[board[i][y] - '1'] = true;\n if (board[3 * (x / 3) + i / 3][3 * (y / 3) + i % 3] != '.')\n candidate[board[3 * (x / 3) + i / 3][3 * (y / 3) + i % 3] - '1'] = true;\n }\n for (i = 0; i < 9 && !flag; i++)\n {\n if (!candidate[i])\n {\n board[x][y] = '1' + i;\n flag = flag || dfs(board, boardSize, boardColSize);\n if (flag)\n return flag;\n board[x][y] = '.';\n }\n }\n return flag;\n}\n\nvoid solveSudoku(char** board, int boardSize, int* boardColSize){\n dfs(board, boardSize, boardColSize);\n}\n
","tags":["\u54c8\u5e0c\u8868","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/377/","title":"377. \u200b\u7ec4\u5408\u200b\u603b\u548c\u200b \u2163","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/377/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u7531\u200b \u200b\u4e0d\u540c\u200b \u200b\u6574\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u6570\u7ec4\u200b nums
\uff0c\u200b\u548c\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u200b\u6574\u6570\u200b target
\u3002\u200b\u8bf7\u200b\u4f60\u200b\u4ece\u200b nums
\u200b\u4e2d\u200b\u627e\u51fa\u200b\u5e76\u200b\u8fd4\u56de\u200b\u603b\u548c\u200b\u4e3a\u200b target
\u200b\u7684\u200b\u5143\u7d20\u200b\u7ec4\u5408\u200b\u7684\u200b\u4e2a\u6570\u200b\u3002
\u200b\u9898\u76ee\u200b\u6570\u636e\u200b\u4fdd\u8bc1\u200b\u7b54\u6848\u200b\u7b26\u5408\u200b 32
\u200b\u4f4d\u200b\u6574\u6570\u200b\u8303\u56f4\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,3], target = 4\n\u200b\u8f93\u51fa\u200b\uff1a7\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u7ec4\u5408\u200b\u4e3a\u200b\uff1a\n(1, 1, 1, 1)\n(1, 1, 2)\n(1, 2, 1)\n(1, 3)\n(2, 1, 1)\n(2, 2)\n(3, 1)\n\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u987a\u5e8f\u200b\u4e0d\u540c\u200b\u7684\u200b\u5e8f\u5217\u200b\u88ab\u200b\u89c6\u4f5c\u200b\u4e0d\u540c\u200b\u7684\u200b\u7ec4\u5408\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [9], target = 3\n\u200b\u8f93\u51fa\u200b\uff1a0\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 200
1 <= nums[i] <= 1000
nums
\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b \u200b\u4e92\u4e0d\u200b\u76f8\u540c\u200b 1 <= target <= 1000
\u200b\u8fdb\u9636\u200b\uff1a \u200b\u5982\u679c\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u542b\u6709\u200b\u8d1f\u6570\u200b\u4f1a\u200b\u53d1\u751f\u200b\u4ec0\u4e48\u200b\uff1f\u200b\u95ee\u9898\u200b\u4f1a\u200b\u4ea7\u751f\u200b\u4f55\u79cd\u200b\u53d8\u5316\u200b\uff1f\u200b\u5982\u679c\u200b\u5141\u8bb8\u200b\u8d1f\u6570\u200b\u51fa\u73b0\u200b\uff0c\u200b\u9700\u8981\u200b\u5411\u200b\u9898\u76ee\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u54ea\u4e9b\u200b\u9650\u5236\u200b\u6761\u4ef6\u200b\uff1f
Reference
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/377/#_2","title":"\u9898\u89e3","text":"\u200b\u672c\u9898\u200b\u7684\u200b\u601d\u8def\u200b\u4e0e\u200b70. \u200b\u722c\u697c\u68af\u200b\u76f8\u540c\u200b\u3002\u200b\u6b64\u5904\u200b\u4f7f\u7528\u200b\u8bb0\u5fc6\u200b\u5316\u200b\u9012\u5f52\u200b\u89e3\u51b3\u200b\u3002
\u200b\u8bbe\u200b\\(f(x; S)\\)\u200b\u4e3a\u200b\u7ed9\u5b9a\u200b\u6574\u6570\u200b\u96c6\u5408\u200b\\(S\\)\uff0c\u200b\u7ec4\u6210\u200b\u76ee\u6807\u503c\u200b\\(x\\)\u200b\u7684\u200b\u7ec4\u5408\u200b\u6570\u91cf\u200b\uff0c\u200b\u6211\u4eec\u200b\u9ed8\u8ba4\u200b\\(0\\in S\\)\u3002
- \u200b\u5f53\u200b\\(x < 0\\)\uff0c\u200b\u7531\u4e8e\u200b\\(\\forall y\\in S, y\\geq 0\\)\uff0c\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u5f97\u5230\u200b\u5c0f\u4e8e\u200b\\(0\\)\u200b\u7684\u200b\u6570\u503c\u200b\uff0c\u200b\u6709\u200b\\(f(x; S) = 0\\)
- \\(x = 0\\)\uff0c\u200b\u7531\u4e8e\u200b\u9ed8\u8ba4\u200b\\(0\\in S\\)\uff0c\u200b\u6709\u200b\\(f(x; S) = 1\\)\u3002
- \u200b\u5f53\u200b\\(x < 0\\)\uff0c\\(S\\)\u200b\u4e2d\u200b\u7684\u200b\u4efb\u610f\u200b\u5143\u7d20\u200b\\(y\\)\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u9009\u62e9\u200b\uff0c\u200b\u9009\u62e9\u200b\\(y\\)\u200b\u5f97\u5230\u200b\u7684\u200b\u7ec4\u5408\u200b\u4e2a\u6570\u200b\u4e3a\u200b\\(f(x - y; S)\\)
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5f97\u5230\u200b\\(f(x; S)\\)\u200b\u7684\u200b\u8868\u8fbe\u5f0f\u200b\uff1a
\\[ f(x; S)=\\left\\{ \\begin{aligned} & 0 & x < 0 \\\\ & 1 & x = 0 \\\\ & \\sum_{y\\in S} f(x - y; S) & x > 0 \\end{aligned} \\right . \\] \u200b\u7531\u4e8e\u200b\u8ba1\u7b97\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u4f1a\u200b\u91cd\u590d\u200b\u8ba1\u7b97\u200b\u67d0\u4e9b\u200b\\(f(x; S)\\)\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u8bb0\u5f55\u200b\u6240\u6709\u200b\u5df2\u7ecf\u200b\u8ba1\u7b97\u200b\u8fc7\u200b\u7684\u200b\\(f(x; S)\\)\u3002
int helper(int *dp, int *nums, int numsSize, int target)\n{\n if (target == 0)\n return 1;\n if (target < 0)\n return 0;\n if (dp[target - 1] < 0)\n {\n int ret = 0, i = 0;\n for (i = 0; i < numsSize; i++)\n ret += helper(dp, nums, numsSize, target - nums[i]);\n dp[target - 1] = ret;\n }\n return dp[target - 1];\n}\n\nint combinationSum4(int* nums, int numsSize, int target) {\n int *dp = (int *)malloc(sizeof(int) * target);\n memset(dp, 0xff, sizeof(int) * target);\n return helper(dp, nums, numsSize, target);\n}\n
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/38/","title":"38. \u200b\u5916\u89c2\u200b\u6570\u5217","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/38/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\\(n\\)\uff08\\(1 \\leq\u00a0n\u00a0\\leq 30\\)\uff09\uff0c\u200b\u8f93\u51fa\u200b\u5916\u89c2\u200b\u6570\u5217\u200b\u7684\u200b\u7b2c\u200b\\(n\\)\u200b\u9879\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u6574\u6570\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e00\u9879\u200b\u5c06\u200b\u8868\u793a\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u3002
\u300c\u200b\u5916\u89c2\u200b\u6570\u5217\u200b\u300d\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4ece\u200b\u6570\u5b57\u200b 1 \u200b\u5f00\u59cb\u200b\uff0c\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e00\u9879\u200b\u90fd\u200b\u662f\u200b\u5bf9\u200b\u524d\u200b\u4e00\u9879\u200b\u7684\u200b\u63cf\u8ff0\u200b\u3002\u200b\u524d\u200b\u4e94\u9879\u200b\u5982\u4e0b\u200b\uff1a
1. 1\n2. 11\n3. 21\n4. 1211\n5. 111221\n
\u200b\u7b2c\u4e00\u9879\u200b\u662f\u200b\u6570\u5b57\u200b 1
\u200b\u63cf\u8ff0\u200b\u524d\u200b\u4e00\u9879\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u6570\u662f\u200b 1 \u200b\u5373\u200b \u201c\u200b\u4e00\u4e2a\u200b 1 \u201d\uff0c\u200b\u8bb0\u200b\u4f5c\u200b 11
\u200b\u63cf\u8ff0\u200b\u524d\u200b\u4e00\u9879\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u6570\u662f\u200b 11 \u200b\u5373\u200b \u201c\u200b\u4e24\u4e2a\u200b 1 \u201d \uff0c\u200b\u8bb0\u200b\u4f5c\u200b 21
\u200b\u63cf\u8ff0\u200b\u524d\u200b\u4e00\u9879\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u6570\u662f\u200b 21 \u200b\u5373\u200b \u201c\u200b\u4e00\u4e2a\u200b 2 \u200b\u4e00\u4e2a\u200b 1 \u201d \uff0c\u200b\u8bb0\u200b\u4f5c\u200b 1211
\u200b\u63cf\u8ff0\u200b\u524d\u200b\u4e00\u9879\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u6570\u662f\u200b 1211 \u200b\u5373\u200b \u201c\u200b\u4e00\u4e2a\u200b 1 \u200b\u4e00\u4e2a\u200b 2 \u200b\u4e24\u4e2a\u200b 1 \u201d \uff0c\u200b\u8bb0\u200b\u4f5c\u200b 111221
\u200b\u793a\u4f8b\u200b\u00a01:
\u200b\u8f93\u5165\u200b: 1\n\u200b\u8f93\u51fa\u200b: \"1\"\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8fd9\u662f\u200b\u4e00\u4e2a\u200b\u57fa\u672c\u200b\u6837\u4f8b\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2:
\u200b\u8f93\u5165\u200b: 4\n\u200b\u8f93\u51fa\u200b: \"1211\"\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5f53\u200b n = 3 \u200b\u65f6\u200b\uff0c\u200b\u5e8f\u5217\u200b\u662f\u200b \"21\"\uff0c\u200b\u5176\u4e2d\u200b\u6211\u4eec\u200b\u6709\u200b \"2\" \u200b\u548c\u200b \"1\" \u200b\u4e24\u7ec4\u200b\uff0c\"2\" \u200b\u53ef\u4ee5\u200b\u8bfb\u4f5c\u200b \"12\"\uff0c\u200b\u4e5f\u200b\u5c31\u662f\u200b\u51fa\u73b0\u200b\u9891\u6b21\u200b = 1 \u200b\u800c\u200b \u200b\u503c\u200b = 2\uff1b\u200b\u7c7b\u4f3c\u200b \"1\" \u200b\u53ef\u4ee5\u200b\u8bfb\u4f5c\u200b \"11\"\u3002\u200b\u6240\u4ee5\u200b\u7b54\u6848\u200b\u662f\u200b \"12\" \u200b\u548c\u200b \"11\" \u200b\u7ec4\u5408\u200b\u5728\u200b\u4e00\u8d77\u200b\uff0c\u200b\u4e5f\u200b\u5c31\u662f\u200b \"1211\"\u3002\n
Reference
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/38/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6839\u636e\u200b\u5b9a\u4e49\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\u5373\u53ef\u200b\uff0c\u200b\u6ce8\u610f\u200b\u6b21\u6570\u200b\u90e8\u5206\u200b\u53ef\u80fd\u200b\u8d85\u8fc7\u200b10\uff0c\u200b\u800c\u200b\u6570\u5b57\u200b\u90e8\u5206\u200b\u4e0d\u4f1a\u200b\u8d85\u8fc7\u200b10\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
char * toStr(int n)\n{\n char *ret = (char *)memset(malloc(sizeof(char) * 10), 0, sizeof(char) * 10), temp;\n int i = 0, head = 0, tail;\n while (n)\n {\n ret[i] = n % 10 + '0';\n n /= 10;\n i++;\n }\n tail = i - 1;\n while(head < tail)\n {\n temp = ret[head];\n ret[head] = ret[tail];\n ret[tail] = temp;\n }\n return ret;\n}\n\nchar * countAndSay(int n){\n if (n == 1)\n {\n char *ret = (char *)malloc(sizeof(char) * 2);\n ret[0] = '1';\n ret[1] = 0;\n return ret;\n }\n char *rec = countAndSay(n - 1), *cur = rec, flag = *cur, *temp = NULL,\n *ret = (char *)memset(malloc(sizeof(char) * (strlen(rec) * 2 + 1)), 0, sizeof(char) * (strlen(rec) * 2 + 1)), *retcur = ret;\n int counter = 0;\n while(*cur)\n {\n if (*cur == flag)\n counter++;\n else\n {\n temp = toStr(counter);\n strcpy(retcur, temp);\n while(*retcur)\n retcur++;\n *retcur = flag;\n *retcur++;\n flag = *cur;\n counter = 1;\n free(temp);\n }\n cur++;\n }\n temp = toStr(counter);\n strcpy(retcur, temp);\n while (*retcur)\n retcur++;\n *retcur = flag;\n free(temp);\n free(rec);\n return ret;\n}\n
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/384/","title":"384. \u200b\u6253\u4e71\u200b\u6570\u7ec4","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/384/#_1","title":"\u9898\u76ee","text":"\u200b\u6253\u4e71\u200b\u4e00\u4e2a\u200b\u6ca1\u6709\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\u7684\u200b\u6570\u7ec4\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
// \u200b\u4ee5\u200b\u6570\u5b57\u200b\u96c6\u5408\u200b 1, 2 \u200b\u548c\u200b 3 \u200b\u521d\u59cb\u5316\u200b\u6570\u7ec4\u200b\u3002\nint[] nums = {1,2,3};\nSolution solution = new Solution(nums);\n\n// \u200b\u6253\u4e71\u200b\u6570\u7ec4\u200b [1,2,3] \u200b\u5e76\u200b\u8fd4\u56de\u200b\u7ed3\u679c\u200b\u3002\u200b\u4efb\u4f55\u200b [1,2,3]\u200b\u7684\u200b\u6392\u5217\u200b\u8fd4\u56de\u200b\u7684\u200b\u6982\u7387\u200b\u5e94\u8be5\u200b\u76f8\u540c\u200b\u3002\nsolution.shuffle();\n\n// \u200b\u91cd\u8bbe\u200b\u6570\u7ec4\u200b\u5230\u200b\u5b83\u200b\u7684\u200b\u521d\u59cb\u72b6\u6001\u200b[1,2,3]\u3002\nsolution.reset();\n\n// \u200b\u968f\u673a\u200b\u8fd4\u56de\u200b\u6570\u7ec4\u200b[1,2,3]\u200b\u6253\u4e71\u200b\u540e\u200b\u7684\u200b\u7ed3\u679c\u200b\u3002\nsolution.shuffle();\n
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/384/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a Fisher-Yates \u200b\u6d17\u724c\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5173\u952e\u5728\u4e8e\u200b\u5b9e\u73b0\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u65e0\u653e\u56de\u200b\u62bd\u6837\u200b\u3002
Fisher-Yates \u200b\u6d17\u724c\u200b\u7b97\u6cd5\u200b\u8ddf\u200b\u66b4\u529b\u200b\u7b97\u6cd5\u200b\u5f88\u200b\u50cf\u200b\u3002\u200b\u5728\u200b\u6bcf\u6b21\u200b\u8fed\u4ee3\u200b\u4e2d\u200b\uff0c\u200b\u751f\u6210\u200b\u4e00\u4e2a\u200b\u8303\u56f4\u200b\u5728\u200b\u5f53\u524d\u200b\u4e0b\u6807\u200b\u5230\u200b\u6570\u7ec4\u200b\u672b\u5c3e\u200b\u5143\u7d20\u200b\u4e0b\u6807\u200b\u4e4b\u95f4\u200b\u7684\u200b\u968f\u673a\u200b\u6574\u6570\u200b\u3002\u200b\u63a5\u4e0b\u6765\u200b\uff0c\u200b\u5c06\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u548c\u200b\u968f\u673a\u200b\u9009\u51fa\u200b\u7684\u200b\u4e0b\u6807\u200b\u6240\u6307\u200b\u7684\u200b\u5143\u7d20\u200b\u4e92\u76f8\u4ea4\u6362\u200b - \u200b\u8fd9\u200b\u4e00\u6b65\u200b\u6a21\u62df\u200b\u4e86\u200b\u6bcf\u6b21\u200b\u4ece\u200b \u201c\u200b\u5e3d\u5b50\u200b\u201d \u200b\u91cc\u9762\u200b\u6478\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u5176\u4e2d\u200b\u9009\u53d6\u200b\u4e0b\u6807\u200b\u8303\u56f4\u200b\u7684\u200b\u4f9d\u636e\u200b\u5728\u4e8e\u200b\u6bcf\u4e2a\u200b\u88ab\u200b\u6478\u200b\u51fa\u200b\u7684\u200b\u5143\u7d20\u200b\u90fd\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u518d\u200b\u88ab\u200b\u6478\u51fa\u6765\u200b\u4e86\u200b\u3002\u200b\u6b64\u5916\u200b\u8fd8\u6709\u200b\u4e00\u4e2a\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b\u7684\u200b\u7ec6\u8282\u200b\uff0c\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u662f\u200b\u53ef\u4ee5\u200b\u548c\u200b\u5b83\u200b\u672c\u8eab\u200b\u4e92\u76f8\u4ea4\u6362\u200b\u7684\u200b - \u200b\u5426\u5219\u200b\u751f\u6210\u200b\u6700\u540e\u200b\u7684\u200b\u6392\u5217\u7ec4\u5408\u200b\u7684\u200b\u6982\u7387\u200b\u5c31\u200b\u4e0d\u200b\u5bf9\u200b\u4e86\u200b\u3002
Reference
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
typedef struct {\n int size;\n int *nums;\n} Solution;\n\n\nSolution* solutionCreate(int* nums, int numsSize) {\n Solution *ret = (Solution *)malloc(sizeof(Solution));\n ret->size = numsSize;\n ret->nums = (int *)memcpy(malloc(sizeof(int) * numsSize), nums, sizeof(int) * numsSize);\n return ret;\n}\n\n/** Resets the array to its original configuration and return it. */\nint* solutionReset(Solution* obj, int* retSize) {\n *retSize = obj->size;\n return obj->nums;\n}\n\n/** Returns a random shuffling of the array. */\nint* solutionShuffle(Solution* obj, int* retSize) {\n *retSize = obj->size;\n int *ret = (int *)memcpy(malloc(sizeof(int) * obj->size), obj->nums, sizeof(int) * obj->size), i = 0, temp, x, y;\n unsigned int *seed = malloc(sizeof(unsigned int));\n *seed += (unsigned int)seed;\n srand(*seed);\n for (i = 0; i < obj->size; i++)\n {\n x = i;\n y = rand() % (obj->size - i) + i;\n temp = ret[x];\n ret[x] = ret[y];\n ret[y] = temp;\n }\n free(seed);\n return ret;\n}\n\nvoid solutionFree(Solution* obj) {\n free(obj->nums);\n free(obj);\n}\n\n/**\n * Your Solution struct will be instantiated and called as such:\n * Solution* obj = solutionCreate(nums, numsSize);\n * int* param_1 = solutionReset(obj, retSize);\n\n * int* param_2 = solutionShuffle(obj, retSize);\n\n * solutionFree(obj);\n*/\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/387/","title":"387. \u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u5b57\u7b26","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u54c8\u5e0c\u8868","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/387/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u627e\u5230\u200b\u5b83\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u4e0d\u200b\u91cd\u590d\u200b\u7684\u200b\u5b57\u7b26\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5b83\u200b\u7684\u200b\u7d22\u5f15\u200b\u3002\u200b\u5982\u679c\u200b\u4e0d\u200b\u5b58\u5728\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200b-1
\u3002
\u200b\u793a\u4f8b\u200b\uff1a
s = \"leetcode\"\n\u200b\u8fd4\u56de\u200b 0\n\ns = \"loveleetcode\"\n\u200b\u8fd4\u56de\u200b 2\n
\u200b\u63d0\u793a\u200b\uff1a \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u5b9a\u200b\u8be5\u200b\u5b57\u7b26\u4e32\u200b\u53ea\u200b\u5305\u542b\u200b\u5c0f\u5199\u5b57\u6bcd\u200b\u3002
Reference
","tags":["\u54c8\u5e0c\u8868","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/387/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u5b58\u50a8\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u5404\u200b\u5b57\u7b26\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u3002\u200b\u904d\u5386\u200b\u5b57\u7b26\u4e32\u200b\u8fdb\u884c\u200b\u7edf\u8ba1\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int firstUniqChar(char * s){\n int hashMap[26] = {0};\n char *cur = s;\n while(*cur)\n {\n hashMap[*cur - 'a']++;\n cur++;\n }\n cur = s;\n while(*cur)\n {\n if (hashMap[*cur - 'a'] == 1)\n return (int)(cur - s);\n cur++;\n }\n return -1;\n}\n
","tags":["\u54c8\u5e0c\u8868","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/403/","title":"403. \u200b\u9752\u86d9\u200b\u8fc7\u6cb3","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
\u200b\u4e00\u53ea\u200b\u9752\u86d9\u200b\u60f3\u8981\u200b\u8fc7\u6cb3\u200b\u3002 \u200b\u5047\u5b9a\u200b\u6cb3\u6d41\u200b\u88ab\u200b\u7b49\u200b\u5206\u4e3a\u200b\u82e5\u5e72\u4e2a\u200b\u5355\u5143\u683c\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5728\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u5355\u5143\u683c\u200b\u5185\u200b\u90fd\u200b\u6709\u200b\u53ef\u80fd\u200b\u653e\u200b\u6709\u200b\u4e00\u5757\u200b\u77f3\u5b50\u200b\uff08\u200b\u4e5f\u200b\u6709\u200b\u53ef\u80fd\u200b\u6ca1\u6709\u200b\uff09\u3002 \u200b\u9752\u86d9\u200b\u53ef\u4ee5\u200b\u8df3\u4e0a\u200b\u77f3\u5b50\u200b\uff0c\u200b\u4f46\u662f\u200b\u4e0d\u200b\u53ef\u4ee5\u200b\u8df3\u5165\u200b\u6c34\u4e2d\u200b\u3002
\u200b\u7ed9\u200b\u4f60\u200b\u77f3\u5b50\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u5217\u8868\u200b stones
\uff08\u200b\u7528\u200b\u5355\u5143\u683c\u200b\u5e8f\u53f7\u200b \u200b\u5347\u5e8f\u200b \u200b\u8868\u793a\u200b\uff09\uff0c\u00a0\u200b\u8bf7\u200b\u5224\u5b9a\u200b\u9752\u86d9\u200b\u80fd\u5426\u200b\u6210\u529f\u200b\u8fc7\u6cb3\u200b\uff08\u200b\u5373\u200b\u80fd\u5426\u200b\u5728\u200b\u6700\u540e\u200b\u4e00\u6b65\u200b\u8df3\u81f3\u200b\u6700\u540e\u200b\u4e00\u5757\u200b\u77f3\u5b50\u200b\u4e0a\u200b\uff09\u3002
\u200b\u5f00\u59cb\u200b\u65f6\u200b\uff0c\u00a0\u200b\u9752\u86d9\u200b\u9ed8\u8ba4\u200b\u5df2\u7ad9\u200b\u5728\u200b\u7b2c\u4e00\u5757\u200b\u77f3\u5b50\u200b\u4e0a\u200b\uff0c\u200b\u5e76\u200b\u53ef\u4ee5\u200b\u5047\u5b9a\u200b\u5b83\u200b\u7b2c\u4e00\u6b65\u200b\u53ea\u80fd\u200b\u8df3\u8dc3\u200b\u4e00\u4e2a\u200b\u5355\u4f4d\u200b\uff08\u200b\u5373\u200b\u53ea\u80fd\u200b\u4ece\u200b\u5355\u5143\u683c\u200b 1 \u200b\u8df3\u81f3\u200b\u5355\u5143\u683c\u200b 2 \uff09\u3002
\u200b\u5982\u679c\u200b\u9752\u86d9\u200b\u4e0a\u200b\u4e00\u6b65\u200b\u8df3\u8dc3\u200b\u4e86\u200b\u00a0k
\u00a0\u200b\u4e2a\u200b\u5355\u4f4d\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5b83\u200b\u63a5\u4e0b\u6765\u200b\u7684\u200b\u8df3\u8dc3\u200b\u8ddd\u79bb\u200b\u53ea\u80fd\u200b\u9009\u62e9\u200b\u4e3a\u200b\u00a0k - 1
\u3001k
\u00a0\u200b\u6216\u200b\u00a0k + 1
\u200b\u4e2a\u200b\u5355\u4f4d\u200b\u3002\u00a0\u200b\u53e6\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u9752\u86d9\u200b\u53ea\u80fd\u200b\u5411\u200b\u524d\u65b9\u200b\uff08\u200b\u7ec8\u70b9\u200b\u7684\u200b\u65b9\u5411\u200b\uff09\u200b\u8df3\u8dc3\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1astones = [0,1,3,5,6,8,12,17]\n\u200b\u8f93\u51fa\u200b\uff1atrue\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u9752\u86d9\u200b\u53ef\u4ee5\u200b\u6210\u529f\u200b\u8fc7\u6cb3\u200b\uff0c\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u65b9\u6848\u200b\u8df3\u8dc3\u200b\uff1a\u200b\u8df3\u200b 1 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 2 \u200b\u5757\u200b\u77f3\u5b50\u200b, \u200b\u7136\u540e\u200b\u8df3\u200b 2 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 3 \u200b\u5757\u200b\u77f3\u5b50\u200b, \u200b\u63a5\u7740\u200b \u200b\u8df3\u200b 2 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 4 \u200b\u5757\u200b\u77f3\u5b50\u200b, \u200b\u7136\u540e\u200b\u8df3\u200b 3 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 6 \u200b\u5757\u200b\u77f3\u5b50\u200b, \u200b\u8df3\u200b 4 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 7 \u200b\u5757\u200b\u77f3\u5b50\u200b, \u200b\u6700\u540e\u200b\uff0c\u200b\u8df3\u200b 5 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 8 \u200b\u4e2a\u200b\u77f3\u5b50\u200b\uff08\u200b\u5373\u200b\u6700\u540e\u200b\u4e00\u5757\u200b\u77f3\u5b50\u200b\uff09\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1astones = [0,1,2,3,4,8,9,11]\n\u200b\u8f93\u51fa\u200b\uff1afalse\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8fd9\u200b\u662f\u56e0\u4e3a\u200b\u7b2c\u200b 5 \u200b\u548c\u200b\u7b2c\u200b 6 \u200b\u4e2a\u200b\u77f3\u5b50\u200b\u4e4b\u95f4\u200b\u7684\u200b\u95f4\u8ddd\u200b\u592a\u200b\u5927\u200b\uff0c\u200b\u6ca1\u6709\u200b\u53ef\u9009\u200b\u7684\u200b\u65b9\u6848\u200b\u4f9b\u200b\u9752\u86d9\u200b\u8df3\u8dc3\u200b\u8fc7\u53bb\u200b\u3002\n
\u200b\u63d0\u793a\u200b\uff1a
2 <= stones.length <= 2000
0 <= stones[i] <= 2^31 - 1
stones[0] == 0
Reference
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/403/#_1","title":"\u9898\u89e3","text":"\u200b\u6839\u636e\u200b\u9898\u610f\u200b\uff0c\u200b\u5728\u200b\u4efb\u4f55\u200b\u72b6\u6001\u200b\uff0c\u200b\u9752\u86d9\u200b\u90fd\u200b\u6700\u200b\u591a\u200b\u53ea\u6709\u200b\u4e09\u79cd\u200b\u72b6\u6001\u200b\u53ef\u4ee5\u200b\u9009\u62e9\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b\u67e5\u627e\u200b\u6240\u6709\u200b\u7684\u200b\u72b6\u6001\u200b\u3002\u200b\u5047\u8bbe\u200b\u9752\u86d9\u200b\u8df3\u200b\u4e86\u200b\\(k\\)\u200b\u683c\u200b\u8fbe\u5230\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b
- \u200b\u5f53\u200b\u9752\u86d9\u200b\u8fbe\u5230\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u65f6\u200b\u8fd4\u56de\u200b
true
\uff0c - \u200b\u5f53\u200b\u9752\u86d9\u200b\u5230\u8fbe\u200b\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u65f6\u200b\uff0c\u200b\u68c0\u67e5\u200b\u524d\u9762\u200b\u7684\u200b\\(k-1, k, k+1\\)\u200b\u4e2a\u200b\u5355\u5143\u683c\u200b\u662f\u5426\u200b\u6709\u200b\u77f3\u5b50\u200b\uff0c
- \u200b\u5f53\u200b\u9752\u86d9\u200b\u65e0\u6cd5\u200b\u7ee7\u7eed\u200b\u5411\u524d\u200b\u79fb\u52a8\u200b\u65f6\u200b\u8fd4\u56de\u200b
false
\u200b\u5e76\u200b\u8fdb\u884c\u200b\u56de\u6eaf\u200b\u3002
bool dfs(int *stones, int stonesSize, int currentPos, int lastStep)\n{\n if (currentPos == stonesSize - 1)\n return true;\n int i = 0, j = 0, cur_id = stones[currentPos];\n bool ret = false;\n for (i = -1; i < 2; i++)\n {\n if (lastStep + i <= 0)\n continue;\n for (j = currentPos + 1; !ret && j < stonesSize && stones[j] <= cur_id + lastStep + i; j++)\n if (stones[j] == cur_id + lastStep + i)\n ret = ret || dfs(stones, stonesSize, j, lastStep + i);\n }\n return ret;\n}\n\nbool canCross(int* stones, int stonesSize){\n return dfs(stones, stonesSize, 0, 0);\n}\n
\u200b\u5982\u200b\u4e0a\u200bdfs\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u5bf9\u200b\u6240\u6709\u200b\u7684\u200b\u5206\u652f\u200b\u8fdb\u884c\u200b\u904d\u5386\u200b\uff0c\u200b\u76f4\u5230\u200b\u627e\u51fa\u200b\u6700\u7ec8\u200b\u7ed3\u679c\u200b\u3002\u200b\u4f1a\u200b\u9020\u6210\u200b\u5927\u91cf\u200b\u65f6\u95f4\u200b\u7684\u200b\u6d6a\u8d39\u200b\u3002\u200b\u6784\u9020\u200b\u5982\u4e0b\u200b\u8f93\u5165\u200b\u6570\u636e\u200b\u5373\u53ef\u200b\u4f7f\u8be5\u200b\u7b97\u6cd5\u200b\u8d85\u65f6\u200b\uff1a
[0,1,2,3,4,5,...,998, +infty]\n
\u200b\u5176\u4e2d\u200b+infty
\u200b\u6307\u200b\u5145\u5206\u200b\u5927\u200b\u7684\u200b\u6574\u6570\u200b\u3002
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u52a0\u5165\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8bb0\u5fc6\u200b\u4e0d\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5230\u200b\u7ec8\u70b9\u200b\u7684\u200b\u53ef\u8fbe\u6027\u200b\uff1a
bool dfs(int *stones, int *buf, int stonesSize, int currentPos, int lastStep)\n{\n if (buf[currentPos] != -1)\n return buf[currentPos];\n if (currentPos == stonesSize - 1)\n return true;\n int i = 0, j = 0, cur_id = stones[currentPos];\n bool ret = false;\n for (i = -1; i < 2; i++)\n {\n if (lastStep + i <= 0)\n continue;\n for (j = currentPos + 1; !ret && j < stonesSize && stones[j] <= cur_id + lastStep + i; j++)\n if (stones[j] == cur_id + lastStep + i)\n ret = ret || dfs(stones, buf, stonesSize, j, lastStep + i);\n }\n buf[currentPos] = ret;\n return ret;\n}\n\nbool canCross(int* stones, int stonesSize){\n int *buf = (int *)malloc(sizeof(int) * stonesSize);\n memset(buf, 0xff, sizeof(int) * stonesSize);\n return dfs(stones, buf, stonesSize, 0, 0);\n}\n
\u200b\u4f46\u200b\u8fd9\u4e2a\u200b\u7b97\u6cd5\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200b\u4e00\u90e8\u5206\u200b\u6d4b\u4f8b\u200b\uff0c\u200b\u90e8\u5206\u200b\u6d4b\u4f8b\u200b\u65e0\u6cd5\u200b\u901a\u8fc7\u200b\uff08\u200b\u5982\u200b\u793a\u4f8b\u200b1\uff0c[0,1,3,5,6,8,12,17]
\uff09\u3002\u200b\u6211\u4eec\u200b\u67e5\u770b\u200b\u4e00\u4e0b\u200b\u9752\u86d9\u200b\u5728\u200b\u8282\u70b9\u200b\u95f4\u200b\u8df3\u8dc3\u200b\u7684\u200b\u60c5\u51b5\u200b\uff1a
\u200b\u5f53\u200b\u7b97\u6cd5\u200b\u8d70\u200b\u5230\u200b\u8282\u70b9\u200b5
\u200b\u65f6\u200b\uff0c\u200b\u9996\u5148\u200b\u4f1a\u200b\u5c1d\u8bd5\u200b\u8def\u5f84\u200b5->6->8
\uff0c\u200b\u4f46\u200b\u6b64\u65f6\u200b\u5728\u200b\u8282\u70b9\u200b8
\u200b\u9752\u86d9\u200b\u6700\u200b\u591a\u200b\u53ea\u80fd\u200b\u8df3\u200b3
\u200b\u6b65\u200b\uff0c\u200b\u4ece\u800c\u200b\u88ab\u200b\u8bb0\u5fc6\u200b\u5316\u200b\u6807\u8bb0\u200b\u4e3a\u200b\u4e0d\u53ef\u200b\u5230\u8fbe\u200b\u7ec8\u70b9\u200b\uff0c\u200b\u4f46\u200b\u5b9e\u9645\u4e0a\u200b\u5982\u679c\u200b\u76f4\u63a5\u200b\u91c7\u53d6\u200b\u8def\u5f84\u200b5->8
\u200b\u5219\u200b\u53ef\u4ee5\u200b\u4ece\u200b\u8282\u70b9\u200b8
\u200b\u8df3\u200b\u5230\u200b\u8282\u70b9\u200b12
\u3002\u200b\u5373\u200b\u67d0\u4e2a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u7ec8\u70b9\u200b\u53ef\u8fbe\u6027\u200b\u53d7\u5230\u200b\u4e0a\u200b\u4e00\u6b65\u200b\u8df3\u52a8\u200b\u6b65\u6570\u200b\u7684\u200b\u5f71\u54cd\u200b\uff0c\u200b\u6211\u4eec\u200b\u5728\u200b\u8fdb\u884c\u200b\u8bb0\u5fc6\u200b\u5316\u200b\u65f6\u200b\u9700\u8981\u200b\u8bb0\u5fc6\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\u5728\u200b\u6bcf\u4e2a\u200b\u8df3\u52a8\u200b\u6b65\u6570\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u7684\u200b\u53ef\u8fbe\u6027\u200b\u3002
\u200b\u5982\u4e0b\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u4ee3\u66ff\u200b\u904d\u5386\u200b\uff0c\u200b\u5e76\u200b\u4f7f\u7528\u200b\u62c9\u94fe\u200b\u6cd5\u200b\u5b58\u50a8\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\u7684\u200b\u53ef\u8fbe\u6027\u200b\uff0c\u200b\u94fe\u8868\u200b\u8282\u70b9\u200b\u4e2d\u200b\u5b58\u50a8\u200b\u76f8\u5e94\u200b\u7684\u200b\u8df3\u52a8\u200b\u6b65\u6570\u200b\u3002
struct BufNode\n{\n int success;\n int lastStep;\n struct BufNode *next;\n};\n\nstruct BufNode *getNode(int success, int lastStep, struct BufNode *next)\n{\n struct BufNode *ret = (struct BufNode *)malloc(sizeof(struct BufNode));\n ret->success = success;\n ret->lastStep = lastStep;\n ret->next = next;\n return ret;\n}\n\nbool check(struct BufNode *buf, int lastStep, int *success)\n{\n if (buf == NULL)\n return NULL;\n if (buf->lastStep == lastStep)\n {\n if (success)\n *success = buf->success;\n return true;\n }\n return check(buf->next, lastStep, success);\n}\n\nint bSearch(int *stones, int lo, int hi, int target)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (target < stones[mid])\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo - 1;\n}\n\nbool dfs(int *stones, struct BufNode **buf, int stonesSize, int currentPos, int lastStep)\n{\n int success = false;\n if (check(buf[currentPos], lastStep, &success))\n return success;\n if (currentPos == stonesSize - 1)\n return true;\n int i = 0, j = 0, cur_id = stones[currentPos];\n bool ret = false;\n for (i = -1; i < 2; i++)\n {\n if (lastStep + i <= 0)\n continue;\n j = bSearch(stones, currentPos + 1, stonesSize, cur_id + lastStep + i);\n if (stones[j] == cur_id + lastStep + i)\n ret = ret || dfs(stones, buf, stonesSize, j, lastStep + i);\n }\n buf[currentPos] = getNode(ret, lastStep, buf[currentPos]);\n return ret;\n}\n\nbool canCross(int* stones, int stonesSize){\n struct BufNode **buf = (struct BufNode **)malloc(sizeof(struct BufNode *) * stonesSize);\n memset(buf, 0, sizeof(struct BufNode *) * stonesSize);\n return dfs(stones, buf, stonesSize, 0, 0);\n}\n
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/42/","title":"42. \u200b\u63a5\u200b\u96e8\u6c34","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u6808","\u6570\u7ec4","\u53cc\u6307\u9488","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/42/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u00a0n
\u200b\u4e2a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u8868\u793a\u200b\u6bcf\u4e2a\u200b\u5bbd\u5ea6\u200b\u4e3a\u200b 1
\u200b\u7684\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u56fe\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u6309\u6b64\u200b\u6392\u5217\u200b\u7684\u200b\u67f1\u5b50\u200b\uff0c\u200b\u4e0b\u96e8\u200b\u4e4b\u540e\u200b\u80fd\u63a5\u200b\u591a\u5c11\u200b\u96e8\u6c34\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aheight = [0,1,0,2,1,0,1,3,2,1,2,1]\n\u200b\u8f93\u51fa\u200b\uff1a6\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u4e0a\u9762\u200b\u662f\u200b\u7531\u200b\u6570\u7ec4\u200b [0,1,0,2,1,0,1,3,2,1,2,1] \u200b\u8868\u793a\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u56fe\u200b\uff0c\u200b\u5728\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u63a5\u200b 6 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u7684\u200b\u96e8\u6c34\u200b\uff08\u200b\u84dd\u8272\u200b\u90e8\u5206\u200b\u8868\u793a\u200b\u96e8\u6c34\u200b\uff09\u3002 \n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aheight = [4,2,0,3,2,5]\n\u200b\u8f93\u51fa\u200b\uff1a9\n
\u200b\u63d0\u793a\u200b\uff1a
n == height.length
0 <= n <= 3 * 10^4
0 <= height[i] <= 10^5
Reference
\u200b\u6ce8\u200b\uff1a\u200b\u672c\u9898\u200b\u4e0e\u200b\u9762\u8bd5\u9898\u200b 17.21. \u200b\u76f4\u65b9\u56fe\u200b\u7684\u200b\u6c34\u91cf\u200b\u76f8\u540c\u200b\u3002
","tags":["\u6808","\u6570\u7ec4","\u53cc\u6307\u9488","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/42/#_2","title":"\u9898\u89e3","text":" -
\u200b\u5206\u6cbb\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u6c34\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u4e0d\u4f1a\u200b\u9ad8\u4e8e\u200b\u6700\u9ad8\u200b\u7684\u200b\u67f1\u5b50\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5728\u200b\u6700\u9ad8\u200b\u7684\u200b\u67f1\u5b50\u200b\\(A\\)\u200b\u4e0e\u200b\u6b21\u200b\u9ad8\u200b\u7684\u200b\u67f1\u5b50\u200b\\(B\\)\u200b\u4e24\u5904\u200b\u8fdb\u884c\u200b\u5206\u5272\u200b\uff0c\u200b\u5206\u522b\u200b\u6c42\u89e3\u200b\u4e09\u6bb5\u200b\u5bb9\u7eb3\u200b\u7684\u200b\u6c34\u91cf\u200b\u3002
\\(A, B\\)\u200b\u4e4b\u95f4\u200b\u5fc5\u7136\u200b\u53ef\u4ee5\u200b\u5bb9\u7eb3\u200b\u6c34\u200b\uff0c\u200b\u6c34\u200b\u7684\u200b\u91cf\u200b\u7b49\u4e8e\u200b\u5404\u4e2a\u200b\u67f1\u5b50\u200b\u5230\u6b21\u200b\u9ad8\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u4e4b\u200b\u548c\u200b\u3002\u200b\u5176\u4ed6\u200b\u533a\u95f4\u200b\u9700\u8981\u200b\u9012\u5f52\u200b\u8fdb\u884c\u200b\u6c42\u89e3\u200b\u3002\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b\u5206\u5272\u200b\u65f6\u200b\u5206\u5272\u200b\u70b9\u8981\u200b\u540c\u65f6\u200b\u5305\u542b\u200b\u5728\u200b\u5de6\u53f3\u200b\u4e24\u4fa7\u200b\uff0c\u200b\u5426\u5219\u200b\u65e0\u6cd5\u200b\u5bb9\u7eb3\u200b\u6c34\u200b\u3002
\u200b\u5f53\u200b\u67f1\u5b50\u200b\u6570\u91cf\u200b\u5c0f\u4e8e\u200b3\u200b\u65f6\u200b\uff0c\u200b\u65e0\u6cd5\u200b\u5bb9\u7eb3\u200b\u4efb\u4f55\u200b\u6c34\u200b\u3002
#define MAX(x, y) (x > y ? x : y)\n#define MIN(x, y) (x < y ? x : y)\n\nint trap(int* height, int heightSize){\n int *maxLeft = (int *)malloc(sizeof(int) * heightSize),\n *maxRight = (int *)malloc(sizeof(int) * heightSize),\n i = 0, ret = 0;\n if (heightSize == 0)\n return 0;\n maxLeft[0] = height[0];\n maxRight[heightSize - 1] = height[heightSize - 1];\n for (i = 1; i < heightSize; i++)\n {\n maxLeft[i] = MAX(maxLeft[i - 1], height[i - 1]);\n maxRight[heightSize - i - 1] = MAX(maxRight[heightSize - i], height[heightSize - i]);\n }\n for (i = 0; i < heightSize; i++)\n ret += MAX(0, MIN(maxLeft[i], maxRight[i]) - height[i]);\n return ret;\n}\n
\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(N)\\)\u3002
-
\u200b\u76f4\u63a5\u200b\u601d\u8def\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u67f1\u5b50\u200b\uff0c\u200b\u5176\u200b\u5bb9\u7eb3\u200b\u6c34\u540e\u200b\u7684\u200b\u9ad8\u5ea6\u200b\uff08\u200b\u67f1\u5b50\u200b\u9ad8\u5ea6\u200b\u51cf\u53bb\u200b\u6c34\u200b\u9ad8\u5ea6\u200b\uff09\u200b\u7b49\u4e8e\u200b\u8be5\u200b\u67f1\u5b50\u200b\u5de6\u4fa7\u200b\u6700\u9ad8\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u4e0e\u200b\u53f3\u4fa7\u200b\u6700\u9ad8\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u67f1\u5b50\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7edf\u8ba1\u200b\u5728\u200b\u5176\u200b\u5de6\u4fa7\u200b\u6700\u9ad8\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u4e0e\u200b\u5728\u200b\u5176\u200b\u53f3\u4fa7\u200b\u6700\u9ad8\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\uff0c\u200b\u5b58\u50a8\u200b\u5728\u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u3002
\u200b\u7ed3\u679c\u200b\u4e3a\u200b\u6bcf\u4e2a\u200b\u67f1\u5b50\u200b\u5bb9\u7eb3\u200b\u6c34\u540e\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u4e0e\u200b\u67f1\u5b50\u200b\u9ad8\u5ea6\u200b\u4e4b\u5dee\u200b\u7684\u200b\u6c42\u548c\u200b\u3002
#define MAX(x, y) (x > y ? x : y)\n#define MIN(x, y) (x < y ? x : y)\n\nint trap(int* height, int heightSize){\n int *maxLeft = (int *)malloc(sizeof(int) * heightSize),\n *maxRight = (int *)malloc(sizeof(int) * heightSize),\n i = 0, ret = 0;\n if (heightSize == 0)\n return 0;\n maxLeft[0] = height[0];\n maxRight[heightSize - 1] = height[heightSize - 1];\n for (i = 1; i < heightSize; i++)\n {\n maxLeft[i] = MAX(maxLeft[i - 1], height[i - 1]);\n maxRight[heightSize - i - 1] = MAX(maxRight[heightSize - i], height[heightSize - i]);\n }\n for (i = 0; i < heightSize; i++)\n ret += MAX(0, MIN(maxLeft[i], maxRight[i]) - height[i]);\n return ret;\n}\n
","tags":["\u6808","\u6570\u7ec4","\u53cc\u6307\u9488","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/43/","title":"43. \u200b\u5b57\u7b26\u4e32\u200b\u76f8\u4e58","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/43/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e24\u4e2a\u200b\u4ee5\u200b\u5b57\u7b26\u4e32\u200b\u5f62\u5f0f\u200b\u8868\u793a\u200b\u7684\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u00a0num1
\u00a0\u200b\u548c\u200b\u00a0num2
\uff0c\u200b\u8fd4\u56de\u200b\u00a0num1
\u00a0\u200b\u548c\u200b\u00a0num2
\u00a0\u200b\u7684\u200b\u4e58\u79ef\u200b\uff0c\u200b\u5b83\u4eec\u200b\u7684\u200b\u4e58\u79ef\u200b\u4e5f\u200b\u8868\u793a\u200b\u4e3a\u200b\u5b57\u7b26\u4e32\u200b\u5f62\u5f0f\u200b\u3002
\u200b\u793a\u4f8b\u200b 1:
\u200b\u8f93\u5165\u200b: num1 = \"2\", num2 = \"3\"\n\u200b\u8f93\u51fa\u200b: \"6\"\n
\u200b\u793a\u4f8b\u200b\u00a02:
\u200b\u8f93\u5165\u200b: num1 = \"123\", num2 = \"456\"\n\u200b\u8f93\u51fa\u200b: \"56088\"\n
\u200b\u8bf4\u660e\u200b\uff1a
num1
\u00a0\u200b\u548c\u200b\u00a0num2
\u00a0\u200b\u7684\u200b\u957f\u5ea6\u200b\u5c0f\u4e8e\u200b110\u3002 num1
\u200b\u548c\u200b\u00a0num2
\u200b\u53ea\u200b\u5305\u542b\u200b\u6570\u5b57\u200b\u00a00-9
\u3002 num1
\u200b\u548c\u200b\u00a0num2
\u00a0\u200b\u5747\u200b\u4e0d\u200b\u4ee5\u200b\u96f6\u200b\u5f00\u5934\u200b\uff0c\u200b\u9664\u975e\u200b\u662f\u200b\u6570\u5b57\u200b 0
\u200b\u672c\u8eab\u200b\u3002 - \u200b\u4e0d\u80fd\u200b\u4f7f\u7528\u200b\u4efb\u4f55\u200b\u6807\u51c6\u200b\u5e93\u200b\u7684\u200b\u5927\u6570\u200b\u7c7b\u578b\u200b\uff08\u200b\u6bd4\u5982\u200bBigInteger\uff09\u200b\u6216\u200b\u76f4\u63a5\u200b\u5c06\u200b\u8f93\u5165\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u6574\u6570\u200b\u6765\u200b\u5904\u7406\u200b\u3002
Reference
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/43/#_2","title":"\u9898\u89e3","text":"\u200b\u8ba1\u7b97\u65b9\u6cd5\u200b\u4e0e\u200b\u5217\u7ad6\u5f0f\u200b\u76f8\u540c\u200b\uff0c\u200b\u6ce8\u610f\u200b\u5bf9\u200b\u7279\u6b8a\u200b\u8f93\u5165\u200b0
\u200b\u7684\u200b\u5904\u7406\u200b\u3002\u200b\u7ed3\u679c\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e0d\u4f1a\u200b\u8d85\u8fc7\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u4e4b\u200b\u548c\u200b\u3002
char * multiply(char * num1, char * num2){\n if (*num1 == '0' || *num2 == '0')\n return *num1 == '0' ? num1 : num2;\n int len1 = strlen(num1), len2 = strlen(num2), retLen = len1 + len2, i = 0, j = 0, incre, curDigit, pos;\n char *ret = (char *)memset(malloc(sizeof(char) * (retLen + 1)), '0', sizeof(char) * (retLen + 1)),\n *cur = ret;\n ret[retLen] = 0;\n for (i = len1 - 1; i >= 0; i--)\n {\n for (j = len2 - 1; j >= 0; j--)\n {\n incre = (num1[i] - '0') * (num2[j] - '0');\n curDigit = incre % 10;\n incre /= 10;\n pos = retLen - ((len1 - i - 1) + (len2 - j - 1)) - 1;\n while (incre != 0 || curDigit != 0)\n {\n ret[pos] += curDigit;\n incre += ret[pos] > '9';\n ret[pos] -= ret[pos] > '9' ? 10 : 0;\n curDigit = incre >= 10 ? incre - 10 : incre;\n incre = incre >= 10;\n pos--;\n }\n }\n }\n while (*cur == '0')\n cur++;\n return cur;\n}\n
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/433/","title":"433. \u200b\u6700\u5c0f\u200b\u57fa\u56e0\u200b\u53d8\u5316","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/433/#_1","title":"\u9898\u76ee","text":"\u200b\u4e00\u6761\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u7531\u200b\u4e00\u4e2a\u200b\u5e26\u6709\u200b8\u200b\u4e2a\u5b57\u7b26\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\u8868\u793a\u200b\uff0c\u200b\u5176\u4e2d\u200b\u6bcf\u4e2a\u200b\u5b57\u7b26\u200b\u90fd\u200b\u5c5e\u4e8e\u200b \"A\"
, \"C\"
, \"G\"
, \"T\"
\u200b\u4e2d\u200b\u7684\u200b\u4efb\u610f\u200b\u4e00\u4e2a\u200b\u3002
\u200b\u5047\u8bbe\u200b\u6211\u4eec\u200b\u8981\u200b\u8c03\u67e5\u200b\u4e00\u4e2a\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u7684\u200b\u53d8\u5316\u200b\u3002\u200b\u4e00\u6b21\u200b\u57fa\u56e0\u200b\u53d8\u5316\u200b\u610f\u5473\u7740\u200b\u8fd9\u4e2a\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u53d1\u751f\u200b\u4e86\u200b\u53d8\u5316\u200b\u3002
\u200b\u4f8b\u5982\u200b\uff0c\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u7531\u200b \"AACCGGTT\"
\u00a0\u200b\u53d8\u5316\u200b\u81f3\u200b\u00a0\"AACCGGTA\"
\u00a0\u200b\u5373\u200b\u53d1\u751f\u200b\u4e86\u200b\u4e00\u6b21\u200b\u57fa\u56e0\u200b\u53d8\u5316\u200b\u3002
\u200b\u4e0e\u6b64\u540c\u65f6\u200b\uff0c\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u57fa\u56e0\u200b\u53d8\u5316\u200b\u7684\u200b\u7ed3\u679c\u200b\uff0c\u200b\u90fd\u200b\u9700\u8981\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5408\u6cd5\u200b\u7684\u200b\u57fa\u56e0\u200b\u4e32\u200b\uff0c\u200b\u5373\u8be5\u200b\u7ed3\u679c\u200b\u5c5e\u4e8e\u200b\u4e00\u4e2a\u200b\u57fa\u56e0\u5e93\u200b\u3002
\u200b\u73b0\u5728\u200b\u7ed9\u5b9a\u200b3\u200b\u4e2a\u200b\u53c2\u6570\u200b \u2014 start
, end
, bank
\uff0c\u200b\u5206\u522b\u200b\u4ee3\u8868\u200b\u8d77\u59cb\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\uff0c\u200b\u76ee\u6807\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u53ca\u200b\u57fa\u56e0\u5e93\u200b\uff0c\u200b\u8bf7\u200b\u627e\u51fa\u200b\u80fd\u591f\u200b\u4f7f\u200b\u8d77\u59cb\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u53d8\u5316\u200b\u4e3a\u200b\u76ee\u6807\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u6700\u5c11\u200b\u53d8\u5316\u200b\u6b21\u6570\u200b\u3002\u200b\u5982\u679c\u200b\u65e0\u6cd5\u200b\u5b9e\u73b0\u76ee\u6807\u200b\u53d8\u5316\u200b\uff0c\u200b\u8bf7\u200b\u8fd4\u56de\u200b -1
\u3002
\u200b\u6ce8\u610f\u200b\uff1a
- \u200b\u8d77\u59cb\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u9ed8\u8ba4\u200b\u662f\u200b\u5408\u6cd5\u200b\u7684\u200b\uff0c\u200b\u4f46\u662f\u200b\u5b83\u200b\u5e76\u4e0d\u4e00\u5b9a\u200b\u4f1a\u200b\u51fa\u73b0\u200b\u5728\u200b\u57fa\u56e0\u5e93\u200b\u4e2d\u200b\u3002
- \u200b\u5982\u679c\u200b\u4e00\u4e2a\u200b\u8d77\u59cb\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u9700\u8981\u200b\u591a\u6b21\u200b\u53d8\u5316\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5b83\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u53d8\u5316\u200b\u4e4b\u540e\u200b\u7684\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u90fd\u200b\u5fc5\u987b\u200b\u662f\u200b\u5408\u6cd5\u200b\u7684\u200b\u3002
- \u200b\u5047\u5b9a\u200b\u8d77\u59cb\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u4e0e\u200b\u76ee\u6807\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u662f\u200b\u4e0d\u200b\u4e00\u6837\u200b\u7684\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
start: \"AACCGGTT\"\nend: \"AACCGGTA\"\nbank: [\"AACCGGTA\"]\n\n\u200b\u8fd4\u56de\u503c\u200b: 1\n
\u200b\u793a\u4f8b\u200b 2\uff1a
start: \"AACCGGTT\"\nend: \"AAACGGTA\"\nbank: [\"AACCGGTA\", \"AACCGCTA\", \"AAACGGTA\"]\n\n\u200b\u8fd4\u56de\u503c\u200b: 2\n
\u200b\u793a\u4f8b\u200b 3\uff1a
start: \"AAAAACCC\"\nend: \"AACCCCCC\"\nbank: [\"AAAACCCC\", \"AAACCCCC\", \"AACCCCCC\"]\n\n\u200b\u8fd4\u56de\u503c\u200b: 3\n
Reference
","tags":["\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/433/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u5e7f\u5ea6\u200b\u4f18\u5148\u200b\u7b97\u6cd5\u200b\u904d\u5386\u200b\u57fa\u56e0\u200b\u7684\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u6539\u52a8\u200b\u60c5\u51b5\u200b\u3002\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u957f\u5ea6\u200b\u4e3a\u200b8\uff0c\u200b\u6bcf\u6b21\u200b\u53ef\u80fd\u200b\u7684\u200b\u6539\u52a8\u200b\u60c5\u51b5\u200b\u4e3a\u200b\\(8\\times 3 = 24\\)\u200b\u79cd\u200b\uff0c\u200b\u5728\u200b\u8fd9\u200b24\u200b\u79cd\u200b\u6539\u52a8\u200b\u60c5\u51b5\u200b\u4e2d\u200b\u9009\u62e9\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u7ed3\u679c\u200b\uff1a
- \u200b\u7ed3\u679c\u200b\u662f\u200b\u5408\u6cd5\u200b\u7684\u200b\u57fa\u56e0\u200b
- \u200b\u7ed3\u679c\u200b\u672a\u200b\u88ab\u200b\u904d\u5386\u200b\u8fc7\u200b
\u200b\u4f7f\u7528\u200b\u54c8\u5e0c\u200b\u8868\u200b\u5b58\u50a8\u200b\u57fa\u56e0\u5e93\u200b\u548c\u200b\u5df2\u7ecf\u200b\u88ab\u200b\u904d\u5386\u200b\u8fc7\u200b\u7684\u200b\u57fa\u56e0\u200b\u3002
char *genes = \"TGCATGCA\";\n\nint getCode(char *s)\n{\n int ret = 0;\n switch (*s)\n {\n case 'A':\n ret++;\n case 'C':\n ret++;\n case 'G':\n ret++;\n case 'T':\n break;\n }\n return ret;\n}\n\nint hash(char *s)\n{\n char *cur = s;\n int ret = 0;\n while (*cur)\n {\n ret <<= 2;\n ret += getCode(cur);\n cur++;\n }\n return ret;\n}\n\nchar *dehash(int o)\n{\n char *ret = (char *)malloc(sizeof(char) * 9);\n ret[8] = 0;\n for (int i = 7; i >= 0; i--)\n {\n ret[i] = genes[o & 3];\n o >>= 2;\n }\n return ret;\n}\n\nstruct Bank {\n char *bitmap;\n};\n\nvoid deleteBank(struct Bank *dest)\n{\n free(dest->bitmap);\n free(dest);\n}\n\nvoid removeGene(struct Bank *dest, char *seq)\n{\n int i = hash(seq);\n dest->bitmap[i >> 3] &= ~(1 << (i & 7));\n}\n\nvoid addGene(struct Bank *dest, char *seq)\n{\n int i = hash(seq);\n dest->bitmap[i >> 3] |= 1 << (i & 7);\n}\n\nbool queryGene(struct Bank *dest, char *seq)\n{\n int i = hash(seq);\n return dest->bitmap[i >> 3] & (1 << (i & 7));\n}\n\nvoid merge(struct Bank *dest, struct Bank *src)\n{\n int i = 0;\n for (i = 0; i < 8192; i++)\n dest->bitmap[i] |= src->bitmap[i];\n deleteBank(src);\n}\n\nstruct Bank *getBank(char **bank, int bankSize)\n{\n struct Bank *ret = (struct Bank *)malloc(sizeof(struct Bank));\n ret->bitmap = (char *)malloc(sizeof(char) * 8192);\n memset(ret->bitmap, 0, sizeof(char) * 8192);\n for (int i = 0; i < bankSize; i++)\n addGene(ret, bank[i]);\n return ret;\n}\n\nstruct Bank *step(char *current, char *end, struct Bank *passed, struct Bank *fullBank, int *count)\n{\n int startHash = hash(current);\n struct Bank *ret = getBank(NULL, 0);\n addGene(passed, current);\n for (int i = 0; i < 8; i++)\n {\n for (int j = 0; j < 4; j++)\n {\n current[i] = genes[getCode(current + i) + 1];\n if (startHash == hash(current))\n continue;\n if (!queryGene(fullBank, current))\n continue;\n if (queryGene(passed, current))\n continue;\n addGene(ret, current);\n (*count)++;\n }\n }\n return ret;\n}\n\nstruct Bank *stepBank(struct Bank *current, char *end, struct Bank *passed, struct Bank *fullBank, int* count)\n{\n int index = 0;\n struct Bank *ret = getBank(NULL, 0);\n char *temp = NULL;\n for (int i = 0; i < 8192; i++)\n {\n if (current->bitmap[i])\n {\n index = i << 3;\n for (int j = 0; j < 8; j++)\n {\n if (current->bitmap[i] & (1 << j))\n {\n index += j;\n temp = dehash(index);\n merge(ret, step(temp, end, passed, fullBank, count));\n free(temp);\n }\n }\n }\n }\n return ret;\n}\n\nint minMutation(char * start, char * end, char ** bank, int bankSize){\n struct Bank *fullBank = getBank(bank, bankSize), *passed = getBank(NULL, 0);\n struct Bank *temp = getBank(NULL, 0), *temp2 = NULL;\n addGene(temp, start);\n int ret = 0, modified = 0;\n while (!queryGene(temp, end))\n {\n modified = 0;\n temp2 = stepBank(temp, end, passed, fullBank, &modified);\n deleteBank(temp);\n temp = temp2;\n if (!modified)\n return -1;\n ret++;\n }\n return ret;\n}\n
","tags":["\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/46/","title":"46. \u200b\u5168\u200b\u6392\u5217","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/46/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b \u200b\u6ca1\u6709\u200b\u91cd\u590d\u200b \u200b\u6570\u5b57\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5176\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u5168\u200b\u6392\u5217\u200b\u3002
\u200b\u793a\u4f8b\u200b:
\u200b\u8f93\u5165\u200b: [1,2,3]\n\u200b\u8f93\u51fa\u200b:\n[\n [1,2,3],\n [1,3,2],\n [2,1,3],\n [2,3,1],\n [3,1,2],\n [3,2,1]\n]\n
Reference
","tags":["\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/46/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u56de\u6eaf\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u5e8f\u5217\u200b\uff1a
- \u200b\u82e5\u200b\u957f\u5ea6\u200b\u4e3a\u200b1\uff0c\u200b\u5219\u200b\u53ea\u6709\u200b\u4e00\u79cd\u200b\u6392\u5217\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200b
- \u200b\u82e5\u200b\u957f\u5ea6\u200b\u5927\u4e8e\u200b1\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\uff1a
- \u200b\u5c06\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7b2c\u4e00\u4e2a\u200b\u6570\u200b\u653e\u5728\u200b\u6392\u5217\u200b\u7684\u200b\u7b2c\u4e00\u4f4d\u200b\uff0c\u200b\u7136\u540e\u200b\u4e0e\u200b\u540e\u9762\u200b\u90e8\u5206\u200b\u7684\u200b\u5168\u200b\u6392\u5217\u200b\u5408\u5e76\u200b
- \u200b\u5c06\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7b2c\u4e8c\u4e2a\u200b\u6570\u200b\u653e\u5728\u200b\u6392\u5217\u200b\u7684\u200b\u7b2c\u4e00\u4f4d\u200b\uff0c\u200b\u7136\u540e\u200b\u4e0e\u200b\u540e\u9762\u200b\u90e8\u5206\u200b\u7684\u200b\u5168\u200b\u6392\u5217\u200b\u5408\u5e76\u200b
- \u2026\u2026
- \u200b\u5c06\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u6570\u200b\u653e\u5728\u200b\u6392\u5217\u200b\u7684\u200b\u7b2c\u4e00\u4f4d\u200b\uff0c\u200b\u7136\u540e\u200b\u4e0e\u200b\u540e\u9762\u200b\u90e8\u5206\u200b\u7684\u200b\u5168\u200b\u6392\u5217\u200b\u5408\u5e76\u200b
- \u200b\u6700\u7ec8\u200b\u7ed3\u679c\u200b\u5305\u542b\u200b\u5982\u200b\u4e0a\u200b\u6240\u6709\u200b\u7684\u200b\u6392\u5217\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5171\u6709\u200b\\(n!\\)\u200b\u79cd\u200b\u6392\u5217\u200b\u3002
int fact(int x)\n{\n if (!x)\n return 0;\n int i = 1, ret = 1;\n for (i = 1; i <= x; i++)\n ret *= i;\n return ret;\n}\nvoid swap(int *a, int *b)\n{\n int temp = *a;\n *a = *b;\n *b = temp;\n}\nint** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){\n if (numsSize < 2)\n {\n *returnSize = 1;\n *returnColumnSizes = (int *)malloc(sizeof(int) * *returnSize);\n *returnColumnSizes[0] = numsSize;\n if (numsSize == 0)\n return NULL;\n int **ret = (int **)malloc(sizeof(int *) * *returnSize);\n *ret = (int *)malloc(sizeof(int));\n **ret = *nums;\n return ret;\n }\n *returnSize = fact(numsSize);\n *returnColumnSizes = (int *)malloc(sizeof(int *) * *returnSize);\n int *sub = (int *)malloc(sizeof(int) * numsSize), i = 0, **rec = NULL, recSize, *recColSize,\n **ret = (int **)malloc(sizeof(int *) * *returnSize), retpos = 0, j = 0;\n for (i = 0; i < *returnSize; i++)\n (*returnColumnSizes)[i] = numsSize;\n for (i = 0; i < numsSize; i++)\n {\n sub = memcpy(sub, nums, sizeof(int) * numsSize);\n swap(sub + i, sub);\n rec = permute(sub + 1, numsSize - 1, &recSize, &recColSize);\n for (j = 0; j < recSize; j++)\n {\n ret[retpos] = (int *)malloc(sizeof(int) * numsSize);\n ret[retpos][0] = sub[0];\n memcpy(ret[retpos] + 1, rec[j], sizeof(int) * (numsSize - 1));\n retpos++;\n }\n }\n return ret;\n}\n
","tags":["\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/48/","title":"48. \u200b\u65cb\u8f6c\u200b\u56fe\u50cf","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/48/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b n\u00a0\u00d7\u00a0n \u200b\u7684\u200b\u4e8c\u7ef4\u200b\u77e9\u9635\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u56fe\u50cf\u200b\u3002
\u200b\u5c06\u200b\u56fe\u50cf\u200b\u987a\u65f6\u9488\u200b\u65cb\u8f6c\u200b 90 \u200b\u5ea6\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u4f60\u200b\u5fc5\u987b\u200b\u5728\u200b\u539f\u5730\u200b\u65cb\u8f6c\u200b\u56fe\u50cf\u200b\uff0c\u200b\u8fd9\u200b\u610f\u5473\u7740\u200b\u4f60\u200b\u9700\u8981\u200b\u76f4\u63a5\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u7684\u200b\u4e8c\u7ef4\u200b\u77e9\u9635\u200b\u3002\u200b\u8bf7\u200b\u4e0d\u8981\u200b\u4f7f\u7528\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u77e9\u9635\u200b\u6765\u200b\u65cb\u8f6c\u200b\u56fe\u50cf\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u7ed9\u5b9a\u200b matrix = \n[\n [1,2,3],\n [4,5,6],\n [7,8,9]\n],\n\n\u200b\u539f\u5730\u200b\u65cb\u8f6c\u200b\u8f93\u5165\u200b\u77e9\u9635\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u53d8\u4e3a\u200b:\n[\n [7,4,1],\n [8,5,2],\n [9,6,3]\n]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u7ed9\u5b9a\u200b matrix =\n[\n [ 5, 1, 9,11],\n [ 2, 4, 8,10],\n [13, 3, 6, 7],\n [15,14,12,16]\n], \n\n\u200b\u539f\u5730\u200b\u65cb\u8f6c\u200b\u8f93\u5165\u200b\u77e9\u9635\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u53d8\u4e3a\u200b:\n[\n [15,13, 2, 5],\n [14, 3, 4, 1],\n [12, 6, 8, 9],\n [16, 7,10,11]\n]\n
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/48/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5c06\u200b\u77e9\u9635\u200b\u8f6c\u7f6e\u200b\u540e\u200b\u53cd\u8f6c\u200b\u5404\u5217\u200b\u7684\u200b\u987a\u5e8f\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
void rotate(int** matrix, int matrixSize, int* matrixColSize){\n int i = 0, j = 0, temp;\n for (i = 0; i < matrixSize; i++)\n {\n for (j = i; j < matrixSize; j++)\n {\n temp = matrix[i][j];\n matrix[i][j] = matrix[j][i];\n matrix[j][i] = temp;\n }\n }\n for (i = 0; i < matrixSize; i++)\n {\n for (j = 0; j < matrixSize / 2; j++)\n {\n temp = matrix[i][j];\n matrix[i][j] = matrix[i][matrixSize - j - 1];\n matrix[i][matrixSize - j - 1] = temp;\n }\n }\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/488/","title":"488. \u200b\u7956\u739b\u200b\u6e38\u620f","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/488/#_1","title":"\u9898\u76ee","text":"\u200b\u56de\u5fc6\u200b\u4e00\u4e0b\u200b\u7956\u739b\u200b\u6e38\u620f\u200b\u3002\u200b\u73b0\u5728\u200b\u684c\u4e0a\u200b\u6709\u200b\u4e00\u4e32\u200b\u7403\u200b\uff0c\u200b\u989c\u8272\u200b\u6709\u200b\u7ea2\u8272\u200b(R)\uff0c\u200b\u9ec4\u8272\u200b(Y)\uff0c\u200b\u84dd\u8272\u200b(B)\uff0c\u200b\u7eff\u8272\u200b(G)\uff0c\u200b\u8fd8\u6709\u200b\u767d\u8272\u200b(W)\u3002 \u200b\u73b0\u5728\u200b\u4f60\u200b\u624b\u91cc\u200b\u4e5f\u200b\u6709\u200b\u51e0\u4e2a\u200b\u7403\u200b\u3002
\u200b\u6bcf\u200b\u4e00\u6b21\u200b\uff0c\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u4ece\u200b\u624b\u91cc\u200b\u7684\u200b\u7403\u9009\u200b\u4e00\u4e2a\u200b\uff0c\u200b\u7136\u540e\u200b\u628a\u200b\u8fd9\u4e2a\u200b\u7403\u200b\u63d2\u5165\u200b\u5230\u200b\u4e00\u4e32\u200b\u7403\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u4f4d\u7f6e\u200b\u4e0a\u200b\uff08\u200b\u5305\u62ec\u200b\u6700\u200b\u5de6\u7aef\u200b\uff0c\u200b\u6700\u200b\u53f3\u7aef\u200b\uff09\u3002\u200b\u63a5\u7740\u200b\uff0c\u200b\u5982\u679c\u200b\u6709\u200b\u51fa\u73b0\u200b\u4e09\u4e2a\u200b\u6216\u8005\u200b\u4e09\u4e2a\u200b\u4ee5\u4e0a\u200b\u989c\u8272\u200b\u76f8\u540c\u200b\u7684\u200b\u7403\u200b\u76f8\u8fde\u200b\u7684\u8bdd\u200b\uff0c\u200b\u5c31\u200b\u628a\u200b\u5b83\u4eec\u200b\u79fb\u200b\u9664\u6389\u200b\u3002\u200b\u91cd\u590d\u200b\u8fd9\u4e00\u200b\u6b65\u9aa4\u200b\u76f4\u5230\u200b\u684c\u4e0a\u200b\u6240\u6709\u200b\u7684\u200b\u7403\u200b\u90fd\u200b\u88ab\u200b\u79fb\u9664\u200b\u3002
\u200b\u627e\u5230\u200b\u63d2\u5165\u200b\u5e76\u200b\u53ef\u4ee5\u200b\u79fb\u200b\u9664\u6389\u200b\u684c\u4e0a\u200b\u6240\u6709\u200b\u7403\u6240\u200b\u9700\u200b\u7684\u200b\u6700\u5c11\u200b\u7684\u200b\u7403\u6570\u200b\u3002\u200b\u5982\u679c\u200b\u4e0d\u80fd\u200b\u79fb\u9664\u200b\u684c\u4e0a\u200b\u6240\u6709\u200b\u7684\u200b\u7403\u200b\uff0c\u200b\u8f93\u51fa\u200b -1
\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = \"WRRBBW\", hand = \"RB\"\n\u200b\u8f93\u51fa\u200b\uff1a-1\n\u200b\u89e3\u91ca\u200b\uff1aWRRBBW -> WRR[R]BBW -> WBBW -> WBB[B]W -> WW\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = \"WWRRBBWW\", hand = \"WRBRW\"\n\u200b\u8f93\u51fa\u200b\uff1a2\n\u200b\u89e3\u91ca\u200b\uff1aWWRRBBWW -> WWRR[R]BBWW -> WWBBWW -> WWBB[B]WW -> WWWW -> empty\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = \"G\", hand = \"GGGGG\"\n\u200b\u8f93\u51fa\u200b\uff1a2\n\u200b\u89e3\u91ca\u200b\uff1aG -> G[G] -> GG[G] -> empty \n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = \"RBYYBBRRB\", hand = \"YRBGB\"\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1aRBYYBBRRB -> RBYY[Y]BBRRB -> RBBBRRB -> RRRB -> B -> B[B] -> BB[B] -> empty \n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u684c\u4e0a\u200b\u4e00\u200b\u5f00\u59cb\u200b\u7684\u200b\u7403\u200b\u4e2d\u200b\uff0c\u200b\u4e0d\u4f1a\u200b\u6709\u200b\u4e09\u4e2a\u200b\u53ca\u200b\u4e09\u4e2a\u200b\u4ee5\u4e0a\u200b\u989c\u8272\u200b\u76f8\u540c\u200b\u4e14\u200b\u8fde\u200b\u7740\u200b\u7684\u200b\u7403\u200b\u3002
1 <= board.length <= 16
1 <= hand.length <= 5
- \u200b\u8f93\u5165\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u5747\u200b\u4e3a\u200b\u975e\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u4e14\u200b\u53ea\u200b\u5305\u542b\u200b\u5b57\u7b26\u200b
'R','Y','B','G','W'
\u3002
Reference
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/488/#_2","title":"\u9898\u89e3","text":"\u200b\u5b9a\u4e49\u200b\u5f53\u524d\u200b\u6e38\u620f\u200b\u7684\u200b\u72b6\u6001\u200b\uff0c\u200b\u4e00\u4e2a\u200b\u72b6\u6001\u200b\u7531\u200b\u684c\u4e0a\u200b\u7684\u200b\u7403\u200b\u5217\u8868\u200b\u4e0e\u200b\u624b\u4e2d\u200b\u7684\u200b\u7403\u200b\u5217\u8868\u200b\u8868\u793a\u200b\u3002\u200b\u6bcf\u6b21\u200b\u63d2\u5165\u200b\u64cd\u4f5c\u200b\u6784\u6210\u200b\u4e00\u4e2a\u200b\u72b6\u6001\u200b\u95f4\u200b\u7684\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u8fc7\u7a0b\u200b\u3002\u200b\u4f7f\u7528\u200b\u4e24\u4e2a\u200b\u961f\u5217\u200b\u5b58\u50a8\u200b\u5f53\u524d\u200b\u72b6\u6001\u200b\uff0c\u200b\u548c\u200b\u5f53\u524d\u200b\u72b6\u6001\u200b\u7684\u200b \u200b\u6240\u6709\u200b \u200b\u53ef\u80fd\u200b\u8f6c\u79fb\u200b\u5230\u200b\u7684\u200b\u72b6\u6001\u200b\u3002\u200b\u518d\u200b\u5c06\u200b\u8f6c\u79fb\u200b\u5230\u200b\u7684\u200b\u72b6\u6001\u200b\u8bbe\u200b\u4e3a\u200b\u5f53\u524d\u200b\u72b6\u6001\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u8fdb\u884c\u200b\u641c\u7d22\u200b\u8fc7\u7a0b\u200b\u3002\u200b\u672c\u9898\u200b\u4e2d\u200b\uff0c\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u662f\u200b\u5355\u5411\u200b\u7684\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u91cd\u590d\u200b\u7ecf\u8fc7\u200b\u4e00\u79cd\u200b\u72b6\u6001\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002
\u200b\u7531\u4e8e\u200b\u4e00\u4e2a\u200b\u72b6\u6001\u200b\u53ef\u4ee5\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u72b6\u6001\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u8fd9\u4e9b\u200b\u72b6\u6001\u200b\u95f4\u200b\u8fdb\u884c\u200b\u7b5b\u9009\u200b\u3002\u200b\u7b5b\u9009\u200b\u89c4\u5219\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u5f53\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b\u4e24\u4fa7\u200b\u7684\u200b\u989c\u8272\u200b\u4e0d\u200b\u540c\u65f6\u200b\uff0c\u200b\u65b0\u7403\u200b\u7684\u200b\u989c\u8272\u200b\u9700\u8981\u200b\u4e0e\u200b\u5de6\u53f3\u200b\u4e24\u4fa7\u200b\u5176\u4e2d\u200b\u4e00\u4e2a\u200b\u7403\u200b\u7684\u200b\u989c\u8272\u200b\u76f8\u540c\u200b
- \u200b\u5f53\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b\u4e24\u4fa7\u200b\u989c\u8272\u200b\u76f8\u540c\u200b\u65f6\u200b\uff0c\u200b\u65b0\u7403\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4efb\u610f\u200b\u53ef\u80fd\u200b\u7684\u200b\u989c\u8272\u200b
- \u200b\u5f53\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b\u4f4d\u4e8e\u200b\u7aef\u70b9\u200b\u65f6\u200b\uff0c\u200b\u65b0\u7403\u200b\u7684\u200b\u989c\u8272\u200b\u9700\u8981\u200b\u4e0e\u200b\u76f8\u90bb\u200b\u7403\u200b\u7684\u200b\u989c\u8272\u200b\u76f8\u540c\u200b
\u200b\u5982\u200b\u4e0a\u200b\u526a\u679d\u200b\u601d\u8def\u200b\u4e0d\u4f1a\u200b\u5f71\u54cd\u200b\u6d4b\u4f8b\u200b\"RRYGGYYRRYGGYYRR\" \"GGBBB\"
\u200b\u4e0e\u200b\"RRWWRRBBRR\" \"WB\"
\u200b\u7b49\u200b\u9700\u8981\u200b\u5c06\u200b\u8fde\u7eed\u200b\u5e8f\u5217\u200b\u5206\u5272\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u5982\u200b\u4e0a\u200b\u6761\u4ef6\u200b\u7684\u200b\u72b6\u6001\u200b\u89c6\u4e3a\u200b\u65e0\u6548\u200b\u7684\u200b\u72b6\u6001\u200b\uff0c\u200b\u76f4\u63a5\u200b\u8df3\u8fc7\u200b\u5bf9\u200b\u8fd9\u4e9b\u200b\u72b6\u6001\u200b\u7684\u200b\u641c\u7d22\u200b\u3002
\u200b\u4f7f\u7528\u200b\u94fe\u8868\u200b\u6a21\u62df\u200b\u961f\u5217\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u94fe\u8868\u200b\u8282\u70b9\u200b\u8868\u793a\u200b\u95ee\u9898\u200b\u7684\u200b\u4e00\u4e2a\u200b\u72b6\u6001\u200b\uff0c\u200b\u7531\u4e8e\u200b\u94fe\u8868\u200b\u8282\u70b9\u200b\u9700\u8981\u200b\u591a\u6b21\u200b\u5206\u914d\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u63d0\u524d\u200b\u5206\u914d\u5185\u5b58\u200b\u6c60\u200b\u7684\u200b\u7b56\u7565\u200b\u4ee5\u200b\u51cf\u5c11\u200bmalloc()
\u200b\u7684\u200b\u8c03\u7528\u200b\u6b21\u6570\u200b\u3002
struct Queue\n{\n char *val;\n int colorsOnHand[5];\n struct Queue *next;\n};\n\nstruct Queue *nodePool;\nint poolSize;\nint poolAllocated;\n\nstruct Queue *getNode(char *val, struct Queue *next, int *colorsOnHand)\n{\n int i = 0;\n struct Queue *ret;\n if (!nodePool || poolAllocated >= poolSize)\n {\n if (poolAllocated)\n poolSize <<= 1;\n else\n poolSize = 1000;\n poolAllocated = 0;\n nodePool = (struct Queue *)malloc(sizeof(struct Queue) * poolSize);\n }\n ret = nodePool + (poolAllocated++);\n ret->val = val;\n ret->next = next;\n for (i = 0; i < 5; i++)\n ret->colorsOnHand[i] = colorsOnHand[i];\n return ret;\n}\n
\u200b\u5206\u200b\u4e24\u6b65\u200b\u8fdb\u884c\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\uff0c\u200b\u7b2c\u4e00\u6b65\u200b\u5148\u200b\u63d2\u5165\u200b\u4e00\u4e2a\u200b\u7403\u200b\uff0c\u200b\u7b2c\u4e8c\u6b65\u200b\u6d88\u9664\u200b\u8fde\u7eed\u200b\u7684\u200b\u7403\u200b\uff0c\u200b\u76f4\u5230\u200b\u65e0\u7403\u200b\u53ef\u6d88\u200b\u3002
char *strPool;\nint strSize;\nint strAllocated;\n\nchar *getStr(int len)\n{\n if (!strPool || strAllocated + len >= strSize)\n {\n if (strAllocated)\n strSize <<= 1;\n else\n strSize = 32768;\n strAllocated = 0;\n strPool = (char *)malloc(sizeof(char) * strSize);\n }\n char *ret = strPool + strAllocated;\n strAllocated += len;\n return ret;\n}\n\nbool play(char *src)\n{\n char *ptrfast = src, *ptrslow = src, cur = 0;\n int i = 0;\n bool flag = false;\n while (*ptrfast)\n {\n if (cur == *ptrfast)\n i++;\n else\n {\n if (i < 3)\n {\n while (i)\n {\n *(ptrslow++) = cur;\n i--;\n }\n }\n else\n flag = true;\n i = 1;\n cur = *ptrfast;\n }\n ptrfast++;\n }\n if (i < 3)\n {\n while (i)\n {\n *(ptrslow++) = cur;\n i--;\n }\n }\n else\n flag = true;\n *ptrslow = 0;\n return flag;\n}\n\nchar *addBall(char *src, int len, char ball, int loc)\n{\n char *ret = (char *)malloc(sizeof(char) * (len + 2));\n ret[len + 1] = 0;\n memcpy(ret, src, sizeof(char) * loc);\n memcpy(ret + loc + 1, src + loc, sizeof(char) * (len - loc));\n ret[loc] = ball;\n return ret;\n}\n
int findMinStep(char * board, char * hand) {\n struct Queue *current = NULL, *temp = NULL;\n char *cur = hand, *init = getStr(strlen(board) + 1), *newseq = NULL,\n *colors = \"RYBGW\";\n int i = 0, j = 0, len = 0, ret = 0, colorsOnHand[5] = {0}, flag;\n\n nodePool = NULL;\n poolSize = 0;\n poolAllocated = 0;\n strPool = NULL;\n strSize = 0;\n strAllocated = 0;\n\n strcpy(init, board);\n do\n for (i = 0; i < 5; i++)\n if (*cur == colors[i])\n colorsOnHand[i]++;\n while (*(++cur));\n\n current = getNode(init, NULL, colorsOnHand);\n while (current)\n {\n while (current)\n {\n len = strlen(current->val);\n if (!len)\n return ret;\n for (i = 0; i <= len; i++)\n {\n flag = false;\n for (j = 0; j < 5; j++)\n {\n if (current->colorsOnHand[j] == 0)\n continue;\n if (i > 0)\n flag = flag || current->val[i - 1] == colors[j];\n if (i < len)\n flag = flag || current->val[i] == colors[j];\n if (i > 0 && i < len)\n flag = flag || current->val[i - 1] == current->val[i];\n if (!flag)\n continue;\n current->colorsOnHand[j]--;\n newseq = addBall(current->val, len, colors[j], i);\n while (play(newseq));\n temp = getNode(newseq, temp, current->colorsOnHand);\n current->colorsOnHand[j]++;\n }\n }\n current = current->next;\n }\n ret++;\n current = temp;\n temp = NULL;\n }\n return -1;\n}\n
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/50/","title":"50. Pow(x, n)","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/50/#_1","title":"\u9898\u76ee","text":"\u200b\u5b9e\u73b0\u200b\u00a0pow(x, n)\uff0c\u200b\u5373\u200b\u8ba1\u7b97\u200b x \u200b\u7684\u200b n \u200b\u6b21\u200b\u5e42\u51fd\u6570\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: 2.00000, 10\n\u200b\u8f93\u51fa\u200b: 1024.00000\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a \u200b\u8f93\u5165\u200b: 2.10000, 3\n\u200b\u8f93\u51fa\u200b: 9.26100\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a \u200b\u8f93\u5165\u200b: 2.00000, -2\n\u200b\u8f93\u51fa\u200b: 0.25000\n\u200b\u89e3\u91ca\u200b: 2^(-2) = (1/2)^2 = 1/4 = 0.25\n
\u200b\u8bf4\u660e\u200b\uff1a - -100.0 <\u00a0x\u00a0< 100.0
- n\u00a0\u200b\u662f\u200b 32 \u200b\u4f4d\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\uff0c\u200b\u5176\u200b\u6570\u503c\u200b\u8303\u56f4\u200b\u662f\u200b\\([\u22122^{31},\u00a02^{31}\u00a0\u2212 1]\\)\u3002
Reference
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/50/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5229\u7528\u200b\u5feb\u901f\u200b\u5e42\u200b\u7684\u200b\u601d\u8def\u200b\uff0c\u200b\u5b58\u50a8\u200b\u6b21\u6570\u200b\u4e3a\u200b2\u200b\u7684\u200b\u6574\u6570\u200b\u5e42\u200b\u7684\u200b\u8ba1\u7b97\u7ed3\u679c\u200b\uff0c\u200b\u7136\u540e\u200b\u7528\u200b\u8fd9\u4e9b\u200b\u7ed3\u679c\u200b\u76f8\u4e58\u200b\u5f97\u5230\u200b\u8f93\u51fa\u200b\u7ed3\u679c\u200b\u3002\u200b\u6ce8\u610f\u200b\u6307\u6570\u200b\u4e3a\u200b\u8d1f\u6570\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\u200b\u5f53\u200b\u6307\u6570\u200b\u4e3a\u200b-2147483648
\u200b\u65f6\u200b\u4e0d\u80fd\u200b\u53d6\u8d1f\u200b\uff0c\u200b\u6b64\u65f6\u200b\u53ef\u4ee5\u200b\u5148\u52a0\u200b\u4e00\u518d\u200b\u53d6\u8d1f\u200b\uff0c\u200b\u6700\u540e\u200b\u9664\u4ee5\u200b\u5e95\u6570\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
double myPow(double x, int n)\n{\n if (n < 0)\n return 1 / myPow(x, -(n + 1)) / x;\n double cache[32] = {0}, ret = 1;\n int i = 0;\n cache[0] = x;\n while (n)\n {\n if (n & 1)\n ret *= cache[i];\n n >>= 1;\n i++;\n cache[i] = cache[i - 1] * cache[i - 1];\n }\n return ret;\n}\n
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/509/","title":"509. \u200b\u6590\u6ce2\u200b\u90a3\u200b\u5951\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/509/#_1","title":"\u9898\u76ee","text":"\u200b\u6590\u6ce2\u200b\u90a3\u200b\u5951\u6570\u200b\uff0c\u200b\u901a\u5e38\u200b\u7528\u200bF(n)
\u200b\u8868\u793a\u200b\uff0c\u200b\u5f62\u6210\u200b\u7684\u200b\u5e8f\u5217\u200b\u79f0\u4e3a\u200b\u6590\u6ce2\u200b\u90a3\u5951\u200b\u6570\u5217\u200b\u3002\u200b\u8be5\u200b\u6570\u5217\u200b\u7531\u200b0
\u200b\u548c\u200b1
\u200b\u5f00\u59cb\u200b\uff0c\u200b\u540e\u9762\u200b\u7684\u200b\u6bcf\u4e00\u9879\u200b\u6570\u5b57\u200b\u90fd\u200b\u662f\u200b\u524d\u9762\u200b\u4e24\u9879\u200b\u6570\u5b57\u200b\u7684\u200b\u548c\u200b\u3002\u200b\u4e5f\u200b\u5c31\u662f\u200b\uff1a
F(0) = 0,\u00a0 \u00a0F(1)\u00a0= 1\nF(N) = F(N - 1) + F(N - 2), \u200b\u5176\u4e2d\u200b N > 1.\n
\u200b\u7ed9\u5b9a\u200bN
\uff0c\u200b\u8ba1\u7b97\u200bF(N)
\u3002 \u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a2\n\u200b\u8f93\u51fa\u200b\uff1a1\n\u200b\u89e3\u91ca\u200b\uff1aF(2) = F(1) + F(0) = 1 + 0 = 1.\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1a3\n\u200b\u8f93\u51fa\u200b\uff1a2\n\u200b\u89e3\u91ca\u200b\uff1aF(3) = F(2) + F(1) = 1 + 1 = 2.\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1a4\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1aF(4) = F(3) + F(2) = 2 + 1 = 3.\n
\u200b\u63d0\u793a\u200b\uff1a
\\(0\\leq N\\leq30\\)
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/509/#_2","title":"\u9898\u89e3","text":"","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/509/#_3","title":"\u9012\u5f52","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u5b58\u653e\u200b\u5386\u53f2\u200b\u7ed3\u679c\u200b\uff0c\u200b\u52a0\u901f\u200b\u9012\u5f52\u8ba1\u7b97\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int fib_cache(int N, int **cache, int *lenCache, int *fullCache){\n if (!N)\n return 0;\n if (!(*cache))\n {\n *lenCache = 2;\n *fullCache = N + 1;\n *cache = (int *)memset(malloc(sizeof(int) * *fullCache), 0, sizeof(int) * *fullCache);\n (*cache)[0] = 1;\n (*cache)[1] = 1;\n }\n if (N > *lenCache && N <= *fullCache)\n (*cache)[N-1] = fib_cache(N - 1, cache, lenCache, fullCache) + fib_cache(N - 2, cache, lenCache, fullCache);\n *lenCache = N;\n return (*cache)[N - 1];\n}\n\nint fib(int N){\n int *cache = NULL, lenCache = 0, fullCache = 0;\n return fib_cache(N, &cache, &lenCache, &fullCache);\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/509/#_4","title":"\u8fed\u4ee3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6839\u636e\u200b\u5b9a\u4e49\u200b\u63a8\u7b97\u200b\u6590\u6ce2\u200b\u90a3\u200b\u5951\u6570\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int fib(int N){\n int ret = 0, next = 1, tmp;\n while (N)\n {\n tmp = ret;\n ret = next;\n next = ret + tmp;\n N--;\n }\n return ret;\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/53/","title":"53. \u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u5206\u6cbb\u7b97\u6cd5","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/53/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b nums
\u00a0\uff0c\u200b\u627e\u5230\u200b\u4e00\u4e2a\u200b\u5177\u6709\u200b\u6700\u5927\u200b\u548c\u200b\u7684\u200b\u8fde\u7eed\u200b\u5b50\u200b\u6570\u7ec4\u200b\uff08\u200b\u5b50\u200b\u6570\u7ec4\u200b\u6700\u5c11\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\uff09\uff0c\u200b\u8fd4\u56de\u200b\u5176\u200b\u6700\u5927\u200b\u548c\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [-2,1,-3,4,-1,2,1,-5,4]\n\u200b\u8f93\u51fa\u200b\uff1a6\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8fde\u7eed\u200b\u5b50\u200b\u6570\u7ec4\u200b\u00a0[4,-1,2,1] \u200b\u7684\u200b\u548c\u200b\u6700\u5927\u200b\uff0c\u200b\u4e3a\u200b\u00a06 \u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1]\n\u200b\u8f93\u51fa\u200b\uff1a1\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [0]\n\u200b\u8f93\u51fa\u200b\uff1a0\n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [-1]\n\u200b\u8f93\u51fa\u200b\uff1a-1\n
\u200b\u793a\u4f8b\u200b 5\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [-100000]\n\u200b\u8f93\u51fa\u200b\uff1a-100000\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 3 * 10^4
-10^5 <= nums[i] <= 10^5
\u200b\u8fdb\u9636\u200b\uff1a\u200b\u5982\u679c\u200b\u4f60\u200b\u5df2\u7ecf\u200b\u5b9e\u73b0\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b O(n)
\u200b\u7684\u200b\u89e3\u6cd5\u200b\uff0c\u200b\u5c1d\u8bd5\u200b\u4f7f\u7528\u200b\u66f4\u4e3a\u200b\u7cbe\u5999\u200b\u7684\u200b \u200b\u5206\u6cbb\u200b\u6cd5\u200b \u200b\u6c42\u89e3\u200b\u3002
Reference
","tags":["\u6570\u7ec4","\u5206\u6cbb\u7b97\u6cd5","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/53/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u4ece\u540e\u200b\u5411\u524d\u200b\u8fdb\u884c\u200b\u8003\u8651\u200b\uff0c\u200b\u8bbe\u200b\u6570\u7ec4\u200b\u4e2d\u5171\u200b\u6709\u200b\\(n\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\\(\\{a_n\\}\\)\uff0c\u200b\u5f53\u524d\u200b\u4f4d\u7f6e\u200b\\(i\\)\u200b\u4ece\u540e\u200b\u5411\u524d\u200b\u79fb\u52a8\u200b\uff0c\\(i\\)\u200b\u4f4d\u7f6e\u200b\u53ca\u200b\\(i\\)\u200b\u4f4d\u7f6e\u200b\u4e4b\u540e\u200b\u6784\u6210\u200b\u7684\u200b\u6700\u5927\u200b\u5b50\u200b\u5e8f\u5217\u200b\u6570\u503c\u200b\u4e3a\u200b\\(s_i\\)\u3002
- \u200b\u521d\u59cb\u200b\u60c5\u51b5\u200b\uff0c\\(s_n = 0\\)
- \u200b\u8ba8\u8bba\u200b\\(s_{i + 1}\\)\uff1a
- \u200b\u82e5\u200b\\(s_{i + 1} \\leq 0\\)\uff0c\u200b\u5219\u200b\\(s_{i} = a_{i}\\)
- \u200b\u82e5\u200b\\(s_{i + 1} > 0\\)\uff0c\u200b\u5219\u200b\\(s_{i} = a_{i} + s_{i + 1}\\)
\u200b\u7531\u6b64\u200b\u4e0d\u65ad\u200b\u8fdb\u884c\u200b\uff0c\u200b\u4e22\u5f03\u200b\u548c\u200b\u4e3a\u200b\u8d1f\u6570\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b\uff0c\u200b\u6700\u7ec8\u200b\u5f97\u5230\u200b\u7684\u200b\\(s_0\\)\u200b\u5373\u200b\u4e3a\u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c\u200b\u3002
#define MAX(x, y) (x > y ? x : y)\nint maxSubArray(int* nums, int numsSize){\n int ret = INT_MIN, value = 0;\n for (int i = numsSize - 1; i >= 0; i--)\n {\n value = MAX(value, 0) + nums[i];\n ret = MAX(ret, value);\n }\n return ret;\n}\n
","tags":["\u6570\u7ec4","\u5206\u6cbb\u7b97\u6cd5","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/55/","title":"55. \u200b\u8df3\u8dc3\u200b\u6e38\u620f","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u00a0nums
\uff0c\u200b\u4f60\u200b\u6700\u521d\u200b\u4f4d\u4e8e\u200b\u6570\u7ec4\u200b\u7684\u200b \u200b\u7b2c\u4e00\u4e2a\u200b\u4e0b\u6807\u200b \u3002
\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u4ee3\u8868\u200b\u4f60\u200b\u5728\u200b\u8be5\u200b\u4f4d\u7f6e\u200b\u53ef\u4ee5\u200b\u8df3\u8dc3\u200b\u7684\u200b\u6700\u5927\u200b\u957f\u5ea6\u200b\u3002
\u200b\u5224\u65ad\u200b\u4f60\u200b\u662f\u5426\u200b\u80fd\u591f\u200b\u5230\u8fbe\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u4e0b\u6807\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [2,3,1,1,4]\n\u200b\u8f93\u51fa\u200b\uff1atrue\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u53ef\u4ee5\u200b\u5148\u200b\u8df3\u200b 1 \u200b\u6b65\u200b\uff0c\u200b\u4ece\u200b\u4e0b\u6807\u200b 0 \u200b\u5230\u8fbe\u200b\u4e0b\u6807\u200b 1, \u200b\u7136\u540e\u200b\u518d\u200b\u4ece\u200b\u4e0b\u6807\u200b 1 \u200b\u8df3\u200b 3 \u200b\u6b65\u200b\u5230\u8fbe\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u4e0b\u6807\u200b\u3002\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [3,2,1,0,4]\n\u200b\u8f93\u51fa\u200b\uff1afalse\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u65e0\u8bba\u600e\u6837\u200b\uff0c\u200b\u603b\u4f1a\u200b\u5230\u8fbe\u200b\u4e0b\u6807\u200b\u4e3a\u200b 3 \u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002\u200b\u4f46\u200b\u8be5\u200b\u4e0b\u200b\u6807\u7684\u200b\u6700\u5927\u200b\u8df3\u8dc3\u200b\u957f\u5ea6\u200b\u662f\u200b 0 \uff0c \u200b\u6240\u4ee5\u200b\u6c38\u8fdc\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u5230\u8fbe\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u4e0b\u6807\u200b\u3002\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 3 * 10^4
0 <= nums[i] <= 10^5
Reference
","tags":["\u8d2a\u5fc3\u7b97\u6cd5","\u6570\u7ec4"]},{"location":"coding/leetcode/55/#_1","title":"\u9898\u89e3","text":"\u200b\u53cd\u5e8f\u200b\u904d\u5386\u200b\u6570\u7ec4\u200b\uff0c\u200b\u4ece\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u4f4d\u7f6e\u200b\u5f00\u59cb\u200b\uff0c\u200b\u68c0\u67e5\u200b\u5404\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u53ef\u200b\u8df3\u200b\u8ddd\u79bb\u200b\uff0c\u200b\u4ece\u800c\u200b\u6784\u9020\u200b\u4e00\u4e2a\u200b\u53ef\u4ee5\u200b\u8df3\u5230\u200b\u4e2d\u70b9\u200b\u7684\u200b\u4e0b\u6807\u200b\u533a\u95f4\u200b\u3002\u200b\u904d\u5386\u200b\u5b8c\u6210\u200b\u540e\u200b\u68c0\u67e5\u200b\u8d77\u70b9\u200b\u662f\u5426\u200b\u5728\u200b\u8be5\u200b\u4e0b\u6807\u200b\u533a\u95f4\u200b\u4e2d\u200b\u3002
bool canJump(int* nums, int numsSize) {\n\n int distance = numsSize - 1, i = 0;\n for (i = numsSize - 1; i >= 0; i--)\n if (i + nums[i] >= distance)\n distance = i;\n return distance == 0;\n}\n
","tags":["\u8d2a\u5fc3\u7b97\u6cd5","\u6570\u7ec4"]},{"location":"coding/leetcode/56/","title":"56. \u200b\u5408\u5e76\u200b\u533a\u95f4","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u6392\u5e8f"]},{"location":"coding/leetcode/56/#_1","title":"\u9898\u76ee","text":"\u200b\u4ee5\u200b\u6570\u7ec4\u200b intervals
\u200b\u8868\u793a\u200b\u82e5\u5e72\u4e2a\u200b\u533a\u95f4\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u5176\u4e2d\u200b\u5355\u4e2a\u200b\u533a\u95f4\u200b\u4e3a\u200b intervals[i] = [start_i, end_i]
\u3002\u200b\u8bf7\u200b\u4f60\u200b\u5408\u5e76\u200b\u6240\u6709\u200b\u91cd\u53e0\u200b\u7684\u200b\u533a\u95f4\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u4e0d\u200b\u91cd\u53e0\u200b\u7684\u200b\u533a\u95f4\u200b\u6570\u7ec4\u200b\uff0c\u200b\u8be5\u200b\u6570\u7ec4\u200b\u9700\u200b\u6070\u597d\u200b\u8986\u76d6\u200b\u8f93\u5165\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u533a\u95f4\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aintervals = [[1,3],[2,6],[8,10],[15,18]]\n\u200b\u8f93\u51fa\u200b\uff1a[[1,6],[8,10],[15,18]]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u533a\u95f4\u200b [1,3] \u200b\u548c\u200b [2,6] \u200b\u91cd\u53e0\u200b, \u200b\u5c06\u200b\u5b83\u4eec\u200b\u5408\u5e76\u200b\u4e3a\u200b [1,6].\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b\uff1aintervals = [[1,4],[4,5]]\n\u200b\u8f93\u51fa\u200b\uff1a[[1,5]]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u533a\u95f4\u200b [1,4] \u200b\u548c\u200b [4,5] \u200b\u53ef\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u91cd\u53e0\u200b\u533a\u95f4\u200b\u3002\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= intervals.length <= 10^4
intervals[i].length == 2
0 <= starti <= endi <= 10^4
Reference
","tags":["\u6570\u7ec4","\u6392\u5e8f"]},{"location":"coding/leetcode/56/#_2","title":"\u9898\u89e3","text":"\u200b\u9996\u5148\u200b\u5bf9\u200b\u533a\u95f4\u200b\u7684\u200b\u8d77\u70b9\u200b\u6309\u7167\u200b\u5347\u5e8f\u200b\u6392\u5e8f\u200b\uff0c\u200b\u4e4b\u540e\u200b\u904d\u5386\u200b\u533a\u95f4\u200b\u5217\u8868\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u68c0\u67e5\u200b\u5df2\u200b\u5408\u5e76\u200b\u533a\u95f4\u200b\u4e0e\u200b\u5f53\u524d\u200b\u533a\u95f4\u200b\u662f\u5426\u200b\u5b58\u5728\u200b\u91cd\u53e0\u200b\uff0c\u200b\u5982\u679c\u200b\u5b58\u5728\u200b\u91cd\u53e0\u200b\uff0c\u200b\u5219\u200b\u5c06\u200b\u4e24\u200b\u533a\u95f4\u200b\u5408\u5e76\u200b\uff0c\u200b\u5426\u5219\u200b\u5c06\u200b\u5df2\u200b\u5408\u5e76\u200b\u533a\u95f4\u200b\u52a0\u5165\u200b\u7ed3\u679c\u200b\u96c6\u4e2d\u200b\uff0c\u200b\u5f53\u524d\u200b\u533a\u95f4\u200b\u8bbe\u4e3a\u200b\u5df2\u200b\u5408\u5e76\u200b\u533a\u95f4\u200b\u3002
/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\n#define MAX(x, y) (x > y ? x : y)\nint comp(const void *x, const void *y)\n{\n return **(int **)x - **(int **)y;\n}\nint** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes){\n if (intervalsSize == 0)\n {\n *returnSize = 0;\n return NULL;\n }\n qsort(intervals, intervalsSize, sizeof(int *), comp);\n int **ret = (int **)malloc(sizeof(int *) * intervalsSize), i = 0;\n ret[0] = (int *)memcpy(malloc(sizeof(int) * 2), intervals[0], sizeof(int) * 2);\n *returnSize = 0;\n for (i = 1; i < intervalsSize; i++)\n {\n if (ret[*returnSize][1] >= intervals[i][0])\n ret[*returnSize][1] = MAX(intervals[i][1], ret[*returnSize][1]);\n else\n ret[++(*returnSize)] = (int *)memcpy(malloc(sizeof(int) * 2), intervals[i], sizeof(int) * 2);\n }\n (*returnSize)++;\n *returnColumnSizes = (int *)malloc(sizeof(int) * *returnSize);\n for (i = 0; i < *returnSize; i++)\n (*returnColumnSizes)[i] = 2;\n return ret;\n}\n
","tags":["\u6570\u7ec4","\u6392\u5e8f"]},{"location":"coding/leetcode/59/","title":"59. \u200b\u87ba\u65cb\u200b\u77e9\u9635\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/59/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\u00a0n
\uff0c\u200b\u751f\u6210\u200b\u4e00\u4e2a\u200b\u5305\u542b\u200b 1
\u200b\u5230\u200b\u00a0n^2
\u00a0\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\uff0c\u200b\u4e14\u200b\u5143\u7d20\u200b\u6309\u200b\u987a\u65f6\u9488\u200b\u987a\u5e8f\u200b\u87ba\u65cb\u200b\u6392\u5217\u200b\u7684\u200b\u00a0n x n
\u200b\u6b63\u65b9\u5f62\u200b\u77e9\u9635\u200b matrix
\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1an = 3\n\u200b\u8f93\u51fa\u200b\uff1a[[1,2,3],[8,9,4],[7,6,5]]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1an = 1\n\u200b\u8f93\u51fa\u200b\uff1a[[1]]\n
\u200b\u63d0\u793a\u200b\uff1a
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/59/#_2","title":"\u9898\u89e3","text":"\u200b\u6309\u200b\u987a\u5e8f\u200b\u586b\u5145\u200b\u77e9\u9635\u200b\uff0c\u200b\u5f53\u200b\u8d85\u51fa\u200b\u77e9\u9635\u200b\u6216\u200b\u9047\u5230\u200b\u5df2\u200b\u586b\u5145\u200b\u5143\u7d20\u200b\u65f6\u200b\u8f6c\u5411\u200b\u3002
/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\nvoid change(int direction, int *i, int *j, int incre)\n{\n switch(direction)\n {\n case 0:\n *j += incre;\n break;\n case 1:\n *i += incre;\n break;\n case 2:\n *j -= incre;\n break;\n case 3:\n *i -= incre;\n break;\n }\n}\nint** generateMatrix(int n, int* returnSize, int** returnColumnSizes){\n *returnSize = n;\n *returnColumnSizes = (int *)malloc(sizeof(int) * n);\n\n int i = 0, j = 0, m = 1, direction = 0, **ret = (int **)malloc(sizeof(int *) * n);\n for (i = 0; i < n; i++)\n {\n (*returnColumnSizes)[i] = n;\n ret[i] = (int *)malloc(sizeof(int) * n);\n memset(ret[i], 0, sizeof(int) * n);\n }\n\n i = 0;\n while (m < n * n)\n {\n ret[i][j] = m;\n change(direction, &i, &j, 1);\n m++;\n if (i < 0 || j < 0 || i >= n || j >= n || ret[i][j])\n {\n change(direction, &i, &j, -1);\n direction = (direction + 1) & 3;\n m--;\n }\n }\n ret[i][j] = m;\n return ret;\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/61/","title":"61. \u200b\u65cb\u8f6c\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/61/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\u7684\u200b\u5934\u200b\u8282\u70b9\u200b head
\uff0c\u200b\u65cb\u8f6c\u200b\u94fe\u8868\u200b\uff0c\u200b\u5c06\u200b\u94fe\u8868\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u00a0k
\u00a0\u200b\u4e2a\u200b\u4f4d\u7f6e\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1,2,3,4,5], k = 2\n\u200b\u8f93\u51fa\u200b\uff1a[4,5,1,2,3]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [0,1,2], k = 4\n\u200b\u8f93\u51fa\u200b\uff1a[2,0,1]\n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u94fe\u8868\u200b\u4e2d\u200b\u8282\u70b9\u200b\u7684\u200b\u6570\u76ee\u200b\u5728\u200b\u8303\u56f4\u200b
[0, 500]
\u200b\u5185\u200b -100 <= Node.val <= 100
0 <= k <= 2 * 10^9
Reference
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/61/#_2","title":"\u9898\u89e3","text":"\u200b\u5148\u200b\u5c06\u200b\u94fe\u8868\u200b\u95ed\u73af\u200b\uff0c\u200b\u53f3\u79fb\u200b k \u200b\u4e2a\u200b\u8282\u70b9\u200b\u540e\u200b\u4ee5\u200b\u8be5\u200b\u8282\u70b9\u200b\u4f5c\u4e3a\u200b\u5934\u200b\u8282\u70b9\u200b\uff0c\u200b\u5c06\u200b\u94fe\u8868\u200b\u7684\u200b\u73af\u200b\u6253\u5f00\u200b\u3002
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\n\n\nstruct ListNode* rotateRight(struct ListNode* head, int k) {\n if (!head)\n return NULL;\n struct ListNode *cur = head, *ret = NULL;\n int len = 1;\n while (cur->next != NULL)\n {\n cur = cur->next;\n len++;\n }\n cur->next = head;\n cur = head;\n k %= len;\n for (int i = k + 1; i < len; i++)\n cur = cur->next;\n ret = cur->next;\n cur->next = NULL;\n return ret;\n}\n
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/62/","title":"62. \u200b\u4e0d\u540c\u200b\u8def\u5f84","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/62/#_1","title":"\u9898\u76ee","text":"\u200b\u4e00\u4e2a\u200b\u673a\u5668\u4eba\u200b\u4f4d\u4e8e\u200b\u4e00\u4e2a\u200b m x n
\u00a0\u200b\u7f51\u683c\u200b\u7684\u200b\u5de6\u4e0a\u89d2\u200b \uff08\u200b\u8d77\u59cb\u200b\u70b9\u200b\u5728\u200b\u4e0b\u56fe\u200b\u4e2d\u200b\u6807\u8bb0\u200b\u4e3a\u200b \u201cStart\u201d \uff09\u3002
\u200b\u673a\u5668\u4eba\u200b\u6bcf\u6b21\u200b\u53ea\u80fd\u200b\u5411\u4e0b\u200b\u6216\u8005\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u4e00\u6b65\u200b\u3002\u200b\u673a\u5668\u4eba\u200b\u8bd5\u56fe\u200b\u8fbe\u5230\u200b\u7f51\u683c\u200b\u7684\u200b\u53f3\u4e0b\u89d2\u200b\uff08\u200b\u5728\u200b\u4e0b\u56fe\u200b\u4e2d\u200b\u6807\u8bb0\u200b\u4e3a\u200b \u201cFinish\u201d \uff09\u3002
\u200b\u95ee\u200b\u603b\u5171\u200b\u6709\u200b\u591a\u5c11\u200b\u6761\u200b\u4e0d\u540c\u200b\u7684\u200b\u8def\u5f84\u200b\uff1f
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1am = 3, n = 7\n\u200b\u8f93\u51fa\u200b\uff1a28\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1am = 3, n = 2\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u4ece\u200b\u5de6\u4e0a\u89d2\u200b\u5f00\u59cb\u200b\uff0c\u200b\u603b\u5171\u200b\u6709\u200b 3 \u200b\u6761\u200b\u8def\u5f84\u200b\u53ef\u4ee5\u200b\u5230\u8fbe\u200b\u53f3\u4e0b\u89d2\u200b\u3002\n1. \u200b\u5411\u200b\u53f3\u200b -> \u200b\u5411\u4e0b\u200b -> \u200b\u5411\u4e0b\u200b\n2. \u200b\u5411\u4e0b\u200b -> \u200b\u5411\u4e0b\u200b -> \u200b\u5411\u200b\u53f3\u200b\n3. \u200b\u5411\u4e0b\u200b -> \u200b\u5411\u200b\u53f3\u200b -> \u200b\u5411\u4e0b\u200b\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1am = 7, n = 3\n\u200b\u8f93\u51fa\u200b\uff1a28\n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1am = 3, n = 3\n\u200b\u8f93\u51fa\u200b\uff1a6\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= m, n <= 100
- \u200b\u9898\u76ee\u200b\u6570\u636e\u200b\u4fdd\u8bc1\u200b\u7b54\u6848\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b
2 * 10^9
Reference
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/62/#_2","title":"\u9898\u89e3","text":"\u200b\u4ece\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u5f00\u59cb\u200b\u8003\u8651\u200b\uff0c\u200b\u8981\u200b\u5230\u8fbe\u200b\u53f3\u4e0b\u89d2\u200b\u7684\u200b\u65b9\u683c\u200b\uff0c\u200b\u6709\u200b\u4e24\u79cd\u200b\u65b9\u6cd5\u200b\uff1a
- \u200b\u4ece\u200b\u659c\u200b\u4e0a\u65b9\u200b\u7684\u200b\u65b9\u683c\u200b\u5f00\u59cb\u200b\uff0c\u200b\u5148\u200b\u5411\u4e0b\u200b\u540e\u200b\u5411\u200b\u53f3\u200b
- \u200b\u4ece\u200b\u659c\u200b\u4e0a\u65b9\u200b\u7684\u200b\u65b9\u683c\u200b\u5f00\u59cb\u200b\uff0c\u200b\u5148\u5411\u200b\u53f3\u540e\u200b\u5411\u4e0b\u200b
\u200b\u7531\u6b64\u200b\u5373\u53ef\u200b\u5f97\u51fa\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u65b9\u7a0b\u200b\u3002
int uniquePaths(int m, int n){\n if (m < n)\n return uniquePaths(n, m);\n int *dp = (int *)malloc(sizeof(int) * m), i = 0, j = 0;\n for (i = 0; i < m; i++)\n dp[i] = 1;\n for (i = 1; i < n; i++)\n for (j = 1; j < m; j++)\n dp[j] += dp[j - 1];\n return dp[m - 1];\n}\n
\u200b\u6216\u8005\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6392\u5217\u7ec4\u5408\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u957f\u4e3a\u200b\\(m\\)\uff0c\u200b\u5bbd\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u65b9\u683c\u200b\uff0c\u200b\u9700\u8981\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\\(m - 1\\)\u200b\u6b21\u200b\uff0c\u200b\u5411\u4e0b\u200b\u79fb\u52a8\u200b\\(n - 1\\)\u200b\u6b21\u200b\uff0c\u200b\u5171\u200b\\(m + n - 2\\)\u200b\u6b21\u200b\u3002
\u200b\u56e0\u6b64\u200b\u603b\u200b\u7684\u200b\u8def\u5f84\u200b\u4e2a\u6570\u200b\u4e3a\u200b\\(m + n - 2\\)\u200b\u4e2a\u200b\u9009\u62e9\u200b\u4e2d\u4e2d\u200b\u9009\u62e9\u200b\\(m - 1\\)\u200b\u6b21\u200b\u5411\u4e0b\u200b\u79fb\u52a8\u200b\u7684\u200b\u65b9\u6848\u200b\u603b\u6570\u200b\uff0c\u200b\u8be5\u200b\u65b9\u6848\u200b\u603b\u6570\u200b\u4e3a\u200b\uff1a
\\[ \\frac{(m + n - 2)!}{(m - 1)!(n - 1)!} \\]","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/64/","title":"64. \u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5305\u542b\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u7684\u200b m\u00a0x\u00a0n
\u00a0\u200b\u7f51\u683c\u200b\u00a0grid
\uff0c\u200b\u8bf7\u200b\u627e\u51fa\u200b\u4e00\u6761\u200b\u4ece\u200b\u5de6\u4e0a\u89d2\u200b\u5230\u200b\u53f3\u4e0b\u89d2\u200b\u7684\u200b\u8def\u5f84\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u8def\u5f84\u200b\u4e0a\u200b\u7684\u200b\u6570\u5b57\u200b\u603b\u548c\u200b\u4e3a\u200b\u6700\u5c0f\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a\u200b\u6bcf\u6b21\u200b\u53ea\u80fd\u200b\u5411\u4e0b\u200b\u6216\u8005\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u4e00\u6b65\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1agrid = [[1,3,1],[1,5,1],[4,2,1]]\n\u200b\u8f93\u51fa\u200b\uff1a7\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u56e0\u4e3a\u200b\u8def\u5f84\u200b 1\u21923\u21921\u21921\u21921 \u200b\u7684\u200b\u603b\u548c\u200b\u6700\u5c0f\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1agrid = [[1,2,3],[4,5,6]]\n\u200b\u8f93\u51fa\u200b\uff1a12\n
\u200b\u63d0\u793a\u200b\uff1a
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 100
Reference
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/64/#_1","title":"\u9898\u89e3","text":"\u200b\u8bbe\u200b\u7b2c\u200b\\(i\\)\u200b\u884c\u7b2c\u200b\\(j\\)\u200b\u5217\u200b\u7684\u200b\u5143\u7d20\u200b\\(a_{ij}\\)\u200b\u5230\u200b\u53f3\u4e0b\u89d2\u200b\u8def\u5f84\u200b\u4e0a\u200b\u7684\u200b\u6570\u5b57\u200b\u548c\u200b\u4e3a\u200b\\(f(i, j)\\)\uff0c\u200b\u7279\u522b\u200b\u5730\u200b\uff0c\u200b\u6709\u200b\\(f(m, n) = a_{mn}\\)\uff0c\u200b\u5219\u200b\uff1a
\u200b\u5bf9\u4e8e\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u5143\u7d20\u200b\uff0c\u200b\u53ea\u80fd\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ f(m, j) = \\sum_{k=j} ^{n} a_{mk} \\] \u200b\u540c\u7406\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6700\u540e\u200b\u4e00\u5217\u200b\u5143\u7d20\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ f(i, n) = \\sum_{k = i} ^ {m} a_{kn} \\] \u200b\u8bbe\u200b\u7b2c\u200b\\(i\\)\u200b\u884c\u200b\u5230\u8fbe\u200b\u53f3\u4e0b\u89d2\u200b\u7684\u200b\u6700\u200b\u77ed\u200b\u8def\u5f84\u200b\u548c\u200b\uff08\u200b\u5373\u200b\\(f(i, j), \\forall j\\)\uff09\u200b\u4ee5\u53ca\u200b\u7b2c\u200b\\(i - 1\\)\u200b\u884c\u200b\u6700\u540e\u200b\u4e00\u5217\u200b\u5230\u8fbe\u200b\u53f3\u4e0b\u89d2\u200b\u7684\u200b\u6700\u200b\u77ed\u200b\u8def\u5f84\u200b\u548c\u200b\uff0c\u200b\u5373\u200b\\(f(i - 1, n)\\)\u200b\u5df2\u77e5\u200b\u3002\u200b\u7531\u4e8e\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u53ea\u80fd\u200b\u5411\u200b\u53f3\u200b\u6216\u200b\u5411\u4e0b\u200b\u79fb\u52a8\u200b\uff0c\\(f(i - 1, j)\\)\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u5982\u4e0b\u200b\u65b9\u7a0b\u200b\u63a8\u5bfc\u200b\uff1a
\\[ f(i - 1, j - 1) = \\min\\{f(i - 1, j), f(i, j - 1)\\} + a_{(i - 1)(j - 1)} \\] \u200b\u7531\u6b64\u200b\u5f97\u5230\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u65b9\u7a0b\u200b\uff0c\u200b\u5373\u53ef\u200b\u4f7f\u7528\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\u81ea\u200b\u5e95\u5411\u4e0a\u200b\u6c42\u89e3\u200b\u3002\u200b\u6c42\u89e3\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u53ea\u200b\u9700\u8981\u200b\u5b58\u50a8\u200b\u4e00\u884c\u200b\u7684\u200b\u6700\u200b\u77ed\u200b\u8def\u5f84\u200b\u548c\u200b\u5373\u53ef\u200b\u3002
#define MIN(x, y) ((x) < (y) ? x : y)\nint minPathSum(int** grid, int gridSize, int* gridColSize){\n if (gridSize == 0 || *gridColSize == 0)\n return 0;\n int *dp = (int *)memset(malloc(sizeof(int) * *gridColSize), 0, sizeof(int) * *gridColSize),\n i = 0, j = 0;\n for (i = 0; i < *gridColSize; i++)\n dp[i] = INT_MAX;\n dp[0] = 0;\n for (i = 0; i < gridSize; i++)\n {\n dp[0] += grid[i][0];\n for (j = 1; j < *gridColSize; j++)\n dp[j] = MIN(dp[j - 1], dp[j]) + grid[i][j];\n }\n return dp[*gridColSize - 1];\n}\n
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/66/","title":"66. \u200b\u52a0\u4e00","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/66/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u7531\u200b\u6574\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u975e\u7a7a\u200b\u6570\u7ec4\u200b\u6240\u200b\u8868\u793a\u200b\u7684\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\uff0c\u200b\u5728\u200b\u8be5\u6570\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u52a0\u200b\u4e00\u200b\u3002
\u200b\u6700\u9ad8\u200b\u4f4d\u200b\u6570\u5b57\u200b\u5b58\u653e\u200b\u5728\u200b\u6570\u7ec4\u200b\u7684\u200b\u9996\u4f4d\u200b\uff0c \u200b\u6570\u7ec4\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u53ea\u200b\u5b58\u50a8\u200b\u5355\u4e2a\u200b\u6570\u5b57\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u9664\u4e86\u200b\u6574\u6570\u200b 0 \u200b\u4e4b\u5916\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u6574\u6570\u200b\u4e0d\u4f1a\u200b\u4ee5\u200b\u96f6\u200b\u5f00\u5934\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b: [1,2,3]\n\u200b\u8f93\u51fa\u200b: [1,2,4]\n\u200b\u89e3\u91ca\u200b: \u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u8868\u793a\u200b\u6570\u5b57\u200b 123\u3002\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b: [4,3,2,1]\n\u200b\u8f93\u51fa\u200b: [4,3,2,2]\n\u200b\u89e3\u91ca\u200b: \u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u8868\u793a\u200b\u6570\u5b57\u200b 4321\u3002\n
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/66/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4ece\u200b\u6700\u540e\u200b\u4e00\u4f4d\u200b\u5f00\u59cb\u200b\u52a0\u200b\uff0c\u200b\u5411\u524d\u200b\u5904\u7406\u200b\u8fdb\u4f4d\u200b\u3002\u200b\u6ce8\u610f\u200b9999+1\u200b\u7684\u200b\u7279\u6b8a\u200b\u60c5\u51b5\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\nint* plusOne(int* digits, int digitsSize, int* returnSize){\n int *ret = (int *)malloc(sizeof(int) * (digitsSize + 1)), i = digitsSize, add = 1;\n *ret = 0;\n memcpy(ret + 1, digits, sizeof(int) * digitsSize);\n for (i = digitsSize; i >= 0 && add; i--)\n {\n if (add = ret[i] == 9)\n ret[i] = 0;\n else\n ret[i]++;\n }\n *returnSize = (i + 1) ? digitsSize : digitsSize + 1;\n return ret + ((i + 1) ? 1 : 0);\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/69/","title":"69. x \u200b\u7684\u200b\u5e73\u65b9\u6839","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/69/#_1","title":"\u9898\u76ee","text":"\u200b\u5b9e\u73b0\u200b\u00a0int sqrt(int x)
\u00a0\u200b\u51fd\u6570\u200b\u3002
\u200b\u8ba1\u7b97\u200b\u5e76\u200b\u8fd4\u56de\u200b\u00a0x
\u00a0\u200b\u7684\u200b\u5e73\u65b9\u6839\u200b\uff0c\u200b\u5176\u4e2d\u200b\u00a0x
\u200b\u662f\u975e\u200b\u8d1f\u200b\u6574\u6570\u200b\u3002
\u200b\u7531\u4e8e\u200b\u8fd4\u56de\u200b\u7c7b\u578b\u200b\u662f\u200b\u6574\u6570\u200b\uff0c\u200b\u7ed3\u679c\u200b\u53ea\u200b\u4fdd\u7559\u200b\u6574\u6570\u200b\u7684\u200b\u90e8\u5206\u200b\uff0c\u200b\u5c0f\u6570\u200b\u90e8\u5206\u200b\u5c06\u200b\u88ab\u200b\u820d\u53bb\u200b\u3002
\u200b\u793a\u4f8b\u200b 1:
\u200b\u8f93\u5165\u200b: 4\n\u200b\u8f93\u51fa\u200b: 2\n
\u200b\u793a\u4f8b\u200b 2:
\u200b\u8f93\u5165\u200b: 8\n\u200b\u8f93\u51fa\u200b: 2\n\u200b\u8bf4\u660e\u200b: 8 \u200b\u7684\u200b\u5e73\u65b9\u6839\u200b\u662f\u200b 2.82842..., \n\u00a0 \u200b\u7531\u4e8e\u200b\u8fd4\u56de\u200b\u7c7b\u578b\u200b\u662f\u200b\u6574\u6570\u200b\uff0c\u200b\u5c0f\u6570\u200b\u90e8\u5206\u200b\u5c06\u200b\u88ab\u200b\u820d\u53bb\u200b\u3002\n
Reference
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/69/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u5373\u53ef\u200b\uff0c\u200b\u5173\u4e8e\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u8ba8\u8bba\u200b\uff0c\u200b\u8bf7\u200b\u53c2\u89c1\u200b35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b
unsigned int binsearch(unsigned int target, unsigned int lo, unsigned int hi)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (mid * mid > target)\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo - 1;\n}\nint mySqrt(int x){\n return binsearch(x, 0, 46341);\n}\n
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/7/","title":"7. \u200b\u6574\u6570\u200b\u53cd\u8f6c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/7/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u51fa\u200b\u4e00\u4e2a\u200b 32 \u200b\u4f4d\u200b\u7684\u200b\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\uff0c\u200b\u4f60\u200b\u9700\u8981\u200b\u5c06\u200b\u8fd9\u4e2a\u200b\u6574\u6570\u200b\u4e2d\u200b\u6bcf\u4f4d\u200b\u4e0a\u200b\u7684\u200b\u6570\u5b57\u200b\u8fdb\u884c\u200b\u53cd\u8f6c\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b: 123\n\u200b\u8f93\u51fa\u200b: 321\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: -123\n\u200b\u8f93\u51fa\u200b: -321\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b: 120\n\u200b\u8f93\u51fa\u200b: 21\n
\u200b\u6ce8\u610f\u200b\uff1a
\u200b\u5047\u8bbe\u200b\u6211\u4eec\u200b\u7684\u200b\u73af\u5883\u200b\u53ea\u80fd\u200b\u5b58\u50a8\u200b\u5f97\u200b\u4e0b\u200b 32 \u200b\u4f4d\u200b\u7684\u200b\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\uff0c\u200b\u5219\u200b\u5176\u200b\u6570\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b \\([\u22122^{31},\u00a0 2^{31}\u00a0\u2212 1]\\) \u3002\u200b\u8bf7\u200b\u6839\u636e\u200b\u8fd9\u4e2a\u200b\u5047\u8bbe\u200b\uff0c\u200b\u5982\u679c\u200b\u53cd\u8f6c\u200b\u540e\u200b\u6574\u6570\u200b\u6ea2\u51fa\u200b\u90a3\u4e48\u200b\u5c31\u200b\u8fd4\u56de\u200b 0\u3002
Reference
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/7/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6bcf\u200b\u4e00\u6b21\u200b\u4ece\u200b\u53f3\u4fa7\u200b\u63d0\u53d6\u200b\u51fa\u200b\u6700\u540e\u200b\u4e00\u4f4d\u200b\u52a0\u200b\u5230\u200b\u7ed3\u679c\u200b\u7684\u200b\u53f3\u4fa7\u200b\u3002\u200b\u6ce8\u610f\u200b\u8d1f\u6570\u200b-2147483648
\u200b\u5728\u200b 32 \u200b\u4f4d\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\u73af\u5883\u200b\u4e0b\u200b\u4e0d\u80fd\u200b\u53d6\u8d1f\u200b\uff0c\u200b\u5c06\u200b\u4e2d\u95f4\u200b\u53d8\u91cf\u200b\u58f0\u660e\u200b\u4e3a\u200blong
\u200b\u5373\u53ef\u200b\u89e3\u51b3\u200b\u3002
int reverse(int x){\n long ret = 0, testcase = x;\n testcase = testcase > 0 ? testcase : -testcase;\n while(testcase)\n {\n ret *= 10;\n ret += testcase % 10;\n testcase /= 10;\n }\n return ((ret >> 31) ? 0 : ret) * (x > 0 ? 1 : -1);\n}\n
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/70/","title":"70. \u200b\u722c\u697c\u68af","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/70/#_1","title":"\u9898\u76ee","text":"\u200b\u5047\u8bbe\u200b\u4f60\u200b\u6b63\u5728\u200b\u722c\u697c\u68af\u200b\u3002\u200b\u9700\u8981\u200b n\u00a0\u200b\u9636\u200b\u4f60\u200b\u624d\u80fd\u200b\u5230\u8fbe\u200b\u697c\u9876\u200b\u3002
\u200b\u6bcf\u6b21\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u722c\u200b 1 \u200b\u6216\u200b 2 \u200b\u4e2a\u200b\u53f0\u9636\u200b\u3002\u200b\u4f60\u200b\u6709\u200b\u591a\u5c11\u200b\u79cd\u200b\u4e0d\u540c\u200b\u7684\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u722c\u200b\u5230\u200b\u697c\u9876\u200b\u5462\u200b\uff1f
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u7ed9\u5b9a\u200b n \u200b\u662f\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a 2\n\u200b\u8f93\u51fa\u200b\uff1a 2\n\u200b\u89e3\u91ca\u200b\uff1a \u200b\u6709\u200b\u4e24\u79cd\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u722c\u200b\u5230\u200b\u697c\u9876\u200b\u3002\n1. 1 \u200b\u9636\u200b + 1 \u200b\u9636\u200b\n2. 2 \u200b\u9636\u200b\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1a 3\n\u200b\u8f93\u51fa\u200b\uff1a 3\n\u200b\u89e3\u91ca\u200b\uff1a \u200b\u6709\u200b\u4e09\u79cd\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u722c\u200b\u5230\u200b\u697c\u9876\u200b\u3002\n1. 1 \u200b\u9636\u200b + 1 \u200b\u9636\u200b + 1 \u200b\u9636\u200b\n2. 1 \u200b\u9636\u200b + 2 \u200b\u9636\u200b\n3. 2 \u200b\u9636\u200b + 1 \u200b\u9636\u200b\n
Reference
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/70/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u5b58\u50a8\u200b\u4e34\u65f6\u200b\u7ed3\u679c\u200b\uff0c\u200b\u9012\u5f52\u8ba1\u7b97\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int climbStairs_cache(int n, int **cache)\n{\n if (n <= 2)\n return n;\n if (*cache == NULL)\n *cache = memset(malloc(sizeof(int) * n), 0, sizeof(int) * n);\n if (!(*cache)[n - 1])\n (*cache)[n - 1] = climbStairs_cache(n - 1, cache) + climbStairs_cache(n - 2, cache);\n return (*cache)[n - 1];\n}\n\nint climbStairs(int n){\n int *cache = NULL;\n return climbStairs_cache(n, &cache);\n}\n
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/73/","title":"73. \u200b\u77e9\u9635\u200b\u7f6e\u200b\u96f6","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/73/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u00a0m x n
\u200b\u7684\u200b\u77e9\u9635\u200b\uff0c\u200b\u5982\u679c\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u4e3a\u200b 0
\uff0c\u200b\u5219\u200b\u5c06\u200b\u5176\u200b\u6240\u5728\u200b\u884c\u548c\u5217\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u90fd\u200b\u8bbe\u4e3a\u200b 0
\u3002\u200b\u8bf7\u200b\u4f7f\u7528\u200b \u200b\u539f\u5730\u200b \u200b\u7b97\u6cd5\u200b\u3002
\u200b\u8fdb\u9636\u200b\uff1a
- \u200b\u4e00\u4e2a\u200b\u76f4\u89c2\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\u662f\u200b\u4f7f\u7528\u200b \u00a0\\(O(mn)\\)\u00a0\u200b\u7684\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4f46\u200b\u8fd9\u200b\u5e76\u200b\u4e0d\u662f\u200b\u4e00\u4e2a\u200b\u597d\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\u3002
- \u200b\u4e00\u4e2a\u200b\u7b80\u5355\u200b\u7684\u200b\u6539\u8fdb\u200b\u65b9\u6848\u200b\u662f\u200b\u4f7f\u7528\u200b \\(O(m\u00a0+\u00a0n)\\) \u200b\u7684\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4f46\u200b\u8fd9\u200b\u4ecd\u7136\u200b\u4e0d\u662f\u200b\u6700\u597d\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\u3002
- \u200b\u4f60\u200b\u80fd\u200b\u60f3\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u4ec5\u200b\u4f7f\u7528\u200b\u5e38\u91cf\u200b\u7a7a\u95f4\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\u5417\u200b\uff1f
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1amatrix = [[1,1,1],[1,0,1],[1,1,1]]\n\u200b\u8f93\u51fa\u200b\uff1a[[1,0,1],[0,0,0],[1,0,1]]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1amatrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]\n\u200b\u8f93\u51fa\u200b\uff1a[[0,0,0,0],[0,4,5,0],[0,3,1,0]]\n
\u200b\u63d0\u793a\u200b\uff1a
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-2^31 <= matrix[i][j] <= 2^31 - 1
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/73/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\\(m\\)\u200b\u4e2a\u200b\u6807\u8bb0\u53d8\u91cf\u200b\u6807\u8bb0\u200b\u884c\u4e2d\u200b\u662f\u5426\u200b\u51fa\u73b0\u200b0\uff0c\u200b\u7528\u200b\\(n\\)\u200b\u4e2a\u200b\u6807\u8bb0\u53d8\u91cf\u200b\u6807\u8bb0\u200b\u5217\u4e2d\u200b\u662f\u5426\u200b\u51fa\u73b0\u200b0\u3002
void setZeroes(int** matrix, int matrixSize, int* matrixColSize){\n int *rows = memset(malloc(sizeof(int) * matrixSize), 0, sizeof(int) * matrixSize),\n *cols = memset(malloc(sizeof(int) * *matrixColSize), 0, sizeof(int) * *matrixColSize),\n i = 0, j = 0;\n for (i = 0; i < matrixSize; i++)\n {\n for (j = 0; j < matrixColSize[i]; j++)\n {\n if (matrix[i][j] == 0)\n {\n rows[i] = 1;\n cols[j] = 1;\n }\n }\n }\n for (i = 0; i < matrixSize; i++)\n for (j = 0; j < matrixColSize[i]; j++)\n if (rows[i] || cols[j])\n matrix[i][j] = 0;\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/74/","title":"74. \u200b\u641c\u7d22\u200b\u4e8c\u7ef4\u200b\u77e9\u9635","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/74/#_1","title":"\u9898\u76ee","text":"\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u9ad8\u6548\u200b\u7684\u200b\u7b97\u6cd5\u200b\u6765\u200b\u5224\u65ad\u200b\u00a0m x n
\u00a0\u200b\u77e9\u9635\u200b\u4e2d\u200b\uff0c\u200b\u662f\u5426\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u503c\u200b\u3002\u200b\u8be5\u200b\u77e9\u9635\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u7279\u6027\u200b\uff1a
- \u200b\u6bcf\u884c\u200b\u4e2d\u200b\u7684\u200b\u6574\u6570\u200b\u4ece\u5de6\u5230\u53f3\u200b\u6309\u200b\u5347\u5e8f\u200b\u6392\u5217\u200b\u3002
- \u200b\u6bcf\u884c\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6574\u6570\u200b\u5927\u4e8e\u200b\u524d\u200b\u4e00\u884c\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1amatrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1amatrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13\n\u200b\u8f93\u51fa\u200b\uff1afalse\n
\u200b\u63d0\u793a\u200b\uff1a
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-10^4 <= matrix[i][j], target <= 10^4
Reference
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/74/#_2","title":"\u9898\u89e3","text":"\u200b\u6839\u636e\u200b\u77e9\u9635\u200b\u7684\u200b\u7279\u6027\u200b\u53ef\u77e5\u200b\uff0c\u200b\u5047\u8bbe\u200b\u77e9\u9635\u200b\u4e3a\u200b\\(\\{a_{ij}\\}_{m\\times n}\\)\uff0c\u200b\u76ee\u6807\u503c\u200b\\(t\\)\u200b\u4f4d\u4e8e\u200b\u5750\u6807\u200b\\((i^*, j^*)\\)\u200b\u5904\u200b\uff0c\u200b\u6709\u200b\uff1a
- \u200b\u5bf9\u4e8e\u200b\u4efb\u4f55\u200b\\(i, j\\)\uff0c\u200b\u82e5\u200b\\(i < i^*\\)\uff0c\u200b\u5219\u200b\\(a_{ij} < t\\)\uff0c\u200b\u5f53\u200b\\(i = i^*\\)\u200b\u65f6\u200b\uff0c\u200b\u82e5\u200b\\(j < j^*\\)\uff0c\u200b\u5219\u200b\\(a_{ij} < t\\)
- \u200b\u5bf9\u4e8e\u200b\u4efb\u4f55\u200b\\(i, j\\)\uff0c\u200b\u82e5\u200b\\(i > i^*\\)\uff0c\u200b\u5219\u200b\\(a_{ij} > t\\)\uff0c\u200b\u5f53\u200b\\(i = i^*\\)\u200b\u65f6\u200b\uff0c\u200b\u82e5\u200b\\(j > j^*\\)\uff0c\u200b\u5219\u200b\\(a_{ij} < t\\)
\u200b\u5373\u200b\u76ee\u6807\u503c\u200b\u5c06\u200b\u77e9\u9635\u200b\u5206\u4e3a\u200b\u4e24\u200b\u90e8\u5206\u200b\uff1a\u200b\u53f3\u4fa7\u200b\u548c\u200b\u4e0b\u4fa7\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u5927\u4e8e\u200b\u7b49\u4e8e\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u5de6\u4fa7\u200b\u548c\u200b\u4e0a\u4fa7\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b\u76ee\u6807\u503c\u200b\u3002
\u200b\u4ece\u200b\u77e9\u5f62\u200b\u7684\u200b\u5de6\u4e0b\u89d2\u200b\u5f00\u59cb\u200b\uff1a
- \u200b\u82e5\u200b\u5f53\u524d\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u6570\u503c\u200b\u5c0f\u4e8e\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u8bf4\u660e\u200b\u76ee\u6807\u503c\u200b\u4f4d\u4e8e\u200b\u5f53\u524d\u200b\u884c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u5373\u53ef\u200b\u627e\u5230\u200b\u76ee\u6807\u503c\u200b
- \u200b\u82e5\u200b\u5f53\u524d\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u6570\u503c\u200b\u5927\u4e8e\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u8bf4\u660e\u200b\u76ee\u6807\u503c\u200b\u4e0d\u200b\u5728\u200b\u5f53\u524d\u200b\u884c\u200b\uff0c\u200b\u9700\u8981\u200b\u5411\u4e0a\u200b\u79fb\u52a8\u200b
\u200b\u91cd\u590d\u200b\u5982\u200b\u4e0a\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u76f4\u81f3\u200b\u627e\u5230\u200b\u76ee\u6807\u200b\u5143\u7d20\u200b\u3002
bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){\n int x = matrixSize - 1, y = 0;\n while (x >= 0 && y < *matrixColSize)\n {\n if (matrix[x][y] < target)\n y++;\n else if (matrix[x][y] > target)\n x--;\n else\n return true;\n }\n return false;\n}\n
\u200b\u4ee5\u4e0a\u200b\u7b97\u6cd5\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u8fdb\u884c\u200b\u4f18\u5316\u200b\u3002
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/75/","title":"75. \u200b\u989c\u8272\u200b\u5206\u7c7b","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6392\u5e8f","\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/75/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5305\u542b\u200b\u7ea2\u8272\u200b\u3001\u200b\u767d\u8272\u200b\u548c\u200b\u84dd\u8272\u200b\uff0c\u200b\u4e00\u5171\u200b\u00a0n
\u200b\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u6570\u7ec4\u200b\uff0c\u200b\u539f\u5730\u200b\u5bf9\u200b\u5b83\u4eec\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u76f8\u540c\u200b\u989c\u8272\u200b\u7684\u200b\u5143\u7d20\u200b\u76f8\u90bb\u200b\uff0c\u200b\u5e76\u200b\u6309\u7167\u200b\u7ea2\u8272\u200b\u3001\u200b\u767d\u8272\u200b\u3001\u200b\u84dd\u8272\u200b\u987a\u5e8f\u6392\u5217\u200b\u3002
\u200b\u6b64\u9898\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u4f7f\u7528\u200b\u6574\u6570\u200b 0
\u3001\u00a01
\u200b\u548c\u200b 2
\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u7ea2\u8272\u200b\u3001\u200b\u767d\u8272\u200b\u548c\u200b\u84dd\u8272\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [2,0,2,1,1,0]\n\u200b\u8f93\u51fa\u200b\uff1a[0,0,1,1,2,2]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [2,0,1]\n\u200b\u8f93\u51fa\u200b\uff1a[0,1,2]\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [0]\n\u200b\u8f93\u51fa\u200b\uff1a[0]\n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1]\n\u200b\u8f93\u51fa\u200b\uff1a[1]\n
\u200b\u63d0\u793a\u200b\uff1a
n == nums.length
1 <= n <= 300
nums[i]
\u200b\u4e3a\u200b 0
\u30011
\u200b\u6216\u200b 2
\u200b\u8fdb\u9636\u200b\uff1a
- \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u4f7f\u7528\u200b\u4ee3\u7801\u200b\u5e93\u4e2d\u200b\u7684\u200b\u6392\u5e8f\u200b\u51fd\u6570\u200b\u6765\u200b\u89e3\u51b3\u200b\u8fd9\u9053\u9898\u200b\u5417\u200b\uff1f
- \u200b\u4f60\u200b\u80fd\u200b\u60f3\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u4ec5\u200b\u4f7f\u7528\u200b\u5e38\u6570\u200b\u7a7a\u95f4\u200b\u7684\u200b\u4e00\u8d9f\u200b\u626b\u63cf\u200b\u7b97\u6cd5\u200b\u5417\u200b\uff1f
Reference
","tags":["\u6392\u5e8f","\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/75/#_2","title":"\u9898\u89e3","text":" - \u200b\u7edf\u8ba1\u200b\u6570\u7ec4\u200b\u4e2d\u200b
0
\u30011
\u200b\u548c\u200b2
\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\uff0c\u200b\u6309\u7167\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u91cd\u65b0\u200b\u751f\u6210\u200b\u6570\u7ec4\u200b\u3002 - \u200b\u4f7f\u7528\u200b\u5feb\u901f\u200b\u6392\u5e8f\u200b\u7684\u200b\u601d\u8def\u200b\uff0c\u200b\u82e5\u200b\u51fa\u73b0\u200b
0
\u200b\u5219\u200b\u79fb\u52a8\u200b\u5230\u200b\u6570\u7ec4\u200b\u5f00\u5934\u200b\uff0c\u200b\u82e5\u200b\u51fa\u73b0\u200b2
\u200b\u5219\u200b\u79fb\u52a8\u200b\u5230\u200b\u6570\u7ec4\u200b\u7ed3\u5c3e\u200b\u3002
void swap(int *a, int *b)\n{\n int temp = *a;\n *a = *b;\n *b = temp;\n}\nvoid sortColors(int* nums, int numsSize){\n int head = 0, tail = numsSize - 1, i = 0;\n for (i = 0; i <= tail && tail > head; i++)\n {\n if (nums[i] == 0)\n swap(nums + head++, nums + i);\n if (nums[i] == 2)\n swap(nums + tail--, nums + i--);\n }\n}\n
","tags":["\u6392\u5e8f","\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/779/","title":"779. \u200b\u7b2c\u200bK\u200b\u4e2a\u200b\u8bed\u6cd5\u200b\u7b26\u53f7","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u9012\u5f52"]},{"location":"coding/leetcode/779/#_1","title":"\u9898\u76ee","text":"\u200b\u5728\u200b\u7b2c\u4e00\u884c\u200b\u6211\u4eec\u200b\u5199\u200b\u4e0a\u200b\u4e00\u4e2a\u200b0
\u3002\u200b\u63a5\u4e0b\u6765\u200b\u7684\u200b\u6bcf\u200b\u4e00\u884c\u200b\uff0c\u200b\u5c06\u200b\u524d\u200b\u4e00\u884c\u200b\u4e2d\u200b\u7684\u200b0
\u200b\u66ff\u6362\u200b\u4e3a\u200b01
\uff0c1
\u200b\u66ff\u6362\u200b\u4e3a\u200b10
\u3002
\u200b\u7ed9\u5b9a\u200b\u884c\u200b\u6570\u200bN
\u200b\u548c\u200b\u5e8f\u6570\u200bK
\uff0c\u200b\u8fd4\u56de\u200b\u7b2c\u200bN
\u200b\u884c\u4e2d\u200b\u7b2c\u200bK
\u200b\u4e2a\u5b57\u7b26\u200b\u3002\uff08K
\u200b\u4ece\u200b 1 \u200b\u5f00\u59cb\u200b\uff09
\u200b\u4f8b\u5b50\u200b:
\u200b\u8f93\u5165\u200b: N = 1, K = 1\n\u200b\u8f93\u51fa\u200b: 0\n\n\u200b\u8f93\u5165\u200b: N = 2, K = 1\n\u200b\u8f93\u51fa\u200b: 0\n\n\u200b\u8f93\u5165\u200b: N = 2, K = 2\n\u200b\u8f93\u51fa\u200b: 1\n\n\u200b\u8f93\u5165\u200b: N = 4, K = 5\n\u200b\u8f93\u51fa\u200b: 1\n\n\u200b\u89e3\u91ca\u200b:\n\u200b\u7b2c\u4e00\u884c\u200b: 0\n\u200b\u7b2c\u4e8c\u884c\u200b: 01\n\u200b\u7b2c\u4e09\u884c\u200b: 0110\n\u200b\u7b2c\u56db\u884c\u200b: 01101001\n
\u200b\u6ce8\u610f\u200b\uff1a N
\u200b\u7684\u200b\u8303\u56f4\u200b[1, 30]
. K
\u200b\u7684\u200b\u8303\u56f4\u200b[1, 2^(N-1)]
.
Reference
","tags":["\u9012\u5f52"]},{"location":"coding/leetcode/779/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6ce8\u610f\u200b\u5230\u200b\u6bcf\u4e2a\u200b\u7ed3\u679c\u200b\u5b57\u7b26\u4e32\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b4\u200b\u4e2a\u200b\u7b49\u200b\u957f\u200b\u7684\u200b\u90e8\u5206\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7b2c\u200b1\u30014\u200b\u90e8\u5206\u200b\u76f8\u540c\u200b\uff0c2\u30013\u200b\u90e8\u5206\u200b\u76f8\u540c\u200b\uff0c\u200b\u4e24\u7ec4\u200b\u7684\u200b\u4e8c\u8fdb\u5236\u200b\u4e92\u8865\u200b\u3002\u200b\u540c\u65f6\u200b\uff0c\u200b\u4efb\u610f\u200b\u4e00\u884c\u200b\u4ee5\u4e2d\u70b9\u200b\u4e3a\u754c\u200b\uff0c\u200b\u5de6\u53f3\u200b\u4e24\u4fa7\u200b\u4e92\u8865\u200b\u3002\u200b\u56e0\u6b64\u200b\u53ea\u200b\u9700\u8981\u200b\u5728\u200b\u5de6\u4fa7\u200b\u8fdb\u884c\u200b\u67e5\u627e\u200b\uff0c\u200b\u53f3\u4fa7\u200b\u90e8\u5206\u200b\u53d6\u53cd\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int kthGrammar(int N, int K)\n{\n if (N == 1)\n return 0;\n int unit = 1 << (N - 2);\n return !(K <= unit) ^ kthGrammar(N - 1, ((K - 1) & (unit - 1)) + 1);\n}\n
","tags":["\u9012\u5f52"]},{"location":"coding/leetcode/78/","title":"78. \u200b\u5b50\u96c6","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u4f4d\u8fd0\u7b97","\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/78/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u00a0nums
\uff0c\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b \u200b\u4e92\u4e0d\u200b\u76f8\u540c\u200b \u3002\u200b\u8fd4\u56de\u200b\u8be5\u200b\u6570\u7ec4\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u5b50\u96c6\u200b\uff08\u200b\u5e42\u96c6\u200b\uff09\u3002
\u200b\u89e3\u96c6\u200b \u200b\u4e0d\u80fd\u200b \u200b\u5305\u542b\u200b\u91cd\u590d\u200b\u7684\u200b\u5b50\u96c6\u200b\u3002\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u6309\u200b \u200b\u4efb\u610f\u200b\u987a\u5e8f\u200b \u200b\u8fd4\u56de\u200b\u89e3\u96c6\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,3]\n\u200b\u8f93\u51fa\u200b\uff1a[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [0]\n\u200b\u8f93\u51fa\u200b\uff1a[[],[0]]\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 10
-10 <= nums[i] <= 10
nums
\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b \u200b\u4e92\u4e0d\u200b\u76f8\u540c\u200b
Reference
","tags":["\u4f4d\u8fd0\u7b97","\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/78/#_2","title":"\u9898\u89e3","text":"\u200b\u5df2\u77e5\u200b\u96c6\u5408\u200b\u4e2d\u200b\u4e0d\u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6574\u6570\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u200b\u4e00\u4f4d\u200b\u8868\u793a\u200b\u96c6\u5408\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u9009\u53d6\u200b\u72b6\u6001\u200b\u3002
/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\nint count1(int x)\n{\n int ret = 0;\n while (x)\n {\n ret += x & 1;\n x >>= 1;\n }\n return ret;\n}\nint** subsets(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){\n *returnSize = 1 << numsSize;\n *returnColumnSizes = (int *)memset(malloc(sizeof(int) * *returnSize), 0, sizeof(int) * *returnSize);\n int i = 0, j = 0, **ret = (int **)malloc(sizeof(int *) * *returnSize), pos;\n for (i = 0; i < *returnSize; i++)\n {\n (*returnColumnSizes)[i] = count1(i);\n ret[i] = (int *)malloc(sizeof(int) * (*returnColumnSizes)[i]);\n pos = 0;\n for (j = 0; j < numsSize; j++)\n if (i & (1 << j))\n ret[i][pos++] = nums[j];\n }\n return ret;\n}\n
","tags":["\u4f4d\u8fd0\u7b97","\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/781/","title":"781. \u200b\u68ee\u6797\u200b\u4e2d\u200b\u7684\u200b\u5154\u5b50","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/781/#_1","title":"\u9898\u76ee","text":"\u200b\u68ee\u6797\u200b\u4e2d\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5154\u5b50\u200b\u90fd\u200b\u6709\u200b\u989c\u8272\u200b\u3002\u200b\u5176\u4e2d\u200b\u4e00\u4e9b\u200b\u5154\u5b50\u200b\uff08\u200b\u53ef\u80fd\u200b\u662f\u200b\u5168\u90e8\u200b\uff09\u200b\u544a\u8bc9\u200b\u4f60\u200b\u8fd8\u6709\u200b\u591a\u5c11\u200b\u5176\u4ed6\u200b\u7684\u200b\u5154\u5b50\u200b\u548c\u200b\u81ea\u5df1\u200b\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u989c\u8272\u200b\u3002\u200b\u6211\u4eec\u200b\u5c06\u200b\u8fd9\u4e9b\u200b\u56de\u7b54\u200b\u653e\u5728\u200b\u00a0answers
\u00a0\u200b\u6570\u7ec4\u200b\u91cc\u200b\u3002
\u200b\u8fd4\u56de\u200b\u68ee\u6797\u200b\u4e2d\u200b\u5154\u5b50\u200b\u7684\u200b\u6700\u5c11\u200b\u6570\u91cf\u200b\u3002
\u200b\u793a\u4f8b\u200b:
\u200b\u8f93\u5165\u200b: answers = [1, 1, 2]\n\u200b\u8f93\u51fa\u200b: 5\n\u200b\u89e3\u91ca\u200b:\n\u200b\u4e24\u53ea\u200b\u56de\u7b54\u200b\u4e86\u200b \"1\" \u200b\u7684\u200b\u5154\u5b50\u200b\u53ef\u80fd\u200b\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u989c\u8272\u200b\uff0c\u200b\u8bbe\u200b\u4e3a\u200b\u7ea2\u8272\u200b\u3002\n\u200b\u4e4b\u540e\u200b\u56de\u7b54\u200b\u4e86\u200b \"2\" \u200b\u7684\u200b\u5154\u5b50\u200b\u4e0d\u4f1a\u200b\u662f\u200b\u7ea2\u8272\u200b\uff0c\u200b\u5426\u5219\u200b\u4ed6\u4eec\u200b\u7684\u200b\u56de\u7b54\u200b\u4f1a\u200b\u76f8\u4e92\u200b\u77db\u76fe\u200b\u3002\n\u200b\u8bbe\u200b\u56de\u7b54\u200b\u4e86\u200b \"2\" \u200b\u7684\u200b\u5154\u5b50\u200b\u4e3a\u200b\u84dd\u8272\u200b\u3002\n\u200b\u6b64\u5916\u200b\uff0c\u200b\u68ee\u6797\u200b\u4e2d\u200b\u8fd8\u200b\u5e94\u6709\u200b\u53e6\u5916\u200b 2 \u200b\u53ea\u200b\u84dd\u8272\u200b\u5154\u5b50\u200b\u7684\u200b\u56de\u7b54\u200b\u6ca1\u6709\u200b\u5305\u542b\u200b\u5728\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u3002\n\u200b\u56e0\u6b64\u200b\u68ee\u6797\u200b\u4e2d\u200b\u5154\u5b50\u200b\u7684\u200b\u6700\u5c11\u200b\u6570\u91cf\u200b\u662f\u200b 5: 3 \u200b\u53ea\u200b\u56de\u7b54\u200b\u7684\u200b\u548c\u200b 2 \u200b\u53ea\u200b\u6ca1\u6709\u200b\u56de\u7b54\u200b\u7684\u200b\u3002\n\n\u200b\u8f93\u5165\u200b: answers = [10, 10, 10]\n\u200b\u8f93\u51fa\u200b: 11\n\n\u200b\u8f93\u5165\u200b: answers = []\n\u200b\u8f93\u51fa\u200b: 0\n
\u200b\u8bf4\u660e\u200b:
answers
\u00a0\u200b\u7684\u200b\u957f\u5ea6\u200b\u6700\u5927\u200b\u4e3a\u200b1000
\u3002 answers[i]
\u00a0\u200b\u662f\u200b\u5728\u200b\u00a0[0, 999]
\u00a0\u200b\u8303\u56f4\u200b\u5185\u200b\u7684\u200b\u6574\u6570\u200b\u3002
Reference
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/781/#_2","title":"\u9898\u89e3","text":"\u200b\u5154\u5b50\u200b\u7684\u200b\u5206\u7c7b\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u60c5\u51b5\u200b\uff0c\u200b\u8bbe\u200b\u7b2c\u200b\\(i\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u7684\u200b\u62a5\u6570\u200b\u4e3a\u200b\\(a_i\\)\uff0c\u200b\u5219\u200b\uff1a
- \u200b\u82e5\u200b\\(a_i \\not = a_j\\)\uff0c\u200b\u5219\u200b\u7b2c\u200b\\(i\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u4e0e\u200b\u7b2c\u200b\\(j\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u5fc5\u7136\u200b\u4e0d\u200b\u5c5e\u4e8e\u200b\u4e00\u7c7b\u200b
- \u200b\u82e5\u200b\\(a_i = a_j\\)\uff0c\u200b\u5219\u200b\u7b2c\u200b\\(i\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u4e0e\u200b\u7b2c\u200b\\(j\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u53ef\u80fd\u200b\u5c5e\u4e8e\u200b\u4e00\u7c7b\u200b\uff0c
- \u200b\u7b2c\u200b\\(i\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u6240\u5c5e\u200b\u7684\u200b\u7c7b\u200b\u4e2d\u200b\u6700\u200b\u591a\u200b\u6709\u200b\\(a_i + 1\\)\u200b\u53ea\u200b\u5154\u5b50\u200b
\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5f97\u51fa\u200b\u7b97\u6cd5\u200b\uff1a\u200b\u7edf\u8ba1\u200b\u76f8\u540c\u200b\u6570\u5b57\u200b\\(a_i\\)\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b\\(b_j\\)\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u6570\u5b57\u200b\uff0c\u200b\u4e0e\u200b\u4e4b\u200b\u5bf9\u5e94\u200b\u7684\u200b\u6700\u5c11\u200b\u7684\u200b\u5154\u5b50\u200b\u6570\u91cf\u200b\u4e3a\u200b\\(b'_j\\)\uff0c\u200b\u5219\u200b\\(b'_j\\)\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\uff1a
- \\(b'_j = k \\times (a_i + 1), k\\in \\N\\)
- \\(b'_j \\geq b_j\\)
- \\(b'_j - (a_i + 1) < b_j\\)
\u200b\u5373\u200b\\(b'_j = \\left\\lceil\\frac{b_j}{a_i + 1}\\right\\rceil\\times (a_i + 1)\\)
int numRabbits(int* answers, int answersSize){\n int hash[1000] = {0}, i = 0, ret = 0;\n for (i = 0; i < answersSize; i++)\n hash[answers[i]]++;\n for (i = 0; i < 1000; i++)\n ret += (hash[i] + i) / (i + 1) * (i + 1);\n return ret;\n}\n
Python\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5185\u7f6e\u200b\u5e93\u200bcollections
\u200b\u4e2d\u200b\u7684\u200bCounter
\u200b\u7c7b\u200b\u7edf\u8ba1\u6570\u5b57\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\uff1a
import collections\n\nclass Solution:\n def numRabbits(self, answers: List[int]) -> int:\n return sum(map(\n lambda args: sum(args) // (args[0] + 1) * (args[0] + 1)\n collections.Counter(answers).items()\n ))\n
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/79/","title":"79. \u200b\u5355\u8bcd\u200b\u641c\u7d22","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/79/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u00a0m x n
\u200b\u4e8c\u7ef4\u200b\u5b57\u7b26\u200b\u7f51\u683c\u200b\u00a0board
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u5355\u8bcd\u200b\u00a0word
\u3002\u200b\u5982\u679c\u200b\u00a0word
\u200b\u5b58\u5728\u200b\u4e8e\u200b\u7f51\u683c\u200b\u4e2d\u200b\uff0c\u200b\u8fd4\u56de\u200b true
\uff1b\u200b\u5426\u5219\u200b\uff0c\u200b\u8fd4\u56de\u200b false
\u3002
\u200b\u5355\u8bcd\u200b\u5fc5\u987b\u200b\u6309\u7167\u200b\u5b57\u6bcd\u200b\u987a\u5e8f\u200b\uff0c\u200b\u901a\u8fc7\u200b\u76f8\u90bb\u200b\u7684\u200b\u5355\u5143\u683c\u200b\u5185\u200b\u7684\u200b\u5b57\u6bcd\u200b\u6784\u6210\u200b\uff0c\u200b\u5176\u4e2d\u200b\u201c\u200b\u76f8\u90bb\u200b\u201d\u200b\u5355\u5143\u683c\u200b\u662f\u200b\u90a3\u4e9b\u200b\u6c34\u5e73\u200b\u76f8\u90bb\u200b\u6216\u200b\u5782\u76f4\u200b\u76f8\u90bb\u200b\u7684\u200b\u5355\u5143\u683c\u200b\u3002\u200b\u540c\u4e00\u4e2a\u200b\u5355\u5143\u683c\u200b\u5185\u200b\u7684\u200b\u5b57\u6bcd\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u88ab\u200b\u91cd\u590d\u4f7f\u7528\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = [[\"A\",\"B\",\"C\",\"E\"],[\"S\",\"F\",\"C\",\"S\"],[\"A\",\"D\",\"E\",\"E\"]], word = \"ABCCED\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = [[\"A\",\"B\",\"C\",\"E\"],[\"S\",\"F\",\"C\",\"S\"],[\"A\",\"D\",\"E\",\"E\"]], word = \"SEE\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = [[\"A\",\"B\",\"C\",\"E\"],[\"S\",\"F\",\"C\",\"S\"],[\"A\",\"D\",\"E\",\"E\"]], word = \"ABCB\"\n\u200b\u8f93\u51fa\u200b\uff1afalse\n
\u200b\u63d0\u793a\u200b\uff1a
m == board.length
n = board[i].length
1 <= m, n <= 6
1 <= word.length <= 15
board
\u200b\u548c\u200b word
\u200b\u4ec5\u200b\u7531\u200b\u5927\u5c0f\u5199\u200b\u82f1\u6587\u5b57\u6bcd\u200b\u7ec4\u6210\u200b
\u200b\u8fdb\u9636\u200b\uff1a\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u641c\u7d22\u200b\u526a\u679d\u200b\u7684\u200b\u6280\u672f\u200b\u6765\u200b\u4f18\u5316\u200b\u89e3\u51b3\u65b9\u6848\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u5728\u200b board
\u200b\u66f4\u5927\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u53ef\u4ee5\u200b\u66f4\u200b\u5feb\u200b\u89e3\u51b3\u95ee\u9898\u200b\uff1f
Reference
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/79/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5728\u200b\u4e8c\u7ef4\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5bfb\u627e\u200b\u5355\u8bcd\u200b\u7b2c\u4e00\u4e2a\u200b\u5b57\u6bcd\u200b\u51fa\u73b0\u200b\u7684\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u51fa\u73b0\u200b\u4f4d\u7f6e\u200b\uff1a
- \u200b\u5c06\u200b\u5f53\u524d\u200b\u4f4d\u7f6e\u200b\u6807\u5fd7\u200b\u4e3a\u200b\u7ecf\u5386\u200b\u8fc7\u200b
- \u200b\u5bfb\u627e\u200b\u5f53\u524d\u200b\u4f4d\u7f6e\u200b\u9644\u8fd1\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u5355\u5143\u683c\u200b
- \u200b\u5355\u5143\u683c\u200b\u4e2d\u200b\u7684\u200b\u5b57\u6bcd\u200b\u7b49\u4e8e\u200b\u5355\u8bcd\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5b57\u6bcd\u200b
- \u200b\u5355\u5143\u683c\u200b\u672a\u200b\u88ab\u200b\u904d\u5386\u200b\u8fc7\u200b
- \u200b\u5982\u679c\u200b\u627e\u200b\u4e0d\u5230\u200b\u5355\u5143\u683c\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u4e8c\u7ef4\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u65e0\u6cd5\u200b\u627e\u5230\u200b\u76ee\u6807\u200b\u5355\u8bcd\u200b
- \u200b\u5982\u679c\u200b\u627e\u5230\u200b\u4e00\u4e2a\u200b\u6216\u200b\u591a\u4e2a\u200b\u5355\u5143\u683c\u200b\uff0c\u200b\u5219\u200b\u524d\u8fdb\u200b\u5230\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5355\u5143\u683c\u200b\u7ee7\u7eed\u200b\u8fdb\u884c\u200b\u5339\u914d\u200b
- \u200b\u5982\u679c\u200b\u5355\u8bcd\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5b57\u6bcd\u200b\u6210\u529f\u200b\u5339\u914d\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u5339\u914d\u200b\u6210\u529f\u200b
bool dfs(char **board, int boardSize, int* boardColSize, char *word, int posX, int posY, int **map)\n{\n if (*word == 0)\n return true;\n bool ret = false;\n if (posX > 0 && board[posX - 1][posY] == *word && map[posX - 1][posY] == 0)\n {\n map[posX - 1][posY] = 1;\n ret = ret || dfs(board, boardSize, boardColSize, word + 1, posX - 1, posY, map);\n map[posX - 1][posY] = 0;\n }\n if (posX < boardSize - 1 && board[posX + 1][posY] == *word && map[posX + 1][posY] == 0)\n {\n map[posX + 1][posY] = 1;\n ret = ret || dfs(board, boardSize, boardColSize, word + 1, posX + 1, posY, map);\n map[posX + 1][posY] = 0;\n }\n if (posY > 0 && board[posX][posY - 1] == *word && map[posX][posY - 1] == 0)\n {\n map[posX][posY - 1] = 1;\n ret = ret || dfs(board, boardSize, boardColSize, word + 1, posX, posY - 1, map);\n map[posX][posY - 1] = 0;\n }\n if (posY < boardColSize[0] - 1 && board[posX][posY + 1] == *word && map[posX][posY + 1] == 0)\n {\n map[posX][posY + 1] = 1;\n ret = ret || dfs(board, boardSize, boardColSize, word + 1, posX, posY + 1, map);\n map[posX][posY + 1] = 0;\n }\n return ret;\n}\nbool exist(char** board, int boardSize, int* boardColSize, char * word){\n bool ret = false;\n int i = 0, j = 0, **map = (int **)malloc(sizeof(int *) * boardSize);\n for (i = 0; i < boardSize; i++)\n map[i] = (int *)memset(malloc(sizeof(int) * boardColSize[i]), 0, sizeof(int) * boardColSize[i]);\n for (i = 0; i < boardSize && !ret; i++)\n {\n for (j = 0; j < boardColSize[0] && !ret; j++)\n {\n if (board[i][j] == *word)\n {\n map[i][j] = 1;\n ret = ret || dfs(board, boardSize, boardColSize, word + 1, i, j, map);\n map[i][j] = 0;\n }\n }\n }\n return ret;\n}\n
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/8/","title":"8. \u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u6574\u6570\u200b (atoi)","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/8/#_1","title":"\u9898\u76ee","text":"\u200b\u8bf7\u200b\u4f60\u200b\u6765\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200batoi
\u200b\u51fd\u6570\u200b\uff0c\u200b\u4f7f\u200b\u5176\u80fd\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u6210\u200b\u6574\u6570\u200b\u3002
\u200b\u9996\u5148\u200b\uff0c\u200b\u8be5\u200b\u51fd\u6570\u200b\u4f1a\u200b\u6839\u636e\u200b\u9700\u8981\u200b\u4e22\u5f03\u200b\u65e0\u7528\u200b\u7684\u200b\u5f00\u5934\u200b\u7a7a\u683c\u200b\u5b57\u7b26\u200b\uff0c\u200b\u76f4\u5230\u200b\u5bfb\u627e\u200b\u5230\u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u683c\u200b\u7684\u200b\u5b57\u7b26\u200b\u4e3a\u6b62\u200b\u3002\u200b\u63a5\u4e0b\u6765\u200b\u7684\u200b\u8f6c\u5316\u200b\u89c4\u5219\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u5982\u679c\u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u5b57\u7b26\u200b\u4e3a\u200b\u6b63\u200b\u6216\u8005\u200b\u8d1f\u53f7\u200b\u65f6\u200b\uff0c\u200b\u5219\u200b\u5c06\u200b\u8be5\u200b\u7b26\u53f7\u200b\u4e0e\u200b\u4e4b\u200b\u540e\u9762\u200b\u5c3d\u53ef\u80fd\u200b\u591a\u200b\u7684\u200b\u8fde\u7eed\u200b\u6570\u5b57\u200b\u5b57\u7b26\u200b\u7ec4\u5408\u200b\u8d77\u6765\u200b\uff0c\u200b\u5f62\u6210\u200b\u4e00\u4e2a\u200b\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\u3002
- \u200b\u5047\u5982\u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u5b57\u7b26\u200b\u662f\u200b\u6570\u5b57\u200b\uff0c\u200b\u5219\u200b\u76f4\u63a5\u200b\u5c06\u200b\u5176\u200b\u4e0e\u200b\u4e4b\u540e\u200b\u8fde\u7eed\u200b\u7684\u200b\u6570\u5b57\u200b\u5b57\u7b26\u200b\u7ec4\u5408\u200b\u8d77\u6765\u200b\uff0c\u200b\u5f62\u6210\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u3002
- \u200b\u8be5\u200b\u5b57\u7b26\u4e32\u200b\u5728\u200b\u6709\u6548\u200b\u7684\u200b\u6574\u6570\u200b\u90e8\u5206\u200b\u4e4b\u540e\u200b\u4e5f\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u5b58\u5728\u200b\u591a\u4f59\u200b\u7684\u200b\u5b57\u7b26\u200b\uff0c\u200b\u90a3\u4e48\u200b\u8fd9\u4e9b\u200b\u5b57\u7b26\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u5ffd\u7565\u200b\uff0c\u200b\u5b83\u4eec\u200b\u5bf9\u200b\u51fd\u6570\u200b\u4e0d\u200b\u5e94\u8be5\u200b\u9020\u6210\u200b\u5f71\u54cd\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u5047\u5982\u200b\u8be5\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u683c\u200b\u5b57\u7b26\u200b\u4e0d\u662f\u200b\u4e00\u4e2a\u200b\u6709\u6548\u200b\u6574\u6570\u200b\u5b57\u7b26\u200b\u3001\u200b\u5b57\u7b26\u4e32\u200b\u4e3a\u7a7a\u200b\u6216\u200b\u5b57\u7b26\u4e32\u200b\u4ec5\u200b\u5305\u542b\u200b\u7a7a\u767d\u200b\u5b57\u7b26\u200b\u65f6\u200b\uff0c\u200b\u5219\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u4e0d\u200b\u9700\u8981\u200b\u8fdb\u884c\u200b\u8f6c\u6362\u200b\uff0c\u200b\u5373\u200b\u65e0\u6cd5\u200b\u8fdb\u884c\u200b\u6709\u6548\u200b\u8f6c\u6362\u200b\u3002
\u200b\u5728\u200b\u4efb\u4f55\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u82e5\u200b\u51fd\u6570\u200b\u4e0d\u80fd\u200b\u8fdb\u884c\u200b\u6709\u6548\u200b\u7684\u200b\u8f6c\u6362\u200b\u65f6\u200b\uff0c\u200b\u8bf7\u200b\u8fd4\u56de\u200b 0 \u3002
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u672c\u9898\u200b\u4e2d\u200b\u7684\u200b\u7a7a\u767d\u200b\u5b57\u7b26\u200b\u53ea\u200b\u5305\u62ec\u200b\u7a7a\u683c\u200b\u5b57\u7b26\u200b
' '
\u3002 - \u200b\u5047\u8bbe\u200b\u6211\u4eec\u200b\u7684\u200b\u73af\u5883\u200b\u53ea\u80fd\u200b\u5b58\u50a8\u200b 32 \u200b\u4f4d\u200b\u5927\u5c0f\u200b\u7684\u200b\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5176\u200b\u6570\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\([\u22122^{31},\u00a0 2^{31}\u00a0\u2212 1]\\)\u3002\u200b\u5982\u679c\u200b\u6570\u503c\u200b\u8d85\u8fc7\u200b\u8fd9\u4e2a\u200b\u8303\u56f4\u200b\uff0c\u200b\u8bf7\u200b\u8fd4\u56de\u200b
INT_MAX
(\\(2^{31}\u00a0\u2212 1\\))\u200b\u6216\u200bINT_MIN
(\\(\u22122^{31}\\)) \u3002 \u00a0
\u200b\u793a\u4f8b\u200b\u00a01:
\u200b\u8f93\u5165\u200b: \"42\"\n\u200b\u8f93\u51fa\u200b: 42\n
\u200b\u793a\u4f8b\u200b\u00a02:
\u200b\u8f93\u5165\u200b: \" -42\"\n\u200b\u8f93\u51fa\u200b: -42\n\u200b\u89e3\u91ca\u200b: \u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u767d\u200b\u5b57\u7b26\u200b\u4e3a\u200b '-', \u200b\u5b83\u200b\u662f\u200b\u4e00\u4e2a\u200b\u8d1f\u53f7\u200b\u3002\n\u00a0 \u200b\u6211\u4eec\u200b\u5c3d\u53ef\u80fd\u200b\u5c06\u200b\u8d1f\u53f7\u200b\u4e0e\u200b\u540e\u9762\u200b\u6240\u6709\u200b\u8fde\u7eed\u200b\u51fa\u73b0\u200b\u7684\u200b\u6570\u5b57\u200b\u7ec4\u5408\u200b\u8d77\u6765\u200b\uff0c\u200b\u6700\u540e\u200b\u5f97\u5230\u200b -42 \u3002\n
\u200b\u793a\u4f8b\u200b\u00a03:
\u200b\u8f93\u5165\u200b: \"4193 with words\"\n\u200b\u8f93\u51fa\u200b: 4193\n\u200b\u89e3\u91ca\u200b: \u200b\u8f6c\u6362\u200b\u622a\u6b62\u200b\u4e8e\u200b\u6570\u5b57\u200b '3' \uff0c\u200b\u56e0\u4e3a\u200b\u5b83\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u4e0d\u200b\u4e3a\u200b\u6570\u5b57\u200b\u3002\n
\u200b\u793a\u4f8b\u200b\u00a04:
\u200b\u8f93\u5165\u200b: \"words and 987\"\n\u200b\u8f93\u51fa\u200b: 0\n\u200b\u89e3\u91ca\u200b: \u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u5b57\u7b26\u200b\u662f\u200b 'w', \u200b\u4f46\u200b\u5b83\u200b\u4e0d\u662f\u200b\u6570\u5b57\u200b\u6216\u200b\u6b63\u200b\u3001\u200b\u8d1f\u53f7\u200b\u3002\n \u200b\u56e0\u6b64\u200b\u65e0\u6cd5\u200b\u6267\u884c\u200b\u6709\u6548\u200b\u7684\u200b\u8f6c\u6362\u200b\u3002\n
\u200b\u793a\u4f8b\u200b\u00a05:
\u200b\u8f93\u5165\u200b: \"-91283472332\"\n\u200b\u8f93\u51fa\u200b: -2147483648\n\u200b\u89e3\u91ca\u200b: \u200b\u6570\u5b57\u200b \"-91283472332\" \u200b\u8d85\u8fc7\u200b 32 \u200b\u4f4d\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\u8303\u56f4\u200b\u3002 \n\u00a0 \u200b\u56e0\u6b64\u200b\u8fd4\u56de\u200b INT_MIN (\u2212231) \u3002\n
Reference
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/8/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a
- \u200b\u6ce8\u610f\u200b\u4e00\u4e2a\u200b\u6709\u6548\u200b\u7684\u200b\u6570\u5b57\u200b\u5b57\u7b26\u4e32\u200b\u53ef\u4ee5\u200b\u4ee5\u200b
0-9
\u3001'-'
\u3001'+'
\u200b\u548c\u200b\u7a7a\u683c\u200b' '
\u200b\u5f00\u5934\u200b\u3002 - \u200b\u4e3a\u4e86\u200b\u907f\u514d\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u5e94\u5f53\u200b\u4f7f\u7528\u200b
long
\u200b\u7c7b\u578b\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int myAtoi(char * str){\n int flag = 0;\n char *cur = str;\n while (*cur && *cur == ' ')\n cur++;\n if (*cur == '-' || *cur == '+')\n flag = *(cur++) - '+';\n if (*cur < '0' || *cur > '9')\n return 0;\n long ret = 0;\n while(*cur >= '0' && *cur <= '9')\n {\n ret *= 10;\n ret += *cur - '0';\n cur++;\n if (ret >= -(long)INT_MIN || (ret == (long)INT_MAX && !flag))\n return flag ? INT_MIN : INT_MAX;\n }\n return flag ? -ret : ret;\n}\n
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/87/","title":"87. \u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/87/#_1","title":"\u9898\u76ee","text":"\u200b\u4f7f\u7528\u200b\u4e0b\u9762\u200b\u63cf\u8ff0\u200b\u7684\u200b\u7b97\u6cd5\u200b\u53ef\u4ee5\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b s
\u200b\u5f97\u5230\u200b\u5b57\u7b26\u4e32\u200b t
\uff1a
- \u200b\u5982\u679c\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e3a\u200b 1 \uff0c\u200b\u7b97\u6cd5\u200b\u505c\u6b62\u200b
- \u200b\u5982\u679c\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u957f\u5ea6\u200b > 1 \uff0c\u200b\u6267\u884c\u200b\u4e0b\u8ff0\u200b\u6b65\u9aa4\u200b\uff1a
- \u200b\u5728\u200b\u4e00\u4e2a\u200b\u968f\u673a\u200b\u4e0b\u6807\u200b\u5904\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u5206\u5272\u200b\u6210\u200b\u4e24\u4e2a\u200b\u975e\u7a7a\u200b\u7684\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u3002\u200b\u5373\u200b\uff0c\u200b\u5982\u679c\u200b\u5df2\u77e5\u200b\u5b57\u7b26\u4e32\u200b
s
\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5176\u200b\u5206\u6210\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b x
\u200b\u548c\u200b y
\uff0c\u200b\u4e14\u200b\u6ee1\u8db3\u200b s = x + y
\u3002 - \u200b\u968f\u673a\u200b \u200b\u51b3\u5b9a\u200b\u662f\u200b\u8981\u200b\u300c\u200b\u4ea4\u6362\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u300d\u200b\u8fd8\u662f\u200b\u8981\u200b\u300c\u200b\u4fdd\u6301\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u987a\u5e8f\u200b\u4e0d\u53d8\u200b\u300d\u3002\u200b\u5373\u200b\uff0c\u200b\u5728\u200b\u6267\u884c\u200b\u8fd9\u4e00\u200b\u6b65\u9aa4\u200b\u4e4b\u540e\u200b\uff0c
s
\u200b\u53ef\u80fd\u200b\u662f\u200b s = x + y
\u200b\u6216\u8005\u200b s = y + x
\u3002 - \u200b\u5728\u200b
x
\u200b\u548c\u200b y
\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u4e0a\u200b\u7ee7\u7eed\u200b\u4ece\u200b\u6b65\u9aa4\u200b 1 \u200b\u5f00\u59cb\u200b\u9012\u5f52\u200b\u6267\u884c\u200b\u6b64\u200b\u7b97\u6cd5\u200b\u3002
\u200b\u7ed9\u200b\u4f60\u200b\u4e24\u4e2a\u200b \u200b\u957f\u5ea6\u200b\u76f8\u7b49\u200b \u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b s1
\u200b\u548c\u200b\u00a0s2
\uff0c\u200b\u5224\u65ad\u200b\u00a0s2
\u00a0\u200b\u662f\u5426\u662f\u200b\u00a0s1
\u00a0\u200b\u7684\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\u3002\u200b\u5982\u679c\u200b\u662f\u200b\uff0c\u200b\u8fd4\u56de\u200b true
\uff1b\u200b\u5426\u5219\u200b\uff0c\u200b\u8fd4\u56de\u200b false
\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1as1 = \"great\", s2 = \"rgeat\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n\u200b\u89e3\u91ca\u200b\uff1as1 \u200b\u4e0a\u200b\u53ef\u80fd\u200b\u53d1\u751f\u200b\u7684\u200b\u4e00\u79cd\u200b\u60c5\u5f62\u200b\u662f\u200b\uff1a\n\"great\" --> \"gr/eat\" // \u200b\u5728\u200b\u4e00\u4e2a\u200b\u968f\u673a\u200b\u4e0b\u6807\u200b\u5904\u200b\u5206\u5272\u200b\u5f97\u5230\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\n\"gr/eat\" --> \"gr/eat\" // \u200b\u968f\u673a\u200b\u51b3\u5b9a\u200b\uff1a\u300c\u200b\u4fdd\u6301\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u987a\u5e8f\u200b\u4e0d\u53d8\u200b\u300d\n\"gr/eat\" --> \"g/r / e/at\" // \u200b\u5728\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u4e0a\u200b\u9012\u5f52\u200b\u6267\u884c\u200b\u6b64\u200b\u7b97\u6cd5\u200b\u3002\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u5206\u522b\u200b\u5728\u200b\u968f\u673a\u200b\u4e0b\u6807\u200b\u5904\u200b\u8fdb\u884c\u200b\u4e00\u8f6e\u200b\u5206\u5272\u200b\n\"g/r / e/at\" --> \"r/g / e/at\" // \u200b\u968f\u673a\u200b\u51b3\u5b9a\u200b\uff1a\u200b\u7b2c\u4e00\u7ec4\u200b\u300c\u200b\u4ea4\u6362\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u300d\uff0c\u200b\u7b2c\u4e8c\u7ec4\u200b\u300c\u200b\u4fdd\u6301\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u987a\u5e8f\u200b\u4e0d\u53d8\u200b\u300d\n\"r/g / e/at\" --> \"r/g / e/ a/t\" // \u200b\u7ee7\u7eed\u200b\u9012\u5f52\u200b\u6267\u884c\u200b\u6b64\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5c06\u200b \"at\" \u200b\u5206\u5272\u200b\u5f97\u5230\u200b \"a/t\"\n\"r/g / e/ a/t\" --> \"r/g / e/ a/t\" // \u200b\u968f\u673a\u200b\u51b3\u5b9a\u200b\uff1a\u300c\u200b\u4fdd\u6301\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u987a\u5e8f\u200b\u4e0d\u53d8\u200b\u300d\n\u200b\u7b97\u6cd5\u200b\u7ec8\u6b62\u200b\uff0c\u200b\u7ed3\u679c\u200b\u5b57\u7b26\u4e32\u200b\u548c\u200b s2 \u200b\u76f8\u540c\u200b\uff0c\u200b\u90fd\u200b\u662f\u200b \"rgeat\"\n\u200b\u8fd9\u662f\u200b\u4e00\u79cd\u200b\u80fd\u591f\u200b\u6270\u4e71\u200b s1 \u200b\u5f97\u5230\u200b s2 \u200b\u7684\u200b\u60c5\u5f62\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8ba4\u4e3a\u200b s2 \u200b\u662f\u200b s1 \u200b\u7684\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u8fd4\u56de\u200b true\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1as1 = \"abcde\", s2 = \"caebd\"\n\u200b\u8f93\u51fa\u200b\uff1afalse\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1as1 = \"a\", s2 = \"a\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u63d0\u793a\u200b\uff1a
s1.length == s2.length
1 <= s1.length <= 30
s1
\u200b\u548c\u200b s2
\u200b\u7531\u200b\u5c0f\u5199\u200b\u82f1\u6587\u5b57\u6bcd\u200b\u7ec4\u6210\u200b
Reference
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/87/#_2","title":"\u9898\u89e3","text":"\u200b\u8003\u8651\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\\(s_1, s_2\\)\uff0c\u200b\u51fd\u6570\u200b\\(f(x, y)\\)\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
\\[ f(x, y) = \\left\\{ \\begin{aligned} & T & y\\mathrm{\u200b\u662f\u200b}x\\mathrm{\u200b\u7684\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b} \\\\ & F & y\\mathrm{\u200b\u4e0d\u662f\u200b}x\\mathrm{\u200b\u7684\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b} \\end{aligned} \\right . \\] \u200b\u5219\u200b\u5bf9\u4e8e\u200b\u51fd\u6570\u200b\\(f(x, y)\\)\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \\(f(s_1, s_2) = f(s_2, s_1)\\)
- \\(f(s_1, s_1) = T\\)
- \\(f(s_1, s_2) \\land f(s_2, s_3)\\rightarrow f(s_1, s_3)\\)
\u200b\u5373\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\u5173\u7cfb\u200b\u662f\u200b\u7b49\u4ef7\u5173\u7cfb\u200b\u3002
\u200b\u5b9a\u4e49\u200b\u53e6\u200b\u4e00\u79cd\u200b\u7b49\u4ef7\u5173\u7cfb\u200b\\(g(x, y)\\)\uff1a
\\[ g(x, y) = \\left\\{ \\begin{aligned} & T & x, y \\mathrm{\u200b\u5404\u200b\u5b57\u6bcd\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u76f8\u540c\u200b} \\\\ & F & x, y \\mathrm{\u200b\u5404\u200b\u5b57\u6bcd\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u4e0d\u540c\u200b} \\end{aligned} \\right . \\] \u200b\u6839\u636e\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\u64cd\u4f5c\u200b \u200b\u4e0d\u4f1a\u200b \u200b\u6539\u53d8\u200b
- \u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u957f\u5ea6\u200b
- \u200b\u5b57\u7b26\u4e32\u200b\u5185\u200b\u5404\u200b\u5b57\u6bcd\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b
\u200b\u5982\u679c\u200b\\(s_1, s_2\\)\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e0d\u200b\u5339\u914d\u200b\u6216\u200b\u5b57\u6bcd\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u4e0d\u200b\u5339\u914d\u200b\uff0c\\(f(s_1, s_2)\\)\u200b\u5373\u53ef\u200b\u63d0\u524d\u200b\u8fd4\u56de\u200b\\(F\\)\u3002
\u200b\u8003\u8651\u200b\u5206\u5272\u200b\u540e\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u5c06\u200b\\(s_1\\)\u200b\u5728\u200b\u4e0b\u6807\u200b\\(i\\)\u200b\u4e0e\u200b\u4e0b\u6807\u200b\\(i + 1\\)\u200b\u5904\u200b\u5206\u5272\u200b\u5f97\u5230\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u79f0\u4e3a\u200b \\(s_{1, i}, s'_{1, i}\\)\uff0c\\(s_{1, i}\\)\u200b\u4f4d\u4e8e\u200b\u5de6\u4fa7\u200b\uff0c\\(s'_{1, i}\\)\u200b\u4f4d\u4e8e\u200b\u53f3\u4fa7\u200b\u3002\u200b\u5bf9\u4e8e\u200b\\(s_2\\)\uff0c\u200b\u6709\u200b\u540c\u6837\u200b\u7684\u200b\u5206\u5272\u200b \u200b\u65b9\u6cd5\u200b\u5f97\u5230\u200b\\(s_{2, i}, s'_{2, i}\\)\u3002\u200b\u8bbe\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(s\\)\uff0c\u200b\u4ee4\u200b\\(-i\\)\u200b\u4e3a\u200b\u4ece\u200b\u5b57\u7b26\u4e32\u200b\u53f3\u4fa7\u200b\u5f00\u59cb\u200b\u7684\u200b\u4e0b\u6807\u200b\\(i\\)\u3002
\u200b\u6839\u636e\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u82e5\u4efb\u200b\u4e00\u7ec4\u200b\u5206\u5272\u200b\u540e\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u6ee1\u8db3\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5173\u7cfb\u200b\uff0c\u200b\u5219\u200b\u539f\u6765\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u6ee1\u8db3\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5173\u7cfb\u200b \uff0c\u200b\u5e76\u4e14\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5173\u7cfb\u200b\u4e0e\u200b\u539f\u200b\u5b57\u7b26\u4e32\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5173\u7cfb\u200b\u65e0\u5173\u200b\uff0c\u200b\u4e0d\u4f1a\u200b\u76f8\u4e92\u5f71\u54cd\u200b\u3002\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u91c7\u7528\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\uff0c\u200b\u5c06\u200b\u539f\u200b \u200b\u95ee\u9898\u200b\u5206\u5272\u200b\u4e3a\u200b\u4e00\u7cfb\u5217\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5b50\u200b\u95ee\u9898\u200b\u3002
\u200b\u7531\u4e8e\u200b\\(f(s_1, s_2)\\)\u200b\u5b58\u5728\u200b\u5bf9\u79f0\u6027\u200b\uff0c\u200b\u4e0d\u59a8\u200b\u56fa\u5b9a\u200b\\(s_1\\)\u200b\u7684\u200b\u5206\u5272\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u8003\u8651\u200b\\(s_2\\)\u200b\u7684\u200b\u5206\u5272\u200b\u65b9\u5f0f\u200b\u3002\\(s_2\\)\u200b\u6709\u200b\u4e24\u79cd\u200b\u5206\u5272\u200b \u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5373\u200b\u201c\u200b\u4fdd\u6301\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u987a\u5e8f\u200b\u4e0d\u53d8\u200b\u201d\u200b\u6216\u200b\u201c\u200b\u4ea4\u6362\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u201d\u3002\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\u5982\u4e0b\u200b\u60c5\u51b5\u200b\uff1a
- \\(s_{1, i}\\)\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\\(s_{2, i}\\)\uff0c\\(s'_{1, i}\\)\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\\(s'_{2, i}\\)\u3002
- \\(s_{1, i}\\)\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\\(s'_{2, -i}\\)\uff0c\\(s'_{1, i}\\)\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\\(s_{2, -i}\\)\u3002
\u200b\u5219\u200b\\(f(s_1, s_2)\\)\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u65b9\u5f0f\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u8bbe\u200b\\(\\mathrm{len}(s_1) = \\mathrm{len}(s_2) = s\\)\u3002
\\[ f(s_1, s_2) = \\left\\{ \\begin{aligned} & F & \\lnot g(s_1, s_2) \\\\ & T & s\\leq 3 \\land g(s_1, s_2) \\\\ & \\left(\\bigvee_{i} f(s_{1, i}, s_{2, i})\\land f(s'_{1, i}, s'_{2, i})\\right) \\lor \\left(\\bigvee_{i} f(s_{1, i}, s'_{2, -i})\\land f(s'_{1, i}, s_{2, -i})\\right) & s > 3 \\land g(s_1, s_2)\\\\ \\end{aligned} \\right . \\] \u200b\u7531\u6b64\u200b\u5373\u53ef\u200b\u5f97\u51fa\u200b\u521d\u6b65\u200b\u7684\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u4f46\u200b\u591a\u6b21\u200b\u9012\u5f52\u200b\u4f1a\u200b\u4f7f\u5f97\u200b\u7b97\u6cd5\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e0a\u5347\u200b\uff0c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u6570\u7ec4\u200b\u4fdd\u5b58\u200b\u5b50\u200b\u95ee\u9898\u200b\u7684\u200b\u89e3\u200b\u3002\u200b\u5171\u6709\u200b \\(\\mathcal O(n^3)\\)\u200b\u89c4\u6a21\u200b\u7684\u200b\u5b50\u200b\u95ee\u9898\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u82b1\u8d39\u200b\\(\\mathcal O(n^3)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e0e\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u3002
inline int hash(char *s, int len)\n{\n int i, hashMap[26] = {0};\n unsigned long long ret = 0;\n for (i = 0; i < len; i++)\n hashMap[s[i] - 'a']++;\n for (i = 0; i < 26; i++)\n {\n ret *= 31;\n ret += hashMap[i] + 1;\n if (ret > INT_MAX)\n ret = ret & INT_MAX;\n }\n return (int)ret;\n}\n\nbool helper(char *s1, int offset1, char *s2, int offset2, int len, int ***dp)\n{\n if (dp[offset1][offset2][len - 1] >= 0)\n return dp[offset1][offset2][len - 1];\n else if (len < 4)\n {\n dp[offset1][offset2][len - 1] = hash(s1 + offset1, len) == hash(s2 + offset2, len);\n return dp[offset1][offset2][len - 1];\n }\n int flag = false, a, i;\n dp[offset1][offset2][len - 1] = 0;\n for (i = 1; i < len; i++)\n {\n a = hash(s1 + offset1, i);\n if (a == hash(s2 + offset2, i))\n flag = flag || (\n helper(s1, offset1, s2, offset2, i, dp) && \n helper(s1, offset1 + i, s2, offset2 + i, len - i, dp)\n );\n if (!flag && a == hash(s2 + offset2 + len - i, i))\n flag = flag || (\n helper(s1, offset1, s2, offset2 + len - i, i, dp) && \n helper(s1, offset1 + i, s2, offset2, len - i, dp)\n );\n if (flag)\n break;\n }\n dp[offset1][offset2][len - 1] = flag;\n return dp[offset1][offset2][len - 1];\n}\n\nbool isScramble(char * s1, char * s2){\n int len = strlen(s1), i, j,\n ***dp = (int ***)malloc(sizeof(int **) * len),\n **_dp = (int **)malloc(sizeof(int *) * len * len),\n *__dp = (int *)malloc(sizeof(int) * len * len * len);\n memset(__dp, 0xff, sizeof(int) * len * len * len);\n for (i = 0; i < len; i++)\n {\n dp[i] = _dp + i * len;\n for (j = 0; j < len; j++)\n dp[i][j] = __dp + i * len * len + j * len;\n }\n return helper(s1, 0, s2, 0, strlen(s1), dp);\n}\n
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/88/","title":"88. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u6570\u7ec4","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/88/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u00a0nums1
\u200b\u548c\u200b nums2
\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u5c06\u200b nums2
\u200b\u5408\u5e76\u200b\u5230\u200b\u00a0nums1
\u00a0\u200b\u4e2d\u200b\uff0c\u200b\u4f7f\u200b nums1
\u200b\u6210\u4e3a\u200b\u4e00\u4e2a\u200b\u6709\u5e8f\u200b\u6570\u7ec4\u200b\u3002
\u200b\u8bf4\u660e\u200b:
- \u200b\u521d\u59cb\u5316\u200b\u00a0
nums1
\u200b\u548c\u200b nums2
\u200b\u7684\u200b\u5143\u7d20\u200b\u6570\u91cf\u200b\u5206\u522b\u200b\u4e3a\u200b\u00a0m
\u200b\u548c\u200b n
\u3002 - \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u00a0
nums1
\u00a0\u200b\u6709\u200b\u8db3\u591f\u200b\u7684\u200b\u7a7a\u95f4\u200b\uff08\u200b\u7a7a\u95f4\u200b\u5927\u5c0f\u200b\u5927\u4e8e\u200b\u6216\u200b\u7b49\u4e8e\u200b\u00a0m + n
\uff09\u200b\u6765\u200b\u4fdd\u5b58\u200b nums2
\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b:\nnums1 = [1,2,3,0,0,0], m = 3\nnums2 = [2,5,6], n = 3\n\n\u200b\u8f93\u51fa\u200b:\u00a0[1,2,2,3,5,6]\n
Reference
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/88/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u76f4\u63a5\u200b\u5728\u200bnums1
\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u4e0a\u200b\u4ece\u200b\u540e\u200b\u5411\u524d\u200b\u539f\u4f4d\u200b\u5408\u5e76\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
#define MAX(x, y) (x > y ? x : y)\nvoid merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){\n int x = m - 1, y = n - 1;\n while(y >= 0 && x >= 0)\n {\n nums1[x + y + 1] = MAX(nums1[x], nums2[y]);\n if (nums1[x] > nums2[y])\n x--;\n else\n y--;\n }\n if (y >= 0)\n memcpy(nums1, nums2, sizeof(int) * (y + 1));\n}\n
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/9/","title":"9. \u200b\u56de\u6587\u200b\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/9/#_1","title":"\u9898\u76ee","text":"\u200b\u5224\u65ad\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u662f\u5426\u662f\u200b\u56de\u6587\u200b\u6570\u200b\u3002\u200b\u56de\u6587\u200b\u6570\u662f\u200b\u6307\u6b63\u200b\u5e8f\u200b\uff08\u200b\u4ece\u200b\u5de6\u5411\u53f3\u200b\uff09\u200b\u548c\u200b\u5012\u5e8f\u200b\uff08\u200b\u4ece\u53f3\u200b\u5411\u200b\u5de6\u200b\uff09\u200b\u8bfb\u200b\u90fd\u200b\u662f\u200b\u4e00\u6837\u200b\u7684\u200b\u6574\u6570\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: 121\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b: -121\n\u200b\u8f93\u51fa\u200b: false\n\u200b\u89e3\u91ca\u200b: \u200b\u4ece\u200b\u5de6\u5411\u53f3\u200b\u8bfb\u200b, \u200b\u4e3a\u200b -121 \u3002 \u200b\u4ece\u53f3\u200b\u5411\u200b\u5de6\u8bfb\u200b, \u200b\u4e3a\u200b 121- \u3002\u200b\u56e0\u6b64\u200b\u5b83\u200b\u4e0d\u662f\u200b\u4e00\u4e2a\u200b\u56de\u6587\u200b\u6570\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b: 10\n\u200b\u8f93\u51fa\u200b: false\n\u200b\u89e3\u91ca\u200b: \u200b\u4ece\u53f3\u200b\u5411\u200b\u5de6\u8bfb\u200b, \u200b\u4e3a\u200b 01 \u3002\u200b\u56e0\u6b64\u200b\u5b83\u200b\u4e0d\u662f\u200b\u4e00\u4e2a\u200b\u56de\u6587\u200b\u6570\u200b\u3002\n
\u200b\u8fdb\u9636\u200b\uff1a
\u200b\u4f60\u200b\u80fd\u200b\u4e0d\u200b\u5c06\u200b\u6574\u6570\u200b\u8f6c\u4e3a\u200b\u5b57\u7b26\u4e32\u200b\u6765\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\u5417\u200b\uff1f
Reference
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/9/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a
- \u200b\u5c0f\u4e8e\u200b0\u200b\u7684\u200b\u6570\u200b\u5fc5\u7136\u200b\u4e0d\u662f\u200b\u56de\u6587\u200b\u6570\u200b\uff1b
- \u200b\u5bf9\u4e8e\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\uff0c\u200b\u53ea\u200b\u9700\u8981\u200b\u5224\u65ad\u200b\u6309\u4f4d\u200b\u53cd\u8f6c\u200b\u540e\u200b\u7684\u200b\u6570\u503c\u200b\u4e0e\u200b\u539f\u200b\u6570\u503c\u200b\u662f\u5426\u200b\u76f8\u7b49\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
bool isPalindrome(int x){\n if (x < 0)\n return false;\n long transformed = 0, original = x;\n while (x)\n {\n transformed *= 10;\n transformed += x % 10;\n x /= 10;\n }\n return transformed == original;\n}\n
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/90/","title":"90. \u200b\u5b50\u96c6\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/90/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b nums
\uff0c\u200b\u5176\u4e2d\u200b\u53ef\u80fd\u200b\u5305\u542b\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8fd4\u56de\u200b\u8be5\u200b\u6570\u7ec4\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u5b50\u96c6\u200b\uff08\u200b\u5e42\u96c6\u200b\uff09\u3002
\u200b\u89e3\u96c6\u200b \u200b\u4e0d\u80fd\u200b \u200b\u5305\u542b\u200b\u91cd\u590d\u200b\u7684\u200b\u5b50\u96c6\u200b\u3002\u200b\u8fd4\u56de\u200b\u7684\u200b\u89e3\u200b\u96c6\u4e2d\u200b\uff0c\u200b\u5b50\u96c6\u200b\u53ef\u4ee5\u200b\u6309\u200b \u200b\u4efb\u610f\u200b\u987a\u5e8f\u200b \u200b\u6392\u5217\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,2]\n\u200b\u8f93\u51fa\u200b\uff1a[[],[1],[1,2],[1,2,2],[2],[2,2]]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [0]\n\u200b\u8f93\u51fa\u200b\uff1a[[],[0]]\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 10
-10 <= nums[i] <= 10
Reference
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/90/#_2","title":"\u9898\u89e3","text":"\u200b\u5148\u200b\u7edf\u8ba1\u200b\u96c6\u5408\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\uff0c\u200b\u518d\u200b\u6839\u636e\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u8fdb\u884c\u200b\u56de\u6eaf\u200b\uff0c\u200b\u6700\u540e\u200b\u91cd\u65b0\u200b\u751f\u6210\u200b\u6bcf\u4e2a\u200b\u96c6\u5408\u200b\u3002
/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\nint *convert(int *count, int countLen, int *returnSize)\n{\n int i = 0, j = 0, k = 0;\n *returnSize = 0;\n for (i = 0; i < countLen; i++)\n (*returnSize) += count[i];\n int *ret = (int *)malloc(sizeof(int) * *returnSize);\n for (i = 0; i < countLen; i++)\n for (j = 0; j < count[i]; j++)\n ret[k++] = i - 10;\n return ret;\n}\n\nvoid dfs(int **ret, int *retSize, int *count, int *current, int currentPos, int maxPos, int *number)\n{\n if (currentPos == maxPos)\n {\n ret[*number] = convert(current, maxPos, retSize + *number);\n (*number)++;\n }\n else\n {\n if (count[currentPos] == 0)\n dfs(ret, retSize, count, current, currentPos + 1, maxPos, number);\n else\n {\n int i = 0;\n for (i = 0; i <= count[currentPos]; i++)\n {\n current[currentPos] = i;\n dfs(ret, retSize, count, current, currentPos + 1, maxPos, number);\n current[currentPos] = 0;\n }\n }\n }\n}\n\nint** subsetsWithDup(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){\n int *count = (int *)malloc(sizeof(int) * 21), *buffer = (int *)malloc(sizeof(int) * 21),\n i = 0, **ret = NULL;\n memset(count, 0, sizeof(int) * 21);\n memset(buffer, 0, sizeof(int) * 21);\n *returnSize = 1;\n for (i = 0; i < numsSize; i++)\n count[nums[i] + 10]++;\n for (i = 0; i < 21; i++)\n *returnSize *= count[i] + 1;\n *returnColumnSizes = (int *)malloc(sizeof(int) * *returnSize);\n ret = (int **)malloc(sizeof(int *) * *returnSize);\n i = 0;\n dfs(ret, *returnColumnSizes, count, buffer, 0, 21, &i);\n return ret;\n}\n
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/917/","title":"917. \u200b\u4ec5\u4ec5\u200b\u53cd\u8f6c\u200b\u5b57\u6bcd","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/917/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u00a0S
\uff0c\u200b\u8fd4\u56de\u200b\u00a0\u201c\u200b\u53cd\u8f6c\u200b\u540e\u200b\u7684\u200b\u201d\u00a0\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u5176\u4e2d\u200b\u4e0d\u662f\u200b\u5b57\u6bcd\u200b\u7684\u200b\u5b57\u7b26\u200b\u90fd\u200b\u4fdd\u7559\u200b\u5728\u200b\u539f\u5730\u200b\uff0c\u200b\u800c\u200b\u6240\u6709\u200b\u5b57\u6bcd\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u53d1\u751f\u200b\u53cd\u8f6c\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a\"ab-cd\"\n\u200b\u8f93\u51fa\u200b\uff1a\"dc-ba\"\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1a\"a-bC-dEf-ghIj\"\n\u200b\u8f93\u51fa\u200b\uff1a\"j-Ih-gfE-dCba\"\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1a\"Test1ng-Leet=code-Q!\"\n\u200b\u8f93\u51fa\u200b\uff1a\"Qedo1ct-eeLg=ntse-T!\"\n
\u200b\u63d0\u793a\u200b\uff1a
S.length <= 100
33 <= S[i].ASCIIcode <= 122
S
\u200b\u4e2d\u200b\u4e0d\u200b\u5305\u542b\u200b\u00a0\\
or \"
Reference
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/917/#_2","title":"\u9898\u89e3","text":"\u200b\u548c\u200b\u53cd\u8f6c\u200b\u5b57\u7b26\u4e32\u200b\u4f7f\u7528\u200b\u76f8\u540c\u200b\u7684\u200b\u601d\u8def\u200b\uff0c\u200b\u53ea\u200b\u9700\u200b\u52a0\u4e0a\u200b\u5bf9\u200b\u5f53\u524d\u200b\u5b57\u7b26\u200b\u7684\u200b\u5224\u65ad\u200b\u5373\u53ef\u200b\u3002
bool isChar(char *s)\n{\n return (*s >= 'a' && *s <= 'z') || (*s >= 'A' && *s <= 'Z');\n}\nchar * reverseOnlyLetters(char * S) {\n int len = strlen(S);\n char *head = S, *tail = S + len - 1, temp;\n while (tail > head)\n {\n while (!isChar(head) && head < tail)\n head++;\n while (!isChar(tail) && head < tail)\n tail--;\n temp = *head;\n *head = *tail;\n *tail = temp;\n head++;\n tail--;\n }\n return S;\n}\n
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/92/","title":"92. \u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/92/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u5355\u94fe\u200b\u8868\u200b\u7684\u200b\u5934\u200b\u8282\u70b9\u200b\u00a0head
\u200b\u548c\u200b\u4e24\u4e2a\u200b\u6574\u6570\u200b\u00a0left
\u200b\u548c\u200b right
\uff0c\u200b\u5176\u4e2d\u200b\u00a0left <= right
\u3002\u200b\u8bf7\u200b\u4f60\u200b\u53cd\u8f6c\u200b\u4ece\u200b\u4f4d\u7f6e\u200b left
\u200b\u5230\u200b\u4f4d\u7f6e\u200b right
\u200b\u7684\u200b\u94fe\u8868\u200b\u8282\u70b9\u200b\uff0c\u200b\u8fd4\u56de\u200b \u200b\u53cd\u8f6c\u200b\u540e\u200b\u7684\u200b\u94fe\u8868\u200b \u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1,2,3,4,5], left = 2, right = 4\n\u200b\u8f93\u51fa\u200b\uff1a[1,4,3,2,5]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [5], left = 1, right = 1\n\u200b\u8f93\u51fa\u200b\uff1a[5]\n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u94fe\u8868\u200b\u4e2d\u200b\u8282\u70b9\u200b\u6570\u76ee\u200b\u4e3a\u200b
n
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n
Reference
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/92/#_2","title":"\u9898\u89e3","text":"\u200b\u5148\u200b\u8003\u8651\u200b\u53cd\u8f6c\u200b\u6574\u4e2a\u200b\u94fe\u8868\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e09\u200b\u6307\u9488\u200b\u6cd5\u5728\u200b\\(\\mathcal O(N)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u5185\u200b\u4f7f\u7528\u200b\\(\\mathcal O(1)\\)\u200b\u7684\u200b\u7a7a\u95f4\u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b
\u200b\u94fe\u8868\u200b\u53cd\u8f6c\u200b\u7684\u200b\u4e09\u200b\u6307\u9488\u200b\u6cd5\u200b\uff1a\u200b\u5b9a\u4e49\u200bcur1, cur2, cur3
\u200b\u4e09\u4e2a\u200b\u6307\u9488\u200b\uff0c\u200b\u5206\u522b\u200b\u6307\u5411\u200b\u94fe\u8868\u200b\u7684\u200b\u5934\u200b\u8282\u70b9\u200b\u3001\u200b\u7b2c\u4e8c\u4e2a\u200b\u8282\u70b9\u200b\u4e0e\u200b\u7b2c\u4e09\u4e2a\u200b\u8282\u70b9\u200b\u3002\u200b\u6307\u9488\u200bcur1, cur2
\u200b\u7528\u4e8e\u200b\u4ea4\u6362\u200b\u94fe\u8868\u200b\u8282\u70b9\u200b\u7684\u200b\u8fde\u63a5\u200b\u65b9\u5411\u200b\u3002\u200b\u7531\u4e8e\u200b\u4ea4\u6362\u200b\u8282\u70b9\u200b\u64cd\u4f5c\u200b\u7834\u574f\u200b\u4e86\u200b\u539f\u6709\u200b\u7684\u200b\u8fde\u63a5\u7ed3\u6784\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u4e00\u4e2a\u200b\u989d\u5916\u200b\u7684\u200b\u6307\u9488\u200bcur3
\u200b\u7528\u4e8e\u200b\u79fb\u52a8\u200b\u6307\u9488\u200b\u3002
\u200b\u4e09\u200b\u6307\u9488\u200b\u6cd5\u200b\u7684\u200b\u4e3b\u8981\u200b\u6d41\u7a0b\u200b\u5982\u4e0b\u200b\u56fe\u200b\uff1a
- \u200b\u521d\u59cb\u5316\u200b
cur1, cur2, cur3
\uff0c\u200b\u7f6e\u200bcur1->next
\u200b\u4e3a\u200bNULL
- \u200b\u4ee4\u200b
cur2->next = cur1
\uff0c\u200b\u5b8c\u6210\u200b\u4ea4\u6362\u200b\u64cd\u4f5c\u200b - \u200b\u4ee4\u200b
cur1 = cur2
- \u200b\u4ee4\u200b
cur2 = cur3
- \u200b\u5982\u679c\u200b
cur3
\u200b\u4e0d\u200b\u4e3a\u200bNULL
\uff0ccur3
\u200b\u5728\u200b\u94fe\u8868\u200b\u4e0a\u200b\u5411\u524d\u200b\u79fb\u52a8\u200b\uff0c\u200b\u7136\u540e\u200b\u8fd4\u56de\u200b2 - \u200b\u5982\u679c\u200b
cur3
\u200b\u4e3a\u200bNULL
\uff0c\u200b\u7ed3\u675f\u200b - \u200b\u8fd4\u56de\u200b
cur2
\u200b\u53cd\u8f6c\u200b\u7ed9\u5b9a\u200b\u8303\u56f4\u200b\u5185\u200b\u7684\u200b\u94fe\u8868\u200b\uff0c\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b\u5982\u4e0b\u200b\u60c5\u51b5\u200b\uff1a
- \u200b\u5982\u679c\u200b\u53cd\u8f6c\u200b\u533a\u95f4\u200b\u4ece\u200b\u7b2c\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u5f00\u59cb\u200b\uff0c\u200b\u94fe\u8868\u200b\u7684\u200b\u5934\u200b\u8282\u70b9\u200b\u4f1a\u200b\u6539\u53d8\u200b\uff0c\u200b\u5426\u5219\u200b\u4e0d\u200b\u6539\u53d8\u200b
- \u200b\u5982\u679c\u200b\u533a\u95f4\u200b\u957f\u5ea6\u200b\u4e3a\u200b1\uff0c\u200b\u5219\u200b\u65e0\u9700\u200b\u53cd\u8f6c\u200b
- \u200b\u53cd\u8f6c\u200b\u540e\u200b\u9700\u8981\u200b\u66f4\u65b0\u200b\u53cd\u8f6c\u200b\u533a\u95f4\u200b\u524d\u540e\u200b\u7684\u200b\u8282\u70b9\u200b\u8fde\u63a5\u200b\u5173\u7cfb\u200b
\u200b\u6574\u4f53\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode* reverseBetween(struct ListNode* head, int left, int right){\n if (left == right)\n return head;\n struct ListNode *cur = head, *prev = NULL;\n left--;\n right--;\n while (left)\n {\n left--;\n right--;\n prev = cur;\n cur = cur->next;\n }\n struct ListNode * cur2 = cur->next, *cur3 = cur2->next, *tail = cur;\n while (right)\n {\n cur2->next = cur;\n cur = cur2;\n cur2 = cur3;\n if (cur3)\n cur3 = cur3->next;\n else\n break;\n right--;\n }\n tail->next = cur2;\n if (prev)\n prev->next = cur;\n return prev ? head : cur;\n}\n
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/98/","title":"98. \u200b\u9a8c\u8bc1\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52"]},{"location":"coding/leetcode/98/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u4e8c\u53c9\u6811\u200b\uff0c\u200b\u5224\u65ad\u200b\u5176\u200b\u662f\u5426\u662f\u200b\u4e00\u4e2a\u200b\u6709\u6548\u200b\u7684\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b\u3002
\u200b\u5047\u8bbe\u200b\u4e00\u4e2a\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u7279\u5f81\u200b\uff1a
- \u200b\u8282\u70b9\u200b\u7684\u200b\u5de6\u5b50\u200b\u6811\u200b\u53ea\u200b\u5305\u542b\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u6570\u200b\u3002
- \u200b\u8282\u70b9\u200b\u7684\u200b\u53f3\u5b50\u200b\u6811\u200b\u53ea\u200b\u5305\u542b\u200b\u5927\u4e8e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u6570\u200b\u3002
- \u200b\u6240\u6709\u200b\u5de6\u5b50\u200b\u6811\u200b\u548c\u200b\u53f3\u5b50\u200b\u6811\u200b\u81ea\u8eab\u200b\u5fc5\u987b\u200b\u4e5f\u200b\u662f\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b:\n 2\n / \\\n 1 3\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b:\n 5\n / \\\n 1 4\n\u00a0 / \\\n\u00a0 3 6\n\u200b\u8f93\u51fa\u200b: false\n\u200b\u89e3\u91ca\u200b: \u200b\u8f93\u5165\u200b\u4e3a\u200b: [5,1,4,null,null,3,6]\u3002\n\u00a0 \u200b\u6839\u200b\u8282\u70b9\u200b\u7684\u200b\u503c\u200b\u4e3a\u200b 5 \uff0c\u200b\u4f46\u662f\u200b\u5176\u53f3\u5b50\u200b\u8282\u70b9\u200b\u503c\u4e3a\u200b 4 \u3002\n
Reference
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52"]},{"location":"coding/leetcode/98/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5c06\u200b\u4e8c\u53c9\u200b\u67e5\u627e\u200b\u6811\u4e2d\u5e8f\u200b\u5c55\u5f00\u200b\u4e3a\u200b\u94fe\u8868\u200b\uff0c\u200b\u5224\u65ad\u200b\u94fe\u8868\u200b\u662f\u5426\u662f\u200b\u6709\u5e8f\u200b\u7684\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for a binary tree node.\n * struct TreeNode {\n * int val;\n * struct TreeNode *left;\n * struct TreeNode *right;\n * };\n */\nstruct ListNode *insert(struct ListNode *List, int val)\n{\n struct ListNode *ret = malloc(sizeof(struct ListNode));\n ret->val = val;\n ret->next = List;\n return ret;\n}\nstruct ListNode *toList(struct TreeNode *root, struct ListNode *List)\n{\n if (root == NULL)\n return List;\n List = toList(root->right, List);\n List = insert(List, root->val);\n List = toList(root->left, List);\n return List;\n}\nbool isValidBST(struct TreeNode* root){\n if (root == NULL)\n return true;\n struct ListNode *rec = toList(root, NULL), *cur = rec;\n do\n {\n if (cur->next == NULL)\n break;\n if (cur->val >= cur->next->val)\n return false;\n cur = cur->next;\n }\n while (true);\n return true;\n}\n
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52"]},{"location":"coding/leetcode/tags/","title":"Leetcode \u200b\u9898\u76ee","text":"\u200b\u70b9\u51fb\u200b\u53f3\u4fa7\u200b\u76ee\u5f55\u200b\u53ef\u4ee5\u200b\u8df3\u8f6c\u200b\u5230\u200b\u5bf9\u5e94\u200b\u7684\u200b\u6807\u7b7e\u200b
"},{"location":"coding/leetcode/tags/#_1","title":"\u6570\u7ec4","text":"\u200b\u6570\u7ec4\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b31\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6570\u7ec4\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 1. \u200b\u4e24\u6570\u200b\u4e4b\u200b\u548c\u200b 26. \u200b\u5220\u9664\u200b\u6392\u5e8f\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u91cd\u590d\u200b\u9879\u200b 27. \u200b\u79fb\u9664\u200b\u5143\u7d20\u200b 35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b 42. \u200b\u63a5\u200b\u96e8\u6c34\u200b 48. \u200b\u65cb\u8f6c\u200b\u56fe\u50cf\u200b 53. \u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c\u200b 55. \u200b\u8df3\u8dc3\u200b\u6e38\u620f\u200b 56. \u200b\u5408\u5e76\u200b\u533a\u95f4\u200b 59. \u200b\u87ba\u65cb\u200b\u77e9\u9635\u200b II 62. \u200b\u4e0d\u540c\u200b\u8def\u5f84\u200b 64. \u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 66. \u200b\u52a0\u4e00\u200b 73. \u200b\u77e9\u9635\u200b\u7f6e\u200b\u96f6\u200b 74. \u200b\u641c\u7d22\u200b\u4e8c\u7ef4\u200b\u77e9\u9635\u200b 75. \u200b\u989c\u8272\u200b\u5206\u7c7b\u200b 78. \u200b\u5b50\u96c6\u200b 79. \u200b\u5355\u8bcd\u200b\u641c\u7d22\u200b 88. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u6570\u7ec4\u200b 90. \u200b\u5b50\u96c6\u200b II 118. \u200b\u6768\u8f89\u4e09\u89d2\u200b 119. \u200b\u6768\u8f89\u4e09\u89d2\u200b II 120. \u200b\u4e09\u89d2\u5f62\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 121. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b 122. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b II 189. \u200b\u65cb\u8f6c\u200b\u6570\u7ec4\u200b 217. \u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b 384. \u200b\u6253\u4e71\u200b\u6570\u7ec4\u200b 509. \u200b\u6590\u6ce2\u200b\u90a3\u200b\u5951\u6570\u200b 1011. \u200b\u5728\u200b D \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u5305\u88f9\u200b\u7684\u200b\u80fd\u529b\u200b 1300. \u200b\u8f6c\u53d8\u200b\u6570\u7ec4\u200b\u540e\u200b\u6700\u200b\u63a5\u8fd1\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u6570\u7ec4\u200b\u548c"},{"location":"coding/leetcode/tags/#_2","title":"\u5b57\u7b26\u4e32","text":"\u200b\u5b57\u7b26\u4e32\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b16\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u5b57\u7b26\u4e32\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b 8. \u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u6574\u6570\u200b (atoi) 13. \u200b\u7f57\u9a6c\u6570\u5b57\u200b\u8f6c\u200b\u6574\u6570\u200b 14. \u200b\u6700\u957f\u200b\u516c\u5171\u200b\u524d\u7f00\u200b 17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b 20. \u200b\u6709\u6548\u200b\u7684\u200b\u62ec\u53f7\u200b 22. \u200b\u62ec\u53f7\u200b\u751f\u6210\u200b 28. \u200b\u5b9e\u73b0\u200b strStr() 38. \u200b\u5916\u89c2\u200b\u6570\u5217\u200b 43. \u200b\u5b57\u7b26\u4e32\u200b\u76f8\u4e58\u200b 87. \u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b 115. \u200b\u4e0d\u540c\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b 125. \u200b\u9a8c\u8bc1\u200b\u56de\u6587\u200b\u4e32\u200b 344. \u200b\u53cd\u8f6c\u200b\u5b57\u7b26\u4e32\u200b 387. \u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u5b57\u7b26\u200b 917. \u200b\u4ec5\u4ec5\u200b\u53cd\u8f6c\u200b\u5b57\u6bcd"},{"location":"coding/leetcode/tags/#_3","title":"\u6570\u5b66","text":"\u200b\u6570\u5b66\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b15\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6570\u5b66\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 2. \u200b\u4e24\u200b\u6570\u200b\u76f8\u52a0\u200b 7. \u200b\u6574\u6570\u200b\u53cd\u8f6c\u200b 8. \u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u6574\u6570\u200b (atoi) 9. \u200b\u56de\u6587\u200b\u6570\u200b 11. \u200b\u76db\u200b\u6700\u591a\u6c34\u200b\u7684\u200b\u5bb9\u5668\u200b 13. \u200b\u7f57\u9a6c\u6570\u5b57\u200b\u8f6c\u200b\u6574\u6570\u200b 14. \u200b\u6700\u957f\u200b\u516c\u5171\u200b\u524d\u7f00\u200b 43. \u200b\u5b57\u7b26\u4e32\u200b\u76f8\u4e58\u200b 50. Pow(x, n) 69. x \u200b\u7684\u200b\u5e73\u65b9\u6839\u200b 204. \u200b\u8ba1\u6570\u200b\u8d28\u6570\u200b 368. \u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b 781. \u200b\u68ee\u6797\u200b\u4e2d\u200b\u7684\u200b\u5154\u5b50\u200b 1006. \u200b\u7b28\u200b\u9636\u4e58\u200b 1835. \u200b\u6240\u6709\u200b\u6570\u5bf9\u200b\u6309\u4f4d\u200b\u4e0e\u200b\u7ed3\u679c\u200b\u7684\u200b\u5f02\u6216\u200b\u548c"},{"location":"coding/leetcode/tags/#_4","title":"\u53cc\u200b\u6307\u9488","text":"\u200b\u53cc\u200b\u6307\u9488\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b14\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u53cc\u200b\u6307\u9488\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b 11. \u200b\u76db\u200b\u6700\u591a\u6c34\u200b\u7684\u200b\u5bb9\u5668\u200b 19. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u7684\u200b\u5012\u6570\u7b2c\u200bN\u200b\u4e2a\u200b\u8282\u70b9\u200b 26. \u200b\u5220\u9664\u200b\u6392\u5e8f\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u91cd\u590d\u200b\u9879\u200b 27. \u200b\u79fb\u9664\u200b\u5143\u7d20\u200b 28. \u200b\u5b9e\u73b0\u200b strStr() 42. \u200b\u63a5\u200b\u96e8\u6c34\u200b 61. \u200b\u65cb\u8f6c\u200b\u94fe\u8868\u200b 75. \u200b\u989c\u8272\u200b\u5206\u7c7b\u200b 88. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u6570\u7ec4\u200b 125. \u200b\u9a8c\u8bc1\u200b\u56de\u6587\u200b\u4e32\u200b 234. \u200b\u56de\u6587\u200b\u94fe\u8868\u200b 344. \u200b\u53cd\u8f6c\u200b\u5b57\u7b26\u4e32\u200b 350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II"},{"location":"coding/leetcode/tags/#_5","title":"\u52a8\u6001\u200b\u89c4\u5212","text":"\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b13\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 42. \u200b\u63a5\u200b\u96e8\u6c34\u200b 53. \u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c\u200b 62. \u200b\u4e0d\u540c\u200b\u8def\u5f84\u200b 64. \u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 70. \u200b\u722c\u697c\u68af\u200b 87. \u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b 115. \u200b\u4e0d\u540c\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b 120. \u200b\u4e09\u89d2\u5f62\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 121. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b 198. \u200b\u6253\u5bb6\u52ab\u820d\u200b 368. \u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b 377. \u200b\u7ec4\u5408\u200b\u603b\u548c\u200b \u2163 403. \u200b\u9752\u86d9\u200b\u8fc7\u6cb3"},{"location":"coding/leetcode/tags/#_6","title":"\u54c8\u5e0c\u200b\u8868","text":"\u200b\u54c8\u5e0c\u200b\u8868\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b12\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u54c8\u5e0c\u200b\u8868\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 1. \u200b\u4e24\u6570\u200b\u4e4b\u200b\u548c\u200b 3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b 36. \u200b\u6709\u6548\u200b\u7684\u200b\u6570\u72ec\u200b 37. \u200b\u89e3\u6570\u200b\u72ec\u200b 136. \u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u7684\u200b\u6570\u5b57\u200b 204. \u200b\u8ba1\u6570\u200b\u8d28\u6570\u200b 217. \u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b 242. \u200b\u6709\u6548\u200b\u7684\u200b\u5b57\u6bcd\u200b\u5f02\u4f4d\u200b\u8bcd\u200b 350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II 387. \u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u5b57\u7b26\u200b 433. \u200b\u6700\u5c0f\u200b\u57fa\u56e0\u200b\u53d8\u5316\u200b 781. \u200b\u68ee\u6797\u200b\u4e2d\u200b\u7684\u200b\u5154\u5b50"},{"location":"coding/leetcode/tags/#_7","title":"\u94fe\u8868","text":"\u200b\u94fe\u8868\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b11\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u94fe\u8868\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 2. \u200b\u4e24\u200b\u6570\u200b\u76f8\u52a0\u200b 19. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u7684\u200b\u5012\u6570\u7b2c\u200bN\u200b\u4e2a\u200b\u8282\u70b9\u200b 21. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u94fe\u8868\u200b 23. \u200b\u5408\u5e76\u200bK\u200b\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868\u200b 24. \u200b\u4e24\u200b\u4e24\u200b\u4ea4\u6362\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b 25. K \u200b\u4e2a\u200b\u4e00\u7ec4\u200b\u7ffb\u8f6c\u200b\u94fe\u8868\u200b 61. \u200b\u65cb\u8f6c\u200b\u94fe\u8868\u200b 92. \u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b II 206. \u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b 234. \u200b\u56de\u6587\u200b\u94fe\u8868\u200b 237. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9"},{"location":"coding/leetcode/tags/#_8","title":"\u4e8c\u5206\u200b\u67e5\u627e","text":"\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b9\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b 50. Pow(x, n) 69. x \u200b\u7684\u200b\u5e73\u65b9\u6839\u200b 74. \u200b\u641c\u7d22\u200b\u4e8c\u7ef4\u200b\u77e9\u9635\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570\u200b 350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II 1011. \u200b\u5728\u200b D \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u5305\u88f9\u200b\u7684\u200b\u80fd\u529b\u200b 1283. \u200b\u4f7f\u200b\u7ed3\u679c\u200b\u4e0d\u200b\u8d85\u8fc7\u200b\u9608\u503c\u200b\u7684\u200b\u6700\u5c0f\u200b\u9664\u6570\u200b 1300. \u200b\u8f6c\u53d8\u200b\u6570\u7ec4\u200b\u540e\u200b\u6700\u200b\u63a5\u8fd1\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u6570\u7ec4\u200b\u548c"},{"location":"coding/leetcode/tags/#_9","title":"\u56de\u6eaf\u200b\u7b97\u6cd5","text":"\u200b\u56de\u6eaf\u200b\u7b97\u6cd5\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b7\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u56de\u6eaf\u200b\u7b97\u6cd5\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b 22. \u200b\u62ec\u53f7\u200b\u751f\u6210\u200b 37. \u200b\u89e3\u6570\u200b\u72ec\u200b 46. \u200b\u5168\u200b\u6392\u5217\u200b 78. \u200b\u5b50\u96c6\u200b 79. \u200b\u5355\u8bcd\u200b\u641c\u7d22\u200b 90. \u200b\u5b50\u96c6\u200b II"},{"location":"coding/leetcode/tags/#_10","title":"\u9012\u5f52","text":"\u200b\u9012\u5f52\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b6\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u9012\u5f52\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 2. \u200b\u4e24\u200b\u6570\u200b\u76f8\u52a0\u200b 17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b 21. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u94fe\u8868\u200b 24. \u200b\u4e24\u200b\u4e24\u200b\u4ea4\u6362\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b 98. \u200b\u9a8c\u8bc1\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b 779. \u200b\u7b2c\u200bK\u200b\u4e2a\u200b\u8bed\u6cd5\u200b\u7b26\u53f7"},{"location":"coding/leetcode/tags/#_11","title":"\u6808","text":"\u200b\u6808\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b5\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6808\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 20. \u200b\u6709\u6548\u200b\u7684\u200b\u62ec\u53f7\u200b 42. \u200b\u63a5\u200b\u96e8\u6c34\u200b 150. \u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u6c42\u503c\u200b 155. \u200b\u6700\u5c0f\u200b\u6808\u200b 341. \u200b\u6241\u5e73\u5316\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u8fed\u4ee3\u200b\u5668"},{"location":"coding/leetcode/tags/#_12","title":"\u6392\u5e8f","text":"\u200b\u6392\u5e8f\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b5\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6392\u5e8f\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 56. \u200b\u5408\u5e76\u200b\u533a\u95f4\u200b 75. \u200b\u989c\u8272\u200b\u5206\u7c7b\u200b 242. \u200b\u6709\u6548\u200b\u7684\u200b\u5b57\u6bcd\u200b\u5f02\u4f4d\u200b\u8bcd\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570\u200b 350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II"},{"location":"coding/leetcode/tags/#_13","title":"\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22","text":"\u200b\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b4\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b 98. \u200b\u9a8c\u8bc1\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b 101. \u200b\u5bf9\u79f0\u200b\u4e8c\u53c9\u6811\u200b 488. \u200b\u7956\u739b\u200b\u6e38\u620f"},{"location":"coding/leetcode/tags/#_14","title":"\u6811","text":"\u200b\u6811\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b3\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6811\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 98. \u200b\u9a8c\u8bc1\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b 101. \u200b\u5bf9\u79f0\u200b\u4e8c\u53c9\u6811\u200b 102. \u200b\u4e8c\u53c9\u6811\u200b\u7684\u200b\u5c42\u5e8f\u200b\u904d\u5386"},{"location":"coding/leetcode/tags/#_15","title":"\u5e7f\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22","text":"\u200b\u5e7f\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b3\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u5e7f\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 101. \u200b\u5bf9\u79f0\u200b\u4e8c\u53c9\u6811\u200b 102. \u200b\u4e8c\u53c9\u6811\u200b\u7684\u200b\u5c42\u5e8f\u200b\u904d\u5386\u200b 433. \u200b\u6700\u5c0f\u200b\u57fa\u56e0\u200b\u53d8\u5316"},{"location":"coding/leetcode/tags/#_16","title":"\u8bbe\u8ba1","text":"\u200b\u8bbe\u8ba1\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b3\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u8bbe\u8ba1\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 155. \u200b\u6700\u5c0f\u200b\u6808\u200b 341. \u200b\u6241\u5e73\u5316\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u8fed\u4ee3\u200b\u5668\u200b 1603. \u200b\u8bbe\u8ba1\u200b\u505c\u8f66\u200b\u7cfb\u7edf"},{"location":"coding/leetcode/tags/#_17","title":"\u5206\u6cbb\u200b\u7b97\u6cd5","text":"\u200b\u5206\u6cbb\u200b\u7b97\u6cd5\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b3\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u5206\u6cbb\u200b\u7b97\u6cd5\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 23. \u200b\u5408\u5e76\u200bK\u200b\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868\u200b 53. \u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570"},{"location":"coding/leetcode/tags/#_18","title":"\u8d2a\u5fc3\u200b\u7b97\u6cd5","text":"\u200b\u8d2a\u5fc3\u200b\u7b97\u6cd5\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b2\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u8d2a\u5fc3\u200b\u7b97\u6cd5\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 55. \u200b\u8df3\u8dc3\u200b\u6e38\u620f\u200b 122. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b II"},{"location":"coding/leetcode/tags/#_19","title":"\u4f4d\u200b\u8fd0\u7b97","text":"\u200b\u4f4d\u200b\u8fd0\u7b97\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b2\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u4f4d\u200b\u8fd0\u7b97\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 78. \u200b\u5b50\u96c6\u200b 136. \u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u7684\u200b\u6570\u5b57"},{"location":"coding/leetcode/tags/#_20","title":"\u5806","text":"\u200b\u5806\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b1\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u5806\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 23. \u200b\u5408\u5e76\u200bK\u200b\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868"},{"location":"coding/leetcode/tags/#sliding-window","title":"Sliding Window","text":"Sliding Window\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b1\u200b\u9053\u200b\u9898\u76ee\u200b
Sliding Window \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32"},{"location":"coding/leetcode/tags/#_21","title":"\u6811\u72b6\u200b\u6570\u7ec4","text":"\u200b\u6811\u72b6\u200b\u6570\u7ec4\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b1\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6811\u72b6\u200b\u6570\u7ec4\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570"},{"location":"coding/leetcode/tags/#_22","title":"\u7ebf\u6bb5\u200b\u6811","text":"\u200b\u7ebf\u6bb5\u200b\u6811\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b1\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u7ebf\u6bb5\u200b\u6811\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570"},{"location":"coding/machine-learning/","title":"\u673a\u5668\u200b\u5b66\u4e60","text":"\u200b\u90e8\u5206\u200b\u673a\u5668\u200b\u5b66\u4e60\u200b\u7b97\u6cd5\u200b\u7684\u200bPython\u200b\u5b9e\u73b0\u200b
- \u200b\u7ebf\u6027\u200b\u6a21\u578b\u200b
- \u200b\u51b3\u7b56\u6811\u200b
- \u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b
- \u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b
- \u200b\u7b97\u6cd5\u200b\u6d41\u7a0b\u200b
- \u200b\u4e3b\u9898\u200b\u6a21\u578b\u200b
- VAE-NTM
"},{"location":"coding/machine-learning/bayesian-optimization/","title":"\u8d1d\u53f6\u65af\u200b\u4f18\u5316","text":"In\u00a0[1]: Copied! import numpy as np\nfrom scipy.stats import norm\n\ndef objective(x):\n return norm.pdf(x, 3, 2) * 1.5 + norm.pdf(x, 7, 1) + norm.pdf(x, 11, 2)\n
import numpy as np from scipy.stats import norm def objective(x): return norm.pdf(x, 3, 2) * 1.5 + norm.pdf(x, 7, 1) + norm.pdf(x, 11, 2) \u200b\u521d\u6b65\u200b\u5bf9\u200b\u8be5\u200b\u51fd\u6570\u200b\u8fdb\u884c\u200b\u53ef\u89c6\u5316\u200b
In\u00a0[2]: Copied! from matplotlib import pyplot as plt\n%config InlineBackend.figure_format = 'svg'\n\nx = np.linspace(-5, 20, 50)\nplt.plot(x, objective(x))\nplt.xlabel('x')\nplt.ylabel('f(x)')\nplt.title('Objective function')\nplt.show()\n
from matplotlib import pyplot as plt %config InlineBackend.figure_format = 'svg' x = np.linspace(-5, 20, 50) plt.plot(x, objective(x)) plt.xlabel('x') plt.ylabel('f(x)') plt.title('Objective function') plt.show() \u200b\u91c7\u96c6\u200b\u51fd\u6570\u200b\u7684\u200b\u76ee\u6807\u200b\u662f\u200b\u9009\u51fa\u200b\u540e\u9a8c\u200b\u4e2d\u200b\u6700\u4f18\u200b\u7684\u200b\u70b9\u200b\u3002\u200b\u5728\u200b\u6b64\u5904\u200b\uff0c\u200b\u6211\u4eec\u200b\u4f7f\u7528\u200b\u671f\u671b\u200b\u6539\u8fdb\u200b\uff08Expected Improvement, EI\uff09\u200b\u6765\u200b\u9009\u62e9\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u91c7\u96c6\u200b\u70b9\u200b\u3002EI\u200b\u7684\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
$$ \\begin{aligned} \\text{EI}(x) &= \\mathbb{E}[\\max(0, \\tilde f(x) - f(x^*) - \\xi)] \\\\ \\end{aligned} $$
\u200b\u5176\u4e2d\u200b$\\tilde f(x)$\u200b\u662f\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u5728\u200b$x$\u200b\u5904\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b\uff0c$f(x^*)$\u200b\u662f\u200b\u5f53\u524d\u200b\u6700\u4f18\u200b\u7684\u200b\u51fd\u6570\u200b\u503c\u200b\uff0c$\\xi$\u200b\u662f\u200b\u4e00\u4e2a\u200b\u63a7\u5236\u200b\u63a2\u7d22\u200b\u548c\u200b\u5f00\u53d1\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5f53\u200b$\\xi$\u200b\u8f83\u5927\u200b\u65f6\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u66f4\u200b\u503e\u5411\u200b\u4e8e\u200b\u63a2\u7d22\u200b\uff0c\u200b\u5f53\u200b$\\xi$\u200b\u8f83\u200b\u5c0f\u65f6\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u66f4\u200b\u503e\u5411\u200b\u4e8e\u200b\u5f00\u53d1\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u9ad8\u65af\u5206\u5e03\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u7ed9\u5b9a\u200b$x$, $\\tilde f(x)$\u200b\u7684\u200b\u5206\u5e03\u200b\u662f\u200b\u4e00\u4e2a\u200b\u9ad8\u65af\u5206\u5e03\u200b\uff0c\u200b\u5176\u200b\u5747\u503c\u200b\u4e3a\u200b$\\mu(x)$\uff0c\u200b\u65b9\u5dee\u200b\u4e3a\u200b$\\sigma^2(x)$\uff0c\u200b\u4ee4\u200b
$$ z(x) = \\frac{\\mu(x) - f(x^*) - \\xi}{\\sigma(x)} $$
\u200b\u5219\u200b\u671f\u671b\u200b\u6539\u8fdb\u200b\u4e3a\u200b
$$ \\text{EI}(x) = \\sigma(x)[z(x)\\Phi(z(x)) + \\phi(z(x))] $$
In\u00a0[3]: Copied! from typing import Callable\nfrom sklearn.gaussian_process import GaussianProcessRegressor\n\nGP = GaussianProcessRegressor\nAcquisition = Callable[[np.ndarray, GP, float], np.ndarray]\n\ndef expected_improvement(x: np.ndarray, gp: GP, y_max: float, xi: float = 0.01):\n x = np.array(x).reshape(-1, 1)\n mu, sigma = gp.predict(x, return_std=True) # type: ignore\n sigma = sigma.reshape(-1, 1)\n mu = mu.reshape(-1, 1)\n\n with np.errstate(divide='warn'):\n Z = (mu - y_max - xi) / sigma # Normalized Z-score\n ei = sigma * (Z * norm.cdf(Z) + norm.pdf(Z))\n\n return ei\n
from typing import Callable from sklearn.gaussian_process import GaussianProcessRegressor GP = GaussianProcessRegressor Acquisition = Callable[[np.ndarray, GP, float], np.ndarray] def expected_improvement(x: np.ndarray, gp: GP, y_max: float, xi: float = 0.01): x = np.array(x).reshape(-1, 1) mu, sigma = gp.predict(x, return_std=True) # type: ignore sigma = sigma.reshape(-1, 1) mu = mu.reshape(-1, 1) with np.errstate(divide='warn'): Z = (mu - y_max - xi) / sigma # Normalized Z-score ei = sigma * (Z * norm.cdf(Z) + norm.pdf(Z)) return ei \u200b\u6839\u636e\u200b\u91c7\u96c6\u200b\u51fd\u6570\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u5728\u200b\u8303\u56f4\u200b\u4e2d\u200b\u9009\u62e9\u200b\u4e00\u4e2a\u70b9\u200b\u4f7f\u5f97\u200bEI\u200b\u6700\u5927\u200b\uff0c\u200b\u7136\u540e\u200b\u89c2\u6d4b\u200b\u8be5\u70b9\u200b\u7684\u200b\u51fd\u6570\u200b\u503c\u200b\uff0c\u200b\u66f4\u65b0\u200b\u540e\u9a8c\u200b\uff0c\u200b\u91cd\u590d\u200b\u8fd9\u4e2a\u200b\u8fc7\u7a0b\u200b\u76f4\u5230\u200b\u8fbe\u5230\u200b\u8fed\u4ee3\u200b\u6b21\u6570\u200b\u3002
In\u00a0[4]: Copied! def next_point(\n x_min: float, x_max: float, n_samples: int,\n acquisition: Acquisition, gp: GP, y_max: float\n):\n x = np.random.uniform(x_min, x_max, n_samples).reshape(-1, 1)\n ei = acquisition(x, gp, y_max)\n return x[np.argmax(ei)]\n
def next_point( x_min: float, x_max: float, n_samples: int, acquisition: Acquisition, gp: GP, y_max: float ): x = np.random.uniform(x_min, x_max, n_samples).reshape(-1, 1) ei = acquisition(x, gp, y_max) return x[np.argmax(ei)] \u200b\u6b64\u540e\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u6765\u200b\u62df\u5408\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u3002sklearn
\u200b\u4e2d\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u5b9e\u73b0\u200b\u3002
In\u00a0[5]: Copied! from sklearn.gaussian_process.kernels import RBF\n\nkernel = RBF(length_scale=1.0, length_scale_bounds=(1e-2, 1e2))\ngp = GP(kernel=kernel, alpha=1e-5, n_restarts_optimizer=10)\n\ndef plot_gp(ax, gp: GP, x_min: float, x_max: float, ci: float = 0.95):\n x = np.linspace(x_min, x_max, 50).reshape(-1, 1)\n y, sigma = gp.predict(x, return_std=True)\n\n ci_coef = norm.ppf((1 + ci) / 2)\n\n ax.plot(x, y, linewidth=1)\n ax.fill_between(x.flatten(), y - ci_coef * sigma, y + ci_coef * sigma, alpha=0.2)\n ax.set_xlabel('x')\n ax.set_ylabel('f(x)')\n\nfig, ax = plt.subplots(1, 1)\nplot_gp(ax, gp, -5, 20)\nfig.show()\n
from sklearn.gaussian_process.kernels import RBF kernel = RBF(length_scale=1.0, length_scale_bounds=(1e-2, 1e2)) gp = GP(kernel=kernel, alpha=1e-5, n_restarts_optimizer=10) def plot_gp(ax, gp: GP, x_min: float, x_max: float, ci: float = 0.95): x = np.linspace(x_min, x_max, 50).reshape(-1, 1) y, sigma = gp.predict(x, return_std=True) ci_coef = norm.ppf((1 + ci) / 2) ax.plot(x, y, linewidth=1) ax.fill_between(x.flatten(), y - ci_coef * sigma, y + ci_coef * sigma, alpha=0.2) ax.set_xlabel('x') ax.set_ylabel('f(x)') fig, ax = plt.subplots(1, 1) plot_gp(ax, gp, -5, 20) fig.show() /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_54343/3771838051.py:19: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
\u200b\u6b64\u540e\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u8fed\u4ee3\u200b\u5730\u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u3002
In\u00a0[6]: Copied! fig, ax = plt.subplots(4, 4, sharex=False, sharey=False, figsize=(9, 9))\nax_flatten = ax.flatten()\n\nx_min = -5\nx_max = 20\nx_samples = np.random.uniform(x_min, x_max, 3).reshape(-1, 1)\ny_samples = objective(x_samples)\ny_max = y_samples.max()\ngp = gp.fit(x_samples, y_samples)\n\nfor i, current_ax in enumerate(ax_flatten):\n # Setup plot\n current_ax.set_xlim(x_min, x_max)\n current_ax.set_ylim(-1, 1)\n if i // 4 != 3:\n current_ax.get_xaxis().set_visible(False)\n if i % 4 != 0:\n current_ax.get_yaxis().set_visible(False)\n\n # Plot prediction\n plot_gp(current_ax, gp, x_min, x_max)\n\n # Plot function\n x_grid = np.linspace(x_min, x_max, 50).reshape(-1, 1)\n\n # Plot samples\n current_ax.plot(\n x_grid, objective(x_grid), '--', color='gray', linewidth=0.5\n )\n current_ax.scatter(x_samples, y_samples, color='red', s=4, zorder=10)\n\n # Plot optimal point\n x_optimal = x_samples[np.argmax(y_samples)].item()\n current_ax.scatter(x_optimal, y_max, color='green', s=10, zorder=20)\n current_ax.text(\n 0.5, 0.9,\n f'Best: x={x_optimal:.2f}, y={y_max:.2f}',\n ha='center', transform=current_ax.transAxes\n )\n\n point = next_point(x_min, x_max, 100, expected_improvement, gp, y_max)\n\n # Plot next point\n current_ax.plot(\n [point, point], [-0.8, 0.8], '--', color='red', linewidth=0.5\n )\n current_ax.text(\n 0.5, 0.05,\n f'Next x: {point[0]:.2f}',\n ha='center', transform=current_ax.transAxes\n )\n\n # Update samples\n y = objective(point).item()\n x_samples = np.vstack([x_samples, point])\n y_samples = np.append(y_samples, y)\n\n y_max = max(y_max, y)\n\n # Re-fit model\n gp = gp.fit(x_samples, y_samples)\n\nfig.show()\n
fig, ax = plt.subplots(4, 4, sharex=False, sharey=False, figsize=(9, 9)) ax_flatten = ax.flatten() x_min = -5 x_max = 20 x_samples = np.random.uniform(x_min, x_max, 3).reshape(-1, 1) y_samples = objective(x_samples) y_max = y_samples.max() gp = gp.fit(x_samples, y_samples) for i, current_ax in enumerate(ax_flatten): # Setup plot current_ax.set_xlim(x_min, x_max) current_ax.set_ylim(-1, 1) if i // 4 != 3: current_ax.get_xaxis().set_visible(False) if i % 4 != 0: current_ax.get_yaxis().set_visible(False) # Plot prediction plot_gp(current_ax, gp, x_min, x_max) # Plot function x_grid = np.linspace(x_min, x_max, 50).reshape(-1, 1) # Plot samples current_ax.plot( x_grid, objective(x_grid), '--', color='gray', linewidth=0.5 ) current_ax.scatter(x_samples, y_samples, color='red', s=4, zorder=10) # Plot optimal point x_optimal = x_samples[np.argmax(y_samples)].item() current_ax.scatter(x_optimal, y_max, color='green', s=10, zorder=20) current_ax.text( 0.5, 0.9, f'Best: x={x_optimal:.2f}, y={y_max:.2f}', ha='center', transform=current_ax.transAxes ) point = next_point(x_min, x_max, 100, expected_improvement, gp, y_max) # Plot next point current_ax.plot( [point, point], [-0.8, 0.8], '--', color='red', linewidth=0.5 ) current_ax.text( 0.5, 0.05, f'Next x: {point[0]:.2f}', ha='center', transform=current_ax.transAxes ) # Update samples y = objective(point).item() x_samples = np.vstack([x_samples, point]) y_samples = np.append(y_samples, y) y_max = max(y_max, y) # Re-fit model gp = gp.fit(x_samples, y_samples) fig.show() /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_54343/3753732084.py:63: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
"},{"location":"coding/machine-learning/bayesian-optimization/","title":"\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u00b6","text":"\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u662f\u200b\u4e00\u7c7b\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u4f18\u5316\u200b\u9ed1\u76d2\u200b\u51fd\u6570\u200b\u7684\u200b\u4f18\u5316\u200b\u65b9\u6cd5\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u9ed1\u76d2\u200b\u51fd\u6570\u200b\u6765\u8bf4\u200b\uff0c\u200b\u6211\u4eec\u200b\u65e0\u6cd5\u200b\u5f97\u77e5\u200b\u5176\u200b\u663e\u5f0f\u200b\u7684\u200b\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200b\u8f93\u5165\u200b\u4e00\u4e2a\u200b\u6570\u636e\u200b\uff0c\u200b\u89c2\u6d4b\u200b\u5176\u200b\u8f93\u51fa\u200b\u7684\u200b\u65b9\u6cd5\u200b\u5bfb\u627e\u200b\u5b83\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u3002\u200b\u501f\u52a9\u4e8e\u200b\u8d1d\u53f6\u65af\u200b\u7edf\u8ba1\u200b\u7684\u200b\u601d\u60f3\u200b\uff0c\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u6700\u521d\u200b\u8ba4\u4e3a\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5b8c\u5168\u200b\u968f\u673a\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e0d\u65ad\u200b\u5730\u200b\u89c2\u6d4b\u200b\u6765\u200b\u66f4\u65b0\u200b\u5bf9\u200b\u51fd\u6570\u200b\u7684\u200b\u4f30\u8ba1\u200b\uff08\u200b\u540e\u9a8c\u200b\uff09\u3002\u200b\u5728\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u8fed\u4ee3\u200b\u4e2d\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u6839\u636e\u200b\u5f53\u524d\u200b\u7684\u200b\u540e\u9a8c\u200b\uff0c\u200b\u901a\u8fc7\u200b\u91c7\u96c6\u200b\u51fd\u6570\u200b\u6765\u200b\u9009\u62e9\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u89c2\u6d4b\u200b\u7684\u200b\u70b9\u200b\u3002\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u7684\u200b\u4f18\u70b9\u200b\u662f\u200b\u53ef\u4ee5\u200b\u5728\u200b\u8f83\u200b\u5c11\u200b\u7684\u200b\u8fed\u4ee3\u200b\u6b21\u6570\u200b\u5185\u200b\u627e\u5230\u200b\u5168\u5c40\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5728\u200b\u5b9e\u9645\u200b\u5e94\u7528\u200b\u4e2d\u200b\u88ab\u200b\u5e7f\u6cdb\u200b\u4f7f\u7528\u200b\u3002
\u200b\u5047\u8bbe\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7684\u200b\u5f62\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
"},{"location":"coding/machine-learning/decision-tree/","title":"\u51b3\u7b56\u6811","text":"In\u00a0[30]: Copied! import numpy as np\nimport pandas as pd\nimport typing as T\n
import numpy as np import pandas as pd import typing as T \u200b\u4ee5\u4e0b\u200b\u8003\u8651\u200b\u897f\u74dc\u200b\u6570\u636e\u200b\u96c6\u200b3.0\u200b\u4e2d\u200b\u7b2c\u4e00\u6b65\u200b\u5212\u5206\u200b\u7684\u200b\u5c5e\u6027\u200b\u9009\u62e9\u200b\u3002
In\u00a0[31]: Copied! df = pd.read_csv('data/melon3.0a.csv')\nattributes = ['\u200b\u8272\u6cfd\u200b', '\u200b\u6839\u8482\u200b', '\u200b\u6572\u58f0\u200b', '\u200b\u7eb9\u7406\u200b', '\u200b\u8110\u90e8\u200b', '\u200b\u89e6\u611f\u200b']\ncategory = '\u200b\u597d\u74dc\u200b'\n
df = pd.read_csv('data/melon3.0a.csv') attributes = ['\u200b\u8272\u6cfd\u200b', '\u200b\u6839\u8482\u200b', '\u200b\u6572\u58f0\u200b', '\u200b\u7eb9\u7406\u200b', '\u200b\u8110\u90e8\u200b', '\u200b\u89e6\u611f\u200b'] category = '\u200b\u597d\u74dc\u200b' \u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b\u57fa\u4e8e\u200b\u4fe1\u606f\u71b5\u200b\uff0c\u200b\u5728\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u5212\u5206\u200b\u540e\u200b\uff0c\u200b\u96c6\u5408\u200b\u7684\u200b\u4fe1\u606f\u71b5\u200b\u4e4b\u200b\u548c\u200b\uff08\u200b\u6309\u200b\u6bd4\u4f8b\u200b\u52a0\u6743\u200b\uff09\u200b\u4f1a\u200b\u51cf\u5c0f\u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b\u5373\u200b\u4e3a\u200b\u539f\u200b\u4fe1\u606f\u71b5\u200b\u4e0e\u200b\u5212\u5206\u200b\u540e\u200b\u7684\u200b\u4fe1\u606f\u71b5\u200b\u4e4b\u5dee\u200b\u3002
In\u00a0[32]: Copied! def entropy(df, target_col):\n p = df[target_col].value_counts() / len(df)\n return -sum(p * np.log2(p))\n\ndef conditional_entropy(df, discrete_col, target_col):\n ret = 0\n for val in df[discrete_col].unique():\n p = len(df[df[discrete_col] == val]) / len(df) # \u200b\u6bd4\u4f8b\u200b\n ret += p * entropy(df[df[discrete_col] == val], target_col)\n return ret\n\ndef calc_gain(df, attributes, category) -> T.Dict[str, float]:\n entropy_original = entropy(df, category)\n return {\n k: entropy_original - conditional_entropy(df, k, category)\n for k in attributes\n }\n\ngain = pd.DataFrame([calc_gain(df, attributes, category)], index=['\u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b'])\ngain\n
def entropy(df, target_col): p = df[target_col].value_counts() / len(df) return -sum(p * np.log2(p)) def conditional_entropy(df, discrete_col, target_col): ret = 0 for val in df[discrete_col].unique(): p = len(df[df[discrete_col] == val]) / len(df) # \u200b\u6bd4\u4f8b\u200b ret += p * entropy(df[df[discrete_col] == val], target_col) return ret def calc_gain(df, attributes, category) -> T.Dict[str, float]: entropy_original = entropy(df, category) return { k: entropy_original - conditional_entropy(df, k, category) for k in attributes } gain = pd.DataFrame([calc_gain(df, attributes, category)], index=['\u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b']) gain Out[32]: \u200b\u8272\u6cfd\u200b \u200b\u6839\u8482\u200b \u200b\u6572\u58f0\u200b \u200b\u7eb9\u7406\u200b \u200b\u8110\u90e8\u200b \u200b\u89e6\u611f\u200b \u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b 0.108125 0.142675 0.140781 0.380592 0.289159 0.006046 \u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b\u4f1a\u200b\u66f4\u52a0\u200b\u503e\u5411\u200b\u4e8e\u200b\u9009\u62e9\u200b\u5305\u542b\u200b\u7c7b\u522b\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u5c5e\u6027\u200b\uff0c\u200b\u4f7f\u7528\u200b\u589e\u76ca\u200b\u7387\u200b\u6307\u6807\u200b\u53ef\u4ee5\u200b\u5e73\u8861\u200b\u4e0d\u540c\u200b\u7c7b\u522b\u200b\u4e4b\u95f4\u200b\u7684\u200b\u6743\u91cd\u200b\u3002\u200b\u589e\u76ca\u200b\u7387\u200b\u6307\u6807\u200b\u4e3a\u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b\u4e0e\u200b\u5c5e\u6027\u200b\u56fa\u6709\u200b\u503c\u200b $\\mathrm{IV}$ \u200b\u4e4b\u200b\u6bd4\u200b\u3002
In\u00a0[33]: Copied! def iv(df, discrete_col):\n p = df[discrete_col].value_counts() / len(df)\n return -sum(p * np.log2(p))\n\ndef calc_gain_ratio(df, attributes, category) -> T.Dict[str, float]:\n entropy_original = entropy(df, category)\n return {k: (entropy_original - conditional_entropy(df, k, category)) / iv(df, k)\n for k in attributes\n }\n\ngain_ratio = pd.DataFrame(\n [calc_gain_ratio(df, attributes, category)], index=['\u200b\u589e\u76ca\u200b\u7387\u200b']\n)\ngain_ratio\n
def iv(df, discrete_col): p = df[discrete_col].value_counts() / len(df) return -sum(p * np.log2(p)) def calc_gain_ratio(df, attributes, category) -> T.Dict[str, float]: entropy_original = entropy(df, category) return {k: (entropy_original - conditional_entropy(df, k, category)) / iv(df, k) for k in attributes } gain_ratio = pd.DataFrame( [calc_gain_ratio(df, attributes, category)], index=['\u200b\u589e\u76ca\u200b\u7387\u200b'] ) gain_ratio Out[33]: \u200b\u8272\u6cfd\u200b \u200b\u6839\u8482\u200b \u200b\u6572\u58f0\u200b \u200b\u7eb9\u7406\u200b \u200b\u8110\u90e8\u200b \u200b\u89e6\u611f\u200b \u200b\u589e\u76ca\u200b\u7387\u200b 0.06844 0.101759 0.105627 0.263085 0.186727 0.006918 \u200b\u57fa\u5c3c\u200b\u6307\u6570\u200b\u8861\u91cf\u200b\u4ece\u200b\u6570\u636e\u200b\u96c6\u4e2d\u200b\u968f\u673a\u200b\u62bd\u53d6\u200b\u4e24\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u6807\u7b7e\u200b\u53d6\u503c\u200b\u4e0d\u540c\u200b\u7684\u200b\u6982\u7387\u200b\u3002
In\u00a0[34]: Copied! def gini(df, target_col):\n p = df[target_col].value_counts() / len(df)\n return 1 - sum(p ** 2)\n\ndef gini_conditional(df, discrete_col, target_col):\n ret = 0\n for col in df[discrete_col].unique():\n p = len(df[df[discrete_col] == col]) / len(df)\n ret += p * gini(df[df[discrete_col] == col], target_col)\n return ret\n\ndef calc_gini_index(df, attributes, category) -> T.Dict[str, float]:\n return {\n k: sum((df[k].value_counts() / len(df)) * gini_conditional(df, k, category))\n for k in attributes\n }\n\ngini_index = pd.DataFrame([calc_gini_index(df, attributes, category)], index=['\u200b\u57fa\u5c3c\u200b\u6307\u6570\u200b'])\ngini_index\n
def gini(df, target_col): p = df[target_col].value_counts() / len(df) return 1 - sum(p ** 2) def gini_conditional(df, discrete_col, target_col): ret = 0 for col in df[discrete_col].unique(): p = len(df[df[discrete_col] == col]) / len(df) ret += p * gini(df[df[discrete_col] == col], target_col) return ret def calc_gini_index(df, attributes, category) -> T.Dict[str, float]: return { k: sum((df[k].value_counts() / len(df)) * gini_conditional(df, k, category)) for k in attributes } gini_index = pd.DataFrame([calc_gini_index(df, attributes, category)], index=['\u200b\u57fa\u5c3c\u200b\u6307\u6570\u200b']) gini_index Out[34]: \u200b\u8272\u6cfd\u200b \u200b\u6839\u8482\u200b \u200b\u6572\u58f0\u200b \u200b\u7eb9\u7406\u200b \u200b\u8110\u90e8\u200b \u200b\u89e6\u611f\u200b \u200b\u57fa\u5c3c\u200b\u6307\u6570\u200b 0.427451 0.422269 0.423529 0.277124 0.344538 0.494118 In\u00a0[35]: Copied! class TreeNode():\n\n def __init__(self, key):\n self.key = key\n self.mapping = {}\n\n def add_child(self, value, child):\n self.mapping[value] = child\n\n def predict(self, x):\n if self.key not in x or x[self.key] not in self.mapping:\n return None\n if isinstance(self.mapping[x[self.key]], TreeNode):\n return self.mapping[x[self.key]].predict(x)\n return self.mapping[x[self.key]]\n\ndef build_tree(df, attributes, category):\n if len(df[category].unique()) == 1:\n return df[category].unique()[0]\n if len(attributes) == 0:\n return df[category].value_counts().index[0]\n gain = calc_gain(df, attributes, category)\n best_attr = max(gain, key=lambda _: gain[_])\n for attr in attributes:\n if entropy(df, category) - conditional_entropy(df, attr, category) > entropy(df, category) - conditional_entropy(df, best_attr, category):\n best_attr = attr\n tree = TreeNode(best_attr)\n for value in df[best_attr].unique():\n tree.add_child(value, build_tree(df[df[best_attr] == value], [attr for attr in attributes if attr != best_attr], category))\n return tree\n\ntree = build_tree(df, attributes, category)\n
class TreeNode(): def __init__(self, key): self.key = key self.mapping = {} def add_child(self, value, child): self.mapping[value] = child def predict(self, x): if self.key not in x or x[self.key] not in self.mapping: return None if isinstance(self.mapping[x[self.key]], TreeNode): return self.mapping[x[self.key]].predict(x) return self.mapping[x[self.key]] def build_tree(df, attributes, category): if len(df[category].unique()) == 1: return df[category].unique()[0] if len(attributes) == 0: return df[category].value_counts().index[0] gain = calc_gain(df, attributes, category) best_attr = max(gain, key=lambda _: gain[_]) for attr in attributes: if entropy(df, category) - conditional_entropy(df, attr, category) > entropy(df, category) - conditional_entropy(df, best_attr, category): best_attr = attr tree = TreeNode(best_attr) for value in df[best_attr].unique(): tree.add_child(value, build_tree(df[df[best_attr] == value], [attr for attr in attributes if attr != best_attr], category)) return tree tree = build_tree(df, attributes, category) \u200b\u51b3\u7b56\u6811\u200b\u91c7\u53d6\u200b\u81ea\u9876\u5411\u4e0b\u200b\u7684\u200bpredict\u200b\u65b9\u5f0f\u200b
In\u00a0[36]: Copied! assert isinstance(tree, TreeNode)\ntree.predict({\n '\u200b\u8272\u6cfd\u200b': '\u200b\u9752\u7eff\u200b',\n '\u200b\u6839\u8482\u200b': '\u200b\u8737\u7f29\u200b',\n '\u200b\u6572\u58f0\u200b': '\u200b\u6d4a\u54cd\u200b',\n '\u200b\u7eb9\u7406\u200b': '\u200b\u6e05\u6670\u200b',\n '\u200b\u8110\u90e8\u200b': '\u200b\u51f9\u9677\u200b',\n '\u200b\u89e6\u611f\u200b': '\u200b\u786c\u6ed1\u200b'\n})\n
assert isinstance(tree, TreeNode) tree.predict({ '\u200b\u8272\u6cfd\u200b': '\u200b\u9752\u7eff\u200b', '\u200b\u6839\u8482\u200b': '\u200b\u8737\u7f29\u200b', '\u200b\u6572\u58f0\u200b': '\u200b\u6d4a\u54cd\u200b', '\u200b\u7eb9\u7406\u200b': '\u200b\u6e05\u6670\u200b', '\u200b\u8110\u90e8\u200b': '\u200b\u51f9\u9677\u200b', '\u200b\u89e6\u611f\u200b': '\u200b\u786c\u6ed1\u200b' }) Out[36]: '\u200b\u662f\u200b'
In\u00a0[119]: Copied! from sklearn.model_selection import train_test_split\n\ndef no_split(train, test, attributes, category):\n return train[category].value_counts().index[0]\n\ndef build_pre_prune(train, test, attributes, category, tree_root=None):\n if len(train[category].unique()) == 1:\n return train[category].unique()[0]\n no_split_result = no_split(train, test, attributes, category)\n no_split_metric = np.sum(test[category] == no_split_result)\n if len(attributes) == 0:\n return no_split_result\n\n # \u200b\u9009\u62e9\u200b\u5212\u5206\u200b\u5c5e\u6027\u200b\n gain = calc_gain(train, attributes, category)\n best_attr = max(gain, key=lambda _: gain[_])\n\n # \u200b\u521b\u5efa\u200b\u8282\u70b9\u200b\n tree = TreeNode(best_attr)\n if tree_root is None:\n tree_root = tree\n for value in train[best_attr].unique():\n tree.add_child(value, no_split(\n train[train[best_attr] == value], test,\n [attr for attr in attributes if attr != best_attr], category\n ))\n\n # \u200b\u8ba1\u7b97\u200b\u526a\u679d\u200b\u6548\u679c\u200b\n result = []\n for row in test[attributes].itertuples():\n row_dict = row._asdict()\n result.append(tree_root.predict(row_dict))\n split_metric = np.sum([a == b for a, b in zip(result, test[category])])\n\n # \u200b\u526a\u679d\u200b\n print(f'\u200b\u526a\u679d\u200b\u524d\u200b: {no_split_metric}, \u200b\u526a\u679d\u200b\u540e\u200b: {split_metric}')\n if split_metric < no_split_metric:\n print('\u200b\u4e0d\u200b\u526a\u679d\u200b')\n return no_split_result\n print('\u200b\u526a\u679d\u200b')\n for value in train[best_attr].unique():\n child = build_pre_prune(\n train[train[best_attr] == value], test,\n [attr for attr in attributes if attr != best_attr], category,\n tree_root\n )\n tree.add_child(value, child)\n return tree\n\ntrain, test = train_test_split(df, test_size=0.5)\ntree = build_pre_prune(train, test, attributes, category)\n\nresult = [\n tree.predict(row._asdict()) if isinstance(tree, TreeNode) else tree\n for row in test[attributes].itertuples()\n]\nsplit_metric = np.mean([a == b for a, b in zip(result, test[category])])\nsplit_metric\n
from sklearn.model_selection import train_test_split def no_split(train, test, attributes, category): return train[category].value_counts().index[0] def build_pre_prune(train, test, attributes, category, tree_root=None): if len(train[category].unique()) == 1: return train[category].unique()[0] no_split_result = no_split(train, test, attributes, category) no_split_metric = np.sum(test[category] == no_split_result) if len(attributes) == 0: return no_split_result # \u200b\u9009\u62e9\u200b\u5212\u5206\u200b\u5c5e\u6027\u200b gain = calc_gain(train, attributes, category) best_attr = max(gain, key=lambda _: gain[_]) # \u200b\u521b\u5efa\u200b\u8282\u70b9\u200b tree = TreeNode(best_attr) if tree_root is None: tree_root = tree for value in train[best_attr].unique(): tree.add_child(value, no_split( train[train[best_attr] == value], test, [attr for attr in attributes if attr != best_attr], category )) # \u200b\u8ba1\u7b97\u200b\u526a\u679d\u200b\u6548\u679c\u200b result = [] for row in test[attributes].itertuples(): row_dict = row._asdict() result.append(tree_root.predict(row_dict)) split_metric = np.sum([a == b for a, b in zip(result, test[category])]) # \u200b\u526a\u679d\u200b print(f'\u200b\u526a\u679d\u200b\u524d\u200b: {no_split_metric}, \u200b\u526a\u679d\u200b\u540e\u200b: {split_metric}') if split_metric < no_split_metric: print('\u200b\u4e0d\u200b\u526a\u679d\u200b') return no_split_result print('\u200b\u526a\u679d\u200b') for value in train[best_attr].unique(): child = build_pre_prune( train[train[best_attr] == value], test, [attr for attr in attributes if attr != best_attr], category, tree_root ) tree.add_child(value, child) return tree train, test = train_test_split(df, test_size=0.5) tree = build_pre_prune(train, test, attributes, category) result = [ tree.predict(row._asdict()) if isinstance(tree, TreeNode) else tree for row in test[attributes].itertuples() ] split_metric = np.mean([a == b for a, b in zip(result, test[category])]) split_metric \u200b\u526a\u679d\u200b\u524d\u200b: 4, \u200b\u526a\u679d\u200b\u540e\u200b: 4\n\u200b\u526a\u679d\u200b\n\u200b\u526a\u679d\u200b\u524d\u200b: 5, \u200b\u526a\u679d\u200b\u540e\u200b: 0\n\u200b\u4e0d\u200b\u526a\u679d\u200b\n
Out[119]: 0.4444444444444444
In\u00a0[120]: Copied! def build_post_prune(train, test, attributes, category):\n tree = build_tree(train, attributes, category)\n # TODO: apply post pruning\n
def build_post_prune(train, test, attributes, category): tree = build_tree(train, attributes, category) # TODO: apply post pruning"},{"location":"coding/machine-learning/decision-tree/","title":"\u51b3\u7b56\u6811\u200b\u00b6","text":"\u200b\u51b3\u7b56\u6811\u200b\u662f\u200b\u4e00\u7c7b\u200b\u57fa\u4e8e\u200b\u89c4\u5219\u200b\u7684\u200b\u673a\u5668\u200b\u5b66\u4e60\u200b\u7b97\u6cd5\u200b
"},{"location":"coding/machine-learning/decision-tree/","title":"\u5212\u5206\u200b\u6307\u6807\u200b\u00b6","text":"\u200b\u51b3\u7b56\u6811\u200b\u7b97\u6cd5\u200b\u4e2d\u200b\u7684\u200b\u6838\u5fc3\u200b\u662f\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u5212\u5206\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u5c5e\u6027\u200b\u7684\u200b\u9009\u62e9\u200b\uff0c\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u5212\u5206\u200b\u9700\u8981\u200b\u53d6\u5f97\u200b\u6700\u5927\u200b\u7684\u200b\u5212\u5206\u200b\u6548\u679c\u200b\uff0c\u200b\u5373\u200b\u4ea7\u751f\u200b\u7684\u200b\u5b50\u96c6\u200b\u201c\u200b\u7eaf\u5ea6\u200b\u201d\u200b\u6700\u9ad8\u200b\u3002\u200b\u5e38\u89c1\u200b\u7684\u200b\u4e09\u79cd\u200b\u8861\u91cf\u200b\u96c6\u5408\u200b\u201c\u200b\u7eaf\u5ea6\u200b\u201d\u200b\u7684\u200b\u6307\u6807\u200b\u4e3a\u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b\u3001\u200b\u589e\u76ca\u200b\u7387\u200b\u4e0e\u200b\u57fa\u5c3c\u200b\u6307\u6570\u200b\u3002
"},{"location":"coding/machine-learning/decision-tree/","title":"\u51b3\u7b56\u6811\u200b\u6784\u5efa\u200b\u00b6","text":"\u200b\u672c\u200b\u8282\u200b\u5b9e\u73b0\u200b\u539f\u4e66\u56fe\u200b4.2\u200b\u7684\u200b\u51b3\u7b56\u6811\u200b\u5b66\u4e60\u200b\u7b97\u6cd5\u200b\u3002
"},{"location":"coding/machine-learning/decision-tree/","title":"\u51b3\u7b56\u6811\u200b\u526a\u679d\u200b\u5904\u7406\u200b\u00b6","text":"\u200b\u51b3\u7b56\u6811\u200b\u6709\u9884\u200b\u526a\u679d\u200b\u548c\u200b\u540e\u200b\u526a\u679d\u200b\u4e24\u4e2a\u200b\u526a\u679d\u200b\u6b65\u9aa4\u200b\uff0c\u200b\u526a\u679d\u200b\u53ef\u4ee5\u200b\u7f13\u89e3\u200b\u6a21\u578b\u200b\u51fa\u73b0\u200b\u7684\u200b\u8fc7\u200b\u62df\u5408\u200b\u73b0\u8c61\u200b\u3002
"},{"location":"coding/machine-learning/decision-tree/","title":"\u9884\u200b\u526a\u679d\u200b\u00b6","text":"\u200b\u9884\u200b\u526a\u679d\u200b\u5728\u200b\u6a21\u578b\u200b\u7684\u200b\u8bad\u7ec3\u200b\u9636\u6bb5\u200b\u5c31\u200b\u901a\u8fc7\u200b\u9a8c\u8bc1\u200b\u96c6\u200b\u7684\u200b\u51c6\u786e\u6027\u200b\u6765\u200b\u51b3\u5b9a\u200b\u662f\u5426\u200b\u8fdb\u884c\u200b\u5212\u5206\u200b\u3002
"},{"location":"coding/machine-learning/decision-tree/","title":"\u540e\u200b\u526a\u679d\u200b\u00b6","text":"\u200b\u540e\u200b\u526a\u679d\u200b\u5728\u200b\u51b3\u7b56\u6811\u200b\u751f\u6210\u200b\u540e\u200b\u518d\u200b\u904d\u5386\u200b\u51b3\u7b56\u6811\u200b\uff0c\u200b\u5220\u53bb\u200b\u8fc7\u591a\u200b\u7684\u200b\u8282\u70b9\u200b
"},{"location":"coding/machine-learning/gaussian-process/","title":"\u9ad8\u65af\u200b\u8fc7\u7a0b","text":"In\u00a0[1]: Copied! from scipy.stats import norm\nfrom matplotlib import pyplot as plt\nimport numpy as np\n\n%config InlineBackend.figure_format = 'svg'\n
from scipy.stats import norm from matplotlib import pyplot as plt import numpy as np %config InlineBackend.figure_format = 'svg' \u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\uff08Gaussian Process\uff0cGP\uff09\u200b\u662f\u200b\u5c06\u200b\u591a\u200b\u53d8\u91cf\u200b\u9ad8\u65af\u5206\u5e03\u200b\u63a8\u5e7f\u200b\u5230\u200b\u65e0\u9650\u200b\u7ef4\u5ea6\u200b$\\mathcal X\\subseteq \\mathbb R^n$\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\u3002\u200b\u5177\u4f53\u200b\u5730\u200b\uff0c\u200b\u5bf9\u4e8e\u200b$X = \\{x_1, \\ldots, x_n\\}\\subseteq \\mathcal X$\uff0c\u200b\u968f\u673a\u53d8\u91cf\u200b$f(x_1), \\ldots, f(x_n)$\u200b\u670d\u4ece\u200b\u591a\u5143\u200b\u9ad8\u65af\u5206\u5e03\u200b$\\mathcal N(\\mu(X), \\Sigma(X))$\u3002\u200b\u5176\u4e2d\u200b\uff0c$\\mu(X)$\u200b\u4e3a\u200b\u5747\u503c\u200b\u51fd\u6570\u200b\uff0c$\\Sigma(X)$\u200b\u4e3a\u200b\u534f\u65b9\u5dee\u200b\u51fd\u6570\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u9ad8\u65af\u5206\u5e03\u200b\u7814\u7a76\u200b\u7684\u200b\u662f\u200b\u51fd\u6570\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\u3002
\u200b\u591a\u5143\u200b\u9ad8\u65af\u5206\u5e03\u200b\u7684\u200b\u6761\u4ef6\u200b\u5206\u5e03\u200b\u4f9d\u7136\u200b\u662f\u200b\u9ad8\u65af\u5206\u5e03\u200b\u3002\u200b\u8bbe\u200b\u968f\u673a\u53d8\u91cf\u200b$X = (X_1, X_2)$\u200b\u670d\u4ece\u200b\u591a\u5143\u200b\u9ad8\u65af\u5206\u5e03\u200b$\\mathcal N(\\mu, \\Sigma)$\uff0c\u200b\u5176\u4e2d\u200b$\\mu = (\\mu_1, \\mu_2)$\uff0c$\\Sigma = \\begin{bmatrix} \\Sigma_{11} & \\Sigma_{12} \\\\ \\Sigma_{21} & \\Sigma_{22} \\end{bmatrix}$\uff0c\u200b\u5219\u200b\u7ed9\u5b9a\u200b$X_1 = x_1$\u200b\u540e\u200b\uff0c$X_2$\u200b\u7684\u200b\u6761\u4ef6\u200b\u5206\u5e03\u200b\u4e3a\u200b\uff1a
$$ (X_2\\mid X_1 = x_1) \\sim \\mathcal N(\\mu_2 + \\Sigma_{21}\\Sigma_{11}^{-1}(x_1 - \\mu_1), \\Sigma_{22} - \\Sigma_{21}\\Sigma_{11}^{-1}\\Sigma_{12}) $$
\u200b\u8bbe\u200b\u4e00\u7ec4\u200b\u89c2\u6d4b\u200b\u6570\u636e\u200b\u6570\u636e\u200b$\\boldsymbol X = x_1, \\ldots, x_n$\u200b\u53ca\u5176\u200b\u5bf9\u5e94\u200b\u7684\u200b\u51fd\u6570\u200b\u503c\u200b$\\boldsymbol Y = y_1, \\ldots, y_n$\u3002\u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u6570\u636e\u200b\u70b9\u200b$x$\uff0c\u200b\u8981\u200b\u9884\u6d4b\u200b\u5176\u200b\u5bf9\u5e94\u200b\u7684\u200b\u51fd\u6570\u200b\u503c\u200b$y = f(x)$\u200b\u7684\u200b\u5206\u5e03\u200b\u3002\u200b\u5982\u679c\u200b\u6211\u4eec\u200b\u80fd\u200b\u8ba1\u7b97\u200b\u51fa\u200b\u89c2\u6d4b\u200b\u6570\u636e\u200b$\\boldsymbol Y$\u200b\u548c\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b$y$\u200b\u4e4b\u95f4\u200b\u7684\u200b\u534f\u65b9\u5dee\u200b\uff0c\u200b\u4fbf\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u9ad8\u65af\u5206\u5e03\u200b\u7684\u200b\u6761\u4ef6\u200b\u5206\u5e03\u200b\u8ba1\u7b97\u200b\u5f97\u5230\u200b$f(x)$\u200b\u7684\u200b\u5747\u503c\u200b\u548c\u200b\u65b9\u5dee\u200b\u3002
\u200b\u6b64\u5904\u200b\u4ee4\u200b$n = 1$\uff0c\u200b\u5373\u200b$X$\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\u6574\u4e2a\u200b\u5b9e\u6570\u200b\u57df\u200b\u3002
In\u00a0[2]: Copied! def y_posterior(x, x_obs, y_obs, kernel_func):\n # x: (num_features)\n # x_obs: (num_observations, num_features)\n # y_obs: (num_observations)\n\n sigma_21 = kernel_func(x, x_obs) # dim: (num_observations)\n sigma_22 = kernel_func(x, x) # dim: scalar\n # dim: (num_observations, num_observations)\n sigma_11 = kernel_func(x_obs, x_obs)\n\n inv_11 = np.linalg.inv(sigma_11 + 1e-8 * np.eye(sigma_11.shape[0]))\n mu = np.einsum('i,ij,j->', sigma_21, inv_11, y_obs)\n sigma = sigma_22 - np.einsum('j,jk,k->', sigma_21, inv_11, sigma_21)\n return mu, sigma\n\ndef generate_samples(num_samples=5, target_function=None, sigma=1):\n X = np.random.uniform(-5, 5, num_samples).reshape(-1, 1)\n Y = np.random.normal(0, sigma, num_samples)\n if target_function is not None:\n Y += target_function(X)\n return X, Y\n\ndef plot_posterior(kernel, num_samples=5, X_obs=None, Y_obs=None, ax=None, grid_size=200):\n if X_obs is None != Y_obs is None:\n raise ValueError('X_obs must be provided if Y_obs is provided.')\n if (X_obs is None or Y_obs is None) and num_samples is None:\n raise ValueError('num_samples must be provided if X_obs is provided.')\n if X_obs is None:\n assert Y_obs is None\n X_obs, Y_obs = generate_samples(num_samples)\n assert X_obs is not None and Y_obs is not None\n if X_obs.shape[0] != Y_obs.shape[0]:\n raise ValueError('The number of observations must be the same.')\n\n X_min, X_max = np.min(X_obs), np.max(X_obs)\n alpha_95 = norm.ppf(0.975)\n\n if ax is None:\n fig, ax = plt.subplots()\n else:\n fig = None\n\n X = np.linspace(X_min, X_max, grid_size)\n y = [y_posterior(x, X_obs, Y_obs, kernel) for x in X.reshape(-1, 1)]\n ax.plot(X, [y[0] for y in y], linewidth=1, label='Function')\n ax.scatter(X_obs, Y_obs, s=20, label='Observations')\n ax.fill_between(X,\n [y[0] - np.sqrt(y[1]) * alpha_95 for y in y],\n [y[0] + np.sqrt(y[1]) * alpha_95 for y in y],\n alpha=0.5, label='95% CI'\n )\n\n ax.set_xlabel('x')\n ax.set_xlabel('y')\n ax.legend()\n if fig is not None:\n fig.show()\n
def y_posterior(x, x_obs, y_obs, kernel_func): # x: (num_features) # x_obs: (num_observations, num_features) # y_obs: (num_observations) sigma_21 = kernel_func(x, x_obs) # dim: (num_observations) sigma_22 = kernel_func(x, x) # dim: scalar # dim: (num_observations, num_observations) sigma_11 = kernel_func(x_obs, x_obs) inv_11 = np.linalg.inv(sigma_11 + 1e-8 * np.eye(sigma_11.shape[0])) mu = np.einsum('i,ij,j->', sigma_21, inv_11, y_obs) sigma = sigma_22 - np.einsum('j,jk,k->', sigma_21, inv_11, sigma_21) return mu, sigma def generate_samples(num_samples=5, target_function=None, sigma=1): X = np.random.uniform(-5, 5, num_samples).reshape(-1, 1) Y = np.random.normal(0, sigma, num_samples) if target_function is not None: Y += target_function(X) return X, Y def plot_posterior(kernel, num_samples=5, X_obs=None, Y_obs=None, ax=None, grid_size=200): if X_obs is None != Y_obs is None: raise ValueError('X_obs must be provided if Y_obs is provided.') if (X_obs is None or Y_obs is None) and num_samples is None: raise ValueError('num_samples must be provided if X_obs is provided.') if X_obs is None: assert Y_obs is None X_obs, Y_obs = generate_samples(num_samples) assert X_obs is not None and Y_obs is not None if X_obs.shape[0] != Y_obs.shape[0]: raise ValueError('The number of observations must be the same.') X_min, X_max = np.min(X_obs), np.max(X_obs) alpha_95 = norm.ppf(0.975) if ax is None: fig, ax = plt.subplots() else: fig = None X = np.linspace(X_min, X_max, grid_size) y = [y_posterior(x, X_obs, Y_obs, kernel) for x in X.reshape(-1, 1)] ax.plot(X, [y[0] for y in y], linewidth=1, label='Function') ax.scatter(X_obs, Y_obs, s=20, label='Observations') ax.fill_between(X, [y[0] - np.sqrt(y[1]) * alpha_95 for y in y], [y[0] + np.sqrt(y[1]) * alpha_95 for y in y], alpha=0.5, label='95% CI' ) ax.set_xlabel('x') ax.set_xlabel('y') ax.legend() if fig is not None: fig.show() \u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u5047\u8bbe\u200b\u66f4\u200b\u76f8\u4f3c\u200b\u7684\u200b$x$\u200b\u6709\u200b\u66f4\u200b\u76f8\u4f3c\u200b\u7684\u200b$y$\uff0c\u200b\u5373\u200b$\\text{Cov}(f(x), f(x')) = d_{x, x'}$\u3002\u200b\u7528\u4e8e\u200b\u63cf\u8ff0\u200b$x$\u200b\u4e4b\u95f4\u200b\u76f8\u4f3c\u200b\u5ea6\u200b\u7684\u200b\u51fd\u6570\u200b\u79f0\u4e3a\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$d_{x, x'} = k(x, x')$\u3002\u200b\u6838\u200b\u51fd\u6570\u200b\u7684\u200b\u6570\u503c\u200b\u8d8a\u5927\u200b\uff0c\u200b\u8bf4\u660e\u200b$x$\u200b\u548c\u200b$x'$\u200b\u8d8a\u200b\u76f8\u4f3c\u200b\uff0c\u200b\u5426\u5219\u200b\u8d8a\u200b\u4e0d\u200b\u76f8\u4f3c\u200b\u3002
In\u00a0[3]: Copied! import functools\n\ndef kernel_wrapper(*args, **kwargs):\n if args:\n _kernel = args[0]\n if kwargs:\n _kernel = functools.partial(_kernel, **kwargs)\n\n @functools.wraps(_kernel)\n def new_kernel(a, b):\n if a.shape[-1] != b.shape[-1]:\n raise ValueError('The last dimension of a and b must be the same.')\n\n num_a = 1 if a.ndim == 1 else a.shape[0]\n num_b = 1 if b.ndim == 1 else b.shape[0]\n num_hidden = a.shape[-1]\n target_shape = (num_a, num_b, num_hidden)\n\n x_a = np.broadcast_to(a.reshape((num_a, 1, num_hidden)), target_shape)\n x_b = np.broadcast_to(b.reshape((1, num_b, num_hidden)), target_shape)\n\n result = _kernel(x_a, x_b)\n result_shape = [\n *([] if a.ndim == 1 else [num_a]),\n *([] if b.ndim == 1 else [num_b])\n ]\n result = result.reshape(result_shape)\n return result\n\n return new_kernel\n else:\n return functools.partial(kernel_wrapper, **kwargs)\n\n# Use the following method to define a kernel function\n# @kernel_wrapper - for kernels with no hyperparameters\n# @kernel_wrapper(hyperparameter=value) - for kernels with hyperparameters\n
import functools def kernel_wrapper(*args, **kwargs): if args: _kernel = args[0] if kwargs: _kernel = functools.partial(_kernel, **kwargs) @functools.wraps(_kernel) def new_kernel(a, b): if a.shape[-1] != b.shape[-1]: raise ValueError('The last dimension of a and b must be the same.') num_a = 1 if a.ndim == 1 else a.shape[0] num_b = 1 if b.ndim == 1 else b.shape[0] num_hidden = a.shape[-1] target_shape = (num_a, num_b, num_hidden) x_a = np.broadcast_to(a.reshape((num_a, 1, num_hidden)), target_shape) x_b = np.broadcast_to(b.reshape((1, num_b, num_hidden)), target_shape) result = _kernel(x_a, x_b) result_shape = [ *([] if a.ndim == 1 else [num_a]), *([] if b.ndim == 1 else [num_b]) ] result = result.reshape(result_shape) return result return new_kernel else: return functools.partial(kernel_wrapper, **kwargs) # Use the following method to define a kernel function # @kernel_wrapper - for kernels with no hyperparameters # @kernel_wrapper(hyperparameter=value) - for kernels with hyperparameters \u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u5e38\u7528\u200b\u7684\u200b\u6838\u200b\u51fd\u6570\u200b\u6709\u200b\uff1a
- \u200b\u7ebf\u6027\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$k(x, x'; v) = vx^Tx'$\uff0c\u200b\u5176\u4e2d\u200b$v$\u200b\u4e3a\u200b\u8d85\u200b\u53c2\u6570\u200b\u3002
In\u00a0[4]: Copied! def linear_kernel(a, b, nu=1):\n # Input: a, b: (num_a, num_b, num_hidden)\n return np.einsum('ijk,ijk->ij', a, b) * nu\n\nplot_posterior(kernel_wrapper(nu=1)(linear_kernel), grid_size=10)\n
def linear_kernel(a, b, nu=1): # Input: a, b: (num_a, num_b, num_hidden) return np.einsum('ijk,ijk->ij', a, b) * nu plot_posterior(kernel_wrapper(nu=1)(linear_kernel), grid_size=10) /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:48: RuntimeWarning: invalid value encountered in sqrt\n [y[0] - np.sqrt(y[1]) * alpha_95 for y in y],\n/var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:49: RuntimeWarning: invalid value encountered in sqrt\n [y[0] + np.sqrt(y[1]) * alpha_95 for y in y],\n/var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:57: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
- \u200b\u5e73\u65b9\u200b\u6307\u6570\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$k(x, x'; \\sigma, l) = \\sigma^2\\exp\\left(-\\frac{\\|x - x'\\|^2}{2l^2}\\right)$\uff0c$\\sigma$\u200b\u4e3a\u200b\u5e45\u5ea6\u200b\u53c2\u6570\u200b\uff0c\u200b\u63a7\u5236\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u968f\u673a\u200b\u6ce2\u52a8\u200b\u8303\u56f4\u200b\uff1b$l$\u200b\u4e3a\u200b\u957f\u5ea6\u200b\u53c2\u6570\u200b\uff0c\u200b\u63a7\u5236\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u968f\u673a\u200b\u6ce2\u52a8\u200b\u9891\u7387\u200b\u3002
In\u00a0[5]: Copied! def rbf_kernel(a, b, sigma, l):\n # Input: a, b: (num_a, num_b, num_hidden)\n return sigma ** 2 * np.exp(\n -0.5 * np.linalg.norm(a - b, axis=-1) ** 2 / l ** 2\n )\n\nplot_posterior(kernel_wrapper(sigma=1, l=1)(rbf_kernel), grid_size=80)\n
def rbf_kernel(a, b, sigma, l): # Input: a, b: (num_a, num_b, num_hidden) return sigma ** 2 * np.exp( -0.5 * np.linalg.norm(a - b, axis=-1) ** 2 / l ** 2 ) plot_posterior(kernel_wrapper(sigma=1, l=1)(rbf_kernel), grid_size=80) /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:57: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
- Matern\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$k(x, x'; \\sigma, l, \\nu) = \\frac{2^{1-\\nu}}{\\Gamma(\\nu)}\\left(\\frac{\\sqrt{2\\nu}\\|x - x'\\|}{l}\\right)^\\nu K_\\nu\\left(\\frac{\\sqrt{2\\nu}\\|x - x'\\|}{l}\\right)$\uff0c\u200b\u5176\u4e2d\u200b$\\nu$\u200b\u4e3a\u200b\u8d85\u200b\u53c2\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u63a7\u5236\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u5149\u6ed1\u5ea6\u200b\uff1b$K_\\nu$\u200b\u4e3a\u200b\u4fee\u6b63\u200bBessel\u200b\u51fd\u6570\u200b\u3002
In\u00a0[6]: Copied! from scipy.special import kn, gamma\n\ndef matern_kernel(a, b, l, nu):\n # Input: a, b: (num_a, num_b, num_hidden)\n x = (np.sqrt(2 * nu) * np.linalg.norm(a - b, axis=-1) / l)\n y = 2 ** (1 - nu) / gamma(nu) * x ** nu * kn(nu, x)\n # Replace inf with 1\n y = np.where(x < 1e-6, 1, y)\n return y\n\nplot_posterior(kernel_wrapper(l=1, nu=2)(matern_kernel), 4, grid_size=80)\n
from scipy.special import kn, gamma def matern_kernel(a, b, l, nu): # Input: a, b: (num_a, num_b, num_hidden) x = (np.sqrt(2 * nu) * np.linalg.norm(a - b, axis=-1) / l) y = 2 ** (1 - nu) / gamma(nu) * x ** nu * kn(nu, x) # Replace inf with 1 y = np.where(x < 1e-6, 1, y) return y plot_posterior(kernel_wrapper(l=1, nu=2)(matern_kernel), 4, grid_size=80) /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/497016935.py:6: RuntimeWarning: invalid value encountered in multiply\n y = 2 ** (1 - nu) / gamma(nu) * x ** nu * kn(nu, x)\n/var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:57: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
- \u200b\u5468\u671f\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$k(x, x'; \\sigma, l, p) = \\sigma^2\\exp\\left(-\\frac{2\\sin^2(\\pi\\|x - x'\\|/p)}{l^2}\\right)$\uff0c\u200b\u5176\u4e2d\u200b$p$\u200b\u4e3a\u200b\u5468\u671f\u200b\u53c2\u6570\u200b\uff0c$l$\u200b\u4e3a\u200b\u957f\u5ea6\u200b\u53c2\u6570\u200b\uff0c$\\sigma$\u200b\u4e3a\u200b\u5e45\u5ea6\u200b\u53c2\u6570\u200b\u3002
In\u00a0[7]: Copied! def periodic_kernel(a, b, sigma, l, p):\n # Input: a, b: (num_a, num_b, num_hidden)\n return sigma ** 2 * np.exp(\n -2 * np.sin(np.pi * np.linalg.norm(a - b, axis=-1) / p) ** 2 / l ** 2\n )\n\nplot_posterior(kernel_wrapper(sigma=1, l=1, p=2)(periodic_kernel), 4, grid_size=150)\n
def periodic_kernel(a, b, sigma, l, p): # Input: a, b: (num_a, num_b, num_hidden) return sigma ** 2 * np.exp( -2 * np.sin(np.pi * np.linalg.norm(a - b, axis=-1) / p) ** 2 / l ** 2 ) plot_posterior(kernel_wrapper(sigma=1, l=1, p=2)(periodic_kernel), 4, grid_size=150) /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:57: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
\u200b\u566a\u58f0\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$k(x, x'; \\sigma, l) = \\sigma^2\\delta_{x, x'}$\uff0c\u200b\u5176\u4e2d\u200b$\\delta_{x, x'}$\u200b\u4e3a\u200bKronecker delta\u200b\u51fd\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u6355\u83b7\u200b\u89c2\u6d4b\u200b\u6570\u636e\u200b\u7684\u200b\u566a\u58f0\u200b\u3002
$$ \\delta(x, x') = \\begin{cases} 1, & x = x' \\\\ 0, & x \\neq x' \\end{cases} $$
In\u00a0[8]: Copied! def noise_kernel(a, b, sigma):\n return sigma ** 2 * np.all((a == b), axis=-1)\n\nplot_posterior(kernel_wrapper(sigma=1)(noise_kernel), 5)\n
def noise_kernel(a, b, sigma): return sigma ** 2 * np.all((a == b), axis=-1) plot_posterior(kernel_wrapper(sigma=1)(noise_kernel), 5) /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:57: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
\u200b\u5728\u200b\u5b9e\u9645\u200b\u5e94\u7528\u200b\u4e2d\u200b\uff0c\u200b\u9700\u8981\u200b\u6839\u636e\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u5df2\u77e5\u200b\u7684\u200b\u7279\u6027\u200b\uff0c\u200b\u8bbe\u8ba1\u200b\u5408\u9002\u200b\u7684\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a\u200b\u5982\u679c\u200b\u51fd\u6570\u200b\u4e2d\u200b\u5305\u542b\u200b\u5468\u671f\u6027\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5468\u671f\u200b\u6838\u200b\u51fd\u6570\u200b\uff1b\u200b\u5982\u679c\u200b\u51fd\u6570\u200b\u503c\u200b\u5728\u200b\u76f8\u4f3c\u200b\u7684\u200b$x$\u200b\u4e4b\u95f4\u200b\u53d8\u5316\u200b\u8f83\u200b\u5c0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5e73\u65b9\u200b\u6307\u6570\u200b\u6838\u200b\u51fd\u6570\u200b\u3002
\u200b\u5982\u200b\u5bf9\u4e8e\u200b\u51fd\u6570\u200b
$$ f(x) = \\sin(\\pi x) + 0.3 x^2 + \\varepsilon $$
\u200b\u9700\u8981\u200b\u540c\u65f6\u200b\u5f15\u5165\u200b\u5468\u671f\u200b\u6838\u200b\u51fd\u6570\u200b\u548c\u200b\u5e73\u65b9\u200b\u6307\u6570\u200b\u6838\u200b\u51fd\u6570\u200b\uff0c\u200b\u624d\u80fd\u200b\u8f83\u200b\u597d\u200b\u5730\u200b\u9884\u6d4b\u200b\u51fd\u6570\u200b\u503c\u200b\u3002
In\u00a0[9]: Copied! def target_function(X):\n x = X.reshape(-1)\n return np.sin(x * 2 * 3.14 / 2) + x ** 2 * 0.3\n\n\ndef plot_function(func, ax, X_min=-5, X_max=5, grid_size=200, **kwargs):\n X = np.linspace(X_min, X_max, grid_size)\n Y = func(X.reshape(-1, 1))\n ax.plot(X, Y, **kwargs)\n\nfig, ax = plt.subplots(figsize=(4, 4))\nplot_function(target_function, ax, grid_size=100)\nax.set_xlabel('x')\nax.set_ylabel('y')\nax.set_title('Target Function')\nfig.show()\n
def target_function(X): x = X.reshape(-1) return np.sin(x * 2 * 3.14 / 2) + x ** 2 * 0.3 def plot_function(func, ax, X_min=-5, X_max=5, grid_size=200, **kwargs): X = np.linspace(X_min, X_max, grid_size) Y = func(X.reshape(-1, 1)) ax.plot(X, Y, **kwargs) fig, ax = plt.subplots(figsize=(4, 4)) plot_function(target_function, ax, grid_size=100) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_title('Target Function') fig.show() /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/4237481582.py:16: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
In\u00a0[10]: Copied! periodic = kernel_wrapper(sigma=1, l=1, p=2)(periodic_kernel)\nrbf = kernel_wrapper(sigma=1, l=1)(rbf_kernel)\nnoise = kernel_wrapper(sigma=0.1)(noise_kernel)\n\ndef added(a, b):\n return periodic(a, b) + rbf(a, b) + noise(a, b)\n\nkernels = {\n 'Periodic': periodic,\n 'RBF': rbf,\n 'Hybrid': added\n}\n\nX_obs, Y_obs = generate_samples(10, target_function, sigma=0.5)\nX_min, X_max = np.min(X_obs), np.max(X_obs)\n\nfig, axes = plt.subplots(1, 3, figsize=(10, 3))\nfor ax, (name, kernel) in zip(axes, kernels.items()):\n plot_posterior(kernel, X_obs=X_obs, Y_obs=Y_obs, ax=ax, grid_size=150)\n plot_function(target_function, ax, X_min, X_max, color='red', label='Target Function', grid_size=100)\n ax.set_title(f'{name} Kernel')\n ax.get_legend().remove()\nfig.show()\n
periodic = kernel_wrapper(sigma=1, l=1, p=2)(periodic_kernel) rbf = kernel_wrapper(sigma=1, l=1)(rbf_kernel) noise = kernel_wrapper(sigma=0.1)(noise_kernel) def added(a, b): return periodic(a, b) + rbf(a, b) + noise(a, b) kernels = { 'Periodic': periodic, 'RBF': rbf, 'Hybrid': added } X_obs, Y_obs = generate_samples(10, target_function, sigma=0.5) X_min, X_max = np.min(X_obs), np.max(X_obs) fig, axes = plt.subplots(1, 3, figsize=(10, 3)) for ax, (name, kernel) in zip(axes, kernels.items()): plot_posterior(kernel, X_obs=X_obs, Y_obs=Y_obs, ax=ax, grid_size=150) plot_function(target_function, ax, X_min, X_max, color='red', label='Target Function', grid_size=100) ax.set_title(f'{name} Kernel') ax.get_legend().remove() fig.show() /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:48: RuntimeWarning: invalid value encountered in sqrt\n [y[0] - np.sqrt(y[1]) * alpha_95 for y in y],\n/var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:49: RuntimeWarning: invalid value encountered in sqrt\n [y[0] + np.sqrt(y[1]) * alpha_95 for y in y],\n/var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/1232705018.py:23: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u4e0d\u9002\u200b\u7528\u4e8e\u200b\u4ee5\u4e0b\u200b\u573a\u666f\u200b\uff1a
- \u200b\u6570\u636e\u91cf\u200b\u8f83\u5927\u200b\u65f6\u200b\uff0c\u200b\u7531\u4e8e\u200b\u8ba1\u7b97\u200b$m$\u200b\u7ef4\u200b\u77e9\u9635\u200b\u9006\u200b\u7684\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b$O(m^3)$\uff0c\u200b\u8ba1\u7b97\u200b\u590d\u6742\u5ea6\u200b\u8f83\u200b\u9ad8\u200b\u3002
- \u200b\u6570\u636e\u200b\u7ef4\u5ea6\u200b\u8f83\u200b\u9ad8\u65f6\u200b\uff0c\u200b\u7ef4\u5ea6\u200b\u707e\u96be\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u6838\u200b\u51fd\u6570\u200b\u5bb9\u6613\u200b\u9000\u5316\u200b\uff0c\u200b\u65e0\u6cd5\u200b\u6355\u83b7\u200b\u6570\u636e\u200b\u4e4b\u95f4\u200b\u7684\u200b\u76f8\u4f3c\u6027\u200b\u3002
- \u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u9884\u6d4b\u200b\u7ed3\u679c\u200b\u662f\u200b\u8fde\u7eed\u200b\u7684\u200b\uff0c\u200b\u65e0\u6cd5\u200b\u76f4\u63a5\u200b\u5904\u7406\u200b\u8fde\u7eed\u200b\u6570\u636e\u200b\u3002
"},{"location":"coding/machine-learning/gaussian-process/","title":"\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u00b6","text":""},{"location":"coding/machine-learning/linear-models/","title":"\u7ebf\u6027\u200b\u6a21\u578b","text":"In\u00a0[\u00a0]: Copied! import numpy as np\nimport pandas as pd\n\ndf = pd.read_csv('data/melon3.0a.csv')\nX_rcol, y_rcol = df.columns[1:-2], df.columns[-2] # columns used for regression\nX_ccol, y_ccol = df.columns[1:-1], df.columns[-1] # columns used for classification\nvalue_map = {\n '\u200b\u8272\u6cfd\u200b': {'\u200b\u6d45\u767d\u200b': 0, '\u200b\u9752\u7eff\u200b': 1, '\u200b\u4e4c\u9ed1\u200b': 2},\n '\u200b\u6839\u8482\u200b': {'\u200b\u8737\u7f29\u200b': 0, '\u200b\u7a0d\u200b\u8737\u200b': 1, '\u200b\u786c\u633a\u200b': 2},\n '\u200b\u6572\u58f0\u200b': {'\u200b\u6c89\u95f7\u200b': 0, '\u200b\u6d4a\u54cd\u200b': 1, '\u200b\u6e05\u8106\u200b': 2},\n '\u200b\u7eb9\u7406\u200b': {'\u200b\u6a21\u7cca\u200b': 0, '\u200b\u7a0d\u7cca\u200b': 1, '\u200b\u6e05\u6670\u200b': 2},\n '\u200b\u8110\u90e8\u200b': {'\u200b\u51f9\u9677\u200b': 0, '\u200b\u7a0d\u200b\u51f9\u200b': 1, '\u200b\u5e73\u5766\u200b': 2},\n '\u200b\u89e6\u611f\u200b': {'\u200b\u786c\u6ed1\u200b': 0, '\u200b\u8f6f\u200b\u7c98\u200b': 1},\n '\u200b\u597d\u74dc\u200b': {'\u200b\u662f\u200b': 1, '\u200b\u5426\u200b': 0},\n}\nfor col in value_map:\n df[col] = df[col].map(value_map[col])\n\nX = np.concatenate([df[X_rcol].values, np.ones((df.shape[0], 1))], axis=1)\ny = df[y_rcol].values.reshape(-1, 1)\n\ndef linear_regression(X, y):\n return np.linalg.inv(X.T @ X) @ X.T @ y\n\nlinear_regression(X, y).T\n
import numpy as np import pandas as pd df = pd.read_csv('data/melon3.0a.csv') X_rcol, y_rcol = df.columns[1:-2], df.columns[-2] # columns used for regression X_ccol, y_ccol = df.columns[1:-1], df.columns[-1] # columns used for classification value_map = { '\u200b\u8272\u6cfd\u200b': {'\u200b\u6d45\u767d\u200b': 0, '\u200b\u9752\u7eff\u200b': 1, '\u200b\u4e4c\u9ed1\u200b': 2}, '\u200b\u6839\u8482\u200b': {'\u200b\u8737\u7f29\u200b': 0, '\u200b\u7a0d\u200b\u8737\u200b': 1, '\u200b\u786c\u633a\u200b': 2}, '\u200b\u6572\u58f0\u200b': {'\u200b\u6c89\u95f7\u200b': 0, '\u200b\u6d4a\u54cd\u200b': 1, '\u200b\u6e05\u8106\u200b': 2}, '\u200b\u7eb9\u7406\u200b': {'\u200b\u6a21\u7cca\u200b': 0, '\u200b\u7a0d\u7cca\u200b': 1, '\u200b\u6e05\u6670\u200b': 2}, '\u200b\u8110\u90e8\u200b': {'\u200b\u51f9\u9677\u200b': 0, '\u200b\u7a0d\u200b\u51f9\u200b': 1, '\u200b\u5e73\u5766\u200b': 2}, '\u200b\u89e6\u611f\u200b': {'\u200b\u786c\u6ed1\u200b': 0, '\u200b\u8f6f\u200b\u7c98\u200b': 1}, '\u200b\u597d\u74dc\u200b': {'\u200b\u662f\u200b': 1, '\u200b\u5426\u200b': 0}, } for col in value_map: df[col] = df[col].map(value_map[col]) X = np.concatenate([df[X_rcol].values, np.ones((df.shape[0], 1))], axis=1) y = df[y_rcol].values.reshape(-1, 1) def linear_regression(X, y): return np.linalg.inv(X.T @ X) @ X.T @ y linear_regression(X, y).T \u200b\u635f\u5931\u200b\u51fd\u6570\u200b\u4e3a\u5747\u65b9\u200b\u8bef\u5dee\u200b
In\u00a0[\u00a0]: Copied! def mse_loss(X, y, w):\n return np.mean((X @ w - y) ** 2)\n\nmse_loss(X, y, linear_regression(X, y))\n
def mse_loss(X, y, w): return np.mean((X @ w - y) ** 2) mse_loss(X, y, linear_regression(X, y)) \u200b\u5f53\u200b\u6837\u672c\u200b\u77e9\u9635\u200b\u975e\u6ee1\u200b\u79e9\u65f6\u200b\uff0c\u200b\u5b58\u5728\u200b\u591a\u4e2a\u200b\u6ee1\u8db3\u200b\u8bad\u7ec3\u200b\u96c6\u200b\u7684\u200b\u6a21\u578b\u200b\uff0c\u200b\u6b64\u65f6\u200b\u53ef\u4ee5\u200b\u5728\u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\u4e2d\u200b\u52a0\u5165\u200b\u6b63\u5219\u200b\u5316\u9879\u200b\uff0c\u200b\u5982\u200bL2-norm\u200b\u5373\u200b\u52a0\u5165\u200b\u6743\u91cd\u200b\u7684\u200b\u5e73\u65b9\u200b\u4e4b\u200b\u548c\u200b\u3002\u200b\u7136\u540e\u200b\u4f7f\u7528\u200b\u68af\u5ea6\u200b\u4e0b\u964d\u200b\u7b49\u200b\u6570\u503c\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\u3002
In\u00a0[\u00a0]: Copied! class SGD():\n def __init__(self, d, lr=0.01, epochs=1000):\n self.d = d\n self.lr = lr\n self.epochs = epochs\n\n def __call__(self, X, y):\n w = np.random.normal(0, 1, size=(X.shape[1], 1))\n for _ in range(self.epochs):\n w -= self.lr * self.d(X, y, w)\n return w\n\noptim_l2 = SGD(lambda X, y, w: X.T @ (X @ w - y) + 0.1 * w)\n\nw = optim_l2(X, y)\nprint(w.T, mse_loss(X, y, w))\n
class SGD(): def __init__(self, d, lr=0.01, epochs=1000): self.d = d self.lr = lr self.epochs = epochs def __call__(self, X, y): w = np.random.normal(0, 1, size=(X.shape[1], 1)) for _ in range(self.epochs): w -= self.lr * self.d(X, y, w) return w optim_l2 = SGD(lambda X, y, w: X.T @ (X @ w - y) + 0.1 * w) w = optim_l2(X, y) print(w.T, mse_loss(X, y, w)) \u200b\u5bf9\u7387\u200b\u56de\u5f52\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u7ebf\u6027\u200b\u6a21\u578b\u200b\u5e94\u7528\u200b\u5230\u200b\u4e8c\u200b\u5206\u7c7b\u200b\u95ee\u9898\u200b\u4e0a\u200b\u3002\u200b\u5bf9\u7387\u200b\u56de\u5f52\u200b\u9700\u8981\u200b\u7528\u5230\u200blogit\u200b\u51fd\u6570\u200b\u5c06\u200b\u8fde\u7eed\u200b\u7684\u200b\u56de\u5f52\u200b\u503c\u200b\u6620\u5c04\u200b\u5230\u200b $(0, 1)$ \u200b\u4e0a\u200b
$$ f(x) = \\frac{1}{1 + e^{-x}} $$
In\u00a0[\u00a0]: Copied! X = df[X_ccol].values\ny = df[y_ccol].values.reshape(-1, 1)\n\ndef sigmoid(x):\n return 1 / (1 + np.exp(-x))\n\ndef precision(X, y, w):\n return np.mean((sigmoid(X @ w) > 0.5) == y)\n
X = df[X_ccol].values y = df[y_ccol].values.reshape(-1, 1) def sigmoid(x): return 1 / (1 + np.exp(-x)) def precision(X, y, w): return np.mean((sigmoid(X @ w) > 0.5) == y) \u200b\u4f7f\u7528\u200b\u6781\u5927\u200b\u4f3c\u7136\u6cd5\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u5bf9\u7387\u200b\u56de\u5f52\u200b\u7684\u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b
$$ l(\\boldsymbol w) = \\sum_{i=1}^m \\left(-\\boldsymbol y_i\\boldsymbol \\beta^\\top \\boldsymbol x_i + \\ln \\left(1 + e^{\\boldsymbol \\beta^\\top \\boldsymbol x_i}\\right) \\right) $$
In\u00a0[\u00a0]: Copied! optim_logit = SGD(lambda X, y, w: X.T @ (sigmoid(X @ w) - y))\n\nw = optim_logit(X, y)\nprint(w.T, precision(X, y, w))\n
optim_logit = SGD(lambda X, y, w: X.T @ (sigmoid(X @ w) - y)) w = optim_logit(X, y) print(w.T, precision(X, y, w)) In\u00a0[\u00a0]: Copied! def cov(X, a, b):\n return np.mean((X[:, a] - np.mean(X[:, a])) * (X[:, b] - np.mean(X[:, b])))\n\ndef cov_matrix(X):\n return np.array([\n [\n cov(X, i, j)\n for i in range(X.shape[1])\n ]\n for j in range(X.shape[1])\n ])\n\nsw = cov_matrix(X[y[:, 0] == 0]) + cov_matrix(X[y[:, 0] == 1])\nmu0, mu1 = np.mean(X[y[:, 0] == 0], axis=0), np.mean(X[y[:, 0] == 1], axis=0)\nw = np.linalg.inv(sw) @ (mu0 - mu1).reshape(-1, 1)\nc0, c1 = w.T @ mu0, w.T @ mu1\n\ndef precision(X, y, w):\n return np.mean((X @ w < (c0 + c1) / 2) == y)\n\nprecision(X, y, w)\n
def cov(X, a, b): return np.mean((X[:, a] - np.mean(X[:, a])) * (X[:, b] - np.mean(X[:, b]))) def cov_matrix(X): return np.array([ [ cov(X, i, j) for i in range(X.shape[1]) ] for j in range(X.shape[1]) ]) sw = cov_matrix(X[y[:, 0] == 0]) + cov_matrix(X[y[:, 0] == 1]) mu0, mu1 = np.mean(X[y[:, 0] == 0], axis=0), np.mean(X[y[:, 0] == 1], axis=0) w = np.linalg.inv(sw) @ (mu0 - mu1).reshape(-1, 1) c0, c1 = w.T @ mu0, w.T @ mu1 def precision(X, y, w): return np.mean((X @ w < (c0 + c1) / 2) == y) precision(X, y, w)"},{"location":"coding/machine-learning/linear-models/","title":"\u7ebf\u6027\u200b\u6a21\u578b\u200b\u00b6","text":"\u200b\u4ee5\u4e0b\u200b\u4f7f\u7528\u200bPython\u200b\u5b9e\u73b0\u200b\u57fa\u4e8e\u200b\u7ebf\u6027\u5173\u7cfb\u200b\u7684\u200b\u5404\u79cd\u200b\u673a\u5668\u200b\u5b66\u4e60\u200b\u6a21\u578b\u200b
"},{"location":"coding/machine-learning/linear-models/","title":"\u591a\u5143\u200b\u7ebf\u6027\u200b\u56de\u5f52\u200b\u00b6","text":"\u200b\u591a\u5143\u200b\u7ebf\u6027\u200b\u56de\u5f52\u200b\u7684\u200b\u4e00\u822c\u200b\u5f62\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
$$ \\hat{\\boldsymbol y} = f(\\boldsymbol x) = \\boldsymbol w^\\top \\boldsymbol x + b $$
\u200b\u5f53\u200b\u6837\u672c\u200b\u77e9\u9635\u200b$\\boldsymbol X$\u200b\u6ee1\u200b\u79e9\u65f6\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u4e3a\u200b
$$ \\newcommand{\\bmX}{\\boldsymbol X} \\hat{\\boldsymbol w}^* = (\\bmX^\\top\\bmX)^{-1}\\bmX^\\top \\boldsymbol y $$
"},{"location":"coding/machine-learning/linear-models/#lda","title":"LDA\u00b6","text":"LDA\u200b\u662f\u200b\u7ebf\u6027\u200b\u5224\u522b\u5206\u6790\u200b\u7684\u200b\u7b80\u79f0\u200b\uff0c\u200b\u5c5e\u4e8e\u200b\u5206\u7c7b\u200b\u7b97\u6cd5\u200b\u3002\u200b\u8be5\u200b\u7b97\u6cd5\u200b\u7684\u200b\u6838\u5fc3\u200b\u601d\u8def\u200b\u4e3a\u200b\u5c06\u200b\u6837\u672c\u200b\u70b9\u200b\u6295\u5f71\u200b\u5230\u200b $n$ \u200b\u7ef4\u7a7a\u95f4\u200b\u7684\u200b\u5e73\u9762\u200b\u4e0a\u200b\uff0c\u200b\u901a\u8fc7\u200b\u9009\u62e9\u200b\u5e73\u9762\u200b\uff0c\u200b\u6700\u5c0f\u5316\u200b\u540c\u4e00\u200b\u7c7b\u522b\u200b\u5185\u200b\u6837\u672c\u200b\u70b9\u200b\u6295\u5f71\u200b\u7684\u200b\u8ddd\u79bb\u200b\uff0c\u200b\u540c\u65f6\u200b\u6700\u5927\u5316\u200b\u4e0d\u540c\u200b\u7c7b\u522b\u200b\u6837\u672c\u200b\u70b9\u200b\u6295\u5f71\u200b\u7684\u200b\u8ddd\u79bb\u200b\u3002
"},{"location":"coding/python/","title":"Python","text":" - \u200b\u5173\u95ed\u200bPython\u200b\u7ebf\u7a0b\u200b
- Python\u200b\u4e2d\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b
- \u200b\u5e8f\u5217\u200b\u7c7b\u578b\u200b
- \u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b
- \u200b\u5b57\u8282\u200b\u7c7b\u578b\u200b
- \u200b\u51fd\u6570\u200b
"},{"location":"coding/python/bytes/","title":"Python\u200b\u4e2d\u200b\u7684\u200b\u5b57\u8282\u200b\u7c7b\u578b","text":"Python\u200b\u4e2d\u200b\u7684\u200b\u5b57\u8282\u200b\u7c7b\u578b\u200b\u5305\u62ec\u200b\u5b57\u8282\u200b\u6d41\u200b\u4e0e\u200b\u5b57\u7b26\u4e32\u200b\u3002
\u200b\u5b57\u7b26\u4e32\u200b\u662f\u200b\u7531\u200b\u5b57\u7b26\u200b\u7ec4\u6210\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002\u200b\u5b57\u7b26\u200b\u662f\u200b\u7ec4\u6210\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u57fa\u672c\u200b\u5355\u4f4d\u200b\uff0c\u200b\u5bf9\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5207\u7247\u200b\u7b49\u200b\u64cd\u4f5c\u200b\u4ee5\u200b\u5b57\u7b26\u200b\u4e3a\u200b\u5355\u4f4d\u200b\u8fdb\u884c\u200b\u3002\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u7531\u200b\u4e24\u4e2a\u200b\u90e8\u5206\u200b\u8fdb\u884c\u200b\u5b9a\u4e49\u200b\uff1a
- \u200b\u7801\u4f4d\u200b\uff0c\u200b\u5373\u200b\u5b57\u7b26\u200b\u7684\u200b\u5b57\u8282\u200b\u6570\u503c\u200b\u3002
- \u200b\u7f16\u7801\u65b9\u5f0f\u200b\uff0c\u200b\u5373\u200b\u5b57\u8282\u200b\u6570\u503c\u200b\u4e0e\u200b\u5b57\u7b26\u200b\u7684\u200b\u5bf9\u5e94\u200b\u5173\u7cfb\u200b\u3002
\u200b\u901a\u8fc7\u200b\u7f16\u7801\u200b\u4e0e\u200b\u89e3\u7801\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u5b57\u7b26\u4e32\u200b\u4e0e\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u4e4b\u95f4\u200b\u7684\u200b\u8f6c\u6362\u200b\uff1a
>>> \"abc\".encode() \nb'abc'\n>>> b\"abc\".decode()\n'abc'\n>>>\n
Python\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4e24\u79cd\u200b\u5b57\u8282\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5373\u200bbytes
\u200b\u4e0e\u200bbytearray
\uff0c\u200b\u4e24\u8005\u200b\u90fd\u200b\u662f\u200b\u7531\u200b\u65e0\u200b\u7b26\u53f7\u200b\u5b57\u8282\u200b\uff08\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b0~255\uff09\u200b\u4e3a\u200b\u5355\u4f4d\u200b\u7ec4\u6210\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002bytes
\u200b\u662f\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\u3002
>>> b\"\\xff\\xff\"[0]\n255\n>>> bytes(3)[0]=1 \nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: 'bytes' object does not support item assignment\n>>>\n
New in version 3.5
bytes
\u200b\u5bf9\u8c61\u200b\u4e0e\u200bbytearray
\u200b\u5bf9\u8c61\u200b\u6dfb\u52a0\u200b\u4e86\u200bhex
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5b57\u8282\u200b\u7684\u200b\u5341\u516d\u8fdb\u5236\u200b\u8868\u793a\u200b\u5f62\u5f0f\u200b\u3002\u200b\u8be5\u200b\u51fd\u6570\u200b\u4e0e\u200bbytes
\u200b\u5bf9\u8c61\u200b\u7684\u200bfromhex
\u200b\u65b9\u6cd5\u200b\u76f8\u53cd\u200b\u3002
>>> import random\n>>> seq = random.randbytes(8) # New in Python 3.9\n>>> seq.hex() # doctest: +SKIP\n'f04be4376519e9ce'\n>>>\n
Changed in version 3.8
hex
\u200b\u65b9\u6cd5\u200b\u65b0\u589e\u200b\u4e86\u200b\u53ef\u9009\u200b\u7684\u200bsep
\u200b\u53c2\u6570\u200b\u4e0e\u200bbytes_per_sep
\u200b\u53c2\u6570\u200b\u3002
sep
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\u533a\u6bb5\u200b\u95f4\u200b\u7684\u200b\u8fde\u63a5\u200b\u5b57\u7b26\u4e32\u200b\uff1b bytes_per_sep
\u200b\u53c2\u6570\u200b\u7528\u4e8e\u200b\u5212\u5206\u200b\u8fde\u7eed\u200b\u7684\u200b\u5b57\u8282\u200b\u6bb5\u200b\uff0c\u200b\u5b57\u8282\u200b\u6bb5\u200b\u4ece\u200b\u53f3\u200b\u5f80\u200b\u5de6\u200b\u8fdb\u884c\u200b\u5212\u5206\u200b\u3002
# Following the previous example\n>>> seq.hex('-') # doctest: +SKIP\n'f0-4b-e4-37-65-19-e9-ce'\n>>> seq.hex('-', 2) # doctest: +SKIP\n'f04b-e437-6519-e9ce'\n>>> seq.hex('-', 3) # doctest: +SKIP\n'f04b-e43765-19e9ce'\n>>>\n
\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u5b57\u8282\u200b\u6709\u200b\u4e09\u79cd\u200b\u8868\u793a\u200b\u65b9\u5f0f\u200b\uff1a
- ASCII\u200b\u4e2d\u200b\u89c4\u5b9a\u200b\u7684\u200b\u53ef\u200b\u6253\u5370\u200b\u5b57\u7b26\u200b\uff0c\u200b\u4f7f\u7528\u200b\u8be5\u200b\u5b57\u7b26\u200b\u672c\u8eab\u200b
- \u200b\u5236\u8868\u7b26\u200b\u3001\u200b\u6362\u884c\u7b26\u200b\u3001\u200b\u56de\u8f66\u7b26\u200b\u4e0e\u200b\u53cd\u200b\u659c\u6760\u200b\u4f7f\u7528\u200b\u5bf9\u5e94\u200b\u7684\u200b\u8f6c\u4e49\u5e8f\u5217\u200b\u8868\u793a\u200b\uff0c\u200b\u5373\u200b
\\t, \\n, \\r, \\\\
- \u200b\u6240\u6709\u200b\u5b57\u8282\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5341\u516d\u8fdb\u5236\u200b\u8f6c\u4e49\u5e8f\u5217\u200b\u8868\u793a\u200b\uff0c\u200b\u5982\u200b
\\x00
>>> b\"\\t\" == b\"\\x09\"\nTrue\n>>>\n
\u200b\u5b57\u7b26\u4e32\u200b\u4e0e\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200b\u533a\u522b\u200b\u5728\u4e8e\u200b\uff1a\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u7d22\u5f15\u200b\u4e0e\u200b\u5207\u7247\u200b\u64cd\u4f5c\u200b\u8fd4\u56de\u200b\u7684\u200b\u5bf9\u8c61\u200b\u90fd\u200b\u662f\u200b\u5b57\u7b26\u4e32\u200b\u7c7b\u578b\u200b\uff1b\u200b\u800c\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200b\u7d22\u5f15\u200b\u64cd\u4f5c\u200b\u8fd4\u56de\u200bint
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5207\u7247\u200b\u64cd\u4f5c\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u3002
"},{"location":"coding/python/bytes/#_1","title":"\u6784\u9020","text":"\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u6784\u9020\u200b\u975e\u5e38\u7b80\u5355\u200b\uff0c\u200b\u6b64\u5904\u200b\u4e0d\u200b\u505a\u200b\u8ba8\u8bba\u200b\u3002\u200b\u5728\u200b\u5b57\u7b26\u4e32\u200b\u524d\u52a0\u200br
\u200b\u53ef\u4ee5\u200b\u53d6\u6d88\u200b\u5b57\u7b26\u4e32\u200b\u5185\u90e8\u200b\u7684\u200b\u8f6c\u4e49\u200b\uff0c\u200b\u5982\u200b\uff1a
>>> print(r\"ab\\n\") \nab\\n\n>>>\n
\u200b\u5728\u200b\u5b57\u7b26\u4e32\u200b\u524d\u52a0\u200bb
\u200b\u53ef\u4ee5\u200b\u6784\u9020\u200b\u4e00\u4e2a\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u3002\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u53ea\u80fd\u200b\u5305\u542b\u200bASCII\u200b\u53ef\u200b\u6253\u5370\u200b\u5b57\u7b26\u200b\u3002
\u200b\u9664\u6b64\u4e4b\u5916\u200b\uff0c\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u8fd8\u6709\u200b\u5982\u4e0b\u200b\u6784\u9020\u200b\u65b9\u5f0f\u200b\uff1a
- \u200b\u6307\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u548c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7f16\u7801\u65b9\u5f0f\u200b\uff0c\u200b\u5c06\u200b\u8be5\u200b\u5b57\u7b26\u4e32\u200b\u7f16\u7801\u200b\u4e3a\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b
- \u200b\u4e00\u4e2a\u200b\u4ec5\u200b\u5305\u542b\u200b
0~255
\u200b\u5185\u200b\u6570\u503c\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b - \u200b\u4e00\u4e2a\u200b\u5b9e\u73b0\u200b\u7f13\u51b2\u200b\u534f\u8bae\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5c06\u200b\u8be5\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u590d\u5236\u5230\u200b\u65b0\u200b\u7684\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u4e2d\u200b\uff08\u200b\u53ef\u80fd\u200b\u6d89\u53ca\u200b\u7c7b\u578b\u8f6c\u6362\u200b\uff09
- \u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\uff0c\u200b\u521b\u5efa\u200b\u5bf9\u5e94\u200b\u957f\u5ea6\u200b\u7684\u200b\u7a7a\u200b\u5b57\u8282\u200b\u5bf9\u8c61\u200b
\u200b\u5982\u200b\uff0c\u200b\u4ece\u200barray.array
\u200b\u5bf9\u8c61\u200b\u521b\u5efa\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\uff1a
>>> import array \n>>> import random\n>>> a = array.array(\"H\", [51417, 45016, 65120, 9976])\n>>> b = bytes(a)\n>>> b\nb'\\xd9\\xc8\\xd8\\xaf`\\xfe\\xf8&'\n>>>\n
"},{"location":"coding/python/bytes/#_2","title":"\u7ed3\u6784\u200b\u4f53","text":"struct
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5c06\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u5b57\u6bb5\u200b\u7684\u200b\u5143\u7ec4\u200b\uff0c\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bC\u200b\u8bed\u8a00\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u529f\u80fd\u200b\u3002
"},{"location":"coding/python/bytes/#_3","title":"\u7ed3\u6784\u200b\u5b9a\u4e49","text":"\u200b\u7ed3\u6784\u200b\u5b9a\u4e49\u200b\u5305\u542b\u200b\u4e24\u4e2a\u200b\u90e8\u5206\u200b\uff0c\u200b\u5373\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\u4e0e\u200b\u5b57\u200b\u6bb5\u200b\u3002struct
\u200b\u6a21\u5757\u200b\u5141\u8bb8\u200b\u591a\u79cd\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b
\u200b\u5b57\u7b26\u200b \u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b \u200b\u5927\u5c0f\u200b \u200b\u5bf9\u9f50\u200b\u65b9\u5f0f\u200b @
native native native =
native standard none <
little-endian standard none >
big-endian standard none !
network (= big-endian) standard none \u200b\u9ed8\u8ba4\u200b\u7684\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\u4e3a\u200b@
\u3002
struct
\u200b\u6a21\u5757\u200b\u7684\u200b\u5b57\u200b\u6bb5\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff0c\u200b\u6240\u6709\u200b\u7684\u200b\u5b57\u200b\u6bb5\u200b\u5728\u200bC\u200b\u8bed\u8a00\u200b\u4e2d\u200b\u90fd\u200b\u6709\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7c7b\u578b\u200b\uff1a
\u200b\u5b57\u7b26\u200b C \u200b\u7c7b\u578b\u200b Python \u200b\u7c7b\u578b\u200b \u200b\u5b57\u200b\u5bbd\u200b x
\uff08\u200b\u586b\u5145\u200b\u5b57\u8282\u200b\uff09 N/A c
char
\u200b\u957f\u5ea6\u200b\u4e3a\u200b1\u200b\u7684\u200b\u5b57\u8282\u200b 1 b
signed char
int
1 B
unsigned char
int
1 ?
_Bool
bool
1 h
short
int
2 H
unsigned short
int
2 i
int
int
4 I
unsigned int
int
4 l
long
int
4 L
unsigned long
int
4 q
long long
int
8 Q
unsigned long long
int
8 n
ssize_t
int
\uff08\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u9ed8\u8ba4\u200b\u6216\u200b@
\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\uff09 N
size_t
int
\uff08\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u9ed8\u8ba4\u200b\u6216\u200b@
\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\uff09 e
\uff08\u200b\u534a\u200b\u7cbe\u5ea6\u200b\uff09 float
2 f
float
float
4 d
double
float
8 s
char[]
bytes
\u200b\u4e0e\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u6709\u5173\u200b p
char[]
bytes
\u200b\u4e0e\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u6709\u5173\u200b P
void *
int
\u200b\u5f53\u200b\u8bd5\u56fe\u200b\u5c06\u200b\u975e\u200b\u6574\u6570\u200b\u5bf9\u8c61\u200b\u6253\u5305\u200b\u4e3a\u200b\u6574\u6570\u200b\u7c7b\u578b\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u7684\u200b__index__
\u200b\u65b9\u6cd5\u200b\u3002
\u200b\u4e00\u4e2a\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u5b9a\u4e49\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u7ed3\u6784\u200b\u7ec4\u7ec7\u200b\uff1a
- \u200b\u7b2c\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u8868\u793a\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b
- \u200b\u6b64\u540e\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\u8868\u793a\u200b\u7ed3\u6784\u200b\u4f53\u4e2d\u200b\u7684\u200b\u5b57\u200b\u6bb5\u200b\u7c7b\u578b\u200b
- \u200b\u9664\u200b
s
\u200b\u548c\u200bp
\u200b\u4ee5\u5916\u200b\uff0c\u200b\u5b57\u6bcd\u200b\u524d\u200b\u7684\u200b\u6570\u5b57\u200b\u8868\u660e\u200b\u8be5\u5b57\u6bb5\u200b\u91cd\u590d\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b s
\u3001p
\u200b\u524d\u200b\u7684\u200b\u6570\u5b57\u200b\u8868\u660e\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u957f\u5ea6\u200b
\u200b\u7ed3\u6784\u200b\u4f53\u200b\u5b57\u7b26\u4e32\u200b\u53ef\u4ee5\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200bstruct.Struct
\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u4e24\u8005\u200b\u5b9e\u73b0\u200b\u76f8\u540c\u200b\u7684\u200b\u529f\u80fd\u200b\u3002
"},{"location":"coding/python/bytes/#_4","title":"\u7ed3\u6784\u200b\u64cd\u4f5c","text":"\u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u5b9a\u4e49\u200b\u7684\u200b\u7ed3\u6784\u200b\u4f53\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u6570\u636e\u200b\u6309\u7167\u200b\u7ed3\u6784\u200b\u4f53\u200b\u8fdb\u884c\u200b\u6253\u5305\u200b\uff0c\u200b\u6216\u200b\u5c06\u200b\u7ed3\u6784\u200b\u4f53\u4e2d\u200b\u7684\u200b\u6570\u636e\u200b\u89e3\u5305\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u663e\u793a\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u5927\u5c0f\u200b\u3002
>>> import struct \n>>> struct.pack('<hhf', 1, 2, 3)\nb'\\x01\\x00\\x02\\x00\\x00\\x00@@'\n>>> struct.unpack('<hhf', b'\\x01\\x00\\x02\\x00\\x00\\x00@@')\n(1, 2, 3.0)\n>>>\n
New in version 3.4
struct
\u200b\u5bf9\u8c61\u200b\u65b0\u589e\u200b\u4e86\u200biter_unpack
\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u4e0d\u540c\u4e8e\u200bunpack
\u200b\u51fd\u6570\u200b\uff0citer_unpack
\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002
struct
\u200b\u6a21\u5757\u200b\u4e0d\u4f1a\u200b\u5bf9\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\u8fdb\u884c\u200b\u68c0\u6d4b\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5bf9\u4e8e\u200b\u540c\u4e00\u4e2a\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e0d\u540c\u200b\u7684\u200b\u7ed3\u6784\u200b\u4f53\u200b\u5b9a\u4e49\u200b\u5728\u200b\u89e3\u5305\u200b\u540e\u4f1a\u200b\u6709\u200b\u4e0d\u540c\u200b\u7684\u200b\u7ed3\u679c\u200b\uff1a
>>> struct.unpack('>hhf', b'\\x01\\x00\\x02\\x00\\x00\\x00@@') \n(256, 512, 2.304855714121459e-41)\n>>>\n
\u200b\u6bcf\u4e2a\u200b\u5b57\u6bb5\u200b\u90fd\u200b\u6709\u200b\u8303\u56f4\u200b\u9650\u5236\u200b\uff0c\u200b\u5f53\u200b\u4f20\u5165\u200b\u7684\u200b\u53c2\u6570\u200b\u8d85\u8fc7\u200b\u5b57\u6bb5\u200b\u6240\u200b\u5141\u8bb8\u200b\u7684\u200b\u8303\u56f4\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u629b\u51fa\u200b\u5f02\u5e38\u200b\uff1a
>>> struct.pack('<hhf', 32768, -32769, 3)\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nstruct.error: short format requires (-32768) <= number <= 32767\n>>>\n
\u200b\u5f53\u200b\u89e3\u5305\u200b\u7684\u200b\u5b57\u8282\u200b\u957f\u5ea6\u200b\u4e0e\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e0d\u200b\u5bf9\u5e94\u200b\u65f6\u200b\uff0c\u200b\u4e5f\u200b\u4f1a\u200b\u629b\u51fa\u200b\u5f02\u5e38\u200b\uff1a
>>> struct.unpack('>hhf', b'\\x01\\x00\\x02\\x00\\x00\\x00@') \nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nstruct.error: unpack requires a buffer of 8 bytes\n>>>\n
\u200b\u5bf9\u4e8e\u200b\u4efb\u4f55\u200b\u7ed3\u6784\u200b\u4f53\u200b\uff0cstruct
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200bcalcsize
\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u68c0\u67e5\u200b\u7ed3\u6784\u200b\u4f53\u200b\u957f\u5ea6\u200b\u3002
"},{"location":"coding/python/bytes/#_5","title":"\u5185\u5b58\u200b\u89c6\u56fe","text":"\u200b\u5185\u5b58\u200b\u89c6\u56fe\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5728\u200b\u4e0d\u540c\u200b\u5bf9\u8c61\u200b\u95f4\u200b\u5171\u4eab\u5185\u5b58\u200b\u7684\u200b\u65b9\u5f0f\u200b\u3002
\u200b\u6709\u5173\u200b\u5185\u5b58\u200b\u89c6\u56fe\u200b\u7684\u200b\u5185\u5bb9\u200b\uff0c\u200b\u8bf7\u200b\u53c2\u89c1\u200b\u5e8f\u5217\u200b\u7c7b\u578b\u200b\u7684\u200b\u5185\u5b58\u200b\u89c6\u56fe\u200b\u90e8\u5206\u200b\u3002
"},{"location":"coding/python/bytes/#_6","title":"\u5b57\u7b26\u4e32","text":"\u200b\u6b64\u5904\u200b\u7740\u91cd\u200b\u8ba8\u8bba\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u76f8\u5173\u200b\u95ee\u9898\u200b
"},{"location":"coding/python/bytes/#_7","title":"\u7f16\u7801\u200b\u4e0e\u200b\u89e3\u7801","text":"\u200b\u5982\u524d\u6240\u8ff0\u200b\uff0cstr.encode
\u200b\u65b9\u6cd5\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4ece\u200b\u5b57\u7b26\u4e32\u200b\u5230\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200b\u8f6c\u6362\u200b\u65b9\u5f0f\u200b\uff0cencoding
\u200b\u53c2\u6570\u200b\u6307\u660e\u200b\u4e86\u200b\u6240\u200b\u4f7f\u7528\u200b\u7684\u200b\u7f16\u7801\u5668\u200b\u3002
>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"utf-8\") \nb'\\xe6\\xb5\\x8b\\xe8\\xaf\\x95'\n>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"utf-16\")\nb'\\xff\\xfeKm\\xd5\\x8b'\n>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"gb2312\") \nb'\\xb2\\xe2\\xca\\xd4'\n>>>\n
\u200b\u5f53\u200b\u7f16\u7801\u200b\u8fc7\u7a0b\u200b\u51fa\u73b0\u200b\u9519\u8bef\u200b\uff0c\u200b\u5982\u200b\u7f16\u7801\u5668\u200b\u65e0\u6cd5\u200b\u8bc6\u522b\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u5b57\u7b26\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u629b\u51fa\u200bUnicodeEncodeError
\u200b\u5f02\u5e38\u200b\u3002
>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"latin-1\")\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nUnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)\n>>>\n
\u200b\u51fa\u73b0\u200b\u9519\u8bef\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\u4ee5\u4e0b\u200b\u89e3\u51b3\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200berrors
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\uff1a
ignore
\uff1a\u200b\u8df3\u8fc7\u200b\u65e0\u6cd5\u200b\u7f16\u7801\u200b\u7684\u200b\u5b57\u7b26\u200b replace
\uff1a\u200b\u5c06\u200b\u65e0\u6cd5\u200b\u7f16\u7801\u200b\u7684\u200b\u5b57\u7b26\u200b\u66ff\u6362\u200b\u4e3a\u200b?
xmlcharrefreplace
\uff1a\u200b\u5c06\u200b\u65e0\u6cd5\u200b\u7f16\u7801\u200b\u7684\u200b\u5b57\u7b26\u200b\u66ff\u6362\u200b\u4e3a\u200bxml
\u200b\u5b9e\u4f53\u200b\uff08\u200b\u5373\u200bXML\u200b\u4e2d\u200b\u6240\u200b\u4f7f\u7528\u200b\u7684\u200b\u5b57\u7b26\u200b\u8f6c\u6362\u200b\u65b9\u5f0f\u200b\uff09
>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"latin-1\", errors=\"ignore\")\nb''\n>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"latin-1\", errors=\"replace\")\nb'??'\n>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"latin-1\", errors=\"xmlcharrefreplace\")\nb'测试'\n>>>\n
\u200b\u5bf9\u5e94\u200b\u5730\u200b\uff0c\u200b\u89e3\u7801\u5668\u200b\u65e0\u6cd5\u200b\u8bc6\u522b\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200b\u5b57\u8282\u200b\u65f6\u4f1a\u200b\u4ea7\u751f\u200bUnicodeDecodeError
\u200b\u5f02\u5e38\u200b\u3002\u200b\u4f46\u200b\u4e0d\u200b\u629b\u51fa\u200b\u5f02\u5e38\u200b\u4e0d\u200b\u4ee3\u8868\u200b\u89e3\u7801\u200b\u6210\u529f\u200b\uff0c\u200b\u89e3\u7801\u200b\u5f97\u5230\u200b\u7684\u200b\u6570\u636e\u200b\u53ef\u80fd\u200b\u662f\u200b\u65e0\u7528\u200b\u6570\u636e\u200b\u3002errors
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\u4e86\u200b\u89e3\u7801\u5668\u200b\u5728\u200b\u51fa\u9519\u200b\u65f6\u200b\u7684\u200b\u884c\u4e3a\u200b\uff0creplace
\u200b\u5c06\u200b\u65e0\u6cd5\u200b\u7f16\u7801\u200b\u7684\u200b\u5b57\u7b26\u200b\u66ff\u6362\u200b\u4e3a\u200b\ufffd
\u3002
chardet
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u57fa\u4e8e\u200bPython\u200b\u7684\u200b\u5b57\u7b26\u200b\u7f16\u7801\u200b\u68c0\u6d4b\u5de5\u5177\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e8c\u8fdb\u5236\u200b\u5e8f\u5217\u200b\u5bf9\u200b\u539f\u59cb\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u7f16\u7801\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u63a8\u65ad\u200b\u3002\u200b\u4e0d\u8fc7\u200b\u63a8\u65ad\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u8f83\u200b\u957f\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u56e0\u4e3a\u200b\u4efb\u4f55\u200b\u5b57\u7b26\u4e32\u200b\u4f1a\u200b\u6709\u200b\u591a\u4e2a\u200b\u7f16\u7801\u65b9\u5f0f\u200b\u9002\u7528\u200b\u4e8e\u200b\u540c\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u6240\u4ee5\u200b\u65e0\u6cd5\u200b\u5b8c\u5168\u200b\u786e\u5b9a\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u7f16\u7801\u65b9\u5f0f\u200b\u3002
"},{"location":"coding/python/bytes/#bom","title":"BOM","text":"BOM\u200b\u662f\u200b\u5b57\u8282\u200b\u5e8f\u200b\u6807\u8bb0\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200bUnicode\u200b\u5b57\u7b26\u200b\u4e3a\u200bU+FEFF
\uff08\u200b\u4e0d\u200b\u5b58\u5728\u200bU+FFFE
\u200b\u5b57\u7b26\u200b\uff0c\u200b\u56e0\u6b64\u200b\u8be5\u200b\u5b57\u7b26\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u63a8\u65ad\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\uff09
\u200b\u5728\u200bUTF-16\u200b\u7f16\u7801\u200b\u7684\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u5f00\u5934\u200b\u4f1a\u200b\u5199\u5165\u200bBOM\uff0c\u200b\u5982\u679c\u200b\u5f00\u5934\u200b\u662f\u200bb'\\xff\\xfe'
\u200b\u4e24\u4e2a\u200b\u5b57\u8282\u200b\uff0c\u200b\u6307\u660e\u200b\u7f16\u7801\u200b\u65f6\u200b\u4f7f\u7528\u200blittle endian\u200b\u5b57\u8282\u200b\u7f16\u7801\u200b\u987a\u5e8f\u200b\u3002\u200b\u5982\u679c\u200b\u662f\u200bb'\\xfe\\xff'
\u200b\u4e24\u4e2a\u200b\u5b57\u8282\u200b\uff0c\u200b\u8bf4\u660e\u200b\u7f16\u7801\u200b\u65f6\u200b\u4f7f\u7528\u200b\u7684\u200b\u662f\u200bbig endian\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\u3002\u200b\u5982\u679c\u200b\u6307\u660e\u200bUTF-16\u200b\u6240\u200b\u4f7f\u7528\u200b\u7684\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\uff0c\u200b\u5982\u200bUTF-16LE\u200b\u6216\u200bUTF-16BE\uff0c\u200b\u5219\u200b\u4e0d\u4f1a\u200b\u751f\u6210\u200bBOM\u3002
BOM\u200b\u4ec5\u200b\u7528\u4e8e\u200b\u63a8\u65ad\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\u800c\u200b\u4e0d\u4f1a\u200b\u51fa\u73b0\u200b\u5728\u200b\u6700\u7ec8\u200b\u89e3\u7801\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\u3002
"},{"location":"coding/python/bytes/#_8","title":"\u6587\u672c\u6587\u4ef6","text":"\u200b\u4f7f\u7528\u200bopen
\u200b\u51fd\u6570\u200b\u4ee5\u200b\u6587\u672c\u200b\u6a21\u5f0f\u200b\u6253\u5f00\u200b\u4e00\u4e2a\u200b\u6587\u4ef6\u200b\u65f6\u200b\uff0c\u200b\u6700\u597d\u200b\u6307\u5b9a\u200b\u6587\u4ef6\u200b\u7684\u200b\u7f16\u7801\u65b9\u5f0f\u200b\u3002
\u200b\u4e0d\u8981\u200b\u4f7f\u7528\u200b\u4e8c\u8fdb\u5236\u200b\u65b9\u5f0f\u200b\u6253\u5f00\u200b\u6587\u672c\u6587\u4ef6\u200b\u3002
"},{"location":"coding/python/bytes/#unicode","title":"Unicode\u200b\u89c4\u8303\u5316","text":"\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff1a
>>> a = 'caf\u00e9'\n>>> b = 'cafe\\u0301' \n>>> print(a, b)\ncaf\u00e9 cafe\u0301\n>>> a == b\nFalse\n>>>\n
\u200b\u76f8\u540c\u200b\u7684\u200b\u6253\u5370\u200b\u7ed3\u679c\u200b\uff0c\u200b\u5374\u200b\u5bf9\u5e94\u200b\u4e0d\u540c\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u539f\u56e0\u200b\u5728\u4e8e\u200b\u5b57\u7b26\u4e32\u200bb
\u200b\u4f7f\u7528\u200b\u4e86\u200bU+0301
\u200b\u5b57\u7b26\u200b\u4f5c\u4e3a\u200b\u91cd\u97f3\u200b\u6807\u8bb0\u200b\uff08\u200b\u7ec4\u5408\u200b\u5b57\u7b26\u200b\uff09\uff0c\u200b\u591a\u200b\u4f7f\u7528\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u5b57\u8282\u200b\u3002\u200b\u5bf9\u4e8e\u200bPython\u200b\u800c\u8a00\u200b\uff0c\u200b\u8fd9\u200b\u4e00\u6bb5\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u5e76\u4e0d\u76f8\u540c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u8ba4\u4e3a\u200ba != b
\u3002
>>> a.encode(\"utf-8\") \nb'caf\\xc3\\xa9'\n>>> b.encode(\"utf-8\") \nb'cafe\\xcc\\x81'\n>>>\n
unicodedata
\u200b\u6a21\u5757\u200b\u4e2d\u200b\u7684\u200bnormalize
\u200b\u51fd\u6570\u200b\u63d0\u4f9b\u200b\u4e86\u200bUnicode\u200b\u89c4\u8303\u5316\u200b\u7684\u200b\u529f\u80fd\u200b\uff0c\u200b\u8be5\u200b\u51fd\u6570\u200b\u63a5\u6536\u200b\u5982\u4e0b\u200b\u53c2\u6570\u200b\u7528\u4e8e\u200b\u786e\u5b9a\u200b\u8f6c\u6362\u200b\u6807\u51c6\u200b\uff1a
'NFC'
\uff1a\u200b\u4f7f\u7528\u200b\u6700\u5c11\u200b\u7801\u4f4d\u200b\u6784\u6210\u200b\u7b49\u4ef7\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b 'NFD'
\uff1a\u200b\u5c06\u200b\u7ec4\u5408\u200b\u5b57\u7b26\u200b\u5206\u89e3\u200b\u4e3a\u57fa\u200b\u5b57\u7b26\u200b\u4e0e\u200b\u5355\u72ec\u200b\u7684\u200b\u7ec4\u5408\u200b\u5b57\u7b26\u200b\uff08\u200b\u5982\u200bU+0301
\uff09\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u53bb\u9664\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u53d8\u97f3\u200b\u7b26\u53f7\u200b NFKC
\u3001NFKD
\u200b\u4f1a\u200b\u989d\u5916\u200b\u5c06\u200b\u517c\u5bb9\u200b\u5b57\u7b26\u200b\u5206\u89e3\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u6216\u200b\u591a\u4e2a\u200b\u517c\u5bb9\u200b\u5206\u89e3\u200b\uff0c\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u6570\u636e\u200b\u635f\u5931\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
>>> from unicodedata import normalize\n>>> normalize('NFKC', '\u337f') \n'\u200b\u682a\u5f0f\u4f1a\u793e\u200b'\n>>>\n
NKFC
\u3001NFKD
\u200b\u89c4\u8303\u5316\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u539f\u610f\u200b\u53d8\u5316\u200b\uff0c\u200b\u4f46\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u641c\u7d22\u5f15\u64ce\u200b\u3002
str.casefold
\u200b\u51fd\u6570\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u53e6\u200b\u4e00\u79cd\u200b\u89c4\u8303\u5316\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5373\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5927\u5199\u5b57\u6bcd\u200b\u8f6c\u4e3a\u200b\u5c0f\u5199\u200b\u3002\u200b\u4e0e\u200bstr.lower
\u200b\u4e0d\u540c\u200b\uff0c\u200b\u90e8\u5206\u200b\u5b57\u7b26\u200b\u4f1a\u200b\u88ab\u200b\u66ff\u6362\u6210\u200b\u65b0\u200b\u7684\u200b\u5b57\u7b26\u200b\u3002
"},{"location":"coding/python/bytes/#_9","title":"\u5b57\u7b26\u4e32\u200b\u6392\u5e8f","text":"\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u6392\u5e8f\u200b\u4e0e\u200b\u5176\u4ed6\u200b\u6570\u636e\u200b\u7684\u200b\u6392\u5e8f\u200b\u65b9\u5f0f\u200b\u76f8\u540c\u200b\uff0c\u200b\u90fd\u200b\u662f\u200b\u6309\u7167\u200b\u7801\u4f4d\u200b\u5347\u5e8f\u200b\u6392\u5e8f\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u975e\u200bASCII
\u200b\u5b57\u7b26\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u4e00\u4e9b\u200b\u95ee\u9898\u200b\uff0c\u200b\u5982\u200b\uff1a
>>> sorted(['caf\u00e9', 'cafu']) \n['cafu', 'caf\u00e9']\n>>>\n
\u200b\u6a21\u5757\u200blocale
\u200b\u63d0\u4f9b\u200b\u4e86\u200bstrxfrm
\u200b\u51fd\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u6309\u7167\u200b\u533a\u57df\u200b\u8bbe\u7f6e\u200b\u5bf9\u200b\u5b57\u7b26\u4e32\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\u3002\u200b\u5982\u679c\u200b\u64cd\u4f5c\u7cfb\u7edf\u200b\u652f\u6301\u200b\uff0c\u200b\u533a\u57df\u200b\u8bbe\u7f6e\u200b\u53ef\u4ee5\u200b\u5728\u200bsetlocale
\u200b\u51fd\u6570\u200b\u4e2d\u200b\u5168\u5c40\u200b\u6307\u5b9a\u200b\u3002
>>> import locale\n>>> locale.setlocale(locale.LC_COLLATE, \"en_US.UTF-8\")\n'en_US.UTF-8'\n>>> sorted(['caf\u00e9', 'cafu'], key=locale.strxfrm)\n['caf\u00e9', 'cafu']\n>>>\n
"},{"location":"coding/python/bytes/#api","title":"API","text":"\u200b\u90e8\u5206\u200b\u6d89\u53ca\u200b\u5230\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u4e00\u4e9b\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u6216\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u3002
"},{"location":"coding/python/bytes/#re","title":"re\u200b\u6a21\u5757","text":"\u200b\u4e0d\u540c\u4e8e\u200b\u4f7f\u7528\u200b\u5b57\u7b26\u4e32\u200b\u6784\u9020\u200b\u7684\u200b\u6b63\u5219\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u4f7f\u7528\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u6784\u9020\u200b\u7684\u200b\u6b63\u5219\u8868\u8fbe\u5f0f\u200b\uff0c\\d
\u200b\u4e0e\u200b\\w
\u200b\u53ea\u80fd\u200b\u5339\u914d\u200bASCII\u200b\u5b57\u7b26\u200b\u3002
"},{"location":"coding/python/bytes/#os","title":"os\u200b\u6a21\u5757","text":"os
\u200b\u6a21\u5757\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5b57\u7b26\u4e32\u200b\u53c2\u6570\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u66ff\u6362\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u51fd\u6570\u200b\u4f1a\u200b\u4f7f\u7528\u200bsys.getfilesystemencoding()
\u200b\u51fd\u6570\u200b\u53d6\u5f97\u200b\u5408\u9002\u200b\u7684\u200b\u7f16\u7801\u5668\u200b\u3002\u200b\u6b64\u5916\u200b\uff0cos
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200bfsencode
\u200b\u4e0e\u200bfsdecode
\u200b\u51fd\u6570\u200b\u7528\u4e8e\u200b\u624b\u52a8\u200b\u8fdb\u884c\u200b\u7f16\u7801\u200b\u4e0e\u200b\u89e3\u7801\u200b\u64cd\u4f5c\u200b\u3002
"},{"location":"coding/python/decorator/","title":"\u88c5\u9970\u200b\u5668","text":"\u200b\u88c5\u9970\u200b\u5668\u662f\u200b\u4e00\u4e2a\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u5e76\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u5982\u4e0b\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u88c5\u9970\u200b\u5668\u200b\uff1a
>>> def decorator(x):\n... print(x)\n... return x\n...\n>>>\n
\u200b\u88c5\u9970\u200b\u5668\u200b\u5728\u200b\u51fd\u6570\u200b\u5b9a\u4e49\u200b\u524d\u200b\u4f7f\u7528\u200b\uff0c@
\u200b\u6807\u8bb0\u200b\u4e00\u4e2a\u200b\u88c5\u9970\u200b\u5668\u200b\uff1a
>>> @decorator \n... def target(x):\n... return x + 1\n... \n<function target at ...>\n>>>\n
@decorator
\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\uff0c\u200b\u51fd\u6570\u200b\u88ab\u200b\u88c5\u9970\u200b\u5668\u200b\u8fd4\u56de\u200b\u7684\u200b\u51fd\u6570\u200b\u66ff\u6362\u200b
>>> def target(x):\n... return x + 1\n... \n>>> target = decorator(target)\n<function target at ...>\n>>>\n
\u200b\u88c5\u9970\u200b\u5668\u200b\u5728\u200b\u88ab\u200b\u4fee\u9970\u200b\u7684\u200b\u51fd\u6570\u200b\u5b9a\u4e49\u200b\u540e\u200b\u7acb\u5373\u200b\u8fd0\u884c\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5f53\u200b\u5bfc\u5165\u200b\u6a21\u5757\u200b\u65f6\u200b\uff0c\u200b\u88c5\u9970\u200b\u5668\u200b\u51fd\u6570\u200b\u4f1a\u200b\u7acb\u5373\u200b\u6267\u884c\u200b\uff0c\u200b\u800c\u200b\u88ab\u200b\u88c5\u9970\u200b\u7684\u200b\u51fd\u6570\u200b\u53ea\u4f1a\u200b\u8c03\u7528\u200b\u6267\u884c\u200b\u3002
>>> src = \"\"\"def decorator(_):\n... print(_)\n... return _\n... print(\"Before A\")\n... @decorator\n... def a():\n... return 1\n... print(\"Before B\")\n... @decorator \n... def b():\n... return 1\n... print(\"After B\")\n... \"\"\"\n>>> exec(src)\nBefore A\n<function a at ...>\nBefore B\n<function b at ...>\nAfter B\n>>>\n
"},{"location":"coding/python/decorator/#_2","title":"\u53d8\u91cf\u200b\u7684\u200b\u4f5c\u7528\u57df","text":"Python\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u5224\u65ad\u200b\u51fd\u6570\u200b\u4ee3\u7801\u200b\u4e2d\u200b\u7684\u200b\u53d8\u91cf\u200b\u662f\u5426\u200b\u4e3a\u200b\u5c40\u90e8\u53d8\u91cf\u200b\u3002\u200b\u6240\u6709\u200b\u5728\u200b\u51fd\u6570\u200b\u4ee3\u7801\u200b\u5185\u200b\u51fa\u73b0\u200b\u7684\u200b\u53d8\u91cf\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u5c40\u90e8\u53d8\u91cf\u200b\u3002
>>> b = 2\n>>> def A():\n... print(b)\n... \n>>> def B():\n... print(b)\n... b = 2\n... \n>>> A()\n2\n>>> B()\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\n File \"<stdin>\", line 2, in B\nUnboundLocalError: local variable 'b' referenced before assignment\n>>>\n
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5982\u679c\u200b\u9700\u8981\u200b\u5728\u200b\u51fd\u6570\u200b\u5185\u90e8\u200b\u8bbf\u95ee\u200b\u5168\u5c40\u53d8\u91cf\u200b\uff0c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bglobal
\u200b\u5173\u952e\u5b57\u200b\u58f0\u660e\u200b\u3002
>>> def C():\n... global b\n... print(b)\n... b = 3\n... \n>>> b\n2\n>>> C()\n2\n>>> b\n3\n>>>\n
\u200b\u68c0\u67e5\u200b\u7f16\u8bd1\u200b\u540e\u200b\u7684\u200b\u5b57\u8282\u200b\u7801\u200b\uff0c\u200b\u53d1\u73b0\u200bglobal
\u200b\u5173\u952e\u5b57\u200b\u58f0\u660e\u200b\u53d8\u91cf\u200b\u7531\u200bLOAD_FAST
\u200b\u4e0e\u200bSTORE_FAST
\u200b\u6539\u4e3a\u200b\u4e86\u200bLOAD_GLOBAL
\u200b\u4e0e\u200bSTORE_GLOBAL
\uff1a
"},{"location":"coding/python/decorator/#_3","title":"\u95ed\u5305","text":"\u200b\u95ed\u5305\u200b\u662f\u200b\u6269\u5c55\u200b\u4e86\u200b\u51fd\u6570\u200b\u4f5c\u7528\u57df\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8bbf\u95ee\u200b\u51fd\u6570\u200b\u5b9a\u4e49\u200b\u4e4b\u5916\u200b\u7684\u200b\u5c40\u90e8\u53d8\u91cf\u200b\u3002\u200b\u4ee5\u4e0b\u200b\u901a\u8fc7\u200b\u4e0d\u540c\u200b\u65b9\u5f0f\u200b\u5b9e\u73b0\u200b\u6ed1\u52a8\u200b\u5e73\u5747\u503c\u200b\u7684\u200b\u8ba1\u7b97\u200b\uff1a
- \u200b\u4f7f\u7528\u200b\u7c7b\u200b
>>> class avg1():\n... def __init__(self):\n... self.values = []\n... def __call__(self, value):\n... self.values.append(value)\n... return sum(self.values) / len(self.values)\n... \n>>> avg = avg1()\n>>> avg(10)\n10.0\n>>> avg(11)\n10.5\n>>>\n
- \u200b\u4f7f\u7528\u200b\u9ad8\u9636\u200b\u51fd\u6570\u200b
>>> def avg2():\n... values = []\n... def avg(value): \n... values.append(value)\n... return sum(values) / len(values)\n... return avg\n>>> \n>>> avg = avg2()\n>>> avg(10)\n10.0\n>>> avg(11)\n10.5\n>>>\n
\u200b\u5728\u200bavg2
\u200b\u51fd\u6570\u200b\u7ed3\u675f\u200b\u540e\u200b\uff0c\u200b\u5c40\u90e8\u53d8\u91cf\u200bvalues
\u200b\u539f\u6709\u200b\u7684\u200b\u4f5c\u7528\u57df\u200b\u6d88\u5931\u200b\uff0c\u200b\u6210\u4e3a\u200b\u81ea\u7531\u200b\u53d8\u91cf\u200b\u3002\u200b\u81ea\u7531\u200b\u53d8\u91cf\u200b\u6307\u200b\u6ca1\u6709\u200b\u5728\u200b\u672c\u5730\u200b\u4f5c\u7528\u57df\u200b\u4e2d\u200b\u7ed1\u5b9a\u200b\u7684\u200b\u53d8\u91cf\u200b\u3002values
\u200b\u53d8\u91cf\u200b\u7684\u200b\u5f15\u7528\u200b\u5b58\u50a8\u200b\u5728\u200bavg
\u200b\u51fd\u6570\u200b\u7684\u200b__closure__
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\u3002\u200b\u5373\u4f7f\u200bavg2
\u200b\u51fd\u6570\u200b\u5df2\u7ecf\u200b\u7ed3\u675f\u200b\u6267\u884c\u200b\uff0cavg
\u200b\u51fd\u6570\u200b\u4ecd\u7136\u200b\u80fd\u200b\u8bbf\u95ee\u200bvalues
\u200b\u53d8\u91cf\u200b\u3002
"},{"location":"coding/python/functions/","title":"Python\u200b\u4e2d\u200b\u7684\u200b\u51fd\u6570","text":"\u201c\u200b\u4e00\u7b49\u200b\u5bf9\u8c61\u200b\u201d\u200b\u6307\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff1a
- \u200b\u5728\u200b\u7a0b\u5e8f\u6267\u884c\u200b\u65f6\u200b\u521b\u5efa\u200b
- \u200b\u80fd\u591f\u200b\u8d4b\u503c\u200b\u7ed9\u200b\u53d8\u91cf\u200b\u6216\u200b\u6570\u636e\u7ed3\u6784\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b
- \u200b\u80fd\u200b\u4f5c\u4e3a\u200b\u51fd\u6570\u53c2\u6570\u200b\u4e0e\u200b\u8fd4\u56de\u503c\u200b
Python\u200b\u4e2d\u200b\u7684\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u7b49\u200b\u5bf9\u8c61\u200b
"},{"location":"coding/python/functions/#_1","title":"\u51fd\u6570\u200b\u4e0e\u200b\u9ad8\u9636\u200b\u51fd\u6570","text":"\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u901a\u5e38\u200b\u4f7f\u7528\u200bdef
\u200b\u5173\u952e\u5b57\u200b\u5b9a\u4e49\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff1a
>>> def constant(): \n... return 1\n... \n>>> type(constant)\n<class 'function'>\n>>>\n
\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u5728\u200b\u5176\u4ed6\u200b\u51fd\u6570\u200b\u5185\u90e8\u200b\uff1a
>>> def outer():\n... def inner():\n... return \"ok\"\n... return inner\n... \n>>> func = outer()\n>>> func()\n'ok'\n>>>\n
\u200b\u9ad8\u9636\u200b\u51fd\u6570\u200b\u662f\u200b\u63a5\u53d7\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u6216\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5982\u200bmap
\u3001filter
\u200b\u7b49\u200b\u3002
\u200b\u9664\u200b\u4f7f\u7528\u200bdef
\u200b\u5173\u952e\u5b57\u200b\u5b9a\u4e49\u200b\u51fd\u6570\u200b\u4ee5\u5916\u200b\uff0clambda
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u53e6\u200b\u4e00\u79cd\u200b\u521b\u5efa\u200b\u7b80\u5355\u200b\u51fd\u6570\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8fd9\u79cd\u200b\u65b9\u6cd5\u200b\u5e38\u7528\u200b\u4e8e\u200b\u5411\u200b\u9ad8\u9636\u200b\u51fd\u6570\u200b\u4f20\u9012\u200b\u53c2\u6570\u200b\u3002lambda
\u200b\u8868\u8fbe\u5f0f\u200b\u53ea\u80fd\u200b\u52a0\u5165\u200b\u8868\u8fbe\u5f0f\u200b\u800c\u200b\u65e0\u6cd5\u200b\u6dfb\u52a0\u200b\u63a7\u5236\u200b\u903b\u8f91\u200b\uff1a
>>> a = lambda : \"ok\" \n>>> a()\n'ok'\n>>>\n
lambda
\u200b\u8868\u8fbe\u5f0f\u200b\u53ef\u4ee5\u200b\u521b\u5efa\u200b\u4e0d\u540c\u200b\u53c2\u6570\u200b\u6570\u91cf\u200b\u7684\u200b\u51fd\u6570\u200b\uff1a
- \u200b\u6ca1\u6709\u200b\u53c2\u6570\u200b\uff0c\u200b\u5982\u200b
lambda : \"ok\"
- \u200b\u7ed9\u5b9a\u200b\u6570\u91cf\u200b\u53c2\u6570\u200b\uff0c\u200b\u5982\u200b
lambda x, y : x + y
- \u200b\u4efb\u610f\u200b\u53c2\u6570\u200b\uff0c\u200b\u5982\u200b
lambda *_ : sum(_)
\uff08\u200b\u65e0\u540d\u200b\u53c2\u6570\u200b\uff09\u200b\u6216\u200blambda **_ : sum(_)
\uff08\u200b\u5177\u540d\u200b\u53c2\u6570\u200b\uff09
\u200b\u82e5\u200blambda
\u200b\u8868\u8fbe\u5f0f\u200b\u7684\u200b\u53f3\u4fa7\u200b\u662f\u200b\u9017\u53f7\u200b\u5206\u9694\u200b\u7684\u200b\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u751f\u6210\u200b\u7684\u200b\u662f\u200blambda
\u200b\u5bf9\u8c61\u200b\u7ec4\u6210\u200b\u7684\u200b\u5143\u7ec4\u200b\u3002
\u200b\u4f7f\u7528\u200bdir()
\u200b\u67e5\u770b\u200b\u51fd\u6570\u200b\u7684\u200b\u5185\u7f6e\u200b\u5c5e\u6027\u200b\u3002\u200b\u76f8\u6bd4\u200b\u4e8e\u200b\u4e00\u822c\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u51fd\u6570\u200b\u6709\u200b\u4ee5\u4e0b\u200b\u7684\u200b\u989d\u5916\u200b\u5c5e\u6027\u200b\uff1a
>>> class Obj():\n... pass\n... \n>>> def func():\n... pass\n... \n>>> sorted(list(set(dir(func)) - set(dir(Obj())))) # doctest: +SKIP\n['__annotations__', '__call__', '__closure__', '__code__', '__defaults__', '__get__', '__globals__', '__kwdefaults__', '__name__', '__qualname__']\n>>>\n
"},{"location":"coding/python/functions/#_2","title":"\u5e7f\u4e49\u200b\u51fd\u6570","text":"\u200b\u4efb\u4f55\u200b\u5b9e\u73b0\u200b\u4e86\u200b__call__
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5bf9\u8c61\u200b\u90fd\u200b\u662f\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u7c7b\u4f3c\u200b\u4e8e\u200b\u51fd\u6570\u8c03\u7528\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u8c03\u7528\u200b\u3002\u200b\u4ee5\u4e0b\u200b\u7c7b\u578b\u200b\u4e3a\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\uff1a
- \u200b\u51fd\u6570\u200b\u6216\u200b
lambda
\u200b\u8868\u8fbe\u5f0f\u200b - \u200b\u5185\u7f6e\u200b\u51fd\u6570\u200b\u6216\u200b\u7c7b\u578b\u200b\u65b9\u6cd5\u200b
- \u200b\u7c7b\u578b\u200b\u65b9\u6cd5\u200b
- \u200b\u7c7b\u200b\uff08\u200b\u76f8\u5f53\u4e8e\u200b\u4e00\u4e2a\u200b\u8fd4\u56de\u200b\u7c7b\u200b\u5bf9\u8c61\u200b\u7684\u200b\u51fd\u6570\u200b\uff09
- \u200b\u5b9e\u73b0\u200b\u4e86\u200b
__call__
\u200b\u7684\u200b\u5bf9\u8c61\u200b - \u200b\u751f\u6210\u5668\u200b\u51fd\u6570\u200b
\u200b\u5185\u7f6e\u200b\u51fd\u6570\u200bcallable()
\u200b\u7528\u4e8e\u200b\u68c0\u6d4b\u200b\u4e00\u4e2a\u200b\u5bf9\u8c61\u200b\u662f\u5426\u662f\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u3002
"},{"location":"coding/python/functions/#_3","title":"\u51fd\u6570\u200b\u7684\u200b\u53c2\u6570","text":"Python\u200b\u4e2d\u200b\uff0c\u200b\u51fd\u6570\u200b\u7684\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\uff1a
- \u200b\u9017\u53f7\u200b\u5206\u9694\u200b\uff0c\u200b\u6309\u200b\u51fd\u6570\u200b\u58f0\u660e\u200b\u987a\u5e8f\u200b\u4f20\u5165\u200b\u53c2\u6570\u200b
- \u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\uff0c\u200b\u5373\u200b\u53c2\u6570\u200b\u540d\u200b=\u200b\u53c2\u6570\u503c\u200b
- \u200b\u6709\u200b\u9ed8\u8ba4\u503c\u200b\u7684\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b
*
\u200b\u89e3\u5305\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff08\u200b\u6309\u200b\u53c2\u6570\u200b\u4f4d\u7f6e\u200b\u4f20\u9012\u200b\uff09\u200b\u6216\u200b**
\u200b\u89e3\u5305\u200b\u6620\u5c04\u200b\u5bf9\u8c61\u200b\uff08\u200b\u6309\u200b\u5173\u952e\u5b57\u200b\u4f20\u9012\u200b\uff09
\u200b\u5bf9\u5e94\u200b\u5730\u200b\uff0c\u200b\u51fd\u6570\u200b\u5bf9\u200b\u53c2\u6570\u200b\u6709\u200b\u5982\u4e0b\u200b\u5904\u7406\u200b\u65b9\u5f0f\u200b\uff1a
- \u200b\u6309\u7167\u200b\u53c2\u6570\u200b\u4f4d\u7f6e\u200b\u4e0e\u200b\u53c2\u6570\u200b\u540d\u200b\u83b7\u53d6\u200b\u53c2\u6570\u200b
- \u200b\u5176\u4ed6\u200b\u7684\u200b\u65e0\u8bb0\u540d\u200b\u53c2\u6570\u200b\u88ab\u200b
*
\u200b\u53c2\u6570\u200b\u83b7\u53d6\u200b\uff0c\u200b\u5355\u4e2a\u200b*
\u200b\u6216\u200b*
\u200b\u53c2\u6570\u200b\u540e\u200b\u7684\u200b\u666e\u901a\u200b\u53c2\u6570\u200b\u53ea\u80fd\u200b\u6309\u7167\u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\u7684\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b - \u200b\u5176\u4ed6\u200b\u7684\u200b\u8bb0\u540d\u200b\u53c2\u6570\u200b\u88ab\u200b
**
\u200b\u53c2\u6570\u200b\u83b7\u53d6\u200b
\u200b\u51fd\u6570\u200b\u58f0\u660e\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u7684\u200b\u5355\u4e2a\u200b*
\u200b\u4e0d\u4f1a\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u53c2\u6570\u200b\uff0c\u200b\u53ea\u200b\u7528\u4e8e\u200b\u9650\u5b9a\u200b\u6b64\u540e\u200b\u6240\u6709\u200b\u53c2\u6570\u200b\u7684\u200b\u4f20\u5165\u200b\u65b9\u5f0f\u200b\uff1a
>>> def a(*, a, b):\n... return a + b\n... \n>>> a(1, 2) \nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: a() takes 0 positional arguments but 2 were given\n>>> a(a=1, b=2)\n3\n>>>\n
\u200b\u51fd\u6570\u200b\u4f20\u53c2\u6709\u200b\u4e24\u79cd\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5373\u503c\u200b\u4f20\u9012\u200b\u4e0e\u200b\u5f15\u7528\u200b\u4f20\u9012\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u53ef\u53d8\u200b\u5bf9\u8c61\u200b\u6309\u200b\u5f15\u7528\u200b\u4f20\u9012\u200b\uff0c\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5bf9\u8c61\u200b\u6309\u503c\u200b\u4f20\u9012\u200b\uff1a
>>> def argPass(x):\n... x += x \n... \n>>> a = \"test\" \n>>> b = [\"test\"]\n>>> argPass(a)\n>>> argPass(b)\n>>> a\n'test'\n>>> b\n['test', 'test']\n>>>\n
"},{"location":"coding/python/functions/#_4","title":"\u51fd\u6570\u200b\u5185\u7701","text":"\u200b\u51fd\u6570\u200b\u5bf9\u8c61\u200b\u7279\u6709\u200b\u7684\u200b\u5c5e\u6027\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u6709\u5173\u200b\u51fd\u6570\u200b\u7684\u200b\u4fe1\u606f\u200b\uff1a
\u200b\u5c5e\u6027\u200b\u540d\u200b \u200b\u5c5e\u6027\u200b\u7c7b\u578b\u200b \u200b\u5c5e\u6027\u200b\u8bf4\u660e\u200b __annotations__
dict
\u200b\u51fd\u6570\u53c2\u6570\u200b\u548c\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u7c7b\u578b\u200b\u6ce8\u89e3\u200b\uff0c\u200b\u952e\u4e3a\u200b\u53c2\u6570\u200b\u540d\u200b\uff0c\u200b\u503c\u4e3a\u200b\u53c2\u6570\u200b\u7c7b\u578b\u200b __call__
method-wrapper
\u200b\u5b9e\u73b0\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u7684\u200b\u8c03\u7528\u200b\u65b9\u6cd5\u200b __closure__
tuple
\u200b\u51fd\u6570\u200b\u95ed\u5305\u200b\uff0c\u200b\u53c2\u89c1\u200b\u76f8\u5173\u200b\u7ae0\u8282\u200b __code__
code
\u200b\u7f16\u8bd1\u6210\u200b\u4e8c\u8fdb\u5236\u200b\u683c\u5f0f\u200b\u7684\u200b\u51fd\u6570\u200b\u5143\u200b\u6570\u636e\u200b\u548c\u200b\u5b9a\u4e49\u200b\u4f53\u200b __defaults__
tuple
\u200b\u5f62\u53c2\u200b\u7684\u200b\u9ed8\u8ba4\u503c\u200b\u5217\u8868\u200b __get__
method-wrapper
\u200b\u5b9e\u73b0\u200b\u53ea\u8bfb\u200b\u63cf\u8ff0\u7b26\u200b\u534f\u8bae\u200b __globals__
dict
\u200b\u51fd\u6570\u200b\u6240\u5728\u200b\u6a21\u5757\u200b\u4e2d\u200b\u7684\u200b\u5168\u5c40\u53d8\u91cf\u200b __kwdefaults__
dict
\u200b\u9650\u5b9a\u200b\u5173\u952e\u5b57\u200b\u5f62\u5f0f\u200b\u8bbf\u95ee\u200b\u7684\u200b\u5f62\u53c2\u200b\u9ed8\u8ba4\u503c\u200b __name__
str
\u200b\u51fd\u6570\u200b\u540d\u79f0\u200b __qualname__
str
\u200b\u51fd\u6570\u200b\u7684\u200b\u9650\u5b9a\u200b\u540d\u79f0\u200b >>> def dummy(a, b: int, c = 10, *args, d, e=50, **kwargs):\n... return (a, b, c, args, d, e, kwargs) \n... \n>>> dummy.__annotations__\n{'b': <class 'int'>}\n>>> dummy.__defaults__\n(10,)\n>>> dummy.__kwdefaults__\n{'e': 50}\n>>>\n
\u200b\u51fd\u6570\u200b\u7684\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u4e0e\u200b\u6570\u91cf\u200b\u5b58\u50a8\u200b\u5728\u200b__code__
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\uff1a
>>> dummy.__code__.co_varnames\n('a', 'b', 'c', 'd', 'e', 'args', 'kwargs')\n>>> dummy.__code__.co_argcount\n3\n>>>\n
inspect
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u68c0\u67e5\u200b\u51fd\u6570\u53c2\u6570\u200b\u4fe1\u606f\u200b\u7684\u200b\u5de5\u5177\u200b\u3002
>>> import inspect\n>>> inspect.signature(dummy)\n<Signature (a, b: int, c=10, *args, d, e=50, **kwargs)>\n>>> sig = inspect.signature(dummy) \n>>> sig.parameters\nmappingproxy(OrderedDict([('a', <Parameter \"a\">), ('b', <Parameter \"b: int\">), ('c', <Parameter \"c=10\">), ('args', <Parameter \"*args\">), ('d', <Parameter \"d\">), ('e', <Parameter \"e=50\">), ('kwargs', <Parameter \"**kwargs\">)]))\n>>>\n
parameters
\u200b\u5b58\u50a8\u200b\u4e86\u200b\u53c2\u6570\u200b\u540d\u200b\u4e0e\u200b\u53c2\u6570\u4fe1\u606f\u200b\u7684\u200b\u6620\u5c04\u200b\u5173\u7cfb\u200b\u3002\u200b\u6bcf\u4e2a\u200bParameter
\u200b\u5bf9\u8c61\u200b\u6709\u200bname
\u3001default
\u200b\u548c\u200bkind
\u200b\u5c5e\u6027\u200b\u3002dummy
\u200b\u51fd\u6570\u200b\u5404\u4e2a\u200b\u53c2\u6570\u200b\u7684\u200b\u5c5e\u6027\u200b\u4fe1\u606f\u200b\u5982\u4e0b\u200b\uff0cinspect._empty
\u200b\u8868\u793a\u200b\u53c2\u6570\u200b\u6ca1\u6709\u200b\u9ed8\u8ba4\u503c\u200b\uff1a
>>> par = sig.parameters \n>>> for parName in par:\n... print(par[parName].name, par[parName].default, par[parName].kind)\n... \na <class 'inspect._empty'> POSITIONAL_OR_KEYWORD\nb <class 'inspect._empty'> POSITIONAL_OR_KEYWORD\nc 10 POSITIONAL_OR_KEYWORD\nargs <class 'inspect._empty'> VAR_POSITIONAL\nd <class 'inspect._empty'> KEYWORD_ONLY\ne 50 KEYWORD_ONLY\nkwargs <class 'inspect._empty'> VAR_KEYWORD\n>>>\n
\u200b\u4ece\u200b\u8f93\u51fa\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u770b\u51fa\u200b\uff0cdummy
\u200b\u5171\u6709\u200b\u56db\u79cd\u200b\u7c7b\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5373\u200b\uff1a
POSITIONAL_OR_KEYWORD
\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u5b9a\u4f4d\u200b\u53c2\u6570\u200b\u6216\u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\u4f20\u5165\u200b VAR_POSITIONAL
\uff0c\u200b\u591a\u4f59\u200b\u7684\u200b\u5b9a\u4f4d\u200b\u53c2\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u5143\u7ec4\u200b KEYWORD_ONLY
\uff0c\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\u4f20\u5165\u200b VAR_KEYWORD
\uff0c\u200b\u591a\u4f59\u200b\u7684\u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u5b57\u5178\u200b
\u200b\u53e6\u200b\u4e00\u79cd\u200b\u53c2\u6570\u200b\u7c7b\u578b\u200b\u662f\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200b\u5b9a\u4f4d\u200b\u53c2\u6570\u200b\u4f20\u5165\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5373\u200bPOSITIONAL_ONLY
\uff0cPython\u200b\u8bed\u6cd5\u200b\u4e0d\u200b\u652f\u6301\u200b\u58f0\u660e\u200b\u8fd9\u79cd\u200b\u7c7b\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5728\u200bC\u200b\u8bed\u8a00\u200bAPI\u200b\u4e2d\u200b\u53ef\u80fd\u200b\u51fa\u73b0\u200b\u3002
Changed in version 3.8
\u200b\u5728\u200b\u51fd\u6570\u200b\u5b9a\u4e49\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b/
\u200b\u5206\u9694\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\uff0c\u200b\u51fa\u73b0\u200b\u5728\u200b/
\u200b\u4e4b\u524d\u200b\u7684\u200b\u53c2\u6570\u200b\u5fc5\u987b\u200b\u901a\u8fc7\u200b\u5b9a\u4f4d\u200b\u53c2\u6570\u200b\u4f20\u5165\u200b\u3002
>>> def test(a, /, b, *args, c, **kwargs):\n... pass\n...\n>>> import inspect\n>>> sig = inspect.signature(test)\n>>> for val in sig.parameters.values():\n... print(val.name, val.kind)\n...\na POSITIONAL_ONLY\nb POSITIONAL_OR_KEYWORD\nargs VAR_POSITIONAL\nc KEYWORD_ONLY\nkwargs VAR_KEYWORD\n>>>\n
"},{"location":"coding/python/functions/#_5","title":"\u53c2\u6570\u200b\u7684\u200b\u7c7b\u578b\u200b\u9650\u5236","text":"Python\u200b\u4e2d\u200b\u5bf9\u200b\u51fd\u6570\u53c2\u6570\u200b\u7684\u200b\u7c7b\u578b\u200b\u68c0\u67e5\u200b\u4ee5\u200b\u51fd\u6570\u200b\u6ce8\u89e3\u200b\u7684\u200b\u5f62\u5f0f\u200b\u5b9e\u73b0\u200b\u3002\u200b\u51fd\u6570\u200b\u6ce8\u89e3\u200b\u89c4\u5b9a\u200b\u4e86\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u63a5\u53d7\u200b\u7684\u200b\u53c2\u6570\u200b\u7c7b\u578b\u200b\u3002
\u200b\u51fd\u6570\u200b\u6ce8\u89e3\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u7c7b\u578b\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u3002:
\u200b\u7528\u4e8e\u200b\u5bf9\u200b\u53c2\u6570\u200b\u7684\u200b\u6ce8\u89e3\u200b\uff0c->
\u200b\u8868\u793a\u200b\u5bf9\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u6ce8\u89e3\u200b\uff1a
>>> def another_dummy(x: int) -> int: \n... return -x\n... \n>>>\n
\u200b\u6ce8\u610f\u200b\uff0c\u200b\u6ce8\u89e3\u200b\u5e76\u200b\u4e0d\u4f1a\u200b\u5bfc\u81f4\u200bPython\u200b\u5bf9\u200b\u4f20\u5165\u200b\u53c2\u6570\u200b\u7684\u200b\u7c7b\u578b\u200b\u8fdb\u884c\u200b\u68c0\u67e5\u200b\u3002
>>> another_dummy(0.5) \n-0.5\n>>>\n
\u200b\u6240\u6709\u200b\u7684\u200b\u6ce8\u89e3\u200b\u5b58\u50a8\u200b\u5728\u200b\u51fd\u6570\u200b\u7684\u200b__annotations__
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\u3002
>>> another_dummy.__annotations__\n{'x': <class 'int'>, 'return': <class 'int'>}\n>>>\n
"},{"location":"coding/python/functions/#_6","title":"\u51fd\u6570\u200b\u5f0f\u200b\u7f16\u7a0b","text":""},{"location":"coding/python/functions/#operator","title":"operator\u200b\u6a21\u5757","text":"operator
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200bPython\u200b\u4e2d\u200b\u90e8\u5206\u200b\u8fd0\u7b97\u7b26\u200b\u6216\u200b\u64cd\u4f5c\u200b\u7684\u200b\u51fd\u6570\u200b\u5f0f\u200b\u5b9e\u73b0\u200b\u3002
>>> import operator\n>>> operator.add(5, 3)\n8\n>>>\n
\u200b\u6b64\u5916\u200b\uff0c__getitem__
\u3001__getattribute__
\u200b\u65b9\u6cd5\u200b\u5728\u200boperator
\u200b\u6a21\u5757\u200b\u4e2d\u200b\u4e5f\u200b\u6709\u200b\u5bf9\u5e94\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u4e3a\u200bitemgetter
\u3001attrgetter
\u3002methodcaller
\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u5185\u200b\u7684\u200b\u67d0\u4e2a\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u4e0e\u200boperator
\u200b\u6a21\u5757\u200b\u4e2d\u200b\u7684\u200b\u5176\u4ed6\u200b\u51fd\u6570\u200b\u4e0d\u540c\u200b\uff0c\u200b\u8c03\u7528\u200b\u8be5\u200b\u51fd\u6570\u200b\u4f1a\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u3002
>>> sort = operator.methodcaller('sort')\n>>> sort_rev = operator.methodcaller('sort', reverse=True)\n>>> a = [1, 3, 2]\n>>> sort(a)\n>>> a\n[1, 2, 3]\n>>> sort_rev(a)\n>>> a\n[3, 2, 1]\n>>>\n
"},{"location":"coding/python/functions/#functools","title":"functools\u200b\u6a21\u5757","text":"functools\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4e0e\u200b\u51fd\u6570\u200b\u5f0f\u200b\u7f16\u7a0b\u200b\u76f8\u5173\u200b\u7684\u200b\u4e00\u7cfb\u5217\u200b\u51fd\u6570\u200b\u5de5\u5177\u200b\u3002
partial
\u200b\u7528\u4e8e\u200b\u9501\u5b9a\u200b\u51fd\u6570\u200b\u7684\u200b\u4e00\u90e8\u5206\u200b\u53c2\u6570\u200b\u3002\u200b\u5176\u4f59\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u5728\u200b\u8c03\u7528\u200b\u65f6\u200b\u6307\u5b9a\u200b\uff08\u200b\u5b9a\u4f4d\u200b\u53c2\u6570\u200b\u53ea\u80fd\u200b\u6309\u200b\u987a\u5e8f\u200b\u6307\u5b9a\u200b\uff0c\u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u4efb\u610f\u200b\u6307\u5b9a\u200b\uff09\uff1a
>>> from functools import partial\n>>> part = partial(divmod, 3) \n>>> part(2)\n(1, 1)\n>>>\n
reduce
\u200b\u5c06\u200b\u63a5\u53d7\u200b\u4e24\u4e2a\u200b\u53c2\u6570\u200b\u7684\u200b\u51fd\u6570\u200b\u5e94\u7528\u200b\u5230\u200b\u4e00\u4e2a\u200b\u5e8f\u5217\u200b\u4e0a\u200b\uff0c\u200b\u5f97\u5230\u200b\u4e00\u4e2a\u200b\u7ed3\u679c\u200b\u3002\u200b\u501f\u52a9\u200boperator
\u200b\u6a21\u5757\u200b\u4e2d\u200b\u63d0\u4f9b\u200b\u7684\u200b\u8fd0\u7b97\u7b26\u200b\uff0creduce
\u200b\u6a21\u5757\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u9636\u4e58\u200b\u7b49\u200b\u9700\u8981\u200b\u5faa\u73af\u200b\u624d\u80fd\u200b\u5b9e\u73b0\u200b\u7684\u200b\u8fd0\u7b97\u200b\u64cd\u4f5c\u200b\uff1a
>>> from functools import reduce\n>>> def fact(x: int):\n... return reduce(operator.mul, range(1, x + 1))\n... \n>>> fact(5)\n120\n>>>\n
"},{"location":"coding/python/killable-thread/","title":"Python\u200b\u5173\u95ed\u200b\u7ebf\u7a0b","text":"\u200b\u4f7f\u7528\u200bPyThreadState_SetAsyncExc
\u200b\u51fd\u6570\u200b\u5728\u5b50\u200b\u7ebf\u7a0b\u200b\u4e2d\u200b\u5f15\u53d1\u200b\u5f02\u5e38\u200b\uff0c\u200b\u4ece\u800c\u200b\u4f7f\u200b\u7ebf\u7a0b\u200b\u63d0\u524d\u7ed3\u675f\u200b\u3002
\u200b\u793a\u4f8b\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
import threading \nimport ctypes \nimport time \n\nclass thread_with_exception(threading.Thread): \n def __init__(self, name): \n threading.Thread.__init__(self) \n self.name = name \n\n def run(self): \n\n # target function of the thread class \n try: \n while True: \n print('running ' + self.name) \n finally: \n print('ended') \n\n def get_id(self): \n\n # returns id of the respective thread \n if hasattr(self, '_thread_id'): \n return self._thread_id \n for id, thread in threading._active.items(): \n if thread is self: \n return id\n\n def raise_exception(self): \n thread_id = self.get_id() \n res = ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, \n ctypes.py_object(SystemExit)) \n if res > 1: \n ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, 0) \n print('Exception raise failure') \n\nt1 = thread_with_exception('Thread 1') \nt1.start() \ntime.sleep(2) \nt1.raise_exception() \nt1.join() \n
\u200b\u628a\u200brun()
\u200b\u4e2d\u200b\u6267\u884c\u200b\u7684\u200b\u64cd\u4f5c\u200b\u4ee5\u200b\u53c2\u6570\u200b\u7684\u200b\u5f62\u5f0f\u200b\u4f20\u9012\u200b\uff1a
class KillableThread(threading.Thread):\n \"\"\"\n A thread class extending threading.Thread, provides a kill() method to stop the thread and a getResult() method to get the return value of the thread.\n \"\"\"\n\n def __init__(self, func: Callable, *args, **kwargs):\n super().__init__()\n self.func: Callable = func\n self.funcArg: dict = kwargs\n self.funcTup: Tuple = args\n self.result: Any = None\n self.exception: Any = None\n\n def run(self):\n \"\"\"\n Executes the function here\n \"\"\"\n try:\n self.result = self.func(*self.funcTup, **self.funcArg)\n except BaseException as e:\n self.exception = e\n\n def get_id(self):\n \"\"\"\n Get the id of the thread\n \"\"\"\n if hasattr(self, '_thread_id'):\n return self._thread_id\n for id, thread in threading._active.items():\n if thread is self:\n return id\n\n def kill(self):\n \"\"\"\n Stops the thread\n \"\"\"\n thread_id = self.get_id()\n res = ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id,\n ctypes.py_object(SystemExit))\n if res > 1:\n ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, 0)\n print('Exception raise failure')\n\n def getResult(self):\n if self.exception is None:\n return self.result\n else:\n raise self.exception\n
\u200b\u6765\u6e90\u200b\uff1ahttps://www.geeksforgeeks.org/python-different-ways-to-kill-a-thread
"},{"location":"coding/python/magic-functions/","title":"\u9b54\u672f\u200b\u65b9\u6cd5","text":"\u200b\u672c\u6587\u200b\u4e3b\u8981\u200b\u6db5\u76d6\u200bPython\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\u3002\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\u662f\u200b\u7c7b\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u4e00\u79cd\u200b\u7279\u6b8a\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u65b9\u6cd5\u200b\u62e5\u6709\u200b\u56fa\u5b9a\u200b\u7684\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u548c\u200b\u7279\u6b8a\u200b\u7684\u200b\u8c03\u7528\u200b\u65f6\u673a\u200b\u3002
\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\u4ee5\u53cc\u200b\u4e0b\u5212\u7ebf\u200b__
\u200b\u5f00\u5934\u200b\uff0c\u200b\u4ee5\u53cc\u200b\u4e0b\u5212\u7ebf\u200b\u7ed3\u5c3e\u200b\u3002
Python\u200b\u4e2d\u200b\u7684\u200b\u8fd0\u7b97\u7b26\u200b\u91cd\u8f7d\u200b\u901a\u8fc7\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\u5206\u4e3a\u200b\u4e0e\u200b\u8fd0\u7b97\u7b26\u200b\u65e0\u5173\u200b\u7684\u200b\u7279\u6b8a\u200b\u65b9\u6cd5\u200b\u53ca\u200b\u4e0e\u200b\u8fd0\u7b97\u7b26\u200b\u6709\u5173\u200b\u7684\u200b\u7279\u6b8a\u200b\u65b9\u6cd5\u200b
"},{"location":"coding/python/magic-functions/#_2","title":"\u4e0e\u200b\u8fd0\u7b97\u7b26\u200b\u65e0\u5173\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5","text":"\u200b\u6d89\u53ca\u200b\u5230\u200b\u5b57\u7b26\u4e32\u200b\u4e0e\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\uff1a
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __repr__
self
\u200b\u5f53\u200b\u8c03\u7528\u200brepr()
\u200b\u51fd\u6570\u200b\u65f6\u200b str
\u200b\u8fd4\u56de\u503c\u200b\u5e94\u4e3a\u200b\u91cd\u5efa\u200b\u8be5\u200b\u5bf9\u8c61\u200b\u7684\u200bPython\u200b\u8868\u8fbe\u5f0f\u200b\uff08\u200b\u5982\u679c\u200b\u53ef\u80fd\u200b\uff09\uff0c\u200b\u6216\u200b\u5305\u542b\u200b\u5176\u4ed6\u200b\u4fe1\u606f\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b<...>
__str__
self
\u200b\u5f53\u200b\u8c03\u7528\u200bstr()
\u200b\u51fd\u6570\u200b\u65f6\u200b str
\u200b\u8c03\u7528\u200bprint()
\u200b\u7b49\u200b\u5176\u4ed6\u200b\u51fd\u6570\u200b\u65f6\u4f1a\u200b\u9690\u5f0f\u200b\u8c03\u7528\u200b__str__()
\uff0c\u200b\u5f53\u200b\u4e0d\u200b\u5b58\u5728\u200b__str__()
\u200b\u65f6\u4f1a\u200b\u81ea\u52a8\u200b\u8c03\u7528\u200b__repr__()
__format__
self, format_spec
\u200b\u5f53\u200b\u8c03\u7528\u200bformat()
\u200b\u51fd\u6570\u200b\u65f6\u200b str
object.__format__(x, '')
\u200b\u7b49\u4ef7\u200b\u4e8e\u200bstr(x)
__bytes__
self
\u200b\u5f53\u200b\u8c03\u7528\u200bbytes()
\u200b\u51fd\u6570\u200b\u65f6\u200b bytes
\u200b\u8fd4\u56de\u503c\u200b\u662f\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5b57\u8282\u200b\u8868\u793a\u200b \u200b\u6d89\u53ca\u200b\u5230\u200b\u6570\u503c\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\uff1a
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __bool__
self
\u200b\u8c03\u7528\u200bbool()
\u200b\u51fd\u6570\u200b\u65f6\u200b bool
\u200b\u5f53\u200b__bool__
\u200b\u51fd\u6570\u200b\u6ca1\u6709\u200b\u5b9a\u4e49\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u9690\u5f0f\u200b\u8c03\u7528\u200b__len__
\uff0c\u200b\u5982\u679c\u200b__len__
\u200b\u4e5f\u200b\u6ca1\u6709\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bTrue
__complex__
self
\u200b\u8c03\u7528\u200bcommplex()
\u200b\u51fd\u6570\u200b\u65f6\u200b complex
__int__
self
\u200b\u8c03\u7528\u200bint()
\u200b\u51fd\u6570\u200b\u65f6\u200b int
__float__
self
\u200b\u8c03\u7528\u200bfloat()
\u200b\u51fd\u6570\u200b\u65f6\u200b float
__hash__
self
\u200b\u8c03\u7528\u200bhash()
\u200b\u51fd\u6570\u200b\u65f6\u200b hash()
\u200b\u51fd\u6570\u200b\u5c06\u200b__hash__()
\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u622a\u65ad\u200b\u5230\u200bPy_ssize_t
\u200b\u7684\u200b\u8303\u56f4\u200b\u5185\u200b\uff0c64\u200b\u4f4d\u200b\u7cfb\u7edf\u200b\u4e0b\u200bPy_ssize_t
\u200b\u4e3a\u200b8\u200b\u5b57\u8282\u200b\uff1bset
\u200b\u7b49\u200b\u7c7b\u578b\u200b\u7684\u200b\u64cd\u4f5c\u200b\u4e5f\u200b\u4f1a\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u7684\u200b__hash__
\u200b\u51fd\u6570\u200b __index__
self
\u200b\u8c03\u7528\u200boperator.index()
\u200b\u6216\u200bPython\u200b\u9700\u8981\u200b\u6574\u6570\u200b\u503c\u65f6\u200b int
\u200b\u5f53\u200b__int__
\u3001__float__
\u3001__complex__
\u200b\u6ca1\u6709\u200b\u5b9e\u73b0\u200b\u65f6\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u51fd\u6570\u200b\u9690\u5f0f\u200b\u5730\u200b\u8c03\u7528\u200b__index__
\u200b\u96c6\u5408\u200b\u76f8\u5173\u200b\u64cd\u4f5c\u200b
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __len__
self
\u200b\u8c03\u7528\u200blen()
\u200b\u51fd\u6570\u200b\u65f6\u200b int
\u200b\u8fd4\u56de\u503c\u200b\u5fc5\u987b\u200b\u4e3a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\uff0c\u200b\u5728\u200bCPython\u200b\u4e2d\u200b\u8fd4\u56de\u503c\u200b\u4e0d\u80fd\u200b\u8d85\u8fc7\u200bsys.maxsize
\u200b\u4e2d\u200b\u5b9a\u4e49\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u5426\u5219\u200blen()
\u200b\u7b49\u200b\u51fd\u6570\u200b\u4f1a\u200b\u629b\u51fa\u200bOverflowError
\u200b\u7b49\u200b\u5f02\u5e38\u200b __getitemm__
self, key
\u200b\u4f7f\u7528\u200b[]
\u200b\u8fd0\u7b97\u7b26\u200b\u65f6\u200b\uff08\u200b\u53f3\u503c\u200b\uff09 key
\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u5408\u6cd5\u200b\u7684\u200b\u6570\u7ec4\u200b\u4e0b\u6807\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u53cd\u5411\u200b\u7684\u200b\u4e0b\u6807\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u5e8f\u5217\u200b\u7684\u200b\u5207\u7247\u200b\uff0c\u200b\u8be5\u200b\u51fd\u6570\u200b\u5e94\u200b\u5728\u200bkey
\u200b\u7c7b\u578b\u200b\u4e0d\u200b\u5bf9\u5e94\u200b\u65f6\u200b\u629b\u51fa\u200bTypeError
\uff0ckey
\u200b\u8d85\u51fa\u8303\u56f4\u200b\u65f6\u200b\u629b\u51fa\u200bIndexError
\u200b\u6216\u200bKeyError
\uff08\u200b\u5bf9\u4e8e\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\uff09 __setitem__
self, key, value
\u200b\u4f7f\u7528\u200b[]
\u200b\u8fd0\u7b97\u7b26\u200b\u65f6\u200b\uff08\u200b\u5de6\u503c\u200b\uff09 None
key
\u200b\u53c2\u6570\u200b\u7684\u200b\u53d6\u503c\u200b\u53ca\u200b\u5f02\u5e38\u200b\u5904\u7406\u200b\u4e0e\u200b__getitem__
\u200b\u51fd\u6570\u200b\u76f8\u540c\u200b __delitem__
self, key
\u200b\u4f7f\u7528\u200bdel
\u200b\u5220\u9664\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u65f6\u200b None
\u200b\u5bf9\u4e8e\u200b\u4e0d\u53ef\u200b\u5220\u9664\u200b\u7684\u200b\u5e8f\u5217\u200b\u6216\u200b\u6620\u5c04\u200b\uff0c\u200b\u65e0\u9700\u200b\u5b9e\u73b0\u200b\u8be5\u200b\u51fd\u6570\u200b\uff0c\u200b\u5176\u4ed6\u200b\u540c\u200b__getitem__
__contains__
self, item
\u200b\u4f7f\u7528\u200bin
\u200b\u4f5c\u4e3a\u200b\u8fd0\u7b97\u7b26\u200b\u65f6\u200b bool
\u200b\u5bf9\u4e8e\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\uff0c__contains__
\u200b\u63a5\u6536\u200b\u7684\u200bitem
\u200b\u53c2\u6570\u200b\u5bf9\u5e94\u200b\u6620\u5c04\u200b\u7684\u200bkey
\u200b\u90e8\u5206\u200b\u800c\u200b\u4e0d\u662f\u200bvalue
\u200b\u90e8\u5206\u200b\u3002\u200b\u82e5\u200b\u6ca1\u6709\u200b\u5b9a\u4e49\u200b\u8be5\u200b\u51fd\u6570\u200b\uff0cPython\u200b\u9996\u5148\u200b\u901a\u8fc7\u200b__iter__
\u200b\u8fdb\u884c\u200b\u67e5\u627e\u200b\uff0c\u200b\u5176\u6b21\u200b\u4f7f\u7528\u200b__getitem__
\u200b\u8fdb\u884c\u200b\u67e5\u627e\u200b \u200b\u8fed\u4ee3\u200b\u5668\u200b\u4e0e\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __iter__
self
\u200b\u8c03\u7528\u200biter()
\u200b\u51fd\u6570\u200b\u6216\u200b\u4f7f\u7528\u200b\u5faa\u73af\u200b\u65f6\u200b \u200b\u8fd4\u56de\u503c\u200b\u5e94\u4e3a\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff0c__iter__
\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u81ea\u8eab\u200b __reversed__
self
\u200b\u8c03\u7528\u200breversed()
\u200b\u51fd\u6570\u200b\u65f6\u200b \u200b\u8fd4\u56de\u503c\u200b\u5e94\u4e3a\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u4e14\u200b\u662f\u200b\u539f\u200b\u5e8f\u5217\u200b\u7684\u200b\u9006\u5e8f\u200b __next__
self
\u200b\u8c03\u7528\u200bnext()
\u200b\u51fd\u6570\u200b\u65f6\u200b \u200b\u8fd4\u56de\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u5f53\u200b\u5230\u8fbe\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u65f6\u200b\u629b\u51fa\u200bStopIteration
\u200b\u51fd\u6570\u8c03\u7528\u200b
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __call__
self, *args, **kwargs
\u200b\u5f53\u200b\u5bf9\u8c61\u200b\u4ee5\u200b\u51fd\u6570\u200b\u7684\u200b\u65b9\u5f0f\u200b\u88ab\u200b\u8c03\u7528\u200b\u65f6\u200b \u200b\u5b9a\u4e49\u200b\u4e86\u200b__call__
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5bf9\u8c61\u200b\u5c5e\u4e8e\u200btyping.Callable
\u200b\u7c7b\u578b\u200b \u200b\u4e0a\u4e0b\u6587\u200b\u7ba1\u7406\u200b\uff08with
\uff09\u200b\u5173\u952e\u8bcd\u200b\uff1a
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __enter__
self
\u200b\u4f7f\u7528\u200bwith
\u200b\u5173\u952e\u8bcd\u200b\u58f0\u660e\u200b\u4e0a\u4e0b\u6587\u200b\u65f6\u200b Any
\u200b\u8fd4\u56de\u503c\u200b\u5206\u914d\u200b\u7ed9\u200bas
\u200b\u5173\u952e\u8bcd\u200b\u6307\u660e\u200b\u7684\u200b\u5bf9\u8c61\u200b __exit__
self, exc_type, exc_value, traceback
\u200b\u79bb\u5f00\u200bwith
\u200b\u5757\u200b\u65f6\u200b Any
\u200b\u82e5\u200bwith
\u200b\u5757\u200b\u6267\u884c\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u6ca1\u6709\u200b\u51fa\u73b0\u5f02\u5e38\u200b\uff0c\u200b\u5219\u200bexc_type, exc_value, traceback
\u200b\u53c2\u6570\u5747\u200b\u4e3a\u200bNone
\uff0c\u200b\u5426\u5219\u200bexit
\u200b\u5757\u200b\u53ef\u4ee5\u200b\u5bf9\u200b\u5f02\u5e38\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b \u200b\u5bf9\u8c61\u200b\u7ba1\u7406\u200b
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __new__
cls[, ...]
\u200b\u521b\u5efa\u200b\u7c7b\u200b\u5b9e\u4f8b\u200b\u65f6\u200b Any
__new__
\u200b\u4e3a\u200b\u9759\u6001\u65b9\u6cd5\u200b\u4e14\u200b\u5148\u4e8e\u200b__init__
\u200b\u6267\u884c\u200b\uff0c__new__
\u200b\u7684\u200b\u5176\u4f59\u200b\u53c2\u6570\u200b\u4f1a\u200b\u4f20\u9012\u200b\u7ed9\u200b__init__
\u3002\u200b\u82e5\u200b__new__
\u200b\u8fd4\u56de\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e0e\u200b\u521b\u5efa\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e0d\u200b\u5bf9\u5e94\u200b\uff0c\u200b\u5219\u200b\u4e0d\u4f1a\u200b\u6267\u884c\u200b__init__
__init__
self, ...
\u200b\u521d\u59cb\u5316\u200b\u7c7b\u200b\u5b9e\u4f8b\u200b\u65f6\u200b None
\u200b\u82e5\u200b\u57fa\u7c7b\u200b\u5b9a\u4e49\u200b\u4e86\u200b__init__
\uff0c\u200b\u5219\u200b\u5728\u200b\u5b50\u7c7b\u200b\u7684\u200b__init__
\u200b\u4e2d\u200b\u5fc5\u987b\u200b\u6709\u200bsuper().__init()
\u200b\u7684\u200b\u663e\u5f0f\u200b\u8c03\u7528\u200b __del__
self
\u200b\u5bf9\u8c61\u200b\u9500\u6bc1\u200b\u65f6\u200b None
\u200b\u5f53\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5f15\u7528\u200b\u8ba1\u6570\u200b\u51cf\u200b\u4e3a\u200b0\u200b\u65f6\u200b\uff0c\u200b\u5bf9\u8c61\u200b\u624d\u200b\u53ef\u80fd\u200b\u88ab\u200b\u5220\u9664\u200b \u200b\u5c5e\u6027\u200b\u7ba1\u7406\u200b
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __getattribute__
self, name
\u200b\u4f7f\u7528\u200bself.name
\u200b\u8bbf\u95ee\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5c5e\u6027\u200b\u65f6\u200b Any
\u200b\u4e3a\u200b\u907f\u514d\u200b\u65e0\u9650\u200b\u9012\u5f52\u200b\uff0c\u200b\u5b50\u7c7b\u200b\u7684\u200b__getattribute__
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\u5fc5\u987b\u200b\u5305\u542b\u200b\u7236\u7c7b\u200b\u7684\u200b__getattribute__
\u200b\u65b9\u6cd5\u200b\u8c03\u7528\u200b __getattr__
self, name
\u200b\u4f7f\u7528\u200bself.name
\u200b\u8bbf\u95ee\u200b\u5bf9\u8c61\u200b\u7684\u200b\u4e0d\u200b\u5b58\u5728\u200b\u5c5e\u6027\u200b\u6216\u200b__getattribute__
\u200b\u51fd\u6570\u200b\u629b\u51fa\u200bAttributeError
\u200b\u5f02\u5e38\u200b Any
\u200b\u5f53\u200b__getattribute__
\u200b\u6b63\u5e38\u200b\u6267\u884c\u200b\u65f6\u200b__getattr__
\u200b\u4e0d\u4f1a\u200b\u6267\u884c\u200b __setattr__
self, name, value
\u200b\u4f7f\u7528\u200bself.name
\u200b\u8bbe\u7f6e\u200b\u5c5e\u6027\u200b\u7684\u200b\u503c\u65f6\u200b None
\u200b\u5f53\u200b\u8bd5\u56fe\u200b\u901a\u8fc7\u200b__setattr__
\u200b\u5411\u200b\u5bf9\u8c61\u200b\u8bbe\u7f6e\u200b\u5c5e\u6027\u200b\u503c\u65f6\u200b\u5fc5\u987b\u200b\u901a\u8fc7\u200b\u7c7b\u578b\u200b\u7684\u200b__setattr__
\u200b\u65b9\u6cd5\u200b\u8fdb\u884c\u200b\u8bbe\u7f6e\u200b __delattr__
self, name
\u200b\u6267\u884c\u200bdel self.name
\u200b\u65f6\u200b None
\u200b\u4ec5\u5f53\u200bdel self.name
\u200b\u8bed\u53e5\u200b\u6709\u200b\u610f\u4e49\u200b\u65f6\u200b\uff0c\u200b\u624d\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200b\u8be5\u200b\u65b9\u6cd5\u200b __dir__
self
\u200b\u6267\u884c\u200bdir()
\u200b\u51fd\u6570\u200b\u65f6\u200b Sequence
dir()
\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\u5904\u7406"},{"location":"coding/python/magic-functions/#_3","title":"\u4e0e\u200b\u8fd0\u7b97\u7b26\u200b\u6709\u5173\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5","text":"\u200b\u4e00\u5143\u200b\u8fd0\u7b97\u7b26\u200b
\u200b\u63cf\u8ff0\u200b \u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u8fd0\u7b97\u7b26\u200b \u200b\u53d6\u8d1f\u200b __neg__
-
\u200b\u53d6\u6b63\u200b __pos__
+
\u200b\u7edd\u5bf9\u503c\u200b __abs__
abs()
\u200b\u6bd4\u8f83\u200b\u8fd0\u7b97\u7b26\u200b
\u200b\u63cf\u8ff0\u200b \u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u8fd0\u7b97\u7b26\u200b \u200b\u5c0f\u4e8e\u200b __lt__
<
\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b __le__
<=
\u200b\u7b49\u4e8e\u200b __eq__
==
\u200b\u4e0d\u200b\u7b49\u4e8e\u200b __ne__
!=
\u200b\u5927\u4e8e\u200b __gt__
>
\u200b\u5927\u4e8e\u200b\u7b49\u4e8e\u200b __ge__
>=
\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u7b26\u200b
\u200b\u63cf\u8ff0\u200b \u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u8fd0\u7b97\u7b26\u200b \u200b\u76f8\u52a0\u200b __add__
+
\u200b\u76f8\u51cf\u200b __sub__
-
\u200b\u76f8\u4e58\u200b __mul__
*
\u200b\u5b9e\u6570\u200b\u9664\u200b __truediv__
/
\u200b\u6574\u6570\u200b\u9664\u200b __floordiv__
//
\u200b\u53d6\u4f59\u200b __mod__
%
\u200b\u6574\u6570\u200b\u9664\u200b+\u200b\u53d6\u4f59\u200b __divmod__
divmod()
\u200b\u4e58\u65b9\u200b __pow__
**
\u200b\u53d6\u6574\u200b __round__
round()
\u200b\u53cd\u5411\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u7b26\u200b\u5728\u200b\u65b9\u6cd5\u200b\u540d\u200b\u524d\u9762\u200b\u52a0\u200br
\uff0c\u200b\u5982\u200b__radd__
\u3002\u200b\u589e\u91cf\u200b\u8d4b\u503c\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u7b26\u200b\u5728\u200b\u65b9\u6cd5\u200b\u540d\u200b\u524d\u9762\u200b\u52a0\u200bi
\uff0c\u200b\u5982\u200b__iadd__
\u3002
\u200b\u4f4d\u200b\u8fd0\u7b97\u7b26\u200b
\u200b\u63cf\u8ff0\u200b \u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u8fd0\u7b97\u7b26\u200b \u200b\u6309\u4f4d\u200b\u53d6\u53cd\u200b __invert__
~
\u200b\u5de6\u79fb\u200b __lshift__
<<
\u200b\u53f3\u79fb\u200b __rshift__
>>
\u200b\u6309\u4f4d\u200b\u4e0e\u200b __and__
&
\u200b\u6309\u4f4d\u200b\u6216\u200b __or__
|
\u200b\u6309\u4f4d\u200b\u5f02\u6216\u200b __xor__
^
\u200b\u53cd\u5411\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u7b26\u200b\u5728\u200b\u65b9\u6cd5\u200b\u540d\u200b\u524d\u9762\u200b\u52a0\u200br
\uff0c\u200b\u589e\u91cf\u200b\u8d4b\u503c\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u7b26\u200b\u5728\u200b\u65b9\u6cd5\u200b\u540d\u200b\u524d\u9762\u200b\u52a0\u200bi
\u3002
"},{"location":"coding/python/mapping/","title":"Python\u200b\u4e2d\u200b\u7684\u200b\u6620\u5c04\u200b\u7c7b\u578b","text":"Python\u200b\u4e2d\u200b\u6700\u200b\u5e38\u89c1\u200b\u7684\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\u662f\u200b\u5b57\u5178\u200b\u3002\u200b\u672c\u6587\u200b\u5c06\u200b\u4ece\u200b\u5b57\u5178\u200b\u5165\u624b\u200b\u5bf9\u200bPython\u200b\u4e2d\u200b\u7684\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\u8fdb\u884c\u200b\u63a2\u8ba8\u200b\u3002
"},{"location":"coding/python/mapping/#_1","title":"\u5b57\u5178","text":"\u200b\u5b57\u5178\u200b\u7c7b\u578b\u200bdict
\u200b\u5bf9\u5e94\u200b\u7684\u200b\u62bd\u8c61\u200b\u57fa\u7c7b\u200b\u4e3a\u200bMutableMapping
\u3002\u200b\u800c\u200bMutableMapping
\u200b\u662f\u200bMapping
\u200b\u7684\u200b\u5b50\u7c7b\u200b\u3002
dict
\u200b\u4e2d\u200b\u7684\u200b\u6570\u636e\u7ec4\u7ec7\u200b\u4e3a\u952e\u200b-\u200b\u503c\u200b\u5bf9\u200b\u7684\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u5b57\u5178\u200b\u5bf9\u503c\u200b\u7684\u200b\u7c7b\u578b\u200b\u6ca1\u6709\u200b\u8981\u6c42\u200b\uff0c\u200b\u4f46\u200b\u8981\u6c42\u200b\u952e\u200b\u7684\u200b\u7c7b\u578b\u200b\u5fc5\u987b\u200b\u53ef\u6563\u5217\u200b\uff08hashable\uff09\u3002\u200b\u7531\u6b64\u53ef\u89c1\u200b\uff0c\u200b\u5b57\u5178\u200b\u7ed3\u6784\u200b\u7684\u200b\u5e95\u5c42\u200b\u5b9e\u73b0\u200b\u7c7b\u4f3c\u200b\u6563\u200b\u5217\u8868\u200b\uff0c\u200b\u4ee5\u200b\u52a0\u5feb\u200b\u5b57\u5178\u200b\u5185\u200b\u5143\u7d20\u200b\u7684\u200b\u8bbf\u95ee\u901f\u5ea6\u200b\u3002\u200b\u5b57\u5178\u200b\u7684\u200b\u6267\u884c\u200b\u6548\u7387\u200b\u8fdc\u9ad8\u4e8e\u200b\u5217\u8868\u200b\u3002
Python 3.6\u200b\u53ca\u200b\u4ee5\u540e\u200b\uff0cdict
\u200b\u7c7b\u578b\u200b\u5728\u200b\u5b9e\u73b0\u200b\u4e0a\u200b\u662f\u200b\u6709\u5e8f\u200b\u7684\u200b\uff0c\u200b\u952e\u200b\u7684\u200b\u987a\u5e8f\u200b\u53d6\u51b3\u4e8e\u200b\u6dfb\u52a0\u200b\u987a\u5e8f\u200b\uff0c\u200b\u4f46\u200b\u6807\u51c6\u200b\u5e76\u200b\u6ca1\u6709\u200b\u89c4\u5b9a\u200bdict
\u200b\u7c7b\u578b\u200b\u7684\u200b\u6709\u5e8f\u6027\u200b\u3002\u200b\u56e0\u6b64\u200b\u4e24\u4e2a\u200b\u952e\u200b\u987a\u5e8f\u200b\u4e0d\u540c\u200b\u7684\u200b\u5b57\u5178\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u76f8\u540c\u200b\u3002
>>> a = {1: 2, 2: 1}\n>>> b = {2: 1, 1: 2}\n>>> a == b\nTrue\n>>>\n
New in version 3.9
Python 3.9\u200b\u4e2d\u200b\uff0c\u200b\u5b57\u5178\u200b\u5bf9\u8c61\u200b\u652f\u6301\u200b|
\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u7528\u4e8e\u200b\u5c06\u200b\u4e24\u4e2a\u200b\u5b57\u5178\u200b\u5408\u5e76\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u3002\u200b\u5f53\u200b\u4e24\u4e2a\u200b\u5b57\u5178\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u91cd\u590d\u200b\u503c\u65f6\u200b\u53f3\u4fa7\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u4f18\u5148\u200b\u3002
>>> import sys \n>>> ver = sys.version_info\n>>> if ver.major == 3 and ver.minor > 8:\n... a = {1: 2}\n... b = {3: 4}\n... print(a | b == {1: 2, 3: 4})\n... else:\n... print(True)\nTrue\n>>>\n
"},{"location":"coding/python/mapping/#_2","title":"\u8fed\u4ee3","text":"dict
\u200b\u5bf9\u8c61\u200b\u662f\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5f53\u5bf9\u200bdict
\u200b\u5bf9\u8c61\u200b\u8fdb\u884c\u200b\u8fed\u4ee3\u200b\u65f6\u200b\uff0c\u200b\u5b9e\u9645\u4e0a\u200b\u662f\u200b\u8fed\u4ee3\u200bdict
\u200b\u7684\u200b\u952e\u200b\u3002
>>> for key in {1: 2, 3: 4}:\n... print(key)\n...\n1\n3\n>>>\n
dict.keys()
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u7531\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7684\u200b\u952e\u200b\u7ec4\u6210\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff1b dict.values()
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u7531\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u7ec4\u6210\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff1b dict.items()
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u7531\u952e\u200b-\u200b\u503c\u200b\u5143\u7ec4\u200b\u7ec4\u6210\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u8c03\u7528\u200bvalues
\u200b\u65b9\u6cd5\u200b\u65f6\u200b\uff0c\u200b\u90fd\u200b\u4f1a\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5373\u4f7f\u200b\u662f\u200b\u5bf9\u200b\u540c\u4e00\u4e2a\u200b\u5b57\u5178\u200b\u8c03\u7528\u200b\u591a\u6b21\u200bvalues
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5176\u200b\u8fd4\u56de\u503c\u200b\u4e5f\u200b\u4e0d\u60f3\u200b\u7b49\u200b\u3002
Changed in version 3.8
\u200b\u5185\u7f6e\u200b\u51fd\u6570\u200breversed
\u200b\u652f\u6301\u200b\u4f20\u9012\u200b\u5b57\u5178\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7684\u200b\u952e\u200b\u9006\u5e8f\u200b\u7ec4\u6210\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u3002
\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\u901a\u5e38\u200b\u662f\u200b\u53ef\u200b\u4fee\u6539\u200b\u7684\u200b\uff0c\u200b\u4f7f\u7528\u200btypes.MappingProxyType
\u200b\u4f1a\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u539f\u200b\u6620\u5c04\u200b\u7684\u200b\u89c6\u56fe\u200b\u3002\u200b\u5bf9\u539f\u200b\u6620\u5c04\u200b\u7684\u200b\u4efb\u4f55\u200b\u4fee\u6539\u200b\u90fd\u200b\u4f1a\u200b\u53cd\u6620\u200b\u5728\u200b\u89c6\u56fe\u200b\u4e2d\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u80fd\u200b\u5bf9\u200b\u89c6\u56fe\u200b\u8fdb\u884c\u200b\u4efb\u4f55\u200b\u76f4\u63a5\u200b\u7684\u200b\u4fee\u6539\u200b\u3002\u200b\u6b64\u200b\u65b9\u6cd5\u200b\u95f4\u63a5\u200b\u5730\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u4e0d\u53ef\u200b\u4fee\u6539\u200b\u7684\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\u3002
>>> from types import MappingProxyType\n>>> a = {1: 2, 3: 4}\n>>> b = MappingProxyType(a)\n>>> b\nmappingproxy({1: 2, 3: 4})\n>>> a.update({1: 5})\n>>> b\nmappingproxy({1: 5, 3: 4})\n>>> b[1] = 2\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: 'mappingproxy' object does not support item assignment\n>>>\n
"},{"location":"coding/python/mapping/#_3","title":"\u53ef\u6563\u5217\u200b\u7c7b\u578b","text":"\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u5bf9\u8c61\u200b\u79f0\u4e3a\u200b\u53ef\u6563\u5217\u200b\u5bf9\u8c61\u200b\uff1a
- \u200b\u5982\u679c\u200b\u8be5\u200b\u5bf9\u8c61\u200b\u53ef\u6563\u5217\u200b\uff0c\u200b\u5219\u200b\u5728\u200b\u5176\u200b\u751f\u547d\u5468\u671f\u200b\u4e2d\u200b\uff0c\u200b\u8be5\u6563\u200b\u5217\u503c\u200b\u4e0d\u53d8\u200b
- \u200b\u5bf9\u8c61\u200b\u5b9e\u73b0\u200b\u4e86\u200b
__hash__()
\u200b\u4e0e\u200b__eq__()
\u200b\u65b9\u6cd5\u200b\uff08\u200b\u6ca1\u6709\u200b\u5b9e\u73b0\u200b__eq__()
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5bf9\u8c61\u200b\u4e0d\u200b\u5e94\u200b\u5b9e\u73b0\u200b__hash__()
\u200b\u65b9\u6cd5\u200b\uff09 - \u200b\u5982\u679c\u200b\u5b83\u200b\u548c\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u5bf9\u8c61\u200b\u76f8\u7b49\u200b\uff0c\u200b\u5219\u200b\u4e24\u8005\u200b\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u6563\u5217\u503c\u200b
\u200b\u5982\u200b\uff1a
>>> a = \"abc\"\n>>> b = \"\".join([\"a\", \"b\", \"c\"])\n>>> a is b\nFalse\n>>> hash(a) == hash(b)\nTrue\n>>>\n
\u200b\u6ce8\u200b\uff1a\u200b\u82e5\u200b\u4e00\u4e2a\u200b\u81ea\u5b9a\u4e49\u200b\u7c7b\u578b\u5b9a\u4e49\u200b\u4e86\u200b__eq__
\uff0c\u200b\u4e14\u200b\u6ca1\u6709\u200b\u5b9a\u4e49\u200b__hash__
\uff0c__hash__
\u200b\u4f1a\u200b\u88ab\u200b\u8bbe\u4e3a\u200bNone
\u3002\u200b\u53ef\u6563\u5217\u200b\u7684\u200b\u81ea\u5b9a\u4e49\u200b\u5bf9\u8c61\u200b\u5fc5\u987b\u200b\u6709\u200b__hash__
\u200b\u65b9\u6cd5\u200b\u3002
\u200b\u4ee5\u4e0b\u5185\u5bb9\u200b\u6765\u81ea\u200b\u4e8e\u200bPython\u200b\u6587\u6863\u200b
\u200b\u6839\u636e\u200b\u5982\u200b\u4e0a\u200b\u89c4\u5219\u200b\u53ef\u4ee5\u200b\u5224\u65ad\u200b\u4e00\u4e9b\u200b\u5185\u7f6e\u200b\u6570\u636e\u7ed3\u6784\u200b\u662f\u5426\u200b\u4e3a\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b
- \u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u5728\u200b\u751f\u547d\u5468\u671f\u200b\u4e2d\u200b\u5e8f\u5217\u200b\u7684\u200b\u5185\u5bb9\u200b\u53ef\u80fd\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\uff08\u200b\u5982\u200b
list
\u3001set
\u200b\u7b49\u200b\uff09\u200b\u4e0d\u662f\u200b\u53ef\u6563\u5217\u200b\u5bf9\u8c61\u200b\u3002 - \u200b\u539f\u5b50\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u6570\u636e\u7c7b\u578b\u200b\u6ee1\u8db3\u200b\u5982\u200b\u4e0a\u200b\u6240\u6709\u200b\u6761\u4ef6\u200b\uff0c\u200b\u662f\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b
- \u200b\u5bb9\u5668\u200b
frozenset
\u200b\u8981\u6c42\u200b\u5176\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u5747\u200b\u4e3a\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5176\u4e2d\u200b\u5185\u5bb9\u200b\u5728\u200b\u6574\u4e2a\u200b\u751f\u547d\u5468\u671f\u200b\u4e2d\u200b\u4e0d\u4f1a\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u56e0\u6b64\u200b\u662f\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b - \u200b\u5bb9\u5668\u200b
tuple
\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u5bb9\u7eb3\u200b\u4e0d\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u56e0\u6b64\u200btuple
\u200b\u4e0d\u662f\u200b\u53ef\u6563\u5217\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u200b\u542b\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5143\u7ec4\u200b\u662f\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b\u3002
>>> t1 = hash((1, 2))\n>>> t2 = hash((1, [2]))\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: unhashable type: 'list'\n>>>\n
\u200b\u4f7f\u7528\u200bhash
\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u53d6\u5f97\u200b\u53ef\u6563\u5217\u200b\u5bf9\u8c61\u200b\u7684\u200b\u6563\u5217\u503c\u200b\u3002\u200b\u4e3a\u4e86\u200b\u907f\u514d\u200bDOS\u200b\u653b\u51fb\u200b\uff0c\u200b\u5728\u200b\u8ba1\u7b97\u200b\u6563\u5217\u503c\u200b\u65f6\u4f1a\u200b\u52a0\u4e0a\u200b\u4e00\u4e2a\u200b\u968f\u673a\u200b\u7684\u200b\u566a\u58f0\u200b\u3002\u200b\u566a\u58f0\u200b\u7684\u200b\u503c\u200b\u4ec5\u200b\u5728\u200b\u540c\u4e00\u200bPython\u200b\u5b9e\u4f8b\u200b\u4e2d\u200b\u76f8\u540c\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\uff0c\u200b\u82e5\u200b\u5b83\u200b\u7684\u200b\u503c\u200b\u5c0f\u4e8e\u200b\u6563\u5217\u503c\u200b\u6240\u200b\u5141\u8bb8\u200b\u7684\u200b\u6700\u5927\u503c\u200b\uff08\u200b\u5373\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u653e\u8fdb\u200b\u6563\u5217\u503c\u200b\u6240\u200b\u9650\u5b9a\u200b\u7684\u200b\u7a7a\u95f4\u200b\u5185\u200b\uff09\uff0c\u200b\u5219\u200b\u6563\u5217\u200b\u7684\u200b\u503c\u200b\u5c31\u662f\u200b\u8be5\u200b\u6574\u6570\u200b\u7684\u200b\u503c\u200b\u3002
\u200b\u6563\u200b\u5217\u8868\u200b\u7684\u200b\u4f7f\u7528\u200b\u662f\u200b\u201c\u200b\u7a7a\u95f4\u200b\u6362\u200b\u65f6\u95f4\u200b\u201d\u200b\u7b56\u7565\u200b\u7684\u200b\u5178\u578b\u200b\u4f53\u73b0\u200b\u3002\u200b\u4e3a\u4e86\u200b\u5c3d\u53ef\u80fd\u51cf\u5c11\u200b\u51b2\u7a81\u200b\uff0c\u200b\u6563\u200b\u5217\u8868\u200b\u5fc5\u987b\u200b\u6709\u200b\u8f83\u200b\u4f4e\u200b\u7684\u200b\u88c5\u586b\u200b\u56e0\u5b50\u200b\uff0c\u200b\u8fd9\u200b\u610f\u5473\u7740\u200b\u6563\u200b\u5217\u8868\u200b\u4f1a\u200b\u5360\u7528\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u3002
"},{"location":"coding/python/mapping/#_4","title":"\u6784\u9020","text":"\u200b\u5b57\u5178\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u591a\u79cd\u200b\u6784\u9020\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6784\u9020\u200b\u5b57\u5178\u200b{'a': 1, 'b': 2}
- \u200b\u82b1\u200b\u62ec\u53f7\u200b\u6784\u9020\u200b\uff0c\u200b\u5982\u200b
{'a': 1, 'b': 2}
- \u200b\u901a\u8fc7\u200b\u7c7b\u200b\u6784\u9020\u51fd\u6570\u200b\uff0c\u200b\u5982\u200b
dict(a=1, b=2)
- \u200b\u901a\u8fc7\u200b\u5143\u7ec4\u200b/\u200b\u5217\u8868\u200b\uff08\u200b\u53ea\u200b\u9700\u200b\u662f\u200b\u957f\u5ea6\u200b\u4e3a\u200b2\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff09\u200b\u6784\u9020\u200b\uff0c\u200b\u5982\u200b
dict([('a', 1), ['b', 2]])
- \u200b\u901a\u8fc7\u200b
zip
\u200b\u6253\u5305\u200b\u6784\u9020\u200b\uff0c\u200b\u5982\u200bdict(zip(['a', 'b'], [1, 2]))
- \u200b\u901a\u8fc7\u200b\u5b57\u5178\u200b\u63a8\u5bfc\u200b\u6784\u9020\u200b\uff0c\u200b\u5982\u200b
{chr(97 + _): _ + 1 for _ in range(2)}
"},{"location":"coding/python/mapping/#_5","title":"\u53d8\u79cd","text":"collections
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5b57\u5178\u200b\u7684\u200b\u4e24\u4e2a\u200b\u53d8\u79cd\u200b\uff0c\u200b\u5373\u200bdefaultdict
\u200b\u4e0e\u200bOrderDict
"},{"location":"coding/python/mapping/#defaultdict","title":"defaultdict","text":"\u200b\u5f53\u200b\u5728\u200b\u4e00\u4e2a\u200b\u5b57\u5178\u200bd
\u200b\u4e2d\u200b\u627e\u200b\u4e0d\u5230\u200b\u952e\u200bk
\u200b\u65f6\u200b\uff0cPython\u200b\u4f1a\u200b\u4ea7\u751f\u200bKeyError
\u200b\u5f02\u5e38\u200b\u3002\u200b\u4f7f\u7528\u200bd.get(k, default)
\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u627e\u200b\u4e0d\u5230\u200b\u7684\u200b\u952e\u200b\u8bbe\u7f6e\u200b\u9ed8\u8ba4\u200b\u8fd4\u56de\u503c\u200b\u3002\u200b\u4f46\u200bdict.get
\u200b\u51fd\u6570\u200b\u4e0d\u4f1a\u200b\u5bf9\u200b\u5b57\u5178\u200b\u8fdb\u884c\u200b\u66f4\u65b0\u200b\uff0c\u200b\u63d2\u5165\u200b\u627e\u200b\u4e0d\u5230\u200b\u7684\u200b\u952e\u200b\u3002
dict.setdefault
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u53e6\u200b\u4e00\u79cd\u200b\u4ece\u200b\u5b57\u5178\u200b\u4e2d\u200b\u83b7\u53d6\u200b\u503c\u200b\u7684\u200b\u65b9\u6cd5\u200b\u3002setdefault
\u200b\u63a5\u6536\u200b\u4e24\u4e2a\u200b\u53c2\u6570\u200b\uff0c\u200b\u7b2c\u4e00\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200bkey
\uff0c\u200b\u7b2c\u4e8c\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200b\u53ef\u9009\u200b\u7684\u200b\u9ed8\u8ba4\u503c\u200bdefault
\u3002\u200b\u5f53\u200b\u5b57\u5178\u200b\u4e2d\u200b\u627e\u5230\u200bkey
\u200b\u6240\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5143\u7d20\u200b\u65f6\u200b\uff0csetdefault
\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200b\u8be5\u503c\u200b\uff0c\u200b\u5426\u5219\u200bsetdefault
\u200b\u4f1a\u200b\u5728\u200b\u5b57\u5178\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u952e\u503c\u200b\u5bf9\u200bkey: default
\uff0c\u200b\u7136\u540e\u200b\u8fd4\u56de\u200bdefault
\u3002
>>> a = {}\n>>> a.setdefault(0, True)\nTrue\n>>> a[0] = False\n>>> a.setdefault(0, False) \nFalse\n>>>\n
\u200b\u4f7f\u7528\u200bsetdefault
\u200b\u4ece\u200b\u5b57\u5178\u200b\u4e2d\u200b\u83b7\u53d6\u200b\u503c\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u51cf\u5c11\u200b\u5b57\u5178\u200b\u7684\u200b\u67e5\u8be2\u200b\u6b21\u6570\u200b\uff0c\u200b\u63d0\u9ad8\u200b\u5b57\u5178\u200b\u6267\u884c\u200b\u7684\u200b\u6548\u7387\u200b\uff1a
>>> a = {}\n>>> try:\n... a[0].append(True)\n... except KeyError:\n... a[0] = []\n... a[0].append(True)\n... \n>>> a\n{0: [True]}\n>>>\n
\u200b\u5982\u200b\u4e0a\u200b\u4f7f\u7528\u200btry-except
\u200b\u7ed3\u6784\u200b\u5904\u7406\u200b\u5b57\u5178\u200b\u4e2d\u200b\u627e\u200b\u4e0d\u5230\u200b\u503c\u200b\u7684\u200b\u7ed3\u679c\u200b\uff0c\u200b\u5982\u679c\u200b\u4f7f\u7528\u200bsetdefault
\u200b\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u6709\u6548\u200b\u51cf\u5c11\u200b\u4ee3\u7801\u200b\u957f\u5ea6\u200b\uff0c\u200b\u589e\u52a0\u200b\u4ee3\u7801\u200b\u53ef\u8bfb\u6027\u200b\u3002
>>> a = {}\n>>> a.setdefault(0, []).append(True)\n>>> a\n{0: [True]}\n>>>\n
defaultdict
\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u5904\u7406\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7f3a\u5931\u200b\u7684\u200b\u952e\u200b\u3002\u200b\u51c6\u786e\u200b\u5730\u8bf4\u200b\uff0cdefaultdict
\u200b\u5728\u200b\u521b\u5efa\u200b\u65f6\u200b\u9700\u8981\u200b\u63d0\u4f9b\u200b\u4e00\u4e2a\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\uff0c\u200b\u5b57\u5178\u200b\u4e2d\u200b\u627e\u200b\u4e0d\u5230\u200b\u952e\u65f6\u200b\uff0cdefaultdict
\u200b\u4f1a\u200b\u901a\u8fc7\u200b\u8c03\u7528\u200b\u8fd9\u4e2a\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u6765\u200b\u5f97\u5230\u200b\u8be5\u952e\u200b\u5bf9\u5e94\u200b\u7684\u200b\u9ed8\u8ba4\u503c\u200b\u3002
>>> from collections import defaultdict\n>>> a = defaultdict(list)\n>>> a\ndefaultdict(<class 'list'>, {})\n>>> a[False] = {}\n>>> a[False]\n{}\n>>> a[True]\n[]\n>>> a\ndefaultdict(<class 'list'>, {False: {}, True: []})\n>>>\n
\u200b\u5982\u679c\u200b\u521b\u5efa\u200bdefaultdict
\u200b\u65f6\u200b\u6ca1\u6709\u200b\u6307\u5b9a\u200b\u53c2\u6570\u200b\uff0c\u200b\u8bbf\u95ee\u200b\u4e0d\u200b\u5b58\u5728\u200b\u7684\u200b\u952e\u200b\u65f6\u200b\u4ecd\u4f1a\u200b\u629b\u51fa\u200bKeyError
\u3002
\u200b\u4e8b\u5b9e\u4e0a\u200b\uff0c__getitem__
\u200b\u901a\u8fc7\u200b\u7279\u6b8a\u200b\u65b9\u6cd5\u200b__missing__
\u200b\u5904\u7406\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7f3a\u5931\u200b\u7684\u200b\u952e\u200b\u3002\u200b\u624b\u52a8\u200b\u8c03\u7528\u200b__missing__
\u200b\u65b9\u6cd5\u200b\u80fd\u200b\u5b9e\u73b0\u200b\u76f8\u540c\u200b\u7684\u200b\u6548\u679c\u200b\uff1a
>>> from collections import defaultdict \n>>> a = defaultdict(list)\n>>> a \ndefaultdict(<class 'list'>, {})\n>>> a.__missing__(0) \n[]\n>>> a\ndefaultdict(<class 'list'>, {0: []})\n>>>\n
__missing__
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u53c2\u6570\u200b\u4e3a\u200bself, key
\uff0c\u200b\u5176\u4e2d\u200bkey
\u200b\u4e3a\u200b\u7f3a\u5931\u200b\u7684\u200b\u952e\u200b\u3002\u200b\u5373\u4f7f\u200b__missing__
\u200b\u6b63\u5e38\u200b\u6267\u884c\u200b\uff0c\u200b\u8fd4\u56de\u503c\u200b\u4e5f\u200b\u4e0d\u4f1a\u200b\u88ab\u200b\u6dfb\u52a0\u200b\u5230\u200b\u5b57\u5178\u200b\u4e2d\u200b\u3002
>>> class NumDict(dict):\n... def __init__(self, *args, **kwargs):\n... super().__init__(*args, **kwargs)\n... def __missing__(self, key):\n... if isinstance(key, int):\n... return 0\n... else:\n... raise KeyError(key)\n...\n>>> a = NumDict([(1, 2), (\"a\", \"b\")])\n>>> a\n{1: 2, 'a': 'b'}\n>>> a[0]\n0\n>>> a['b']\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\n File \"<stdin>\", line 8, in __missing__\nKeyError: 'b'\n>>> a\n{1: 2, 'a': 'b'}\n>>>\n
"},{"location":"coding/python/mapping/#ordereddict","title":"OrderedDict","text":"OrderedDict
\u200b\u662f\u200b\u4e25\u683c\u200b\uff08\u200b\u5728\u200b\u4efb\u4f55\u200b\u7248\u672c\u200b\u4e2d\u200b\uff09\u200b\u4fdd\u6301\u200b\u987a\u5e8f\u200b\u7684\u200b\u5b57\u5178\u200b\u3002\u200b\u5728\u200b\u8fed\u4ee3\u200b\u8fc7\u7a0b\u200b\u4e2d\u952e\u200b\u7684\u200b\u987a\u5e8f\u200b\u4fdd\u6301\u4e00\u81f4\u200b\u3002
OrderedDict
\u200b\u65b0\u589e\u200b\u4e86\u200bpopitem
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u9ed8\u8ba4\u200b\u79fb\u9664\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5b57\u5178\u200b\u4e2d\u200b\u6700\u540e\u200b\u6dfb\u52a0\u200b\u7684\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u3002\u200b\u5982\u679c\u200b\u624b\u52a8\u200b\u6307\u5b9a\u200blast
\u200b\u53c2\u6570\u200b\u4e3a\u200bFalse
\uff0c\u200b\u5219\u200b\u79fb\u9664\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7b2c\u4e00\u4e2a\u200b\u6dfb\u52a0\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\u200b\u540c\u65f6\u200b\uff0cmove_to_end
\u200b\u662f\u200b\u4e0e\u200b\u4e4b\u200b\u914d\u5408\u200b\u7684\u200b\u79fb\u52a8\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7684\u200b\u952e\u503c\u200b\u5bf9\u200b\uff08\u200b\u7531\u200bkey
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\uff09\u200b\u79fb\u52a8\u200b\u5230\u200b\u5b57\u5178\u200b\u4e00\u7aef\u200b\uff08\u200b\u7531\u200blast
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\uff09\u3002
"},{"location":"coding/python/mapping/#chainmap","title":"ChainMap","text":"ChainMap
\u200b\u53ef\u4ee5\u200b\u89c6\u4e3a\u200b\u4e00\u79cd\u200b\u5bb9\u7eb3\u200b\u6620\u5c04\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002\u200b\u76f8\u6bd4\u200b\u4e8e\u200b\u4f7f\u7528\u200bdict.update()
\u200b\u6216\u200b|
\u200b\u8fd0\u7b97\u7b26\u200b\u9010\u4e2a\u200b\u5408\u5e76\u200b\u6620\u5c04\u200b\uff0cChainMap
\u200b\u6709\u200b\u66f4\u200b\u9ad8\u200b\u7684\u200b\u6548\u7387\u200b\u3002
ChainMap
\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u6620\u5c04\u200b\uff0c\u200b\u5f53\u200b\u5728\u200bChainMap
\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u67e5\u8be2\u200b\u65f6\u200b\uff0cChainMap
\u200b\u4f1a\u200b\u9010\u4e2a\u200b\u67e5\u8be2\u200b\u5176\u4e2d\u200b\u7684\u200b\u6620\u5c04\u200b\u3002\u200b\u5f53\u200b\u540c\u4e00\u4e2a\u200b\u952e\u200b\u51fa\u73b0\u200b\u5728\u200b\u4e0d\u540c\u200b\u7684\u200b\u6620\u5c04\u200b\u4e2d\u200b\u65f6\u200b\uff0cChainMap
\u200b\u8fd4\u56de\u200b\u67e5\u8be2\u200b\u5230\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u7ed3\u679c\u200b\u3002
>>> from collections import ChainMap\n>>> a = ChainMap({'a': 1, 'b': 2}, {'a': 3, 'b': 4})\n>>> a['b']\n2\n>>> a['a']\n1\n>>>\n
\u200b\u5b58\u50a8\u200b\u7684\u200b\u6620\u5c04\u200b\u5728\u200bChainMap.maps
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\uff0c\u200b\u5bf9\u200b\u8be5\u200b\u5c5e\u6027\u200b\u7684\u200b\u4fee\u6539\u200b\u4f1a\u200b\u540c\u65f6\u200b\u53cd\u6620\u200b\u5728\u200bChainMap
\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u3002parents
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u901a\u8fc7\u200b\u5c5e\u6027\u200b\u65b9\u5f0f\u200b\u8bbf\u95ee\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8fd4\u56de\u200b\u53bb\u9664\u200b\u539f\u200bChainMap
\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6620\u5c04\u200b\u540e\u200b\u7684\u200b\u65b0\u200bChainMap
\uff0c\u200b\u539f\u200bChainMap
\u200b\u4fdd\u6301\u200b\u4e0d\u53d8\u200b\u3002
new_child
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5411\u200bChainMap
\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u6620\u5c04\u200b\u7684\u200b\u65b9\u6cd5\u200b\u3002\u200b\u65b0\u200b\u7684\u200b\u6620\u5c04\u200b\u88ab\u200b\u6dfb\u52a0\u200b\u5230\u200bChainMap
\u200b\u7684\u200b\u5f00\u5934\u200b\uff0c\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u63d0\u4f9b\u200b\u6620\u5c04\u200b\uff0c\u200b\u5219\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u7a7a\u200b\u5b57\u5178\u200b\u3002
ChainMap
\u200b\u5e76\u200b\u6ca1\u6709\u200b\u5408\u5e76\u200b\u539f\u6709\u200b\u7684\u200b\u6620\u5c04\u200b\uff0c\u200b\u56e0\u6b64\u200b\u8fed\u4ee3\u200bChainMap
\u200b\u5bf9\u8c61\u200b\u6216\u200b\u5bf9\u200bChainMap
\u200b\u5bf9\u8c61\u200b\u8c03\u7528\u200bdict()
\u200b\u65f6\u200b\u53ea\u4f1a\u200b\u5e94\u7528\u200b\u5230\u200b\u5176\u4e2d\u200b\u5305\u542b\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6620\u5c04\u200b\u3002
>>> dict(a)\n{'a': 1, 'b': 2}\n>>>\n
"},{"location":"coding/python/mapping/#counter","title":"Counter","text":"Counter
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5bf9\u200b\u4e00\u7cfb\u5217\u200b\u503c\u200b\u7684\u200b\u7edf\u8ba1\u200b\u65b9\u6cd5\u200b\u3002\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u521d\u59cb\u5316\u200bCounter
\u200b\u7c7b\u578b\u200b\uff0cCounter
\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u7edf\u8ba1\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u503c\u200b\u7684\u200b\u51fa\u73b0\u200b\u987a\u5e8f\u200b\u3002
Counter
\u200b\u4e0d\u4f1a\u200b\u5bf9\u200b\u8f93\u5165\u200b\u7684\u200b\u503c\u200b\u8fdb\u884c\u200b\u68c0\u67e5\u200b\uff0c\u200b\u5982\u679c\u200b\u4f7f\u7528\u200b\u5b57\u5178\u200b\u521d\u59cb\u5316\u200b\u5e76\u200b\u63d0\u4f9b\u200b\u975e\u200b\u6574\u6570\u200b\u7c7b\u578b\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u5728\u200b\u8c03\u7528\u200bCounter.most_common()
\u200b\u65b9\u6cd5\u200b\u6216\u200b\u8fed\u4ee3\u200bCounter.elements()
\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u65f6\u4f1a\u200b\u629b\u51fa\u200bTypeError
\u200b\u5f02\u5e38\u200b\u3002
>>> from collections import Counter\n>>> a = Counter({'0': '0'})\n>>> for i in a.elements():\n... pass\n...\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: 'str' object cannot be interpreted as an integer\n
\u200b\u8fd9\u200b\u4e00\u70b9\u200b\u5728\u200bPython\u200b\u6587\u6863\u200b\u4e2d\u6709\u200b\u76f8\u5e94\u200b\u8bf4\u660e\u200b\uff1a
>>> from collections import Counter \n>>> a = Counter([1, 1, 1, 2, 2, 3]) \n>>> a\nCounter({1: 3, 2: 2, 3: 1})\n>>>\n
\u200b\u66f4\u65b0\u200bCounter
\u200b\u5bf9\u8c61\u200b\u65f6\u200b\uff0c\u200b\u8ba1\u6570\u5668\u200b\u4f1a\u200b\u76f8\u5e94\u200b\u5730\u200b\u66f4\u65b0\u200b\uff1a
>>> a.update([3, 3, 3, 2, 2, 1])\n>>> a\nCounter({1: 4, 2: 4, 3: 4})\n>>>\n
Counter.elements()
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u8fed\u4ee3\u200b\u5668\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u6309\u7167\u200b\u5176\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u91cd\u590d\u200b\u3002Counter.most_common
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u8ba1\u6570\u5668\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u6700\u591a\u200b\u7684\u200b\u5143\u7d20\u200b\u3002
Counter
\u200b\u7c7b\u578b\u200b\u63d0\u4f9b\u200b\u4e86\u200b+
\u3001-
\u3001&
\u200b\u548c\u200b|
\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u8ba1\u6570\u5668\u200b\u7684\u200b\u76f8\u52a0\u200b\u3001\u200b\u76f8\u51cf\u200b\u3001\u200b\u4ea4\u200b\u548c\u200b\u5e76\u200b\u64cd\u4f5c\u200b\u3002\u200b\u5f53\u200b+
\u3001-
\u200b\u88ab\u200b\u7528\u4f5c\u200b\u4e00\u5143\u200b\u8fd0\u7b97\u7b26\u200b\u65f6\u200b\uff0c\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u64cd\u4f5c\u6570\u200b\u9ed8\u8ba4\u200b\u4e3a\u7a7a\u200b\u8ba1\u6570\u5668\u200b\u3002
"},{"location":"coding/python/mapping/#_6","title":"\u6269\u5c55","text":"collections.UserDict
\u200b\u7c7b\u200b\u662f\u200b\u5bf9\u200bdict
\u200b\u7684\u200bPython\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u81ea\u5b9a\u4e49\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\u7684\u200b\u5b9e\u73b0\u200b\u3002
UserDict
\u200b\u4e0d\u662f\u200bdict
\u200b\u7684\u200b\u5b50\u7c7b\u200b\uff0c\u200b\u4f46\u200bUserDict
\u200b\u4e2d\u6709\u200b\u4e00\u4e2a\u200bdict
\u200b\u7c7b\u578b\u200b\u7684\u200bdata
\u200b\u5c5e\u6027\u200b\uff0c\u200b\u662f\u200bUserDict
\u200b\u5b58\u50a8\u200b\u6570\u636e\u200b\u7684\u200b\u6700\u7ec8\u200b\u4f4d\u7f6e\u200b\u3002\u200b\u76f8\u6bd4\u200b\u4e8e\u200b\u76f4\u63a5\u200b\u5bf9\u200bdict
\u200b\u7c7b\u578b\u200b\u8fdb\u884c\u200b\u6269\u5c55\u200b\uff0cdata
\u200b\u5c5e\u6027\u200b\u4fdd\u8bc1\u200b\u4e86\u200b__getitem__
\u200b\u65b9\u6cd5\u200b\u4e0d\u4f1a\u200b\u4ea7\u751f\u200b\u5faa\u73af\u200b\u9012\u5f52\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002
UserDict
\u200b\u7c7b\u200b\u7ee7\u627f\u200b\u81ea\u200b_collections_abc.MutableMapping
\u200b\u4e0e\u200b_collections_abc.Mapping
\u200b\u7c7b\u200b\u3002MutableMapping
\u200b\u63d0\u4f9b\u200b\u4e86\u200bupdate()
\u200b\u65b9\u6cd5\u200b\u3002\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5185\u90e8\u200b\u5b9e\u73b0\u200b\u8868\u660e\u200b\uff0cupdate()
\u200b\u5728\u200b\u5185\u90e8\u200b\u901a\u8fc7\u200b__setitem__
\u200b\u5b9e\u73b0\u200b\u3002Mapping
\u200b\u63d0\u4f9b\u200b\u4e86\u200bget()
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8be5\u200b\u65b9\u6cd5\u200b\u5728\u200b\u5185\u90e8\u200b\u901a\u8fc7\u200b__getitem__
\u200b\u5b9e\u73b0\u200b\u3002
>>> from collections import UserDict\n>>> class myDict(UserDict):\n... def __init__(self, *args, **kwargs):\n... super().__init__(*args, **kwargs) \n... def __setitem__(self, index, value):\n... print(\"Modification: \", index, \":\", value)\n... super().__setitem__(index, value)\n... \n>>> a = myDict()\n>>> a.update(a=5, b=4)\nModification: a : 5\nModification: b : 4\n>>>\n
"},{"location":"coding/python/mapping/#_7","title":"\u96c6\u5408","text":"\u200b\u96c6\u5408\u200bset
\u200b\u662f\u200b\u4e00\u79cd\u200b\u5e8f\u5217\u200b\u7c7b\u578b\u200b\uff0c\u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u5404\u4e2a\u200b\u5143\u7d20\u200b\u6700\u200b\u591a\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002\u200b\u4efb\u4f55\u200b\u975e\u200b\u7a7a\u96c6\u5408\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5b57\u9762\u200b\u8868\u793a\u6cd5\u200b{}
\u200b\u8fdb\u884c\u200b\u8868\u793a\u200b\uff0c\u200b\u7a7a\u96c6\u200b\u53ea\u80fd\u200b\u7528\u200bset()
\u200b\u8868\u793a\u200b\u3002\u200b\u96c6\u5408\u200b\u540c\u6837\u200b\u9002\u7528\u200b\u4e8e\u200b\u4e0e\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u76f8\u4f3c\u200b\u7684\u200b\u63a8\u5bfc\u200b\u65b9\u5f0f\u200b\u3002
\u200b\u96c6\u5408\u200b\u6709\u200b\u5bf9\u5e94\u200b\u7684\u200b\u53ea\u8bfb\u200b\u53d8\u79cd\u200bfrozenset
\u3002set
\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u5b57\u9762\u200b\u8868\u793a\u6cd5\u200b\u8fdb\u884c\u200b\u6784\u9020\u200b\uff0c\u200b\u6216\u200b\u4f7f\u7528\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u8fdb\u884c\u200b\u6784\u9020\u200b\u3002frozenset
\u200b\u53ea\u80fd\u200b\u4f7f\u7528\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u6784\u9020\u200b\u3002
\u200b\u53ef\u4ee5\u200b\u5229\u7528\u200bset
\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u552f\u4e00\u6027\u200b\u53bb\u9664\u200b\u5217\u8868\u200b\u4e2d\u200b\u7684\u200b\u91cd\u590d\u200b\u503c\u200b\uff1a
>>> src_list = [1, 1, 2, 3, 4, 2, 3]\n>>> list(set(src_list))\n[1, 2, 3, 4]\n>>>\n
\u200b\u53e6\u200b\u4e00\u79cd\u200b\u65b9\u6cd5\u200b\u662f\u200b\u901a\u8fc7\u200bcollections.Counter
\u200b\u53bb\u200b\u91cd\u200b\u3002
>>> from collections import Counter\n>>> src_list = [1, 1, 2, 3, 4, 2, 3]\n>>> list(Counter(src_list).keys())\n[1, 2, 3, 4]\n>>>\n
\u200b\u548c\u200b\u5b57\u5178\u200b\u7684\u200b\u952e\u200b\u4e00\u6837\u200b\uff0c\u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u5fc5\u987b\u200b\u662f\u200b\u53ef\u200b\u6563\u5217\u200b\u7684\u200b\u3002set
\u200b\u7c7b\u578b\u200b\u672c\u8eab\u200b\u4e0d\u53ef\u200b\u6563\u5217\u200b\uff0cfrozenset
\u200b\u7c7b\u578b\u200b\u53ef\u6563\u5217\u200b\u3002
"},{"location":"coding/python/mapping/#_8","title":"\u8fd0\u7b97","text":"\u200b\u96c6\u5408\u200b\u6709\u200b\u5982\u4e0b\u200b\u8fd0\u7b97\u200b\uff0c\u200b\u7531\u4e8e\u200b\u96c6\u5408\u200b\u7684\u200b\u5e95\u5c42\u200b\u6570\u636e\u7ed3\u6784\u200b\u662f\u200b\u6563\u200b\u5217\u8868\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u8fd0\u7b97\u200b\u65b9\u6cd5\u200b\u6709\u200b\u8f83\u200b\u9ad8\u200b\u7684\u200b\u8ba1\u7b97\u200b\u6548\u7387\u200b\u3002
- \u200b\u4ea4\u96c6\u200b\u3001\u200b\u5e76\u96c6\u200b\u3001\u200b\u5dee\u96c6\u200b\u3001\u200b\u5bf9\u79f0\u200b\u5dee\u200b\uff0c\u200b\u5373\u200b
&
\u3001|
\u3001-
\u200b\u4e0e\u200b^
\uff1b - \u200b\u5b50\u96c6\u200b\u3001\u200b\u771f\u200b\u5b50\u96c6\u200b\u3001\u200b\u8d85\u96c6\u200b\u3001\u200b\u771f\u8d85\u96c6\u200b\uff0c\u200b\u5373\u200b
<=
\u3001<
\u3001>=
\u200b\u4e0e\u200b>
\uff1b - \u200b\u5c5e\u4e8e\u200b\uff0c\u200b\u5373\u200b
in
\u200b\u4ee5\u200bin
\u200b\u64cd\u4f5c\u200b\u4e3a\u4f8b\u200b\uff0cset
\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u67e5\u8be2\u200b\u6563\u200b\u5217\u8868\u200b\u83b7\u53d6\u200b\u7ed3\u679c\u200b\uff0c\u200b\u4f46\u200blist
\u200b\u5fc5\u987b\u200b\u626b\u63cf\u200b\u4e00\u904d\u200b\u5217\u8868\u200b\u624d\u80fd\u200b\u83b7\u53d6\u200b\u7ed3\u679c\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u542b\u6709\u200b\u8bb8\u591a\u200b\u5143\u7d20\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e24\u8005\u200b\u5728\u200b\u6267\u884c\u200b\u901f\u5ea6\u200b\u4e0a\u200b\u6709\u200b\u660e\u663e\u200b\u7684\u200b\u5dee\u522b\u200b\u3002
set
\u200b\u8fd8\u200b\u652f\u6301\u200badd
\u3001clear
\u3001copy
\u3001pop
\u3001remove
\u200b\u7b49\u200b\u65b9\u6cd5\u200b\u3002
"},{"location":"coding/python/sequence/","title":"Python\u200b\u4e2d\u200b\u7684\u200b\u5e8f\u5217\u200b\u7c7b\u578b","text":"\u200b\u5e8f\u5217\u200b\u6307\u200b\u53ef\u4ee5\u200b\u5b58\u50a8\u200b\u591a\u4e2a\u200b\u6570\u636e\u200b\u7684\u200b\u6570\u636e\u7ed3\u6784\u200b\u3002
\u200b\u6309\u7167\u200b\u5b58\u50a8\u200b\u7684\u200b\u6570\u636e\u7c7b\u578b\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\uff1a
- \u200b\u5bb9\u5668\u200b\u53ef\u4ee5\u200b\u5b58\u50a8\u200b\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u6570\u636e\u200b\uff0c\u200b\u8fd9\u90e8\u5206\u200b\u7c7b\u578b\u200b\u6709\u200b
list
\u3001tuple
\u3001collections.deque
- \u200b\u6241\u5e73\u200b\u5e8f\u5217\u200b\u53ea\u80fd\u200b\u5b58\u50a8\u200b\u67d0\u79cd\u200b\u7c7b\u578b\u200b\u7684\u200b\u6570\u636e\u200b\uff0c\u200b\u8fd9\u90e8\u5206\u200b\u7c7b\u578b\u200b\u6709\u200b
str
\u3001bytes
\u3001bytearray
\u3001memoryview
\u3001array.array
\u200b\u6309\u7167\u200b\u5e8f\u5217\u200b\u662f\u5426\u200b\u53ef\u4ee5\u200b\u4fee\u6539\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b
- \u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\uff1a
list
\u3001bytearray
\u3001array.array
\u3001collections.deque
\u3001memoryview
- \u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\uff1a
tuple
\u3001str
\u3001bytes
"},{"location":"coding/python/sequence/#_1","title":"\u5217\u8868","text":"\u200b\u5217\u8868\u200b\u662f\u200b\u53ef\u4ee5\u200b\u4fee\u6539\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5b58\u50a8\u200b\u591a\u79cd\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u6570\u636e\u7ed3\u6784\u200b\u3002\u200b\u5982\u4e0b\u200b\u7740\u91cd\u200b\u8ba8\u8bba\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u7684\u200b\u4e66\u5199\u200b\u5f62\u5f0f\u200b\u3002
\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u53ef\u200b\u7528\u4e8e\u200b\u4ece\u200b\u4e00\u4e2a\u200b\u5217\u8868\u200b\u751f\u6210\u200b\u65b0\u200b\u7684\u200b\u5217\u8868\u200b\uff0c\u200b\u76f8\u6bd4\u200b\u4e8e\u200bfor\u200b\u5faa\u73af\u200b\u52a0\u200bappend()
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u7684\u200b\u5199\u6cd5\u200b\u6709\u200b\u66f4\u597d\u200b\u7684\u200b\u53ef\u8bfb\u6027\u200b\u3002
\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u793a\u4f8b\u200b\uff1a
a = [1, 2, 3]\nb = [_ ** 2 for _ in a]\n
Python 3.x\u200b\u4e2d\u200b\u7684\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u4e0d\u4f1a\u200b\u4ea7\u751f\u200b\u53d8\u91cf\u200b\u6cc4\u9732\u200b\u7684\u200b\u95ee\u9898\u200b\uff0c\u200b\u5982\u4e0b\u200b\uff1a
x = 'ABC'\ny = [x for x in x]\nprint(x)\n
\u200b\u8f93\u51fa\u200b\u4e3a\u200bABC
\uff0c\u200b\u8bf4\u660e\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u53d8\u91cf\u200bx
\u200b\u7684\u200b\u503c\u200b\u6ca1\u6709\u200b\u4f20\u9012\u200b\u5230\u200b\u5916\u90e8\u200b\u3002
\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u7b49\u4ef7\u200b\u4e8e\u200bmap
\u200b\u4e0e\u200bfilter
\u200b\u7684\u200b\u7ed3\u5408\u200b\u3002map
\u200b\u51fd\u6570\u200b\u63a5\u6536\u200b\u4e24\u4e2a\u200b\u53c2\u6570\u200b\u3002\u200b\u7b2c\u4e00\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200b\u51fd\u6570\u200b\uff0c\u200b\u7b2c\u4e8c\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u3002map
\u200b\u51fd\u6570\u200b\u8fed\u4ee3\u200b\u5730\u200b\u5c06\u200b\u51fd\u6570\u200b\u4f5c\u7528\u200b\u4e8e\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u4ece\u800c\u200b\u5f97\u5230\u200b\u7ed3\u679c\u200b\u3002
\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8ba1\u7b97\u200b\u5217\u8868\u200b\u7684\u200b\u7b1b\u5361\u5c14\u200b\u79ef\u200b\uff0c\u200b\u5982\u200b\u4e0b\u5217\u200b\u4ee3\u7801\u200b\uff1a
[(x, y) for x in range(10) for y in range(11, 20)]\n
\u200b\u5faa\u73af\u200b\u7684\u200b\u987a\u5e8f\u200b\u4e0e\u200bfor
\u200b\u5faa\u73af\u200b\u4e00\u81f4\u200b\uff0c\u200b\u5148\u200b\u6267\u884c\u200b\u5916\u5c42\u200b\u7684\u200b\u5faa\u73af\u200b\uff0c\u200b\u518d\u200b\u6267\u884c\u200b\u5185\u5c42\u200b\u7684\u200b\u5faa\u73af\u200b\u3002
\u200b\u5c06\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u7684\u200b\u65b9\u62ec\u53f7\u200b\u5706\u62ec\u53f7\u200b\uff0c\u200b\u5373\u200b\u4e3a\u200b\u751f\u6210\u5668\u200b\u8868\u8fbe\u5f0f\u200b\u3002\u200b\u5982\u679c\u200b\u751f\u6210\u5668\u200b\u8868\u8fbe\u5f0f\u200b\u662f\u200b\u51fd\u6570\u8c03\u7528\u200b\u7684\u200b\u552f\u4e00\u200b\u53c2\u6570\u200b\uff0c\u200b\u5706\u62ec\u53f7\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u3002
"},{"location":"coding/python/sequence/#_2","title":"\u5143\u7ec4","text":"\u200b\u5143\u7ec4\u200b\u662f\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7406\u89e3\u200b\u4e3a\u200b\u5b57\u200b\u6bb5\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u6570\u636e\u8868\u200b\u4e2d\u200b\u7684\u200b\u67d0\u200b\u4e00\u884c\u200b\u3002\u200b\u5982\u4e0b\u200b\u7740\u91cd\u200b\u8ba8\u8bba\u200b\u5143\u7ec4\u200b\u89e3\u5305\u200b\u7684\u200b\u5185\u5bb9\u200b\u3002
\u200b\u5e73\u884c\u200b\u8d4b\u503c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u4e00\u4e2a\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u590d\u5236\u5230\u200b\u4e00\u7ec4\u200b\u53d8\u91cf\u200b\u4e2d\u200b\u3002\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u4e0d\u200b\u8981\u6c42\u200b\u662f\u200b\u5143\u7ec4\u200b\u3002\u200b\u5982\u200b\uff1a
a, b = (1, 2)\nc, d = [3, 4]\ne, f = {1: 2, 3: 4} # \u200b\u6309\u7167\u200bkey\u200b\u7684\u200b\u53d6\u503c\u200b\u8fdb\u884c\u200b\u5206\u914d\u200b\n
*
\u200b\u8fd0\u7b97\u7b26\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u89e3\u5305\u200b\u5143\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u4f5c\u4e3a\u200b\u51fd\u6570\u53c2\u6570\u200b\uff0c\u200b\u5982\u200b\uff1a
print(*(1, 2))\n
*
\u200b\u8fd0\u7b97\u7b26\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u4ece\u200b\u51fd\u6570\u200b\u4e2d\u200b\u83b7\u53d6\u200b\u53ef\u53d8\u200b\u6570\u91cf\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5e38\u89c1\u200b\u7528\u6cd5\u200b\u4e3a\u200b*args
\u200b\u4e0e\u200b**kwargs
\u3002
*
\u200b\u8fd0\u7b97\u7b26\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u5e73\u884c\u200b\u8d4b\u503c\u200b\u4e2d\u200b\uff0c\u200b\u4f46\u200b\u5e73\u884c\u200b\u8d4b\u503c\u200b\u4e2d\u200b\u7684\u200b\u4e00\u7ec4\u200b\u53d8\u91cf\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u4e2a\u200b*
\u200b\u8fd0\u7b97\u7b26\u200b\u3002\u200b\u5e26\u200b*
\u200b\u7684\u200b\u53d8\u91cf\u200b\u89e3\u5305\u200b\u540e\u200b\u6210\u4e3a\u200b\u5217\u8868\u200b\u3002
a, b, c, *d = range(5) # d = [3, 4]\na, b, *c, d = range(5) # c = [2, 3]\n
\u200b\u5f53\u5f85\u200b\u89e3\u5305\u200b\u7684\u200b\u5143\u7ec4\u200b\u672c\u8eab\u200b\u662f\u200b\u5143\u7ec4\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u62ec\u53f7\u200b\u89e3\u5305\u200b\uff0c\u200b\u5982\u200b\uff1a
a, (b, c), d = (1, (2, 3), 4)\n
\u200b\u5143\u7ec4\u200b\u4e0d\u200b\u652f\u6301\u200b\u5217\u8868\u200b\u7684\u200bappend
\u3001clear
\u3001copy
\u3001extend
\u3001insert
\u3001pop
\u3001remove
\u3001reverse
\u200b\u7b49\u200b\u65b9\u6cd5\u200b\u3002
"},{"location":"coding/python/sequence/#_3","title":"\u5177\u540d\u200b\u5143\u7ec4","text":"collections.namedtuple
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u7528\u4e8e\u200b\u521b\u5efa\u200b\u5177\u540d\u200b\u5143\u7ec4\u200b\u7c7b\u578b\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5176\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u5982\u4e0b\u200b\uff1a
collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)\n
typename
\u200b\u6307\u200b\u7c7b\u578b\u200b\u7684\u200b\u540d\u79f0\u200b\uff0c\u200b\u8be5\u200b\u53d8\u91cf\u200b\u88ab\u200b\u5199\u5165\u200b__repr__
\u200b\u65b9\u6cd5\u200b\u4e2d\u200b\u3002\u200b\u8be5\u200b\u53c2\u6570\u200b\u7684\u200b\u53d6\u503c\u200b\u4e0e\u200b\u4ee3\u7801\u200b\u4e2d\u200b\u7c7b\u578b\u200b\u88ab\u200b\u5b9e\u9645\u200b\u5206\u914d\u200b\u7684\u200b\u540d\u79f0\u200b\u65e0\u5173\u200b\u3002 field_names
\u200b\u662f\u200b\u5143\u7ec4\u200b\u4e2d\u5b57\u200b\u6bb5\u200b\u7684\u200b\u540d\u79f0\u200b - \u200b\u5f53\u200b
rename
\u200b\u4e3a\u200bTrue
\u200b\u91cd\u590d\u200b\u6216\u200b\u4e0e\u200b\u5173\u952e\u5b57\u200b\u51b2\u7a81\u200b\u7684\u200b\u5b57\u6bb5\u540d\u200b\u79f0\u4f1a\u200b\u88ab\u200b\u81ea\u52a8\u200b\u5904\u7406\u200b\uff0c\u200b\u5426\u5219\u200b\u4f1a\u200b\u629b\u51fa\u200bValueError
defaults
\u200b\u4e3a\u200b\u5b57\u200b\u6bb5\u200b\u7684\u200b\u9ed8\u8ba4\u503c\u200b\uff0c\u200b\u8be5\u200b\u5217\u8868\u200b\u4e0e\u200b\u5b57\u6bb5\u540d\u200b\u79f0\u200b\u5217\u8868\u200b\u6309\u53f3\u200b\u5bf9\u9f50\u200b\u8fdb\u884c\u200b\u5339\u914d\u200b\u3002 - \u200b\u82e5\u200b\u63d0\u4f9b\u200b\u4e86\u200b
module
\u200b\u53c2\u6570\u200b\uff0c\u200b\u8be5\u503c\u200b\u4f1a\u200b\u88ab\u200b\u5199\u5165\u200b__module__
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\u3002
namedtuple
\u200b\u8fd4\u56de\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u521b\u5efa\u5bf9\u8c61\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002
>>> from collections import namedtuple\n>>> Point = namedtuple('Point', [\"x\", \"y\"], defaults=[1, 2]) \n>>> Point()\nPoint(x=1, y=2)\n>>> Point(2)\nPoint(x=2, y=2)\n>>> Point(2, 3)\nPoint(x=2, y=3)\n>>>\n
"},{"location":"coding/python/sequence/#_4","title":"\u5207\u7247","text":"\u200b\u5207\u7247\u200b\u662f\u200b\u5728\u200b\u5e8f\u5217\u200b\u4e0a\u200b\u6267\u884c\u200b\u7684\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u5207\u7247\u200b\u64cd\u4f5c\u200b\u5f97\u5230\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002\u200b\u5207\u7247\u200b\u4ee5\u200bs[a:b:c]
\u200b\u7684\u200b\u5f62\u5f0f\u200b\u6307\u5b9a\u200b\uff0ca
\u200b\u4e3a\u200b\u8d77\u59cb\u200b\u4e0b\u6807\u200b\u3001b
\u200b\u4e3a\u200b\u7ec8\u6b62\u200b\u4e0b\u6807\u200b\uff08\u200b\u4e0d\u200b\u5305\u542b\u200b\uff09\u3001c
\u200b\u4e3a\u200b\u6b65\u957f\u200b\uff08\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u8d1f\u200b\uff09\u3002
s[::-1]
\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u53cd\u8f6c\u200bs
\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b - \u200b\u5207\u7247\u200b\u5e76\u200b\u6ca1\u6709\u200b\u521b\u5efa\u200b\u65b0\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5bf9\u200b\u5207\u7247\u200b\u7684\u200b\u4fee\u6539\u200b\u4f1a\u200b\u53cd\u6620\u200b\u5230\u200b\u539f\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u3002\u200b\u4f46\u200b\u5bf9\u200b\u5207\u7247\u200b\u7684\u200b\u4fee\u6539\u200b\u5fc5\u987b\u200b\u6ee1\u8db3\u200b\u5143\u7d20\u200b\u6570\u91cf\u200b\u76f8\u540c\u200b\u7684\u200b\u6761\u4ef6\u200b\uff0c\u200b\u5426\u5219\u200b\u4f1a\u200b\u629b\u51fa\u200b
ValueError
\u3002
\u200b\u53e6\u200b\u4e00\u79cd\u200b\u5207\u7247\u200b\u7684\u200b\u65b9\u5f0f\u200b\u4e3a\u200bs[slice(a, b, c)]
\uff0c\u200b\u7701\u7565\u200b\u7684\u200b\u53c2\u6570\u200b\u4f7f\u7528\u200bNone
\u200b\u8868\u793a\u200b\u3002\u200b\u56e0\u6b64\u200bs[::-1]
\u200b\u7b49\u4ef7\u200b\u4e8e\u200bs[slice(None, None, -1)]
\u3002\u200b\u4e8b\u5b9e\u4e0a\u200b\uff0cPython\u200b\u5728\u200b\u5904\u7406\u200b\u5f62\u200b\u5982\u200bs[a:b:c]
\u200b\u7684\u200b\u5207\u7247\u200b\u65f6\u4f1a\u200b\u8c03\u7528\u200bs.__getitem__(slice(start, stop, step))
\u200b\u5728\u200bNumPy\u200b\u6570\u7ec4\u200b\u7684\u200b\u5207\u7247\u200b\u4e2d\u200b\u6709\u65f6\u200b\u4f1a\u200b\u51fa\u73b0\u200b\u7701\u7565\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u6b64\u65f6\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b...
\u3002...
\u200b\u7b26\u53f7\u200b\u4f1a\u200b\u88ab\u200bPython\u200b\u89e3\u91ca\u200b\u4e3a\u200bEllipsisType
\u200b\u7c7b\u578b\u200b\u7684\u200b\u5e38\u91cf\u200b\u3002
"},{"location":"coding/python/sequence/#_5","title":"\u5e8f\u5217\u200b\u8fd0\u7b97","text":"\u200b\u5e8f\u5217\u200b\u901a\u5e38\u200b\u652f\u6301\u200b+
\u200b\u8fd0\u7b97\u200b\u4e0e\u200b*
\u200b\u8fd0\u7b97\u200b\u3002\u200b\u4e0e\u200b\u5207\u7247\u200b\u4e0d\u540c\u200b\uff0c\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u8fd0\u7b97\u200b\u76f4\u63a5\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002
>>> a = [1]\n>>> b = [2] \n>>> c = a + b\n>>> c is a\nFalse\n>>>\n
+
\u200b\u8fd0\u7b97\u200b\u5c40\u9650\u4e8e\u200b\u76f8\u540c\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5bf9\u4e8e\u200blist
\u200b\u7b49\u200b\u53ef\u53d8\u200b\u7c7b\u578b\u200b\uff0ca + b
\u200b\u7b49\u4ef7\u200b\u4e8e\u200ba.extend(b)
\u3002\u200b\u4f46\u200ba.extend(b)
\u200b\u65b9\u6cd5\u200b\u5bf9\u200bb
\u200b\u7684\u200b\u7c7b\u578b\u200b\u65e0\u200b\u8981\u6c42\u200b\uff0c\u200b\u4ec5\u200b\u9700\u8981\u200bb
\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u3002
*
\u200b\u8fd0\u7b97\u7b26\u200b\u7684\u200b\u7b2c\u4e8c\u4e2a\u200b\u64cd\u4f5c\u6570\u200by
\u200b\u5fc5\u987b\u200b\u4e3a\u200b\u6574\u6570\u200b\uff0c\u200b\u8868\u793a\u200b\u5c06\u200b\u5e8f\u5217\u200b\u91cd\u590d\u200by
\u200b\u6b21\u200b\u3002\u200b\u82e5\u200by<=0
\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200b\u7a7a\u200b\u5217\u8868\u200b
\u200b\u6ce8\u610f\u200b\uff0c*
\u200b\u8fd0\u7b97\u7b26\u200b\u5f97\u5230\u200b\u7684\u200b\u5217\u8868\u200b\u4e2d\u200b\uff0c\u200b\u5217\u8868\u200b\u591a\u6b21\u91cd\u590d\u200b\u7684\u200b\u90e8\u5206\u200b\u4ee5\u200b\u5f15\u7528\u200b\u7684\u200b\u5f62\u5f0f\u200b\u5b58\u50a8\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
>>> b = [[]] * 3\n>>> b[0].append(1)\n>>> b\n[[1], [1], [1]]\n>>>\n
append
\u200b\u5904\u7406\u200b\u53ef\u53d8\u200b\u5bf9\u8c61\u200b\u7684\u200b\u65b9\u5f0f\u200b\u540c\u6837\u200b\u662f\u200b\u590d\u5236\u200b\u5f15\u7528\u200b\u800c\u200b\u4e0d\u662f\u200b\u590d\u5236\u200b\u503c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e5f\u200b\u4f1a\u200b\u9020\u6210\u200b\u76f8\u540c\u200b\u7684\u200b\u95ee\u9898\u200b\uff1a
>>> a = []\n>>> b = []\n>>> for i in range(3):\n... a.append(b)\n... \n>>> a[0].append(1)\n>>> a\n[[1], [1], [1]]\n>>>\n
\u200b\u56e0\u6b64\u200b\u8981\u200b\u907f\u514d\u200b\u4f7f\u7528\u200b*
\u200b\u8fd0\u7b97\u7b26\u200b\u5904\u7406\u200b\u5305\u542b\u200b\u53ef\u53d8\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5217\u8868\u200b\u3002\u200b\u5efa\u8bae\u200b\u4f7f\u7528\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u521b\u5efa\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u3002
\u200b\u4e0e\u200b\u5e8f\u5217\u200b\u7684\u200b\u8fd0\u7b97\u200b\u4e0d\u540c\u200b\uff0c\uff08\u200b\u53ef\u53d8\u200b\uff09\u200b\u5e8f\u5217\u200b\u7684\u200b\u589e\u91cf\u200b\u8fd0\u7b97\u200b+=
\u3001*=
\u200b\u662f\u200b\u5728\u200b\u539f\u200b\u5e8f\u5217\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\u8fdb\u884c\u200b\u7684\u200b\uff0c\u200b\u4e0d\u4f1a\u200b\u521b\u5efa\u200b\u65b0\u200b\u7684\u200b\u5e8f\u5217\u200b\u5bf9\u8c61\u200b\u3002\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\u4e0d\u200b\u652f\u6301\u200b\u589e\u91cf\u200b\u8fd0\u7b97\u200b\u3002
\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\uff1a
>>> a = [1, 2, 3]\n>>> a[2] += 5\n>>> a\n[1, 2, 8]\n>>>\n
\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u901a\u8fc7\u200b__setitem__
\u200b\u65b9\u6cd5\u200b\u5b9e\u73b0\u200b\u4e86\u200b\u5207\u7247\u200b\u7684\u200b\u4fee\u6539\u200b\u3002\u200b\u82e5\u200ba
\u200b\u4e3a\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\uff0c\u200b\u6267\u884c\u200b\u7ed3\u679c\u200b\u5e94\u200b\u4e3a\u4f55\u200b\uff1f
\u200b\u5bf9\u4e8e\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5176\u200b\u672c\u8eab\u200b\u4e0d\u200b\u652f\u6301\u200b\u5bf9\u200b\u5143\u7d20\u200b\u8fdb\u884c\u200b\u7684\u200b\u4fee\u6539\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5e8f\u5217\u200b\u672c\u8eab\u200b\u7684\u200b\u503c\u200b\u4e0d\u4f1a\u200b\u6539\u53d8\u200b\u3002
>>> a = (1, 2, 3)\n>>> a[2] += 5\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: 'tuple' object does not support item assignment\n>>> a\n(1, 2, 3)\n>>>\n
\u200b\u4f46\u200b\u5982\u679c\u200b\u8981\u200b\u4fee\u6539\u200b\u7684\u200b\u5143\u7d20\u200b\u672c\u8eab\u200b\u662f\u200b\u5f15\u7528\u200b\uff0c\u200b\u5982\u200b\u4e00\u4e2a\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\uff0c\u200b\u6b64\u65f6\u200b\u5bf9\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u7684\u200b\u4fee\u6539\u200b\u4e0d\u4f1a\u200b\u5f71\u54cd\u200b\u5230\u200b\u5f15\u7528\u200b\u672c\u8eab\u200b\uff0c\u200b\u56e0\u6b64\u200b+=
\u200b\u8fd0\u7b97\u200b\u4ecd\u4f1a\u200b\u6b63\u5e38\u200b\u4f5c\u7528\u200b\u3002\u200b\u589e\u91cf\u200b\u64cd\u4f5c\u200b\u4e0d\u662f\u200b\u539f\u5b50\u200b\u64cd\u4f5c\u200b\u3002
>>> t = (1, 2, [30, 40])\n>>> t[2] += [50, 60]\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: 'tuple' object does not support item assignment\n>>> t\n(1, 2, [30, 40, 50, 60])\n>>>\n
\u200b\u5982\u679c\u200b\u4f7f\u7528\u200bappend
\u200b\u6216\u200bextend
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u907f\u514d\u200b\u5f02\u5e38\u200b\u7684\u200b\u4ea7\u751f\u200b\u3002\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u88ab\u200b \u200b\u6b63\u5e38\u200b\u4fee\u6539\u200b \u3002\u200b\u4e3a\u200b\u4fdd\u8bc1\u6570\u636e\u200b\u4e0d\u200b\u88ab\u200b\u9519\u8bef\u200b\u5730\u200b\u4fee\u6539\u200b\uff0c\u200b\u5e94\u200b\u907f\u514d\u200b\u5728\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u5bb9\u7eb3\u200b\u53ef\u53d8\u200b\u5bf9\u8c61\u200b\u3002
"},{"location":"coding/python/sequence/#_6","title":"\u6392\u5e8f","text":"list.sort
\u200b\u65b9\u6cd5\u200b\u4f5c\u7528\u200b\u4e0e\u200b\u5217\u8868\u200b\u672c\u8eab\u200b\u800c\u200b\u4e0d\u200b\u8fd4\u56de\u200b\uff08\u200b\u8fd4\u56de\u503c\u200b\u4e3a\u200bNone
\uff09\u3002\u200b\u8981\u200b\u4ea7\u751f\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u5df2\u200b\u6392\u5e8f\u200b\u5217\u8868\u200b\u800c\u200b\u4e0d\u200b\u5f71\u54cd\u200b\u539f\u200b\u5217\u8868\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bsorted()
\u200b\u5185\u7f6e\u200b\u51fd\u6570\u200b\u3002
>>> a = [6, 3, 2, 1]\n>>> b = sorted(a)\n>>> b is a\nFalse\n>>>\n
sorted
\u200b\u4e0e\u200blist.sort
\u200b\u652f\u6301\u200b\u6309\u7167\u200b\u5176\u4ed6\u200b\u89c4\u5219\u200b\u5bf9\u200b\u5e8f\u5217\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\uff0c\u200b\u5373\u200bkey
\u200b\u53c2\u6570\u200b\u3002key
\u200b\u53c2\u6570\u200b\u4e3a\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u53c2\u6570\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5982\u200bkey=len
\u200b\u5373\u200b\u4e3a\u200b\u5bf9\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u5347\u5e8f\u200b\u6392\u5e8f\u200b\uff0ckey=lower
\u200b\u5373\u200b\u4e3a\u200b\u5ffd\u7565\u200b\u5b57\u7b26\u4e32\u200b\u5927\u5c0f\u5199\u200b\u8fdb\u884c\u200b\u5347\u5e8f\u200b\u6392\u5e8f\u200b\u3002
Python\u200b\u7684\u200bbisect
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5bf9\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u652f\u6301\u200b\u3002bisect.bisect
\u200b\u4e3a\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u51fd\u6570\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5728\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5927\u4e8e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u503c\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002bisect.insort
\u200b\u4e3a\u200b\u63d2\u5165\u200b\u51fd\u6570\u200b\uff0c\u200b\u5728\u200bbisect
\u200b\u51fd\u6570\u200b\u67e5\u8be2\u200b\u4f4d\u7f6e\u200b\u63d2\u5165\u200b\u5143\u7d20\u200b\u3002
bisect
\u200b\u4e0e\u200binsort
\u200b\u51fd\u6570\u200b\u6709\u200b\u53d8\u79cd\u200bbisect_left
\u200b\u4e0e\u200binsort_left
\u3002bisect_left
\u200b\u8fd4\u56de\u200b\u5728\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u4e0d\u200b\u5927\u4e8e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u503c\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002
"},{"location":"coding/python/sequence/#_7","title":"\u5176\u4ed6\u200b\u5e8f\u5217\u200b\u7c7b\u578b","text":""},{"location":"coding/python/sequence/#_8","title":"\u6570\u7ec4","text":"array
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u6570\u7ec4\u200b\u7ed3\u6784\u200b\u7684\u200b\u652f\u6301\u200b\u3002\u200b\u6570\u7ec4\u200b\u662f\u200b\u53ea\u80fd\u200b\u5b58\u50a8\u200b\u4e00\u79cd\u200b\u7c7b\u578b\u200b\u5143\u7d20\u200b\u7684\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\uff0c\u200b\u652f\u6301\u200blist
\u200b\u7684\u200b\u591a\u6570\u200b\u65b9\u6cd5\u200b\u3002\u200b\u540c\u65f6\u200b\u6570\u7ec4\u200b\u63d0\u4f9b\u200b\u4e86\u200bfromfile, tofile
\u200b\u4e0e\u200bfrombytes, tobytes
\uff0c\u200b\u4ece\u800c\u200b\u652f\u6301\u200b\u76f4\u63a5\u200b\u8bfb\u5199\u200b\u6587\u4ef6\u200b\u6216\u200b\u6bd4\u7279\u6d41\u200b\u3002
\u200b\u5728\u200b\u521b\u5efa\u200b\u6570\u7ec4\u200b\u65f6\u200b\u9700\u8981\u200b\u6307\u5b9a\u200b\u7c7b\u578b\u200b\u7801\u200b\uff0c\u200b\u5373\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5b58\u50a8\u200b\u7684\u200b\u6570\u636e\u7c7b\u578b\u200b\u3002\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u7c7b\u578b\u200b\u7801\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7c7b\u578b\u200b\u53ea\u200b\u5360\u7528\u200b\u6709\u9650\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u3002\u200b\u5728\u200b\u5b58\u50a8\u200b\u5927\u91cf\u200b\u6570\u636e\u200b\u65f6\u200b\u4f18\u4e8e\u200b\u5217\u8868\u200b\u7b49\u200b\u5176\u4ed6\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u3002
\u200b\u7c7b\u578b\u200b\u7801\u200b C \u200b\u7c7b\u578b\u200b Python \u200b\u7c7b\u578b\u200b \u200b\u5b57\u200b\u5bbd\u200b 'b'
signed char
int
1 'B'
unsigned char
int
1 'u'
wchar_t
Unicode character 2 'h'
signed short
int
2 'H'
unsigned short
int
2 'i'
signed int
int
2 'I'
unsigned int
int
2 'l'
signed long
int
4 'L'
unsigned long
int
4 'q'
signed long long
int
8 'Q'
unsigned long long
int
8 'f'
float
float
4 'd'
double
float
8 \u200b\u6570\u7ec4\u200b\u4e0d\u200b\u652f\u6301\u200b\u5217\u8868\u200b\u7684\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
\u200b\u4f46\u200b\u6570\u7ec4\u200b\u652f\u6301\u200b\u4ece\u200b\u5217\u8868\u200b\u6dfb\u52a0\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5373\u200bfromlist
\u200b\u65b9\u6cd5\u200b\u3002\u200b\u5f53\u200b\u5217\u8868\u200b\u4e2d\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u5728\u200b\u6dfb\u52a0\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u51fa\u9519\u200b\uff0c\u200b\u5219\u200b\u6240\u6709\u200b\u7684\u200b\u6dfb\u52a0\u200b\u90fd\u200b\u4f1a\u200b\u88ab\u200b\u56de\u6eda\u200b\u3002
>>> import array\n>>> a = array.array('f')\n>>> b = [1.0, 2.0, 'a']\n>>> a\narray('f')\n>>> a.fromlist(b)\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: must be real number, not str\n>>> a\narray('f')\n>>>\n
\u200b\u6570\u7ec4\u200b\u662f\u200bbytes-like object\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u5185\u5b58\u200b\u89c6\u56fe\u200b\u4e2d\u200b\u3002
"},{"location":"coding/python/sequence/#_9","title":"\u5185\u5b58\u200b\u89c6\u56fe","text":"memoryview
\u200b\u5141\u8bb8\u200b\u4f7f\u7528\u200b\u4e0d\u540c\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8bfb\u5199\u200b\u540c\u4e00\u200b\u5757\u5185\u5b58\u200b\u7684\u200b\u6570\u636e\u200b\u3002
\u200b\u5982\u4e0b\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u6620\u5c04\u200b\u5230\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200bmemoryview
\uff0c\u200b\u5728\u200b\u4e0d\u200b\u6267\u884c\u200b\u64cd\u4f5c\u200b\u65f6\u200b\uff0cmemory
\u200b\u7684\u200b\u6570\u636e\u200b\u5185\u5bb9\u200b\u4e0e\u200b\u539f\u200b\u5e8f\u5217\u200b\u7684\u200b\u6570\u636e\u200b\u5185\u5bb9\u200b\u76f8\u540c\u200b\u3002
>>> a = [1, 2, 3, 4]\n>>> b = memoryview(array.array('i', a))\n>>> b[0]\n1\n>>>\n
\u200b\u4f7f\u7528\u200bmemoryview.cast
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5c06\u200bmemoryview
\u200b\u6620\u5c04\u200b\u7684\u200b\u5185\u5b58\u200b\u533a\u57df\u200b\u4ee5\u200b\u4e0d\u540c\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u89e3\u91ca\u200b\u3002
>>> c = b.cast('B')\n>>> list(c)\n[1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0]\n>>>\n
memoryview
\u200b\u7684\u200b\u53ef\u53d8\u6027\u200b\u53d6\u51b3\u4e8e\u200b\u5176\u6240\u200b\u6620\u5c04\u200b\u5185\u5b58\u200b\u533a\u57df\u200b\u7684\u200b\u6027\u8d28\u200b\uff0c\u200b\u82e5\u200b\u4f7f\u7528\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\u521b\u5efa\u200bmemoryview
\uff0c\u200b\u5219\u200bmemoryview
\u200b\u4e3a\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\u3002
>>> d = memoryview(b\"abc\") \n>>> d[0] = \"d\"\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: cannot modify read-only memory\n>>>\n
\u200b\u4f5c\u4e3a\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u7684\u200bmemoryview
\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u4fee\u6539\u200b\uff0c\u200b\u518d\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u539f\u6765\u200b\u7684\u200b\u89e3\u91ca\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5373\u53ef\u200b\u5b9e\u73b0\u200b\u5bf9\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u67d0\u4e2a\u200b\u7279\u5b9a\u200b\u5b57\u8282\u200b\u7684\u200b\u4fee\u6539\u200b\u3002
>>> c[1] = 1 \n>>> b = c.cast(\"i\")\n>>> list(b)\n[257, 2, 3, 4]\n>>>\n
memoryview
\u200b\u7684\u200b\u5207\u7247\u200b\u662f\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200bmemoryview
\u200b\u5bf9\u8c61\u200b\uff08\u200b\u57fa\u4e8e\u200b\u539f\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\uff09
"},{"location":"coding/python/sequence/#_10","title":"\u961f\u5217","text":"\u200b\u5217\u8868\u200b\u7684\u200bappend
\u200b\u4e0e\u200bpop
\u200b\u65b9\u6cd5\u200b\u7ec4\u5408\u200b\u4f7f\u7528\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u5bf9\u6808\u200b\u6216\u200b\u961f\u5217\u200b\u7684\u200b\u6a21\u62df\u200b\u3002collection.deque
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u961f\u5217\u200b\u7684\u200b\u66f4\u200b\u9ad8\u6548\u200b\u7684\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u5e76\u4e14\u200b\u6ee1\u8db3\u200b\u7ebf\u7a0b\u200b\u5b89\u5168\u200b\u7684\u200b\u6761\u4ef6\u200b\u3002
\u200b\u5728\u200b\u521b\u5efa\u200b\u961f\u5217\u200b\u65f6\u200b\uff0c\u200b\u53ef\u200b\u9009\u200b\u63d0\u4f9b\u200b\u961f\u5217\u200b\u7684\u200b\u6700\u5927\u200b\u957f\u5ea6\u200bmaxlen
\u3002\u200b\u8be5\u200b\u53c2\u6570\u200b\u53ea\u80fd\u200b\u5728\u200b\u6784\u9020\u51fd\u6570\u200b\u4e2d\u200b\u6307\u5b9a\u200b\uff0c\u200b\u5728\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u53ea\u8bfb\u200b\u3002
\u200b\u961f\u5217\u200b\u63d0\u4f9b\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
rotate
\uff0c\u200b\u5f53\u200b\u53c2\u6570\u200bn > 0
\u200b\u65f6\u200b\u5c06\u200b\u961f\u5217\u200b\u53f3\u4fa7\u200b\u7684\u200bn
\u200b\u4e2a\u200b\u5143\u7d20\u200b\u79fb\u52a8\u200b\u5230\u200b\u961f\u5217\u200b\u5de6\u4fa7\u200b\uff0c\u200b\u53cd\u4e4b\u200b\u5c06\u200b\u961f\u5217\u200b\u5de6\u4fa7\u200b\u7684\u200bn
\u200b\u4e2a\u200b\u5143\u7d20\u200b\u79fb\u52a8\u200b\u5230\u200b\u961f\u5217\u200b\u53f3\u4fa7\u200b appendleft
\uff0c\u200b\u5728\u200b\u961f\u5217\u200b\u7684\u200b\u5de6\u4fa7\u200b\u6dfb\u52a0\u200b\u5143\u7d20\u200b\uff08\u200b\u5f53\u200b\u8d85\u51fa\u200b\u961f\u5217\u200b\u957f\u5ea6\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u4ece\u200b\u961f\u5217\u200b\u53e6\u4e00\u4fa7\u200b\u5220\u9664\u200b\uff09 extendleft
\uff0c\u200b\u5728\u200b\u961f\u5217\u200b\u7684\u200b\u5de6\u4fa7\u200b\u6dfb\u52a0\u200b\u4e00\u7ec4\u200b\u5143\u7d20\u200b\uff08\u200b\u5f53\u200b\u8d85\u51fa\u200b\u961f\u5217\u200b\u957f\u5ea6\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u4ece\u200b\u961f\u5217\u200b\u53e6\u4e00\u4fa7\u200b\u5220\u9664\u200b\uff09 - \u200b\u961f\u5217\u200b\u652f\u6301\u200b\u5217\u8868\u200b\u7684\u200b\u5927\u591a\u6570\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u9664\u200b
copy
\u3001sort
\u3001insert
\u3001index
\u200b\u7b49\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u961f\u5217\u200b\u4ec5\u200b\u652f\u6301\u200b+=
\u200b\u8fd0\u7b97\u7b26\u200b\u7684\u200b\u4f5c\u7528\u200b\u3002
"},{"location":"coding/reinforcement-learning/","title":"\u5f3a\u5316\u200b\u5b66\u4e60","text":"\u200b\u8bb0\u5f55\u200b\u5f3a\u5316\u200b\u5b66\u4e60\u200b\u7684\u200b\u5b66\u4e60\u200b\u8fc7\u7a0b\u200b\u3002
- \u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b
- \u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5\u200b
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/","title":"\u591a\u81c2\u200b\u8001\u864e\u673a","text":"In\u00a0[1]: Copied! import itertools\nimport random\nfrom typing import List, Optional\n\nfrom scipy.stats import norm\n\n\nclass MultiArmedBandit():\n def __init__(self, means, stds: Optional[List[float]] = None):\n self.means = means\n if stds is not None:\n if len(stds) != len(means):\n raise ValueError(\n 'The length of means and stds should be the same.')\n self.stds = stds\n else:\n self.stds = [1.0] * len(means)\n self.k = len(means)\n self.dists = [\n norm(loc=mean, scale=std) for mean, std in zip(means, self.stds)\n ]\n\n def __len__(self) -> int:\n return self.k\n\n @property\n def optimal_reward(self) -> float:\n return max(self.means)\n\n def pull(self, action: int) -> float:\n return self.dists[action].rvs()\n\nrewards = [*range(0, 10, 2)]\nstds = [*range(1, 6)]\nargs = itertools.product(rewards, stds)\nbandit = MultiArmedBandit(*zip(*args))\nprint(bandit.pull(0))\n
import itertools import random from typing import List, Optional from scipy.stats import norm class MultiArmedBandit(): def __init__(self, means, stds: Optional[List[float]] = None): self.means = means if stds is not None: if len(stds) != len(means): raise ValueError( 'The length of means and stds should be the same.') self.stds = stds else: self.stds = [1.0] * len(means) self.k = len(means) self.dists = [ norm(loc=mean, scale=std) for mean, std in zip(means, self.stds) ] def __len__(self) -> int: return self.k @property def optimal_reward(self) -> float: return max(self.means) def pull(self, action: int) -> float: return self.dists[action].rvs() rewards = [*range(0, 10, 2)] stds = [*range(1, 6)] args = itertools.product(rewards, stds) bandit = MultiArmedBandit(*zip(*args)) print(bandit.pull(0)) -1.435877863923347\n
In\u00a0[2]: Copied! import abc\nfrom typing import Tuple\n\nclass AbstractAgent(abc.ABC):\n def __init__(self, T: int, k: int):\n self.T = T\n self.k = k\n\n self.history: List[Tuple[int, float]] = []\n\n @abc.abstractmethod\n def strategy(self) -> int:\n pass\n\n def run(self, bandit: MultiArmedBandit) -> float:\n rewards = []\n for t in range(self.T):\n action = self.strategy()\n if action >= self.k:\n raise ValueError('Invalid action.')\n\n reward = bandit.pull(action)\n self.history.append((action, reward))\n rewards.append(reward)\n return self.T * bandit.optimal_reward - sum(rewards)\n
import abc from typing import Tuple class AbstractAgent(abc.ABC): def __init__(self, T: int, k: int): self.T = T self.k = k self.history: List[Tuple[int, float]] = [] @abc.abstractmethod def strategy(self) -> int: pass def run(self, bandit: MultiArmedBandit) -> float: rewards = [] for t in range(self.T): action = self.strategy() if action >= self.k: raise ValueError('Invalid action.') reward = bandit.pull(action) self.history.append((action, reward)) rewards.append(reward) return self.T * bandit.optimal_reward - sum(rewards) In\u00a0[3]: Copied! import numpy as np\n\ndef show_result(x: List[float], name: str) -> str:\n x_array = np.array(x)\n return f'{name} - Mean: {x_array.mean():.2f} Std: {x_array.std():.2f}'\n
import numpy as np def show_result(x: List[float], name: str) -> str: x_array = np.array(x) return f'{name} - Mean: {x_array.mean():.2f} Std: {x_array.std():.2f}' In\u00a0[4]: Copied! class RandomAgent(AbstractAgent):\n def strategy(self) -> int:\n return random.randint(0, self.k - 1)\n\nrandom_agents = [RandomAgent(T=100, k=len(bandit)) for _ in range(1000)]\nregrets = [agent.run(bandit) for agent in random_agents]\nshow_result(regrets, 'Random Agent')\n
class RandomAgent(AbstractAgent): def strategy(self) -> int: return random.randint(0, self.k - 1) random_agents = [RandomAgent(T=100, k=len(bandit)) for _ in range(1000)] regrets = [agent.run(bandit) for agent in random_agents] show_result(regrets, 'Random Agent') Out[4]: 'Random Agent - Mean: 399.66 Std: 44.19'
In\u00a0[5]: Copied! from typing import Dict\n\nclass EpsilonGreedyAgent(AbstractAgent):\n def __init__(self, T: int, k: int, epsilon: float):\n super().__init__(T, k)\n self.epsilon = epsilon\n\n def _random(self) -> int:\n return random.randint(0, self.k - 1)\n\n def _greedy(self) -> int:\n history_dict: Dict[int, List[float]] = {}\n for action, reward in self.history:\n if action not in history_dict:\n history_dict[action] = []\n history_dict[action].append(reward)\n return max(\n history_dict,\n key=lambda x: sum(history_dict[x]) / len(history_dict[x])\n )\n\n def strategy(self) -> int:\n if random.random() < self.epsilon or not self.history:\n return self._random()\n return self._greedy()\n\n\nepsilon_greedy = [\n EpsilonGreedyAgent(T=100, k=len(bandit), epsilon=0.2) for _ in range(1000)\n]\nregrets = [agent.run(bandit) for agent in epsilon_greedy]\nshow_result(regrets, 'Epsilon-Greedy Agent')\n
from typing import Dict class EpsilonGreedyAgent(AbstractAgent): def __init__(self, T: int, k: int, epsilon: float): super().__init__(T, k) self.epsilon = epsilon def _random(self) -> int: return random.randint(0, self.k - 1) def _greedy(self) -> int: history_dict: Dict[int, List[float]] = {} for action, reward in self.history: if action not in history_dict: history_dict[action] = [] history_dict[action].append(reward) return max( history_dict, key=lambda x: sum(history_dict[x]) / len(history_dict[x]) ) def strategy(self) -> int: if random.random() < self.epsilon or not self.history: return self._random() return self._greedy() epsilon_greedy = [ EpsilonGreedyAgent(T=100, k=len(bandit), epsilon=0.2) for _ in range(1000) ] regrets = [agent.run(bandit) for agent in epsilon_greedy] show_result(regrets, 'Epsilon-Greedy Agent') Out[5]: 'Epsilon-Greedy Agent - Mean: 155.49 Std: 79.32'
In\u00a0[6]: Copied! import math\n\nclass UCBAgent(AbstractAgent):\n def __init__(self, T: int, k: int, c: float):\n super().__init__(T, k)\n self.c = c\n\n def ucb(self, action: int) -> float:\n n = len([a for a, _ in self.history if a == action])\n if n == 0:\n return float('inf')\n mean = sum(r for a, r in self.history if a == action) / n\n std = math.sqrt(math.log(len(self.history)) / n)\n return mean + self.c * std\n\n def strategy(self) -> int:\n # If there are still unselected actions, select one of them.\n if len(self.history) < self.k:\n return len(self.history)\n\n return max(range(self.k), key=self.ucb)\n\nucb_agents = [UCBAgent(T=100, k=len(bandit), c=0.3) for _ in range(1000)]\nregrets = [agent.run(bandit) for agent in ucb_agents]\nshow_result(regrets, 'UCB Agent')\n
import math class UCBAgent(AbstractAgent): def __init__(self, T: int, k: int, c: float): super().__init__(T, k) self.c = c def ucb(self, action: int) -> float: n = len([a for a, _ in self.history if a == action]) if n == 0: return float('inf') mean = sum(r for a, r in self.history if a == action) / n std = math.sqrt(math.log(len(self.history)) / n) return mean + self.c * std def strategy(self) -> int: # If there are still unselected actions, select one of them. if len(self.history) < self.k: return len(self.history) return max(range(self.k), key=self.ucb) ucb_agents = [UCBAgent(T=100, k=len(bandit), c=0.3) for _ in range(1000)] regrets = [agent.run(bandit) for agent in ucb_agents] show_result(regrets, 'UCB Agent') Out[6]: 'UCB Agent - Mean: 116.76 Std: 29.87'
In\u00a0[7]: Copied! from scipy.stats import invgamma\n\nclass ThompsonSamplingAgent(AbstractAgent):\n def __init__(self, T: int, k: int):\n super().__init__(T, k)\n\n # We know that the reward is gaussian, so we can use normal-inverse-gamma\n self.mu = [0.0] * k\n self.lambd = [1.0] * k\n self.alpha = [1.0] * k\n self.beta = [1.0] * k\n\n def update(self, action: int, reward: float) -> None:\n self.mu[action] = (\n self.lambd[action] * self.mu[action] + reward\n ) / (self.lambd[action] + 1)\n self.lambd[action] += 1\n self.alpha[action] += 0.5\n self.beta[action] += (\n self.lambd[action] * (reward - self.mu[action]) ** 2\n ) / (self.lambd[action] + 1) / 2\n\n def strategy(self) -> int:\n if self.history:\n self.update(*self.history[-1])\n\n samples = [\n norm.rvs(\n loc=mu, scale=invgamma.rvs(a, scale=b) / math.sqrt(lambd)\n )\n for mu, lambd, a, b in zip(self.mu, self.lambd, self.alpha, self.beta)\n ]\n return max(range(self.k), key=lambda x: samples[x])\n\nthompson_sampling_agents = [\n ThompsonSamplingAgent(T=100, k=len(bandit)) for _ in range(1000)\n]\nregrets = [agent.run(bandit) for agent in thompson_sampling_agents]\nshow_result(regrets, 'Thompson Sampling Agent')\n
from scipy.stats import invgamma class ThompsonSamplingAgent(AbstractAgent): def __init__(self, T: int, k: int): super().__init__(T, k) # We know that the reward is gaussian, so we can use normal-inverse-gamma self.mu = [0.0] * k self.lambd = [1.0] * k self.alpha = [1.0] * k self.beta = [1.0] * k def update(self, action: int, reward: float) -> None: self.mu[action] = ( self.lambd[action] * self.mu[action] + reward ) / (self.lambd[action] + 1) self.lambd[action] += 1 self.alpha[action] += 0.5 self.beta[action] += ( self.lambd[action] * (reward - self.mu[action]) ** 2 ) / (self.lambd[action] + 1) / 2 def strategy(self) -> int: if self.history: self.update(*self.history[-1]) samples = [ norm.rvs( loc=mu, scale=invgamma.rvs(a, scale=b) / math.sqrt(lambd) ) for mu, lambd, a, b in zip(self.mu, self.lambd, self.alpha, self.beta) ] return max(range(self.k), key=lambda x: samples[x]) thompson_sampling_agents = [ ThompsonSamplingAgent(T=100, k=len(bandit)) for _ in range(1000) ] regrets = [agent.run(bandit) for agent in thompson_sampling_agents] show_result(regrets, 'Thompson Sampling Agent') Out[7]: 'Thompson Sampling Agent - Mean: 231.88 Std: 49.94'
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/","title":"\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u00b6","text":"\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\uff08Multi-armed bandit\uff09\u200b\u95ee\u9898\u200b\u6765\u81ea\u200b\u4e8e\u200b\u73b0\u5b9e\u200b\u4e2d\u200b\u7684\u200b\u8001\u864e\u673a\u200b\u95ee\u9898\u200b\u3002\u200b\u6bcf\u53f0\u200b\u8001\u864e\u673a\u200b\u90fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u62c9\u6746\u200b\uff0c\u200b\u62c9\u52a8\u200b\u62c9\u6746\u200b\u540e\u200b\uff0c\u200b\u8001\u864e\u200b\u673a\u4f1a\u200b\u968f\u673a\u200b\u7ed9\u51fa\u200b\u4e00\u4e2a\u200b\u5956\u52b1\u200b\u3002\u200b\u73a9\u5bb6\u200b\u7684\u200b\u4efb\u52a1\u200b\u662f\u200b\u5728\u200b\u6709\u9650\u200b\u7684\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u5185\u200b\u5c3d\u53ef\u80fd\u200b\u83b7\u5f97\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u5956\u52b1\u200b\u3002
\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u95ee\u9898\u200b\u7684\u200b\u6570\u5b66\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\uff1a\u200b\u5df2\u77e5\u200b\u4e00\u7ec4\u200b$K\\in \\mathbb N^{+}$\u200b\u4e2a\u200b\u5b9a\u4e49\u200b\u5728\u200b$\\mathbb R$\u200b\u4e0a\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b$\\mathcal B = \\{D_1, \\ldots, D_K\\}$\uff0c\u200b\u5176\u4e2d\u200b$D_k$\u200b\u8868\u793a\u200b\u7b2c\u200b$k$\u200b\u4e2a\u200b\u8001\u864e\u673a\u200b\u7ed9\u51fa\u200b\u5956\u52b1\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\uff0c$D_k$\u200b\u7684\u200b\u5747\u503c\u200b\u4e3a\u200b$\\mu_k$\u3002\u200b\u5728\u200b\u7b2c\u200b$t$\u200b\u8f6e\u4e2d\u200b\uff0c\u200b\u667a\u80fd\u200b\u4f53\u4ece\u200b$\\mathcal B$\u200b\u4e2d\u200b\u968f\u673a\u200b\u9009\u51fa\u200b\u4e00\u4e2a\u200b\u5206\u5e03\u200b$D^{(t)}\\in\\mathcal B$\uff0c\u200b\u5e76\u200b\u4ece\u4e2d\u200b\u91c7\u6837\u200b\u4e00\u4e2a\u200b\u5956\u52b1\u200b$X^{(t)}\\sim D^{(t)}$\u3002\u200b\u667a\u80fd\u200b\u4f53\u200b\u7684\u200b\u76ee\u6807\u200b\u662f\u200b\u5728\u200b\u6709\u9650\u200b\u7684\u200b\u8f6e\u6b21\u200b\u5185\u200b\u6700\u5927\u5316\u200b\u7d2f\u79ef\u200b\u5956\u52b1\u200b$\\sum_{t=1}^T X^{(t)}$\u3002\u200b\u540e\u6094\u200b\u503c\u200b$\\rho$\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\u6700\u4f18\u200b\u7b56\u7565\u200b\u7684\u200b$T$\u200b\u8f6e\u200b\u7d2f\u8ba1\u200b\u5956\u52b1\u200b\u7684\u200b\u671f\u671b\u503c\u200b\u4e0e\u200b\u667a\u80fd\u200b\u4f53\u200b\u7684\u200b$T$\u200b\u8f6e\u200b\u7d2f\u8ba1\u200b\u5956\u52b1\u200b\u4e4b\u5dee\u200b\uff0c\u200b\u5373\u200b
$$ \\rho = T\\max\\{\\mu_k\\} - \\mathbb E\\left[\\sum_{t=1}^T X^{(t)}\\right] $$
\u200b\u7528\u200bPython\u200b\u53ef\u4ee5\u200b\u7b80\u5355\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200b\u4e0e\u200b\u667a\u80fd\u200b\u4f53\u200b\u4ea4\u4e92\u200b\u7684\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u73af\u5883\u200b\uff1a
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/","title":"\u7b97\u6cd5\u200b\u00b6","text":"\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u7b97\u6cd5\u200b\u7684\u200b\u6838\u5fc3\u200b\u662f\u200b\u5728\u200b\u63a2\u7d22\u200b\uff08Exploration\uff09\u200b\u548c\u200b\u5229\u7528\u200b\uff08Exploitation\uff09\u200b\u4e4b\u95f4\u200b\u5bfb\u627e\u200b\u5e73\u8861\u200b\u3002\u200b\u63a2\u7d22\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u627e\u5230\u200b\uff08\u200b\u76f8\u8f83\u200b\u4e8e\u200b\u5f53\u524d\u200b\u5df2\u77e5\u200b\u7684\u200b\uff09\u200b\u66f4\u597d\u200b\u7684\u200b\u5956\u52b1\u200b\uff0c\u200b\u800c\u200b\u5229\u7528\u200b\u5219\u200b\u662f\u200b\u76f4\u63a5\u200b\u9009\u62e9\u200b\u5f53\u524d\u200b\u5df2\u77e5\u200b\u7684\u200b\u6700\u597d\u200b\u7684\u200b\u5956\u52b1\u200b\u3002
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/","title":"\u5b8c\u5168\u200b\u968f\u673a\u200b\u7b56\u7565\u200b\u00b6","text":"\u200b\u5728\u200b\u5b8c\u5168\u200b\u968f\u673a\u200b\u7b56\u7565\u200b\u4e0b\u200b\uff0c\u200b\u667a\u80fd\u200b\u4f53\u200b\u968f\u673a\u200b\u9009\u62e9\u200b\u4e00\u4e2a\u200b\u81c2\u200b\uff0c\u200b\u83b7\u53d6\u200b\u5956\u52b1\u200b\uff0c\u200b\u540e\u6094\u200b\u503c\u200b\u7684\u200b\u671f\u671b\u200b\u4e3a\u200b$\\mathbb E\\rho = \\sum_{k=1}^K (\\mu^* - \\mu_k)$\u3002
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/#epsilon-","title":"$\\epsilon$-\u200b\u8d2a\u5fc3\u200b\u7b97\u6cd5\u200b\u00b6","text":"$\\epsilon$-\u200b\u8d2a\u5fc3\u200b\u7b97\u6cd5\u200b\u662f\u200b\u6700\u200b\u7b80\u5355\u200b\u7684\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u7b97\u6cd5\u200b\u4e4b\u4e00\u200b\u3002\u200b\u5728\u200b\u6bcf\u200b\u4e00\u8f6e\u200b\u4e2d\u200b\uff0c\u200b\u4ee5\u200b$\\epsilon$\u200b\u7684\u200b\u6982\u7387\u200b\u968f\u673a\u200b\u9009\u62e9\u200b\u4e00\u4e2a\u200b\u8001\u864e\u673a\u200b\uff0c\u200b\u4ee5\u200b$1-\\epsilon$\u200b\u7684\u200b\u6982\u7387\u200b\u9009\u62e9\u200b\u5f53\u524d\u200b\u5df2\u77e5\u200b\u7684\u200b\u6700\u597d\u200b\u7684\u200b\u8001\u864e\u673a\u200b\u3002
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/","title":"\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5\u200b\u00b6","text":"\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5\u200b\uff08Upper Confidence Bound, UCB\uff09\u200b\u662f\u200b\u4e00\u79cd\u200b\u57fa\u4e8e\u200b\u7f6e\u4fe1\u533a\u95f4\u200b\u7684\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u7b97\u6cd5\u200b\u3002\u200b\u5728\u200b\u6bcf\u200b\u4e00\u8f6e\u200b\u4e2d\u200b\uff0c\u200b\u667a\u80fd\u200b\u4f53\u200b\u9009\u62e9\u200b\u4e00\u4e2a\u200b\u8001\u864e\u673a\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u8be5\u200b\u8001\u864e\u673a\u200b\u7684\u200b\u7f6e\u4fe1\u533a\u95f4\u200b\u4e0a\u200b\u754c\u200b\u6700\u5927\u200b\u3002\u200b\u7f6e\u4fe1\u533a\u95f4\u200b\u4e0a\u754c\u200b\u7684\u200b\u8ba1\u7b97\u516c\u5f0f\u200b\u4e3a\u200b
$$ \\bar X_k + c\\cdot \\sqrt{\\frac{\\log t}{N_k}} $$
\u200b\u5176\u4e2d\u200b$\\bar X_k$\u200b\u4e3a\u200b\u7b2c\u200b$k$\u200b\u4e2a\u200b\u8001\u864e\u673a\u200b\u7684\u200b\u5e73\u5747\u200b\u5956\u52b1\u200b\uff0c$N_k$\u200b\u4e3a\u200b\u7b2c\u200b$k$\u200b\u4e2a\u200b\u8001\u864e\u673a\u200b\u88ab\u200b\u9009\u62e9\u200b\u7684\u200b\u6b21\u6570\u200b\uff0c$c$\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u5e38\u6570\u200b\uff0c$t$\u200b\u4e3a\u200b\u5f53\u524d\u200b\u8f6e\u6b21\u200b\u3002\u200b\u5176\u200b\u601d\u60f3\u200b\u5728\u4e8e\u200b\uff0c\u200b\u667a\u80fd\u200b\u4f53\u4f1a\u200b\u9996\u5148\u200b\u904d\u5386\u200b\u6240\u6709\u200b\u81c2\u200b\uff0c\u200b\u4e4b\u540e\u200b\u4f18\u5148\u9009\u62e9\u200b\u90a3\u4e9b\u200b\u88ab\u200b\u9009\u62e9\u200b\u6b21\u6570\u200b\u8f83\u5c11\u200b\u7684\u200b\u8001\u864e\u673a\u200b\uff0c\u200b\u4ee5\u4fbf\u200b\u66f4\u597d\u200b\u5730\u200b\u4f30\u8ba1\u200b\u5176\u200b\u5956\u52b1\u200b\u3002
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/#thompson","title":"Thompson\u200b\u91c7\u6837\u200b\u00b6","text":"Thompson\u200b\u91c7\u6837\u200b\u662f\u200b\u4e00\u79cd\u200b\u57fa\u4e8e\u200b\u8d1d\u53f6\u65af\u200b\u63a8\u65ad\u200b\u7684\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u9700\u8981\u200b\u5df2\u77e5\u200b\u6bcf\u4e2a\u200b\u8001\u864e\u673a\u200b\u7684\u200b\u5956\u52b1\u200b\u670d\u4ece\u200b\u67d0\u79cd\u200b\u5206\u5e03\u200b\u3002\u200b\u5728\u200b\u6bcf\u200b\u4e00\u8f6e\u200b\u4e2d\u200b\uff0c\u200b\u667a\u80fd\u200b\u4f53\u4ece\u200b\u6bcf\u4e2a\u200b\u8001\u864e\u673a\u200b\u7684\u200b\u5956\u52b1\u200b\u5206\u5e03\u200b\u4e2d\u200b\u91c7\u6837\u200b\u4e00\u4e2a\u200b\u5956\u52b1\u200b\uff0c\u200b\u9009\u62e9\u200b\u5956\u52b1\u200b\u6700\u5927\u200b\u7684\u200b\u8001\u864e\u673a\u200b\u3002\u200b\u6839\u636e\u200b\u73af\u5883\u200b\u7684\u200b\u53cd\u9988\u200b\uff0c\u200b\u66f4\u65b0\u200b\u6bcf\u4e2a\u200b\u8001\u864e\u673a\u200b\u7684\u200b\u540e\u9a8c\u200b\u5956\u52b1\u200b\u5206\u5e03\u200b\u3002
"},{"location":"coding/reinforcement-learning/upper-confidence-bound/","title":"\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5","text":"\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\uff08Upper Confidence Bound, UCB\uff09\u200b\u7b97\u6cd5\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u5c06\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u7eb3\u5165\u200b\u8003\u8651\u200b\uff0c\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u8f83\u5c11\u200b\u7684\u200b\u52a8\u4f5c\u200b\u6709\u200b\u66f4\u200b\u5927\u200b\u7684\u200b\u4e0d\u786e\u5b9a\u6027\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u5c3d\u53ef\u80fd\u200b\u4e50\u89c2\u200b\u5730\u200b\u8003\u8651\u200b\u8fd9\u4e9b\u200b\u6ca1\u6709\u200b\u5c1d\u8bd5\u200b\u8fc7\u200b\u7684\u200b\u52a8\u4f5c\u200b\uff0c\u200b\u5e76\u200b\u4f18\u5148\u200b\u63a2\u7d22\u200b\u8fd9\u4e9b\u200b\u52a8\u4f5c\u200b\u3002\u200b\u5728\u200b\u6bcf\u4e2a\u200b\u52a8\u4f5c\u200b\u63a2\u7d22\u200b\u6bd4\u8f83\u200b\u6df1\u5165\u200b\u540e\u200b\uff0c\u200b\u518d\u200b\u8f6c\u5411\u200b\u5229\u7528\u200b\u5956\u52b1\u200b\u8f83\u200b\u9ad8\u200b\u7684\u200b\u52a8\u4f5c\u200b\u3002
\u200b\u5f15\u7406\u200b
\u200b\u8bbe\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X_1, \\ldots, X_n\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u5747\u503c\u200b\u4e3a\u200b\\(0\\)\uff0c\u200b\u5bf9\u200b\u5747\u503c\u200b\u7684\u200b\u4f30\u8ba1\u200b\u4e3a\u200b
\\[ \\hat \\mu = \\frac{1}{n}\\sum_{i=1}^n X_i \\] \u200b\u5219\u200b\u5bf9\u200b\u4efb\u610f\u200b\\(\\delta > 0\\)\uff0c\u200b\u6709\u200b
\\[ P(\\hat\\mu > \\delta) \\leq \\exp(-n\\delta^2 / 2) \\] \u200b\u8be5\u200b\u5f15\u7406\u200b\u79f0\u4e3a\u200bHoeffding\u200b\u4e0d\u7b49\u5f0f\u200b\u3002
\u200b\u4ee4\u200b\\(\\varepsilon = \\exp(-2n\\delta^2)\\)\uff0c\u200b\u5373\u200b\\(\\delta = \\sqrt{\\frac{-2\\log\\varepsilon}{n}}\\)
\\[ P\\left(\\hat\\mu > \\sqrt{\\frac{-2\\log\\varepsilon}{n}}\\right) \\leq \\varepsilon \\] \u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u52a8\u4f5c\u200b\\(k\\)\uff0c\u200b\u6211\u4eec\u200b\u5c1d\u8bd5\u200b\u4e86\u200b\\(n_k\\)\u200b\u6b21\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u5c1d\u8bd5\u200b\u7684\u200b\u5956\u52b1\u200b\u4e3a\u200b\\(X_1, \\ldots, X_{n_k}\\)\uff0c\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\u5e73\u5747\u200b\u5956\u52b1\u200b\u4e3a\u200b\\(\\hat\\mu_k\\)\uff0c\u200b\u5b9a\u4e49\u200b\\(\\tilde X_i = X_i - \\hat\\mu_k\\)\uff0c\u200b\u5219\u200b\\(\\tilde X_1, \\ldots, \\tilde X_{n_k}\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u5747\u503c\u200b\u4e3a\u200b\\(0\\)\u3002
\u200b\u4ee4\u200b\u5bf9\u200b\\(\\tilde X_1, \\ldots, \\tilde X_{n_k}\\)\u200b\u4f30\u8ba1\u200b\u7684\u200b\u5747\u503c\u200b\u4e3a\u200b\\(\\hat\\mu_0\\)\uff0c\u200b\u6211\u4eec\u200b\u6709\u200b\\(1 - \\varepsilon\\)\u200b\u7684\u200b\u6982\u7387\u200b\u4fdd\u8bc1\u200b\\(\\hat\\mu_0\\)\u200b\u4e0d\u200b\u8d85\u8fc7\u200b\\(\\sqrt{\\frac{-2\\log\\varepsilon}{n_k}}\\)\u3002
\\[ P\\left(\\hat\\mu_0 > \\sqrt{\\frac{-2\\log\\varepsilon}{n_k}}\\right) \\leq \\varepsilon \\] \u200b\u56e0\u6b64\u200b\uff0c\u200b\u6211\u4eec\u200b\u53d6\u200b\\(\\hat\\mu_k + \\sqrt{\\frac{-2\\log\\varepsilon}{n_k}}\\)\u200b\u4f5c\u4e3a\u200b\u52a8\u4f5c\u200b\\(k\\)\u200b\u7684\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u3002\u200b\u901a\u8fc7\u200b\u8c03\u6574\u200b\\(\\varepsilon\\)\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u63a7\u5236\u200b\u7f6e\u4fe1\u200b\u4e0a\u754c\u200b\u7684\u200b\u5bbd\u5ea6\u200b\u4ee5\u200b\u5728\u200b\u63a2\u7d22\u200b\u548c\u200b\u5229\u7528\u200b\u4e4b\u524d\u200b\u53d6\u5f97\u200b\u5e73\u8861\u200b\u3002
\u200b\u901a\u5e38\u200b\u91c7\u53d6\u200b\u7684\u200b\u7b56\u7565\u200b\u662f\u200b\u53d6\u200b\\(\\varepsilon = 1/t\\)\uff0c\\(t\\)\u200b\u4e3a\u200b\u603b\u200b\u8f6e\u6b21\u200b\uff0c\u200b\u4ee5\u200b\u4fdd\u8bc1\u200b\u968f\u7740\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u7684\u200b\u589e\u52a0\u200b\uff0c\u200b\u7f6e\u4fe1\u200b\u4e0a\u754c\u200b\u7684\u200b\u5bbd\u5ea6\u200b\u9010\u6e10\u200b\u51cf\u5c0f\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u7b97\u6cd5\u200b\u9010\u6b65\u200b\u8f6c\u5411\u200b\u5229\u7528\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b
\\[ \\hat\\mu_k + \\sqrt{\\frac{2\\log t}{n_k}} \\] \u200b\u6b64\u5916\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5176\u4ed6\u200b\u7684\u200b\u4e0a\u754c\u200b\u5bbd\u5ea6\u200b\uff0c\u200b\u5982\u200b
\\[ \\varepsilon = \\frac{1}{1 + t\\log^2 t} \\] \u200b\u5728\u5b9e\u8df5\u4e2d\u200b\uff0c\u200b\u901a\u5e38\u200b\u8fd8\u4f1a\u200b\u5f15\u5165\u200b\u4e00\u4e2a\u200b\u53c2\u6570\u200b\\(c\\)\u200b\u63a7\u5236\u200b\u5bbd\u5ea6\u200b\uff0c\u200b\u5373\u200b
\\[ \\hat \\mu_k + c\\cdot\\sqrt{\\frac{\\log t}{n_k}} \\]"},{"location":"coding/rust/","title":"Rust","text":"\u200b\u8bb0\u5f55\u200bRust\u200b\u7684\u200b\u5b66\u4e60\u200b\u3002
- Introduction
- Variables
- Control Flows
- Complex Objects
- Lifetimes
- Error Handling
- Supplements
"},{"location":"coding/rust/0/","title":"Introduction","text":"Rust\u200b\u7b80\u4ecb\u200b
Rust\u200b\u6709\u200b\u5982\u4e0b\u200b\u4e8c\u8fdb\u5236\u200b\u6587\u4ef6\u200b
rustc
\uff1aRust\u200b\u7f16\u8bd1\u5668\u200b cargo
\uff1aRust\u200b\u5305\u200b\u7ba1\u7406\u5668\u200b\u548c\u200b\u6784\u5efa\u200b\u5de5\u5177\u200b rustup
\uff1aRust\u200b\u7248\u672c\u200b\u7ba1\u7406\u5668\u200b rustdoc
\uff1aRust\u200b\u6587\u6863\u200b rls
\uff1aRust language server rustfmt
\uff1aRust\u200b\u4ee3\u7801\u200b\u683c\u5f0f\u5316\u200b\u5de5\u5177\u200b
"},{"location":"coding/rust/0/#hello-world","title":"Hello, world!","text":" Download source code
fn main() {\n println!(\"Hello, world!\");\n}\n
println!
\u200b\u4e2d\u200b\u7684\u200b!
\u200b\u8868\u793a\u200b\u8fd9\u662f\u200b\u4e00\u4e2a\u200b\u5b8f\u200b\uff0c\u200b\u800c\u200b\u4e0d\u662f\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u3002\u200b\u5b8f\u662f\u200b\u4e00\u79cd\u200b\u5728\u200b\u7f16\u8bd1\u200b\u65f6\u200b\u6267\u884c\u200b\u7684\u200b\u4ee3\u7801\u200b\u3002println
\u200b\u6709\u200bPython\u200b\u4e2d\u200bstr.format
\u200b\u7c7b\u4f3c\u200b\u7684\u200b\u529f\u80fd\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6267\u884c\u200b\u5b57\u7b26\u4e32\u200b\u683c\u5f0f\u5316\u200b\u3002print!
\u200b\u4e0e\u200bprintln!
\u200b\u7c7b\u4f3c\u200b\uff0c\u200b\u4f46\u662f\u200b\u4e0d\u4f1a\u200b\u5728\u200b\u7ed3\u5c3e\u200b\u6dfb\u52a0\u200b\u6362\u884c\u7b26\u200b\u3002
println!(\"{} days\", 31);\nprintln!(\"{0}, this is {1}. {1}, this is {0}\", \"Alice\", \"Bob\");\nprintln!(\"{greeting}, {name}!\", greeting=\"Hello\", name=\"world\");\n
"},{"location":"coding/rust/0/#cargo","title":"Cargo","text":"Cargo\u200b\u662f\u200bRust\u200b\u7684\u200b\u5305\u200b\u7ba1\u7406\u5668\u200b\u548c\u200b\u6784\u5efa\u200b\u5de5\u5177\u200b\u3002Cargo\u200b\u7684\u200b\u5de5\u4f5c\u200b\u65b9\u5f0f\u200b\u4e0e\u200bPython\u200b\u7684\u200bpip
\u200b\u548c\u200bsetuptools
\u200b\u7c7b\u4f3c\u200b\u3002
cargo new # \u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200bRust\u200b\u9879\u76ee\u200b\ncargo init # \uff08\u200b\u5728\u200b\u5df2\u7ecf\u200b\u5b58\u5728\u200b\u7684\u200b\u76ee\u5f55\u200b\u4e2d\u200b\uff09\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200bRust\u200b\u9879\u76ee\u200b\ncargo build # \u200b\u7f16\u8bd1\u200b\u9879\u76ee\u200b\ncargo run # \u200b\u7f16\u8bd1\u200b\u5e76\u200b\u8fd0\u884c\u200b\u9879\u76ee\u200b\ncargo update # \u200b\u66f4\u65b0\u200bCargo.lock\u200b\u6587\u4ef6\u200b\u4e2d\u200b\u7684\u200b\u4f9d\u8d56\u200b\ncargo doc # \u200b\u751f\u6210\u200b\u9879\u76ee\u200b\u6587\u6863\u200b\ncargo test # \u200b\u8fd0\u884c\u200b\u9879\u76ee\u200b\u6d4b\u8bd5\u200b\n\ncargo install ...\ncargo uninstall ...\n
Rust\u200b\u7684\u200b\u4ed3\u5e93\u200b\u662f\u200bcrates.io
\uff0c\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bPython\u200b\u7684\u200bPyPI
\u3002
"},{"location":"coding/rust/0/#_1","title":"\u5305\u4e0e\u200b\u6a21\u5757","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u5305\u200b\u79f0\u4e3a\u200bcrate\u3002crate\u200b\u7684\u200b\u6839\u76ee\u5f55\u200b\u4e0b\u200b\u6709\u200b\u4e00\u4e2a\u200bCargo.toml
\u200b\u6587\u4ef6\u200b\uff0c\u200b\u5176\u4e2d\u200b\u5305\u542b\u200bcrate\u200b\u7684\u200b\u5143\u200b\u6570\u636e\u200b\u548c\u200b\u4f9d\u8d56\u200b\u3002Rust\u200b\u9879\u76ee\u200b\u7684\u200b\u6587\u4ef6\u200b\u7ed3\u6784\u200b\u5982\u4e0b\u200b\uff1a
project\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 tests\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 benches\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 examples\n\u2502 \u2514\u2500\u2500 ...\n\u2514\u2500\u2500 src\n \u251c\u2500\u2500 bin // \u200b\u5176\u4ed6\u200b\u7684\u200b\u4e8c\u8fdb\u5236\u200b\u7a0b\u5e8f\u200b\n \u251c\u2500\u2500 main.rs // \u200b\u9ed8\u8ba4\u200b\u7684\u200b\u4e8c\u8fdb\u5236\u200b\u7a0b\u5e8f\u200b\n \u2514\u2500\u2500 lib.rs // \u200b\u5e93\u5305\u200b\uff08\u200b\u53ea\u80fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\uff09\n
Rust\u200b\u4e2d\u200b\u7684\u200b\u6a21\u5757\u200b\u7528\u200bmod
\u200b\u5173\u952e\u5b57\u200b\u58f0\u660e\u200b\uff0c\u200b\u6a21\u5757\u200b\u53ef\u4ee5\u200b\u5d4c\u5957\u200b\u3002\u200b\u7528\u200buse
\u200b\u5f15\u7528\u200b\u6a21\u5757\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200bcrate
\u200b\u5f00\u59cb\u200b\u7684\u200b\u7edd\u5bf9\u200b\u5f15\u7528\u200b\u8def\u5f84\u200b\u548c\u200bself
\uff08\u200b\u672c\u200b\u6a21\u5757\u200b\uff09\u200b\u6216\u200bsuper
\uff08\u200b\u7236\u200b\u6a21\u5757\u200b\uff09\u200b\u5f00\u59cb\u200b\u7684\u200b\u76f8\u5bf9\u200b\u5f15\u7528\u200b\u8def\u5f84\u200b\uff0c\u200b\u6216\u8005\u200b\u7528\u200b*
\u200b\u5f15\u5165\u200b\u6a21\u5757\u200b\u7684\u200b\u6240\u6709\u200b\u5185\u5bb9\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u6a21\u5757\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u9879\u200b\u90fd\u200b\u662f\u200b\u79c1\u6709\u200b\u7684\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u5916\u754c\u200b\u8bbf\u95ee\u200b\uff0c\u200b\u9664\u975e\u200b\u7528\u200bpub
\u200b\u5173\u952e\u5b57\u200b\u58f0\u660e\u200b\u4e3a\u200b\u516c\u6709\u200b\u3002\u200b\u516c\u6709\u200b\u6a21\u5757\u200b\u5185\u200b\u6240\u6709\u200b\u7684\u200b\u9879\u200b\u5fc5\u987b\u200b\u90fd\u200b\u7528\u200bpub
\u200b\u58f0\u660e\u200b\u4e3a\u200b\u516c\u6709\u200b\u3002pub
\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u200b(in <module path>)
\u200b\u8bed\u6cd5\u200b\u58f0\u660e\u200b\u5bf9\u8c61\u200b\u4ec5\u200b\u5728\u200b<module path>
\u200b\u4e2d\u200b\u53ef\u89c1\u200b\u3002
\u200b\u6bcf\u4e2a\u200b.rs
\u200b\u6587\u4ef6\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u4e00\u4e2a\u200b\u4ee5\u200b\u6587\u4ef6\u540d\u200b\u547d\u540d\u200b\u7684\u200b\u6a21\u5757\u200b\u3002\u200b\u5982\u679c\u200b\u8981\u200b\u628a\u200b\u6587\u4ef6\u5939\u200b\u4f5c\u4e3a\u200b\u6a21\u5757\u200b\uff0c\u200b\u5219\u200b\u5fc5\u987b\u200b\u5728\u200b\u6587\u4ef6\u5939\u200b\u4e2d\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200bmod.rs
\u200b\u6587\u4ef6\u200b\u6216\u200b\u4e0e\u200b\u6587\u4ef6\u5939\u200b\u540c\u540d\u200b\u7684\u200b.rs
\u200b\u6587\u4ef6\u200b\uff0c\u200b\u5176\u4e2d\u200b\u58f0\u660e\u200b\u5bf9\u5916\u5f00\u653e\u200b\u7684\u200b\u9879\u200b\u3002
\u200b\u5f53\u200b\u591a\u4e2a\u200b\u6a21\u5757\u200b\u4e2d\u200b\u5b58\u5728\u200b\u76f8\u540c\u200b\u540d\u79f0\u200b\u7684\u200b\u9879\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200b\u200b\u6a21\u5757\u200b\u540d\u200b::\u200b\u9879\u540d\u200b
\u200b\u6765\u200b\u6307\u5b9a\u200b\u5177\u4f53\u200b\u7684\u200b\u9879\u200b\uff0c\u200b\u6216\u8005\u200b\u7528\u200bas
\u200b\u58f0\u660e\u200b\u522b\u540d\u200b\u3002
"},{"location":"coding/rust/0/#_2","title":"\u6ce8\u91ca\u200b\u4e0e\u200b\u6587\u6863","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u6ce8\u91ca\u200b\u4e0e\u200bC/C++\u200b\u7c7b\u4f3c\u200b\uff0c\u200b\u7528\u200b//
\u200b\u8868\u793a\u200b\u5355\u884c\u200b\u6ce8\u91ca\u200b\uff0c\u200b\u7528\u200b/* */
\u200b\u8868\u793a\u200b\u591a\u884c\u200b\u6ce8\u91ca\u200b\u3002\u200b\u5176\u4e2d\u200b\uff0c\u200b\u5e38\u7528\u200b\u7684\u200b\u6ce8\u91ca\u200b\u65b9\u6cd5\u200b\u4e3a\u200b\uff1a
- \u200b\u5305\u200b\u6ce8\u91ca\u200b
//! ...
\u200b\u4e0e\u200b/*! ... */
\uff1a()\u200b\u7528\u4e8e\u200b\u6574\u4e2a\u200b\u5305\u200b\u7684\u200b\u6ce8\u91ca\u200b\uff08Inner comments\uff09 - \u200b\u6587\u6863\u200b\u6ce8\u91ca\u200b
/// ...
\u200b\u4e0e\u200b/** ... */
\uff1a\u200b\u7528\u4e8e\u200b\u6a21\u5757\u200b\u3001\u200b\u51fd\u6570\u200b\u3001\u200b\u7ed3\u6784\u200b\u4f53\u200b\u3001\u200b\u679a\u4e3e\u200b\u3001\u200b\u65b9\u6cd5\u200b\u548c\u200btrait\u200b\u7684\u200b\u6ce8\u91ca\u200b\uff08Outer comments\uff09 - \u200b\u901a\u5e38\u200b\u4e0d\u7528\u200b
/* */
\u200b\u6ce8\u91ca\u200b
\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200bdoc attribute\u200b\u6765\u200b\u6ce8\u91ca\u200b\uff0c\u200b\u5176\u200b\u8bed\u6cd5\u200b\u4e3a\u200b#![doc=...]
\u200b\u548c\u200b#[doc=...]
\uff0c\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200bOuter comments\u200b\u548c\u200bInner comments\u3002
Rust\u200b\u652f\u6301\u200b\u5728\u200b\u6587\u6863\u200b\u4e2d\u200b\u8fdb\u884c\u200b\u6d4b\u8bd5\u200b\uff0c\u200b\u88ab\u200b\u6d4b\u8bd5\u200b\u7684\u200b\u51fd\u6570\u200b\u5fc5\u987b\u200b\u662f\u200b\u516c\u6709\u200b\u7684\u200b\u3002\u200b\u4ee5\u200b#
\u200b\u5f00\u59cb\u200b\u7684\u200b\u884c\u200b\u8868\u793a\u200b\u8be5\u884c\u200b\u4e0d\u4f1a\u200b\u5728\u200b\u6587\u6863\u200b\u4e2d\u200b\u663e\u793a\u200b\uff0c\u200b\u53ea\u4f1a\u200b\u7528\u4e8e\u200b\u6d4b\u8bd5\u200b\u3002
// Assume the name of crate is `playground`\n\n/// ```rust\n/// assert_eq!(playground::add(1, 2), 3);\n/// ```\npub fn add(a: i32, b: i32) -> i32 {\n a + b\n}\n/// ```rust, should_panic\n/// // This function calls [`panic!`] macro.\n/// playground::panic_fn();\n/// ```\npub fn panic_fn() {\n panic!();\n}\n
"},{"location":"coding/rust/1/","title":"Variables","text":""},{"location":"coding/rust/1/#_1","title":"\u58f0\u660e","text":"Rust\u200b\u4e2d\u200b\u7528\u4e8e\u200b\u58f0\u660e\u200b\u53d8\u91cf\u200b\u7684\u200b\u5173\u952e\u5b57\u200b\u662f\u200blet
\uff0c\u200b\u5b83\u200b\u7684\u200b\u8bed\u6cd5\u200b\u5982\u4e0b\u200b\uff1a
let [mut] <variable>[: <type>] [= <value>];\n
\u200b\u5176\u4e2d\u200b\uff0c\u200b\u7c7b\u578b\u200b\u548c\u200b\u521d\u59cb\u5316\u200b\u7684\u200b\u503c\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u3002\u200b\u5982\u679c\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\u4ece\u200b\u58f0\u660e\u200b\u5f00\u59cb\u200b\u6ca1\u6709\u200b\u88ab\u200b\u8d4b\u503c\u200b\uff0c\u200b\u5c31\u200b\u4e0d\u80fd\u200b\u4f7f\u7528\u200b\u8fd9\u4e2a\u200b\u53d8\u91cf\u200b\u3002\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u6307\u5b9a\u200b\u7c7b\u578b\u200b\u4f46\u200b\u6307\u5b9a\u200b\u4e86\u200b\u521d\u59cb\u5316\u200b\u503c\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u5219\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u63a8\u65ad\u200b\u53d8\u91cf\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002Rust\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u200b{}
\u200b\u6765\u200b\u7528\u200b\u4e00\u7cfb\u5217\u200b\u8bed\u53e5\u200b\u6765\u200b\u521d\u59cb\u5316\u200b\u53d8\u91cf\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200b()
\u200b\u6765\u200b\u4e00\u6b21\u6027\u200b\u58f0\u660e\u200b\u591a\u4e2a\u200b\u53d8\u91cf\u200b\u3002\u200b\u6ca1\u6709\u200b\u7528\u200bmut
\u200b\u58f0\u660e\u200b\u7684\u200b\u53d8\u91cf\u200b\u662f\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u7684\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u4fee\u6539\u200b\u3002
Rust\u200b\u4e2d\u200b\u7528\u4e8e\u200b\u58f0\u660e\u200b\u5e38\u91cf\u200b\u7684\u200b\u5173\u952e\u5b57\u200b\u662f\u200bconst
\uff0c\u200b\u7528\u4e8e\u200b\u58f0\u660e\u200b\u9759\u6001\u200b\u53d8\u91cf\u200b\u7684\u200b\u5173\u952e\u5b57\u200b\u662f\u200bstatic
\u3002\u200b\u8bed\u6cd5\u200b\u4e0e\u200blet
\u200b\u76f8\u4f3c\u200b\uff0c\u200b\u4f46\u200b\u9700\u8981\u200b\u540c\u65f6\u200b\u6307\u5b9a\u200b\u7c7b\u578b\u200b\u548c\u200b\u521d\u59cb\u5316\u200b\u503c\u200b\u3002\u200b\u901a\u5e38\u200bconst
\u200b\u548c\u200bstatic
\u200b\u8bed\u53e5\u200b\u90fd\u200b\u662f\u200b\u5728\u200b\u5168\u5c40\u200b\u4f5c\u7528\u57df\u200b\uff08\u200b\u5373\u200b\u51fd\u6570\u200b\u5916\u200b\uff09\u200b\u4e2d\u200b\u58f0\u660e\u200b\u7684\u200b\u3002
let
\u200b\u53ef\u4ee5\u200b\u7528\u6765\u200b\u91cd\u65b0\u200b\u58f0\u660e\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\uff0c\u200b\u9690\u85cf\u200b\u4e4b\u524d\u200b\u7684\u200b\u53d8\u91cf\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200bmut
\u200b\u6765\u200b\u6539\u53d8\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\u7684\u200b\u53ef\u53d8\u6027\u200b\u3002
Download source code
fn main() {\n let x: f64 = -20.48; // float\n let x: i64 = x.floor() as i64; // int\n println!(\"{}\", x); // -21\n\n let s: &str = \"hello\"; // &str\n let s: String = s.to_uppercase(); // String\n println!(\"{}\", s) // HELLO\n}\n
"},{"location":"coding/rust/1/#_2","title":"\u53d8\u91cf\u200b\u7c7b\u578b","text":"Rust\u200b\u7684\u200b\u53d8\u91cf\u200b\u7c7b\u578b\u200b\u6709\u200b
- \u200b\u4e00\u822c\u200b\u7c7b\u578b\u200b
- \u200b\u5e03\u5c14\u200b\uff1a
bool
\uff0c\u200b\u53d6\u503c\u200b\u4e3a\u200btrue
\u200b\u6216\u200bfalse
\uff0c\u200b\u5360\u7528\u200b1\u200b\u4e2a\u200b\u5b57\u8282\u200b\u3002 - \u200b\u5b57\u7b26\u200b\uff1a
char
\uff0c\u200b\u4f7f\u7528\u200b\u5355\u5f15\u53f7\u200b\uff0c\u200b\u5360\u7528\u200b4\u200b\u4e2a\u200b\u5b57\u8282\u200b\u3002 - \u200b\u6574\u6570\u200b\uff1a
i8
\uff5ei128
\u200b\u548c\u200bisize
\uff0c\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\([-2^{n-1}, 2^{n-1} - 1]\\)\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200bmin_value()
\u200b\u548c\u200bmax_value()
\u200b\u51fd\u6570\u200b\u6765\u200b\u83b7\u53d6\u200b\u7c7b\u578b\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u3002isize
\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u548c\u200b\u7cfb\u7edf\u200b\u6307\u9488\u200b\u957f\u5ea6\u200b\u76f8\u540c\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u6574\u6570\u200b\u7c7b\u578b\u200b\u662f\u200bi32
\u3002 - \u200b\u65e0\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\uff1a
u8
\uff5eu128
\u200b\u548c\u200busize
\uff0c\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\([0, 2^n - 1]\\)\u3002 - \u200b\u6d6e\u70b9\u6570\u200b\uff1a
f32
\u200b\u548c\u200bf64
\uff0c\u200b\u5206\u522b\u200b\u4e3a\u200b\u5355\u7cbe\u5ea6\u200b\u548c\u200b\u53cc\u200b\u7cbe\u5ea6\u200b\u6d6e\u70b9\u6570\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u6d6e\u70b9\u6570\u200b\u7c7b\u578b\u200b\u662f\u200bf64
\u3002 - \u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\uff1a
str
\uff0c\u200b\u4f7f\u7528\u200b\u53cc\u5f15\u53f7\u200b\uff0c\u200b\u662f\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u7c7b\u578b\u200b\u3002\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\uff08\u200b\u53d8\u91cf\u200b\uff09\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e3a\u200b&str
\uff0c\u200b\u662f\u200b\u5f15\u7528\u200b\u7c7b\u578b\u200b\u3002 - \u200b\u5b57\u7b26\u4e32\u200b\uff1a
String
\uff0c\u200b\u662f\u200b\u53ef\u53d8\u200b\u7c7b\u578b\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u200b\u652f\u6301\u200b\u7d22\u5f15\u200b\u3002\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5f15\u7528\u200b\u6216\u200b\u5207\u7247\u200b\u7c7b\u578b\u200b\u4e3a\u200b&str
\u3002 - \u200b\u5355\u5143\u200b\u7c7b\u578b\u200b\uff1a
()
\uff0c\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u503c\u200b()
\uff0c\u200b\u6ca1\u6709\u200breturn
\u200b\u8bed\u53e5\u200b\u7684\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u4e3a\u200b()
\uff0c\u200b\u4e0d\u200b\u5360\u7528\u200b\u5185\u5b58\u200b\u3002
- \u200b\u5bb9\u5668\u200b\u53ca\u200b\u76f8\u5173\u200b\u7c7b\u578b\u200b
- \u200b\u4f7f\u7528\u200b
println!
\u200b\u6253\u5370\u200b\u5bb9\u5668\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200b{:?}
\u200b\u6216\u200b{:#?}
\uff0c\u200b\u524d\u8005\u200b\u4e3a\u200b\u4e00\u884c\u200b\u8f93\u51fa\u200b\uff0c\u200b\u540e\u8005\u200b\u5728\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u540e\u9762\u200b\u6dfb\u52a0\u200b\u6362\u884c\u7b26\u200b\u3002 - \u200b\u5b9a\u200b\u957f\u200b\u6570\u7ec4\u200b\uff1a
[T; N]
\uff0c\u200b\u5176\u4e2d\u200bT
\u200b\u4e3a\u200b\u6570\u7ec4\u200b\u5143\u7d20\u200b\u7c7b\u578b\u200b\u6216\u200b\u91cd\u590d\u200b\u7684\u200b\u6570\u7ec4\u200b\uff0cN
\u200b\u4e3a\u200b\u6570\u7ec4\u200b\u957f\u5ea6\u200b\uff0c\u200b\u5fc5\u987b\u200b\u662f\u200b\u5e38\u91cf\u200b\u3002\u200b\u53ea\u6709\u200b\u7528\u200bmut
\u200b\u58f0\u660e\u200b\u7684\u200b\u6570\u7ec4\u200b\u624d\u80fd\u200b\u4fee\u6539\u200b\u5176\u4e2d\u200b\u5143\u7d20\u200b\u3002 - \u200b\u6ce8\u610f\u200b\u4e0d\u200b\u652f\u6301\u200b
Copy
trait\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e0d\u80fd\u200b\u7528\u200b[T; N]
\u200b\u8bed\u6cd5\u200b\uff0c\u200b\u5fc5\u987b\u200b\u9010\u4e2a\u200b\u8d4b\u503c\u200b\u3002 - \u200b\u4e0d\u540c\u200b\u957f\u5ea6\u200b\u7684\u200b\u6570\u7ec4\u200b\u662f\u200b\u4e0d\u540c\u200b\u7684\u200b\u7c7b\u578b\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u76f8\u4e92\u200b\u8d4b\u503c\u200b\u3002
- \u200b\u5b9a\u200b\u957f\u200b\u5143\u7ec4\u200b\uff1a
(T1, T2, ..., Tn)
\uff0c\u200b\u5176\u4e2d\u200bT1
\uff5eTn
\u200b\u4e3a\u200b\u5143\u7ec4\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u53ea\u6709\u200b\u7528\u200bmut
\u200b\u58f0\u660e\u200b\u7684\u200b\u5143\u7ec4\u200b\u624d\u80fd\u200b\u4fee\u6539\u200b\u5176\u4e2d\u200b\u5143\u7d20\u200b\uff08\u200b\u7c7b\u578b\u200b\u5fc5\u987b\u200b\u5339\u914d\u200b\uff09\u3002\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bPython\uff0c\u200b\u5728\u200b\u53d8\u91cf\u200b\u58f0\u660e\u200b\u9636\u6bb5\u200b\u6216\u200b\u8d4b\u503c\u200b\u9636\u6bb5\u200b\uff0c\u200b\u4ec5\u200b\u5305\u542b\u200b\uff08\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u8d4b\u503c\u200b\u7684\u200b\uff09\u200b\u53d8\u91cf\u200b\u5143\u7ec4\u200b\u53ef\u4ee5\u200b\u4f5c\u4e3a\u200b\u8d4b\u503c\u200b\u8fd0\u7b97\u200b\u7684\u200b\u5de6\u7aef\u200b\u9879\u200b\uff0c\u200b\u6b64\u65f6\u200b\u4f1a\u200b\u5206\u522b\u200b\u4e3a\u200b\u6bcf\u4e2a\u200b\u53d8\u91cf\u200b\u5206\u914d\u200b\u5bf9\u5e94\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u7701\u7565\u200b\u7684\u200b\u53d8\u91cf\u200b\u7528\u200b_
\u200b\u8868\u793a\u200b\u3002\u200b\u5143\u7ec4\u200b\u652f\u6301\u200b\u5d4c\u5957\u200b\u3002\u200b\u5355\u200b\u5143\u7d20\u200b\u5143\u7ec4\u200b\u7684\u200b\u8bed\u6cd5\u200b\u4e3a\u200b(<value>,)
\u3002 - \u200b\u6570\u7ec4\u200b\u5207\u7247\u200b\uff1a
&<parent>[<start>..<end>]
\uff0c\u200b\u6ce8\u610f\u200b\u5207\u7247\u200b\u662f\u200b\u5bf9\u200b<parent>
\u200b\u7684\u200b\u5f15\u7528\u200b\uff0c\u200b\u662f\u200b\u5f15\u7528\u200b\u7c7b\u578b\u200b\u3002\u200b\u5143\u7ec4\u200b\u4e0d\u200b\u652f\u6301\u200b\u5207\u7247\u200b\uff0c\u200b\u53ea\u80fd\u200b\u7528\u200b.0
\u3001.1
\u200b\u7b49\u200b\u6765\u200b\u8bbf\u95ee\u200b\u5143\u7d20\u200b\uff0c\u200b\u7c7b\u578b\u200b\u4e3a\u200b[T]
\u3002
- \u200b\u8fed\u4ee3\u200b\u5668\u200b\uff0c\u200b\u901a\u5e38\u200b\u7531\u200b\u5bb9\u5668\u200b\u5bf9\u8c61\u200b\u7684\u200b
iter()
\u200b\u65b9\u6cd5\u200b\u751f\u6210\u200b\u3002 - \u200b\u51fd\u6570\u200b\uff1a\u200b\u9700\u8981\u200b\u7528\u200b
fn(arg1: type1, ...) -> return_type
\u200b\u8868\u793a\u200b\uff0c\u200b\u51fd\u6570\u200b\u4ee5\u200b\u5f15\u7528\u200b\u7684\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\u3002
"},{"location":"coding/rust/1/#_3","title":"\u6574\u6570\u200b\u7c7b\u578b","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u6574\u6570\u200b\u5b57\u9762\u200b\u91cf\u200b\u6709\u200b\u5982\u4e0b\u200b\u5199\u6cd5\u200b\uff1a
- \u200b\u5341\u8fdb\u5236\u200b\uff1a
123_456
- \u200b\u5341\u516d\u8fdb\u5236\u200b\uff1a
0x123
\uff0c0x
\u200b\u5f00\u5934\u200b\uff0c\u200b\u6570\u5b57\u200b\u4e3a\u200b0-9
\u200b\u548c\u200ba-f
- \u200b\u516b\u8fdb\u5236\u200b\uff1a
0o123
\uff0c0o
\u200b\u5f00\u5934\u200b\uff0c\u200b\u6570\u5b57\u200b\u4e3a\u200b0-7
- \u200b\u4e8c\u8fdb\u5236\u200b\uff1a
0b101
\uff0c0b
\u200b\u5f00\u5934\u200b\uff0c\u200b\u6570\u5b57\u200b\u4e3a\u200b0
\u200b\u548c\u200b1
- \u200b\u5b57\u8282\u200b\uff1a
b'A'
- \u200b\u4e0b\u5212\u7ebf\u200b
_
\u200b\u7c7b\u4f3c\u200b\u4e8e\u200b\u5343\u4f4d\u200b\u5206\u9694\u7b26\u200b\uff0c\u200b\u5b58\u5728\u200b\u4e0e\u5426\u200b\u4e0d\u200b\u5f71\u54cd\u200b\u6570\u5b57\u200b\u7684\u200b\u503c\u200b
\u200b\u6574\u6570\u200b\u6ea2\u51fa\u200b
\u200b\u5728\u200bDebug\u200b\u6a21\u5f0f\u200b\u4e0b\u200b\uff0cRust\u200b\u4f1a\u200b\u68c0\u67e5\u200b\u6574\u6570\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u5982\u679c\u200b\u53d1\u751f\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u7a0b\u5e8f\u200b\u4f1a\u200bpanic\u3002\u200b\u5728\u200bRelease\u200b\u6a21\u5f0f\u200b\u4e0b\u200b\uff0cRust\u200b\u4e0d\u4f1a\u200b\u68c0\u67e5\u200b\u6574\u6570\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u6ea2\u51fa\u200b\u540e\u200b\u4f1a\u200b\u6309\u7167\u200b\u4e8c\u8fdb\u5236\u200b\u8865\u7801\u200b\u8fdb\u884c\u200b\u5faa\u73af\u200b\u3002
\u200b\u6574\u6570\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
- \u200b\u4e0b\u6587\u200b\u4e2d\u200b\u7684\u200b
*
\u200b\u6307\u200badd
\u3001sub
\u3001mul
\u3001div
\u200b\u7b49\u200b\u8fd0\u7b97\u200b wrapping_*
\uff1a\u200b\u5982\u679c\u200b\u8fd0\u7b97\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u5219\u200b\u53d6\u200b\u6ea2\u51fa\u200b\u540e\u200b\u7684\u200b\u503c\u200b\u3002 checked_*
\uff1a\u200b\u5982\u679c\u200b\u8fd0\u7b97\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bNone
\u3002 saturating_*
\uff1a\u200b\u5982\u679c\u200b\u8fd0\u7b97\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200b\u76ee\u6807\u200b\u7c7b\u578b\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u6216\u200b\u6700\u5c0f\u503c\u200b\u3002 -
overflowing_*
\uff1a\u200b\u8fd4\u56de\u200b\u8fd0\u7b97\u200b\u7ed3\u679c\u200b\u548c\u200b\u662f\u5426\u200b\u6ea2\u51fa\u200b\u7684\u200b\u6807\u8bb0\u200b
let a: i32 = 1;\nlet b: i32 = 2;\nlet (c, overflow) = a.overflowing_add(b);\nprintln!(\"{} {}\", c, overflow); // 3 false\n
"},{"location":"coding/rust/1/#_4","title":"\u6d6e\u70b9\u6570\u200b\u7c7b\u578b","text":" - \u200b\u6d6e\u70b9\u6570\u200b\u6ca1\u6709\u200b\u5b9e\u73b0\u200b
Eq
trait\uff0c\u200b\u56e0\u6b64\u200b\u4e0d\u80fd\u200b\u76f4\u63a5\u200b\u7528\u200b==
\u200b\u548c\u200b!=
\u200b\u6765\u200b\u6bd4\u8f83\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u80fd\u200b\u4f5c\u4e3a\u200b\u5b57\u5178\u200b\u7684\u200b\u952e\u200b\u3002 - \u200b\u6570\u5b66\u200b\u4e0a\u200b\u65e0\u200b\u5b9a\u4e49\u200b\u7684\u200b\u8fd0\u7b97\u200b\uff0c\u200b\u5982\u200b
0.0 / 0.0
\uff0cRust\u200b\u4f1a\u200b\u8fd4\u56de\u200bNaN
\uff08Not a Number\uff09\u3002\u200b\u4e0e\u200bNaN
\u200b\u7684\u200b\u8fd0\u7b97\u200b\u7ed3\u679c\u200b\u603b\u662f\u200bNaN
\uff0c\u200b\u5e76\u4e14\u200bNaN
\u200b\u4e0d\u80fd\u200b\u53c2\u4e0e\u200b\u6bd4\u8f83\u200b\u8fd0\u7b97\u200b\u3002 - \u200b\u7531\u4e8e\u200b
NaN
\u200b\u7684\u200b\u5b58\u5728\u200b\uff0c\u200b\u6d6e\u70b9\u6570\u200b\u6ca1\u6709\u200b\u5b9e\u73b0\u200bOrd
trait\uff0c\u200b\u56e0\u6b64\u200b\u4e0d\u80fd\u200b\u76f4\u63a5\u200b\u7528\u4e8e\u200bsort()
\u200b\u7b49\u200b\u9700\u8981\u200bOrd
trait\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200bpartial_cmp().unwrap()
\u200b\u6765\u200b\u8fdb\u884c\u200b\u6bd4\u8f83\u200b\u3002 - \u200b\u7531\u4e8e\u200b\u6d6e\u70b9\u6570\u200b\u7684\u200b\u7cbe\u5ea6\u200b\u95ee\u9898\u200b\uff0c\u200b\u6d6e\u70b9\u6570\u200b\u7684\u200b\u6bd4\u8f83\u200b\u5e94\u8be5\u200b\u7528\u200b
abs()
\u200b\u548c\u200b<
\u3001>
\u200b\u6765\u200b\u8fdb\u884c\u200b\u3002
\u200b\u6d6e\u70b9\u6570\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
is_nan()
\uff1a\u200b\u5224\u65ad\u200b\u662f\u5426\u200b\u4e3a\u200bNaN
\u3002
"},{"location":"coding/rust/1/#_5","title":"\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u7c7b\u578b","text":"\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
-
len()
\uff1a\u200b\u8fd4\u56de\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u3002
let s = \"hello\";\nprintln!(\"{}\", s.len()); // 5\n
-
lines()
\uff1a\u200b\u6309\u200b\u6362\u884c\u7b26\u200b\\n
\u200b\u5206\u5272\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u8fd4\u56de\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002
let s = \"hello\\nworld\";\nfor line in s.lines() {\n println!(\"{}\", line);\n}\n
-
split()
\uff1a\u200b\u6309\u200b\u7ed9\u5b9a\u200b\u5b57\u7b26\u200b\u5206\u5272\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u8fd4\u56de\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002
let s = \"hello world\";\nfor word in s.split(\" \") {\n println!(\"{}\", word);\n}\n
-
trim()
\uff1a\u200b\u53bb\u9664\u200b\u5b57\u7b26\u4e32\u200b\u9996\u5c3e\u200b\u7684\u200b\u7a7a\u767d\u200b\u5b57\u7b26\u200b\u3002
let s = \" hello world \";\nprintln!(\"{}\", s.trim()); // \"hello world\"\n
-
parse()
\uff1a\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u5176\u4ed6\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5982\u200bparse::<i32>()
\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u4e3a\u200bi32
\u200b\u7c7b\u578b\u200b\u3002\u200b\u5f53\u200b\u8f6c\u4e3a\u200b\u6570\u5b57\u200b\u65f6\u200b\uff0c\u200b\u6570\u5b57\u200b\u4e0d\u80fd\u200b\u8d85\u8fc7\u200b\u7c7b\u578b\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\uff0c\u200b\u5426\u5219\u200b\u4f1a\u200b\u62a5\u9519\u200b\u3002
let s = \"123\";\nlet n: i32 = s.parse().unwrap(); // \u200b\u8fd4\u56de\u503c\u200b\u662f\u200b`Result`\u200b\u7c7b\u578b\u200b\n
\u200b\u81ea\u5b9a\u4e49\u200b\u7c7b\u578b\u200b\u5982\u679c\u200b\u9700\u8981\u200b\u901a\u8fc7\u200bparse()
\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200bstd::str::FromStr
trait\uff0c\u200b\u53c2\u89c1\u200bImpl & Trait
-
to_string()
\uff1a\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u8f6c\u6362\u200b\u4e3a\u200bString
\u200b\u7c7b\u578b\u200b\u3002
chars()
\uff1a\u200b\u8fd4\u56de\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5b57\u7b26\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002 bytes()
\uff1a\u200b\u8fd4\u56de\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5b57\u8282\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002
"},{"location":"coding/rust/1/#_6","title":"\u5b57\u7b26\u4e32\u200b\u7c7b\u578b","text":"\u200b\u5b57\u7b26\u4e32\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
push()
\u3001push_str()
\uff1a\u200b\u5206\u522b\u200b\u7528\u4e8e\u200b\u5728\u200b\u5b57\u7b26\u4e32\u200b\u672b\u5c3e\u200b\u6dfb\u52a0\u200b\u5b57\u7b26\u200b\u548c\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u3002 insert()
\u3001insert_str()
\uff1a\u200b\u5206\u522b\u200b\u7528\u4e8e\u200b\u5728\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u63d2\u5165\u200b\u5b57\u7b26\u200b\u548c\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u3002 replace(A, B)
\u3001replacen(A, B, n)
\uff1a\u200b\u5206\u522b\u200b\u7528\u4e8e\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200bA
\u200b\u66ff\u6362\u200b\u4e3a\u200bB
\uff0creplacen
\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u6307\u5b9a\u200b\u66ff\u6362\u200b\u6b21\u6570\u200bn
\uff0c\u200b\u8fd4\u56de\u200b\u66ff\u6362\u200b\u540e\u200b\u7684\u200b\u65b0\u200b\u5b57\u7b26\u4e32\u200b\u3002 replace_range(range, A)
\uff1a\u200b\u7528\u4e8e\u200b\u5c06\u200b\u539f\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u6307\u5b9a\u200b\u8303\u56f4\u200b\u66ff\u6362\u200b\u4e3a\u200b\u65b0\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200bA
\uff0c\u200b\u8fd4\u56de\u200b\u66ff\u6362\u200b\u540e\u200b\u7684\u200b\u539f\u200b\u5b57\u7b26\u4e32\u200b\u3002 pop()
\uff1a\u200b\u5220\u9664\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5b57\u7b26\u4e32\u200b\u672b\u5c3e\u200b\u7684\u200b\u5b57\u7b26\u200b\uff0c\u200b\u5982\u679c\u200b\u5b57\u7b26\u4e32\u200b\u4e3a\u200b\u7a7a\u5219\u200b\u8fd4\u56de\u200bNone
\u3002 remove()
\uff1a\u200b\u5220\u9664\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5b57\u7b26\u200b\u3002\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u7d22\u5f15\u200b\u5fc5\u987b\u200b\u662f\u200b\u6709\u6548\u200b\u7684\u200b\u5b57\u7b26\u200b\u8fb9\u754c\u200b\u3002 truncate()
\uff1a\u200b\u5220\u9664\u200b\u4ece\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u5f00\u59cb\u200b\u5230\u200b\u5b57\u7b26\u4e32\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5168\u90e8\u200b\u5b57\u7b26\u200b\u3002 clear()
\uff1a\u200b\u6e05\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u3002 +
\u200b\u8fd0\u7b97\u7b26\u200b\uff1a\u200b\u7528\u4e8e\u200b\u8fde\u63a5\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u53f3\u7aef\u200b\u9879\u4e3a\u200b&str
\u200b\u7c7b\u578b\u200b\u3002
"},{"location":"coding/rust/1/#_7","title":"\u6570\u7ec4\u200b\u7c7b\u578b","text":"\u200b\u6570\u7ec4\u200b\u8d8a\u754c\u200b
Rust\u200b\u4f1a\u200b\u68c0\u67e5\u200b\u6570\u7ec4\u200b\u8bbf\u95ee\u200b\u8d8a\u754c\u200b\u95ee\u9898\u200b\u3002
\u200b\u6570\u7ec4\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
-
std::array::from_fn()
\uff1a\u200b\u6839\u636e\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\u751f\u6210\u200b\u6570\u7ec4\u200b\u3002
let a: [String; 8] = std::array::from_fn(|_i| String::from(\"This is Rust\"));\n
"},{"location":"coding/rust/1/#_8","title":"\u8fed\u4ee3\u200b\u5668\u200b\u7c7b\u578b","text":"\u200b\u8fed\u4ee3\u200b\u5668\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
-
map(fn)
\uff1a\u200b\u5bf9\u200b\u8fed\u4ee3\u200b\u5668\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u5e94\u7528\u200b\u51fd\u6570\u200bfn
\uff0c\u200b\u8fd4\u56de\u200b\u65b0\u200b\u7684\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002
let v = vec![1, 2, 3];\nfor i in v.iter().map(|x| x * 2) {\n print!(\"{}\", i); // 246\n}\n
-
collect()
\uff1a\u200b\u5c06\u200b\u8fed\u4ee3\u200b\u5668\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u5bb9\u5668\u200b\uff08\u200b\u5b9a\u200b\u957f\u200b\u6570\u7ec4\u200b\uff09\u3002
let v = vec![1, 2, 3];\nlet v2: Vec<i32> = v.iter().map(|x| x * 2).collect();\n
"},{"location":"coding/rust/1/#_9","title":"\u8fd0\u7b97\u7b26","text":"Rust\u200b\u7684\u200b\u8fd0\u7b97\u7b26\u200b\u4e0e\u200bC/C++\u200b\u7c7b\u4f3c\u200b
- \u200b\u56db\u5219\u8fd0\u7b97\u200b\u7b26\u200b\uff1a
+ - * / %
- \u200b\u6bd4\u8f83\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
== != > < >= <=
- \u200b\u903b\u8f91\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
&& || !
- \u200b\u4f4d\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
& | ^ << >> !
\uff08!
\u200b\u4e3a\u200b\u6309\u4f4d\u200b\u53d6\u53cd\u200b\uff09 - \u200b\u539f\u4f4d\u200b\u8d4b\u503c\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
+= -= *= /= %= &= |= ^= <<= >>=
\u200b\u7b49\u200b - \u200b\u7c7b\u578b\u8f6c\u6362\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
as
\uff0c\u200b\u5982\u200blet b = (a as f64) / 2.0;
- \u200b\u5f15\u7528\u200b\u4e0e\u200b\u89e3\u200b\u5f15\u7528\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
& &mut *
\uff0c\u200b\u5176\u4e2d\u200b&
\u200b\u7528\u4e8e\u200b\u83b7\u53d6\u200b\u53d8\u91cf\u200b\u7684\u200b\u5f15\u7528\u200b\uff08borrow\uff09\uff0c&mut
\u200b\u7528\u4e8e\u200b\u83b7\u53d6\u200b\u53d8\u91cf\u200b\u7684\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\uff0c*
\u200b\u7528\u4e8e\u200b\u89e3\u200b\u5f15\u7528\u200b\u3002
"},{"location":"coding/rust/2/","title":"Control Flows","text":"\u200b\u672c\u200b\u8282\u200b\u4ecb\u7ecd\u200bRust\u200b\u4e2d\u200b\u7684\u200b\u51fd\u6570\u200b\u548c\u200b\u63a7\u5236\u6d41\u200b\u8bed\u53e5\u200b\u3002
"},{"location":"coding/rust/2/#_1","title":"\u51fd\u6570\u200b\u4e0e\u200b\u51fd\u6570\u6307\u9488","text":"Rust\u200b\u4e2d\u200b\uff0c\u200b\u7528\u200b\u5173\u952e\u5b57\u200bfn
\u200b\u58f0\u660e\u200b\u51fd\u6570\u200b\uff0c\u200b\u51fd\u6570\u200b\u7684\u200b\u683c\u5f0f\u200b\u4e3a\u200b\uff1a
fn <function name>([<parameter name>: <parameter type>, ...]) -> [<return type>] {\n <function body>\n}\n
\u200b\u5176\u4e2d\u200b\uff0c\u200b\u51fd\u6570\u200b\u5fc5\u987b\u200b\u6307\u660e\u200b\u6240\u6709\u200b\u53c2\u6570\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u6307\u660e\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5219\u200b\u9ed8\u8ba4\u200b\u4e3a\u200b()
\uff0c\u200b\u5373\u7a7a\u200b\u5143\u7ec4\u200b\u3002\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200breturn
\u200b\u5173\u952e\u5b57\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u7684\u200b\u8868\u8fbe\u5f0f\u200b\u8fd4\u56de\u503c\u200b\u3002\u200b\u4efb\u4f55\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u5982\u679c\u200b\u901a\u8fc7\u200b\u8868\u8fbe\u5f0f\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5219\u200b\u4e0d\u80fd\u200b\u52a0\u5206\u200b\u53f7\u200b;
\u3002
Download source code
fn add(a: i32, b: i32) -> i32 {\n a + b // Return by expression\n}\nfn sub(a: i32, b: i32) -> i32 {\n return a - b; // Return by return keyword\n}\n\nfn main() {\n let (a, b) = (2, 1);\n println!(\"{} + {} = {}\", a, b, add(a, b));\n println!(\"{} - {} = {}\", a, b, sub(a, b));\n}\n
\u200b\u51fd\u6570\u6307\u9488\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e3a\u200bfn(<parameter type>, ...) -> <return type>
\uff0c\u200b\u5c06\u200b\u51fd\u6570\u200b\u8d4b\u503c\u200b\u7ed9\u200b\u51fd\u6570\u6307\u9488\u200b\u65f6\u200b\uff0c\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u548c\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u5fc5\u987b\u200b\u5168\u90e8\u200b\u5339\u914d\u200b\u3002
\u200b\u5728\u200b\u51fd\u6570\u200b\u5185\u90e8\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u58f0\u660e\u200b\u51fd\u6570\u200b\uff0c\u200b\u79f0\u4e3a\u200blambda\u200b\u51fd\u6570\u200b\uff0c\u200b\u58f0\u660e\u200b\u65b9\u5f0f\u200b\u4e3a\u200b
let <function name> = |[<parameter name>: <parameter type>, ...]| -> [<return type>] {\n <function body>\n}\n
\u200b\u5176\u4e2d\u200b\uff1a
-
\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u7c7b\u578b\u200b\u3002
let add = |a, b| { return a + b; };\n
-
\u200b\u5982\u679c\u200b\u51fd\u6570\u200b\u4f53\u200b\u53ea\u6709\u200b\u4e00\u884c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b{}
\uff0c\u200b\u6b64\u65f6\u200b\u4e0d\u80fd\u200b\u52a0\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u3002
let add = |a, b| a + b;\n
-
\u200b\u53ef\u4ee5\u200b\u5728\u200b\u58f0\u660e\u200b\u7684\u200b\u65f6\u5019\u200b\u76f4\u63a5\u200b\u8c03\u7528\u200b\uff0c\u200b\u6b64\u65f6\u200b\u4e0d\u80fd\u200b\u7701\u7565\u200b{}
\u200b\u548c\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u3002
let result = |a, b| -> i32 { a + b }(1, 2); // result = 3\n
Download source code
fn main() {\n let (a, b) = (2, 1);\n let add = |a, b| a + b;\n println!(\"{} + {} = {}\", a, b, add(a, b));\n println!(\"{} - {} = {}\", a, b, |a, b| -> i32 { return a - b; }(a, b));\n}\n
"},{"location":"coding/rust/2/#if","title":"if
\u200b\u8bed\u53e5","text":"Rust\u200b\u4e2d\u200bif
\u200b\u8bed\u53e5\u200b\u7684\u200b\u683c\u5f0f\u200b\u4e0e\u200bC/C++\u200b\u76f8\u4f3c\u200b\uff0c\u200b\u4f46\u662f\u200b\u6761\u4ef6\u200b\u8868\u8fbe\u5f0f\u200b\u4e0d\u200b\u9700\u8981\u200b\u52a0\u200b\u62ec\u53f7\u200b\u3002
if <condition> {\n <expression>\n} [ else if <condition> {\n <expression>\n} ] [ else {\n <expression>\n} ]\n
if
\u200b\u8bed\u53e5\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200b\u5728\u200b\u8868\u8fbe\u5f0f\u200b\u4e2d\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6bcf\u4e2a\u200b\u5206\u652f\u200b\u5757\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u4f5c\u4e3a\u200b\u8be5\u200b\u5206\u652f\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002\u200b\u6b64\u65f6\u200b\u6bcf\u4e2a\u200b\u5206\u652f\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u5fc5\u987b\u200b\u76f8\u540c\u200b\u3002
Download source code
fn main() {\n let (a, b) = (5, 3);\n println!(\"max({}, {}) = {}\", a, b, if a > b { a } else { b });\n if a < b {\n println!(\"min({}, {}) = {}\", a, b, a);\n } else {\n println!(\"min({}, {}) = {}\", a, b, b);\n }\n}\n
"},{"location":"coding/rust/2/#match","title":"match
\u200b\u8bed\u53e5","text":"match
\u200b\u8bed\u53e5\u200b\u7528\u4e8e\u200b\u5bf9\u200b\u53d8\u91cf\u200b\u7684\u200b\u503c\u200b\u8fdb\u884c\u200b\u6a21\u5f0f\u5339\u914d\u200b\uff0c\u200b\u683c\u5f0f\u200b\u4e3a\u200b\uff1a
match <variable> {\n <pattern> => <expression>,\n ...\n _ => <expression>\n}\n
\u200b\u5176\u4e2d\u200b\uff0c<pattern>
\u200b\u53ef\u4ee5\u200b\u662f\u200b
- \u200b\u5355\u4e2a\u200b\u6570\u503c\u200b\uff0c\u200b\u5982\u200b
5 => \"five\"
- \u200b\u8303\u56f4\u200b\uff0c\u200b\u5982\u200b
1 ..= 5 => \"one to five\"
|
\u200b\u5206\u9694\u200b\u7684\u200b\u591a\u4e2a\u200b\u6a21\u5f0f\u200b\uff0c\u200b\u5982\u200b1 | 2 | 3 => \"one to three\"
- \u200b\u6a21\u677f\u200b\u5b9e\u4f8b\u200b\uff0c\u200b\u5982\u200b
Some(x) => Some(x + 1)
_
\uff0c\u200b\u8868\u793a\u200b\u5339\u914d\u200b\u6240\u6709\u200b\u60c5\u51b5\u200b\u3002 - \u200b\u5982\u679c\u200b\u88ab\u200b\u5339\u914d\u200b\u7684\u200b\u53d8\u91cf\u200b\u662f\u200b\u5143\u7ec4\u200b\uff0c\u200b\u5219\u200b\u5143\u7ec4\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u662f\u200b\u4e0a\u8ff0\u200b\u6a21\u5f0f\u200b\u3002
- \u200b\u6761\u4ef6\u200b\u8bed\u53e5\u200b\uff0c\u200b\u5982\u200b
x if x > 5 => \"greater than five\"
\uff0c\u200b\u6b64\u65f6\u200b\u5143\u7ec4\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6574\u4f53\u200b\u53c2\u4e0e\u200b\u6761\u4ef6\u200b\u8bed\u53e5\u200b\uff0c\u200b\u5982\u200b(x, y) if x > 5 && y > 5 => \"both greater than five\"
<expression>
\u200b\u53ef\u4ee5\u200b\u662f\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u4ee3\u7801\u200b\u5757\u200b\uff0c\u200b\u6b64\u65f6\u200b\u4ee3\u7801\u200b\u5757\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u4f5c\u4e3a\u200b\u8fd4\u56de\u503c\u200b\u3002
\u200b\u6ce8\u610f\u200bmatch
\u200b\u7684\u200b\u5206\u652f\u200b\u5fc5\u987b\u200b\u5305\u62ec\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u5426\u5219\u200b\u4f1a\u200b\u62a5\u9519\u200b\u3002
Download source code
fn main() {\n let marks_paper_a: u8 = 25;\n let marks_paper_b: u8 = 30;\n\n let output = match (marks_paper_a, marks_paper_b) {\n (50, 50) => \"Full marks for both papers\",\n (50, _) => \"Full marks for paper A\",\n (_, 50) => \"Full marks for paper B\",\n (x, y) if x > 25 && y > 25 => \"Good\",\n (_, _) => \"Work hard\"\n };\n\n println!(\"{}\", output); // Work hard\n}\n
"},{"location":"coding/rust/2/#if-let","title":"if let
\u200b\u8bed\u53e5","text":"\u200b\u548c\u200bmatch
\u200b\u7c7b\u4f3c\u200b\uff0cif let
\u200b\u8bed\u53e5\u200b\u7528\u4e8e\u200b\u5339\u914d\u200b\u5355\u4e2a\u200b\u6a21\u5f0f\u200b\uff0c\u200b\u683c\u5f0f\u200b\u4e3a\u200b\uff1a
if let <pattern> = <variable> {\n <expression>\n}\n
let <pattern> = <variable>
\u200b\u53ef\u4ee5\u200b\u770b\u6210\u200b\u4e00\u4e2a\u200b\u6761\u4ef6\u200b\uff08\u200b\u4f46\u200b\u5b9e\u9645\u200b\u5e76\u200b\u4e0d\u662f\u200b\uff09\uff0c\u200b\u5982\u679c\u200b\u80fd\u200b\u5339\u914d\u200b\u5219\u200b\u5c06\u200b<variable>
\u200b\u7684\u200b\u503c\u200b\u6309\u7167\u200b<pattern>
\u200b\u8fdb\u884c\u200b\u7ed1\u5b9a\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200btrue
\uff0c\u200b\u56e0\u6b64\u200b\u4e5f\u200b\u4f1a\u200b\u6709\u200bwhile let
\u200b\u7b49\u200b\u5176\u4ed6\u200b\u8bed\u53e5\u200b\u3002
"},{"location":"coding/rust/2/#loop","title":"loop
\u200b\u8bed\u53e5","text":"loop
\u200b\u8bed\u53e5\u200b\u7528\u4e8e\u200b\u65e0\u9650\u200b\u5faa\u73af\u200b\u3002
- \u200b\u53ef\u4ee5\u200b\u7528\u200b
continue
\u200b\u8df3\u8f6c\u200b\u5230\u200b\u4e0b\u200b\u4e00\u6b21\u200b\u5faa\u73af\u200b\uff0c\u200b\u6216\u200bbreak
\u200b\u8df3\u51fa\u200b\u5faa\u73af\u200b\u3002 loop
\u200b\u53ef\u4ee5\u200b\u7528\u200bbreak <expression>
\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6240\u6709\u200bbreak
\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u5fc5\u987b\u200b\u76f8\u540c\u200b\u3002 - \u200b\u6bcf\u4e2a\u200b\u5faa\u73af\u200b\u53ef\u4ee5\u200b\u7528\u200b
'<label>: loop
\u200b\u6807\u8bb0\u200b\uff0c\u200b\u5728\u200bbreak
\u200b\u548c\u200bcontinue
\u200b\u65f6\u200b\u53ef\u4ee5\u200b\u6307\u5b9a\u200b\u8df3\u51fa\u200b/\u200b\u8df3\u8fc7\u200b\u7684\u200b\u5faa\u73af\u200b\u3002
Download source code
fn main() {\n let mut b1 = 1;\n\n let (c1, c2) = 'outer_loop: loop {\n let mut b2 = 1;\n\n 'inner_loop: loop {\n println!(\"Current Value : [{}][{}]\", b1, b2);\n\n if b1 == 2 && b2 == 2 {\n break 'outer_loop (b1, b2); // Leave outer_loop with return value\n } else if b2 == 5 {\n break; // Leave inner_loop by default\n }\n\n b2 += 1;\n }\n\n b1 += 1;\n };\n println!(\"b1 = {}, b2 = {}\", c1, c2);\n}\n
"},{"location":"coding/rust/2/#while","title":"while
\u200b\u8bed\u53e5","text":"while
\u200b\u8bed\u53e5\u200b\u7528\u4e8e\u200b\u662f\u200b\u6709\u200b\u6761\u4ef6\u200b\u7684\u200b\u5faa\u73af\u200b\uff0cwhile
\u200b\u8bed\u53e5\u200b\u4e0d\u80fd\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5176\u4ed6\u200b\u4e0e\u200bloop
\u200b\u8bed\u53e5\u200b\u76f8\u540c\u200b\u3002
while <condition> {\n <expression>\n}\n
"},{"location":"coding/rust/2/#for","title":"for
\u200b\u8bed\u53e5","text":"for
\u200b\u8bed\u53e5\u200b\u7528\u4e8e\u200b\u904d\u5386\u200b\u8fed\u4ee3\u200b\u5668\u200b\uff0c\u200b\u683c\u5f0f\u200b\u4e3a\u200b\uff1a
for <variable> in <iterator> {\n <expression>\n}\n
\u200b\u5176\u4e2d\u200b\uff0c<iterator>
\u200b\u53ef\u4ee5\u200b\u662f\u200b
start .. end
\uff0c\u200b\u8868\u793a\u200b\u4ece\u200bstart
\u200b\u5230\u200bend - 1
\u200b\u7684\u200b\u6574\u6570\u200b\u8303\u56f4\u200b\u3002 start ..= end
\uff0c\u200b\u8868\u793a\u200b\u4ece\u200bstart
\u200b\u5230\u200bend
\u200b\u7684\u200b\u6574\u6570\u200b\u8303\u56f4\u200b\u3002 - \u200b\u7531\u200b\u65b9\u6cd5\u200b
<iterable>.iter()
\u200b\u8fd4\u56de\u200b\u7684\u200b\u8fed\u4ee3\u200b\u5668\u200b\uff0c\u200b\u5982\u200b[1, 2, 3].iter()
\u3002
for
\u200b\u5faa\u73af\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u6dfb\u52a0\u200b\u6807\u7b7e\u200b\u3002
Download source code
fn main() {\n let group : [&str; 4] = [\"Mark\", \"Larry\", \"Bill\", \"Steve\"];\n\n for n in 0..group.len() { // group.len() = 4 -> 0..4 \ud83d\udc4e check group.len()on each iteration\n println!(\"Current Person : {}\", group[n]);\n }\n\n for person in group.iter() { // \ud83d\udc4d group.iter() turn the array into a simple iterator\n println!(\"Current Person : {}\", person);\n }\n}\n
\u200b\u4e25\u683c\u200b\u610f\u4e49\u200b\u4e0a\u200bfor
\u200b\u8bed\u53e5\u200b\u4e0d\u80fd\u200b\u76f4\u63a5\u200b\u904d\u5386\u200b\u5bb9\u5668\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200biter()
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002\u200b\u4f46\u200bfor
\u200b\u4f1a\u200b\u5c1d\u8bd5\u200b\u9690\u5f0f\u200b\u8c03\u7528\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e0b\u9762\u200b\u7684\u200b\u4ee3\u7801\u200b\u4e5f\u200b\u80fd\u200b\u6b63\u5e38\u200b\u6267\u884c\u200b\u3002
fn main() {\n let a = [1, 2, 3];\n for i in a {\n println!(\"{}\", i);\n }\n}\n
"},{"location":"coding/rust/3/","title":"Complex objects","text":"\u200b\u672c\u200b\u8282\u200b\u4ecb\u7ecd\u200bRust\u200b\u4e2d\u200b\u5e38\u7528\u200b\u7684\u200b\u590d\u6742\u200b\u7c7b\u578b\u200b
"},{"location":"coding/rust/3/#_1","title":"\u5bb9\u5668\u200b\u7c7b\u578b","text":""},{"location":"coding/rust/3/#vec","title":"Vec
","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u5411\u91cf\u200b\u7c7b\u578b\u200b\u662f\u200b\u957f\u5ea6\u200b\u53ef\u53d8\u200b\u7684\u200b\u6570\u7ec4\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bVec::new()
\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u7a7a\u200b\u7684\u200b\u5411\u91cf\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bvec![]
\u200b\u5b8f\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u5e26\u6709\u200b\u521d\u59cb\u503c\u200b\u7684\u200b\u5411\u91cf\u200b\u3002Vec
\u200b\u662f\u200b\u6cdb\u578b\u200b\uff0c\u200b\u4f7f\u7528\u200bVec<type>
\u200b\u53ef\u4ee5\u200b\u6307\u5b9a\u200b\u5411\u91cf\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u4e00\u4e2a\u200b\u5411\u91cf\u200b\u4e2d\u200b\u5b58\u50a8\u200b\u5143\u7d20\u200b\u7684\u200b\u7c7b\u578b\u200b\u5168\u90e8\u200b\u76f8\u540c\u200b\u3002\u200b\u5411\u91cf\u200b\u53ca\u5176\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6574\u4f53\u200b\uff0c\u200b\u5bf9\u200b\u5176\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u4e5f\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u5411\u91cf\u200b\u672c\u8eab\u200b\u65e0\u6cd5\u200b\u518d\u200b\u8fdb\u884c\u200b\u5f15\u7528\u200b\u3002
let v1 = Vec::new(); // Empty vector\nlet v2: Vec<i32> = Vec::new(); // Empty vector with type annotation\nlet v3 = vec![1, 2, 3]; // Vector with initial values\nlet v4 = vec![0; 10]; // Repeat values using colon\nlet v5 = vec![1i32, 2, 3]; // Vector with type specified to the first element\nlet v6 = Vec::with_capacity(10); // Vector with pre-allocated capacity 10\n
\u200b\u7528\u200blet mut
\u200b\u58f0\u660e\u200b\u7684\u200b\u5411\u91cf\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u4fee\u6539\u200b\u3002Vec
\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
push()
\uff1a\u200b\u5411\u200b\u5411\u91cf\u200b\u7684\u200b\u5c3e\u90e8\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b pop()
\uff1a\u200b\u4ece\u200b\u5411\u91cf\u200b\u7684\u200b\u5c3e\u90e8\u200b\u5f39\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b extend()
\uff1a\u200b\u5411\u200b\u5411\u91cf\u200b\u7684\u200b\u5c3e\u90e8\u200b\u6dfb\u52a0\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u5411\u91cf\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b reserve()
\uff1a\u200b\u8c03\u6574\u200b\u5411\u91cf\u200b\u7684\u200b\u5bb9\u91cf\u200b len()
\uff1a\u200b\u8fd4\u56de\u200b\u5411\u91cf\u200b\u7684\u200b\u957f\u5ea6\u200b capacity()
\uff1a\u200b\u8fd4\u56de\u200b\u5411\u91cf\u200b\u7684\u200b\u5bb9\u91cf\u200b\uff08\u200b\u5f53\u200b\u8d85\u51fa\u200b\u5bb9\u91cf\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u91cd\u65b0\u5206\u914d\u200b\u5185\u5b58\u7a7a\u95f4\u200b\uff09 get()
\uff1a\u200b\u8fd4\u56de\u200b\u5411\u91cf\u200b\u4e2d\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u5f15\u7528\u200b\uff0c\u200b\u5982\u679c\u200b\u7d22\u5f15\u200b\u8d8a\u754c\u200b\u5219\u200b\u8fd4\u56de\u200bNone
shrink_to_fit()
\uff1a\u200b\u5c06\u200b\u5411\u91cf\u200b\u7684\u200b\u5bb9\u91cf\u200b\u8c03\u6574\u200b\u4e3a\u200b\u5411\u91cf\u200b\u7684\u200b\u957f\u5ea6\u200b\uff0c\u200b\u91ca\u653e\u200b\u591a\u4f59\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b sort()
\u3001sort_unstable()
\uff1a\u200b\u5bf9\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b sort_by()
\u3001sort_unstable_by()
\uff1a\u200b\u5bf9\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\uff0c\u200b\u4f7f\u7528\u200b\u81ea\u5b9a\u4e49\u200b\u7684\u200b\u6bd4\u8f83\u200b\u51fd\u6570\u200b []
\u200b\u8fd0\u7b97\u7b26\u200b\uff1a\u200b\u8fd4\u56de\u200b\u5411\u91cf\u200b\u4e2d\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\uff08\u200b\u53f3\u7aef\u200b\u9879\u200b\uff09\uff0c\u200b\u6216\u8005\u200b\u4fee\u6539\u200b\u5411\u91cf\u200b\u4e2d\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\uff08\u200b\u5de6\u7aef\u200b\u9879\u200b\uff09\u3002
\u200b\u5411\u91cf\u200b\u53ca\u5176\u200b\u5f15\u7528\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u7528\u200b\u5728\u200bfor
\u200b\u5faa\u73af\u200b\u4e2d\u200b\u3002
"},{"location":"coding/rust/3/#_2","title":"\u7ed3\u6784\u200b\u4f53","text":"\u200b\u6709\u200b\u4e09\u79cd\u200b\u65b9\u6cd5\u200b\u5728\u200bRust\u200b\u4e2d\u200b\u58f0\u660e\u200b\u7ed3\u6784\u200b\u4f53\u200b\uff1a
- C\u200b\u8bed\u8a00\u200b\u98ce\u683c\u200b
- \u200b\u547d\u540d\u200b\u5143\u7ec4\u200b
- unit struct
struct CStyle {\n x: i32,\n y: i32,\n} // C-style struct with two fields\nstruct NamedTuple(i32, i32); // Named tuple struct with two fields\nstruct TypePattern(i32); // Type pattern struct with one field, can be used in `match` statement\nstruct UnitStruct; // Unit struct without fields\n
\u200b\u7528\u200bpub
\u200b\u5173\u952e\u5b57\u200b\u6807\u8bb0\u200b\u7ed3\u6784\u200b\u4f53\u540e\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\u5b57\u200b\u6bb5\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u5916\u754c\u200b\u8bbf\u95ee\u200b\u3002
"},{"location":"coding/rust/3/#_3","title":"\u679a\u4e3e\u200b\u7c7b\u578b","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b\u5173\u952e\u5b57\u200b\u4e3a\u200benum
\uff0c\u200b\u53ef\u4ee5\u200b\u5305\u542b\u200b\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u503c\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u6709\u200b\u4e0d\u540c\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b\u7684\u200b\u503c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bmatch
\u200b\u8bed\u53e5\u200b\u8fdb\u884c\u200b\u5339\u914d\u200b\u3002
enum Week {\n Monday,\n Tuesday,\n Wednesday,\n Thursday,\n Friday,\n Saturday,\n Sunday,\n} // Enum type with 7 variants\n
Rust\u200b\u4e2d\u200b\u7684\u200b\u679a\u4e3e\u200b\u5143\u7d20\u200b\u53ef\u4ee5\u200b\u662f\u200b\u4e0d\u540c\u200b\u7684\u200bpattern\uff0c\u200b\u53ef\u4ee5\u200b\u662f\u200b\u7ed3\u6784\u200b\u4f53\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u5143\u7ec4\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200bunit struct\u3002
enum IpAddr {\n V4(u8, u8, u8, u8), // Tuple\n V6{ addr: String }, // Struct\n LocalHost, // Unit\n}\n
\u200b\u8fd9\u4e9b\u200bpattern\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200bmatch
\u200b\u8bed\u53e5\u200b\u4e2d\u200b\u8fdb\u884c\u200b\u6a21\u5f0f\u5339\u914d\u200b\uff1a
Download source code
enum IpAddr {\n V4(u8, u8, u8, u8), // Tuple\n V6{ addr: String }, // Struct\n LocalHost, // Unit\n}\n\nfn main() {\n let v4 = IpAddr::V4(4, 4, 4, 4);\n let v4_invalid = IpAddr::V4(0, 0, 0, 0);\n let v6 = IpAddr::V6{ addr: String::from(\"::1\") };\n let local = IpAddr::LocalHost;\n print_ip(v4);\n print_ip(v4_invalid);\n print_ip(v6);\n print_ip(local);\n}\n\nfn print_ip(ip: IpAddr) {\n match ip {\n IpAddr::V4(a, b, c, d) if a != 0 || b != 0 || c != 0 || d != 0\n => println!(\"{}.{}.{}.{}\", a, b, c, d),\n IpAddr::V4(a, b, c, d)\n => println!(\"{}.{}.{}.{} is not an valid IPv4 address\", a, b, c, d),\n IpAddr::V6{ addr } => println!(\"{}\", addr),\n IpAddr::LocalHost => println!(\"localhost\"),\n }\n}\n
\u200b\u7528\u200bpub
\u200b\u5173\u952e\u5b57\u200b\u6807\u8bb0\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b\u540e\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\u5404\u4e2a\u200b\u5b57\u6bb5\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u5916\u754c\u200b\u8bbf\u95ee\u200b\u3002
"},{"location":"coding/rust/3/#_4","title":"\u6cdb\u578b","text":"\u200b\u6cdb\u578b\u200b\u662f\u200b\u4e00\u79cd\u200b\u7c7b\u578b\u200b\u6a21\u677f\u200b\uff0c\u200b\u5f53\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b/\u200b\u679a\u4e3e\u200b/\u200b\u7ed3\u6784\u200b\u4f53\u200b\u9700\u8981\u200b\u5904\u7406\u200b\u591a\u79cd\u7c7b\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6cdb\u578b\u200b\u3002\u200b\u6cdb\u578b\u200b\u7684\u200b\u7c7b\u578b\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u5728\u200b\u51fd\u6570\u200b\u540d\u200b\u540e\u9762\u200b\u7528\u200b\u5c16\u62ec\u53f7\u200b\u6307\u5b9a\u200b\uff0c\u200b\u4e4b\u540e\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u4e2d\u200b\u7528\u200b\u5192\u53f7\u200b\u6307\u5b9a\u200b\u6cdb\u578b\u200b\u7c7b\u578b\u200b\u3002
Download source code
fn max<T> (a: T, b: T) -> T\n where T: std::cmp::PartialOrd\n{\n if a > b { a } else { b }\n}\n\nfn main() {\n println!(\"{}\", max(1, 2)); // i32\n println!(\"{}\", max(1.0, 2.0)); // f64\n println!(\"{}\", max(\"a\", \"b\")); // &str\n}\n
Rust\u200b\u6807\u51c6\u200b\u5e93\u4e2d\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u4e9b\u200b\u5e38\u7528\u200b\u7684\u200b\u6cdb\u578b\u200b\u7c7b\u578b\u200b\uff1a
enum Option<T> {\n Some(T),\n None,\n}\n\nenum Result<T, E> {\n Ok(T),\n Err(E),\n}\n
Option<T>
\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u53ef\u80fd\u200b\u5b58\u5728\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u662f\u200bSome(T)
\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200bNone
\u3002\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bPython\u200b\u4e2d\u200b\u7684\u200bOptional
\u3002 Result<T, E>
\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u53ef\u80fd\u200b\u51fa\u9519\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5982\u679c\u200b\u6210\u529f\u200b\u5219\u200b\u662f\u200bOk(T)
\uff0c\u200b\u5982\u679c\u200b\u5931\u8d25\u200b\u5219\u200b\u662f\u200bErr(E)
\u3002 - \u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b
match
\u200b\u8bed\u53e5\u200b\u4e2d\u200b\u8fdb\u884c\u200b\u6a21\u5f0f\u5339\u914d\u200b\u3002
"},{"location":"coding/rust/3/#impl-trait","title":"Impl & Trait","text":"\u200b\u5728\u200bRust\u200b\u4e2d\u200b\uff0cimpl
\u200b\u5173\u952e\u5b57\u200b\u7528\u4e8e\u200b\u4e3a\u200b\u7ed3\u6784\u200b\u4f53\u200b\u5b9e\u73b0\u200b\u65b9\u6cd5\u200b\uff0ctrait
\u200b\u5173\u952e\u5b57\u200b\u7528\u4e8e\u200b\u58f0\u660e\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u4e0e\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7ec4\u5408\u200b\u540e\u200b\u76f8\u5f53\u4e8e\u200bC++\u200b\u4e2d\u200b\u7684\u200b\u7c7b\u200b\u3002impl
\u200b\u53ef\u4ee5\u200b\u8131\u79bb\u200btrait
\u200b\u5355\u72ec\u200b\u4f7f\u7528\u200b\u3002
- \u200b\u5f53\u200b\u6ca1\u6709\u200b
trait
\u200b\u65f6\u200b\uff0cimpl
\u200b\u7684\u200b\u8bed\u6cd5\u200b\u4e3a\u200bimpl <struct name> { <methods>}
\uff0c\u200b\u5176\u4e2d\u200b<struct name>
\u200b\u53ef\u4ee5\u200b\u662f\u200b\u7ed3\u6784\u200b\u4f53\u540d\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u6cdb\u578b\u200b\u53c2\u6570\u200b\u3002 - \u200b\u5f53\u6709\u200b
trait
\u200b\u65f6\u200b\uff0cimpl
\u200b\u7684\u200b\u8bed\u6cd5\u200b\u4e3a\u200bimpl <trait name> for <struct name> { <methods>}
\uff0c\u200b\u5176\u4e2d\u200b<trait name>
\u200b\u662f\u200b\u5bf9\u5e94\u200b\u7684\u200btrait
\u200b\u540d\u200b\uff0c<struct name>
\u200b\u662f\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200b\u8be5\u200btrait
\u200b\u7684\u200b\u7ed3\u6784\u200b\u4f53\u540d\u200b\u3002 - \u200b\u7279\u6b8a\u200b\u5bf9\u8c61\u200b
self
\u200b\u8868\u793a\u200b\u5f53\u524d\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u5b9e\u4f8b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4ee5\u200b\u5f15\u7528\u200b\uff08&self
\u3001&mut self
\uff09\u200b\u6216\u200b\u81ea\u8eab\u200b\u5f62\u6001\u200b\uff08self
\uff09\u200b\u51fa\u73b0\u200b\u3002\u200b\u5982\u679c\u200b\u4e0d\u200b\u4f7f\u7528\u200bself
\uff0c\u200b\u5219\u200b\u4e3a\u200b\u9759\u6001\u65b9\u6cd5\u200b/\u200b\u7c7b\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bPython\u200b\u4e2d\u200b\u7684\u200b@staticmethod
\u200b\u6216\u200b@classmethod
\u3002\u200b\u6b64\u65f6\u200b\u9700\u8981\u200b\u7528\u200b<struct>::<method>
\u200b\u8c03\u7528\u200b\uff0c\u200b\u800c\u200b\u4e0d\u662f\u200b<object>.<method>
\u3002 - \u200b\u7279\u6b8a\u200b\u7c7b\u578b\u200b
Self
\u200b\u8868\u793a\u200b\u5f53\u524d\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u7c7b\u578b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u7684\u200b\u58f0\u660e\u200b\u3002
\u200b\u5b64\u513f\u200b\u89c4\u5219\u200b
\u200b\u5982\u679c\u200b\u9700\u8981\u200b\u5bf9\u200b\u7c7b\u578b\u200bA
\u200b\u5b9e\u73b0\u200b\u7279\u5f81\u200bT
\uff0c\u200b\u5219\u200bT
\u200b\u6216\u200bA
\u200b\u5176\u4e2d\u200b\u4e4b\u4e00\u200b\u5fc5\u987b\u200b\u5728\u200b\u5f53\u524d\u200b\u4f5c\u7528\u57df\u200b\u5185\u200b\u5b9a\u4e49\u200b\u3002
struct Player {\n first_name: String,\n last_name: String,\n}\n\ntrait GetFullName {\n fn full_name(&self) -> String;\n}\n\nimpl GetFullName for Player {\n fn full_name(&self) -> String {\n format!(\"{} {}\", self.first_name, self.last_name)\n }\n}\n\nfn main() {\n let player_1 = Player {\n first_name: \"Rafael\".to_string(),\n last_name: \"Nadal\".to_string(),\n };\n\n println!(\"Player 01: {}\", player_1.full_name());\n}\n
trait
\u200b\u53ef\u4ee5\u200b\u548c\u200b\u6cdb\u578b\u200b\u7ed3\u5408\u200b\u4f7f\u7528\u200b\uff0cimpl
\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u5bf9\u200b\u5185\u7f6e\u200b\u7684\u200b\u7c7b\u578b\u200b\u4f7f\u7528\u200b\uff0c\u200b\u5982\u200b\uff1a
Download source code
trait From<T> {\n fn from_u8(x: T) -> Self;\n}\nimpl From<u8> for u8 {\n fn from_u8(x: u8) -> Self {\n x\n }\n}\nimpl From<u8> for u16 {\n fn from_u8(x: u8) -> Self {\n x as u16\n }\n}\nimpl From<u8> for i8 {\n fn from_u8(x: u8) -> Self {\n x as i8\n }\n}\nimpl From<u8> for i16 {\n fn from_u8(x: u8) -> Self {\n x as i16\n }\n}\n\nfn main() {\n println!(\"{}\", i16::from_u8(1 as u8));\n}\n
trait
\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u7ee7\u627f\u200b\u548c\u200b\u591a\u200b\u7ee7\u627f\u200b\u3002
trait Person {\n fn full_name(&self) -> String;\n}\n\ntrait Employee : Person { // Employee inherits from Person\n fn job_title(&self) -> String;\n}\n\ntrait ExpatEmployee : Employee + Expat { // ExpatEmployee inherits from Employee and Expat\n fn additional_tax(&self) -> f64;\n}\n
\u200b\u5728\u200btrait
\u200b\u7684\u200b\u58f0\u660e\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u7528\u200b\u51fd\u6570\u200b\u4f53\u200b\uff0c\u200b\u6b64\u65f6\u200b\u8868\u793a\u200b\u65b9\u6cd5\u200b\u7684\u200b\u9ed8\u8ba4\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u5728\u200bimpl
\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u91cd\u8f7d\u200b\u8fd9\u4e2a\u200b\u65b9\u6cd5\u200b\u3002
struct Blog {};\nstruct Tweet {};\n\npub trait Summary {\n fn summarize(&self) -> String {\n String::from(\"(Read more...)\")\n }\n}\n\nimpl Summary for Blog {} // Use default implementation\nimpl Summary for Tweet {\n fn summarize(&self) -> String { // Override default implementation\n String::from(\"Tweet\")\n }\n}\n
"},{"location":"coding/rust/3/#_5","title":"\u7279\u5f81\u200b\u7ea6\u675f","text":"\u200b\u7279\u5f81\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u7ea6\u675f\u200b\u51fd\u6570\u200b\u6216\u6cdb\u200b\u578b\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u5982\u200b
- \u200b\u51fd\u6570\u53c2\u6570\u200b\u7684\u200b\u9650\u5b9a\u200b\uff0c\u200b\u5982\u200b
fn foo(bar: impl Copy)
\u200b\u8868\u793a\u200bbar
\u200b\u53c2\u6570\u200b\u5fc5\u987b\u200b\u5b9e\u73b0\u200b\u540d\u4e3a\u200bCopy
\u200b\u7684\u200btrait
\u3002 - \u200b\u6cdb\u578b\u200b\u53c2\u6570\u200b\u7684\u200b\u9650\u5b9a\u200b\uff0c\u200b\u5982\u200b
<T: Copy>
\u200b\u8868\u793a\u200bT
\u200b\u5fc5\u987b\u200b\u5b9e\u73b0\u200b\u540d\u4e3a\u200bCopy
\u200b\u7684\u200btrait
\uff0c\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u66f4\u200b\u590d\u6742\u200b\u7684\u200b\u7c7b\u578b\u200b\u63a7\u5236\u200b\u3002
\u200b\u4f7f\u7528\u200b+
\u200b\u8fde\u63a5\u200b\u591a\u4e2a\u200b\u7279\u5f81\u200b\uff0c\u200b\u8868\u793a\u200b\u53c2\u6570\u200b\u5fc5\u987b\u200b\u540c\u65f6\u200b\u5b9e\u73b0\u200b\u591a\u4e2a\u200b\u7279\u5f81\u200b\u3002
fn foo<T: Copy + Display>(bar: T) {\n println!(\"{}\", bar); // `bar` must implement `Display` and `Copy`\n}\n
\u200b\u4f7f\u7528\u200bwhere
\u200b\u5173\u952e\u5b57\u200b\u53ef\u4ee5\u200b\u4f7f\u200b\u7279\u5f81\u200b\u7ea6\u675f\u200b\u66f4\u52a0\u200b\u6e05\u6670\u200b\u3002
fn foo<T, U>(bar: T, baz: U) -> U\n where T: Copy + Display,\n U: Add<Output = U>\n{\n println!(\"{}\", bar); // `bar` must implement `Display` and `Copy`\n baz + 1 // `baz` must implement `Add`\n}\n
\u200b\u7279\u5f81\u200b\u7ea6\u675f\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u200b\u5728\u200bimpl
\u200b\u8bed\u53e5\u200b\u4e2d\u200b\u7528\u4e8e\u200b\u9009\u62e9\u6027\u200b\u5730\u200b\u5b9e\u73b0\u200b\u7279\u5f81\u200b
trait Increment {\n fn increment(&self) -> Self;\n}\n\nimpl<T> Increment for T\n where T: Add<Output = T> + Copy\n{\n fn increment(&self) -> Self {\n *self + 1\n }\n}\n
\u200b\u8868\u793a\u200bIncrement
\u200b\u7279\u5f81\u200b\u53ea\u80fd\u200b\u7528\u4e8e\u200b\u540c\u65f6\u200b\u5b9e\u73b0\u200b\u4e86\u200bAdd<Output = T>
\u200b\u548c\u200bCopy
\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002
\u200b\u7279\u5f81\u200b\u7ea6\u675f\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u9650\u5b9a\u200b\uff0c\u200b\u53ea\u80fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u7279\u5f81\u200b\uff0c\u200b\u8868\u793a\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u5b9e\u73b0\u200b\u4e86\u200b\u7279\u5b9a\u200b\u7279\u5f81\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u4f46\u200b\u51fd\u6570\u200b\u4f53\u200b\u5185\u90e8\u200b\u4e0d\u80fd\u200b\u8fd4\u56de\u200b\u591a\u4e2a\u200b\u4e0d\u540c\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002
fn foo(x: bool) -> impl Display {\n if x {\n 1\n } else {\n \"hello\" // Error, since 1 and \"hello\" have different types\n }\n}\n
"},{"location":"coding/rust/4/","title":"Lifetimes","text":"\u200b\u5728\u200bRust\u200b\u4e2d\u200b\uff0c\u200b\u5bf9\u8c61\u200b\u751f\u547d\u5468\u671f\u200b\u548c\u200b\u6240\u6709\u6743\u200b\u662f\u200b\u7d27\u5bc6\u200b\u76f8\u5173\u200b\u7684\u200b\u3002\u200b\u6240\u6709\u6743\u200b\u89c4\u5219\u200b\u662f\u200bRust\u200b\u7684\u200b\u6838\u5fc3\u200b\u7279\u6027\u200b\uff0c\u200b\u4e5f\u200b\u662f\u200bRust\u200b\u4e0e\u200b\u5176\u4ed6\u200b\u8bed\u8a00\u200b\u6700\u5927\u200b\u7684\u200b\u4e0d\u540c\u4e4b\u5904\u200b\u3002
"},{"location":"coding/rust/4/#ownership","title":"\u6240\u6709\u6743\u200b\uff08Ownership\uff09","text":"\u200b\u6bcf\u200b\u4e00\u5757\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u90fd\u200b\u548c\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u540d\u200b\u7ed1\u5b9a\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u53d8\u91cf\u540d\u200b\u5c31\u662f\u200b\u8fd9\u5757\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u7684\u200b\u6240\u6709\u8005\u200b\u3002\u200b\u5f53\u200b\u6240\u6709\u8005\u200b\u8d85\u51fa\u200b\u4f5c\u7528\u57df\u200b\u65f6\u200b\uff0c\u200b\u8fd9\u5757\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u5c31\u200b\u4f1a\u200b\u88ab\u200b\u91ca\u653e\u200b\u3002\u200b\u5728\u200b\u672c\u8282\u200b\u4e2d\u200b\uff0c\u201c\u200b\u53d8\u91cf\u200b\u201d\u200b\u548c\u200b\u201c\u200b\u7ed1\u5b9a\u200b\u201d\u200b\u90fd\u200b\u662f\u200b\u6307\u200b\u901a\u8fc7\u200blet
\u200b\u5173\u952e\u5b57\u200b\u58f0\u660e\u200b\u7684\u200b\u53d8\u91cf\u200b\u3002
\u200b\u5f53\u200b\u4f7f\u7528\u200b=
\u200b\u5c06\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\u8d4b\u503c\u200b\u7ed9\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\uff0c\u200b\u6216\u662f\u200b\u5c06\u200b\u53d8\u91cf\u200b\u4f5c\u4e3a\u200b\u51fd\u6570\u200b\u53c2\u6570\u4f20\u9012\u200b\u65f6\u200b\uff0c\u200b\u6240\u6709\u6743\u200b\u4f1a\u200b\u53d1\u751f\u200b\u8f6c\u79fb\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b\u4e24\u79cd\u200b\u53ef\u80fd\u200b\uff1a
- \u200b\u503c\u200b\u62f7\u8d1d\u200b\uff1a\u200b\u539f\u6765\u200b\u7684\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u4f1a\u200b\u88ab\u200b\u590d\u5236\u200b\u4e00\u4efd\u200b\u7ed9\u200b\u65b0\u200b\u7684\u200b\u53d8\u91cf\u200b\uff0c\u200b\u4e24\u4e2a\u200b\u53d8\u91cf\u540d\u200b\u7ed1\u5b9a\u200b\u7684\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u4e0d\u540c\u200b\u3002
- \u200b\u503c\u200b\u79fb\u52a8\u200b\uff1a\u200b\u539f\u6765\u200b\u7684\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u4f1a\u200b\u88ab\u200b\u91cd\u65b0\u200b\u7ed1\u5b9a\u200b\u7ed9\u200b\u65b0\u200b\u7684\u200b\u53d8\u91cf\u200b\uff0c\u200b\u6b64\u65f6\u200b\u4e0d\u80fd\u200b\u518d\u200b\u901a\u8fc7\u200b\u539f\u6765\u200b\u7684\u200b\u53d8\u91cf\u540d\u200b\u8bbf\u95ee\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u3002
\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cRust\u200b\u4f1a\u200b\u91c7\u53d6\u200b\u503c\u200b\u79fb\u52a8\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u8d4b\u503c\u200b\uff0c\u200b\u9664\u975e\u200b\u5bf9\u8c61\u200b\u7684\u200b\u7c7b\u578b\u200b\u5b9e\u73b0\u200b\u4e86\u200bCopy
trait\u3002\u200b\u5927\u591a\u6570\u200b\u57fa\u672c\u200b\u7c7b\u578b\u200b\u90fd\u200b\u5b9e\u73b0\u200b\u4e86\u200bCopy
trait\u3002
fn main() {\n let a = vec![1, 2, 3]; // vec is not a primitive type, and it does not implement Copy trait\n let b = a;\n println!(\"{:?} {:?}\", a, b); // Error; use of moved value: `a`\n}\n
"},{"location":"coding/rust/4/#borrowing","title":"\u5f15\u7528\u200b\uff08Borrowing\uff09","text":"\u200b\u5728\u200bRust\u200b\u4e2d\u200b\uff0c\u200b\u53d8\u91cf\u200b\u7684\u200b\u5f15\u7528\u200b\u6709\u200b\u4e24\u79cd\u200b\uff0c\u200b\u5373\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\uff08&T
\uff09\u200b\u548c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\uff08&mut T
\uff09\u3002\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\u548c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u90fd\u200b\u662f\u200b\u6307\u5411\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u7684\u200b\u6307\u9488\u200b\uff0c\u200b\u4f46\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u4fee\u6539\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u800c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u5141\u8bb8\u200b\u4fee\u6539\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u7684\u200b\u503c\u200b\u3002\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u53ea\u80fd\u200b\u6307\u5411\u200b\u53ef\u53d8\u200b\u53d8\u91cf\u200b\u3002\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u89e3\u200b\u5f15\u7528\u200b\u8fd0\u7b97\u7b26\u200b*
\u200b\u6765\u200b\u8bbf\u95ee\u200b\u5f15\u7528\u200b\u6307\u5411\u200b\u7684\u200b\u503c\u200b\u3002
fn main() {\n let const_var = 5;\n let mutable_ref = &mut const_var;\n // error[E0596]: cannot borrow `const_var` as mutable, as it is not declared as mutable\n}\n
\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u662f\u4ece\u200b\u5f15\u7528\u200b\u58f0\u660e\u200b\u5f00\u59cb\u200b\u5230\u200b\u5f15\u7528\u200b\u6700\u540e\u200b\u4e00\u6b21\u200b\u4f7f\u7528\u200b\u7ed3\u675f\u200b\u3002\u200b\u5173\u4e8e\u200b\u5f15\u7528\u200b\u7684\u200b\u4f7f\u7528\u200b\u6709\u200b\u5982\u4e0b\u200b\u9650\u5236\u200b\uff1a
-
\u200b\u5728\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u5185\u200b\uff0c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u548c\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\u4e0d\u80fd\u200b\u540c\u65f6\u200b\u5b58\u5728\u200b\u3002
\u200b\u9519\u8bef\u200b\u6b63\u786e\u200b fn main() {\n let mut owner = 5;\n let shared_borrow = &owner; // share_borrow starts here\n let mutable_borrow = &mut owner; // mutable_borrow starts here\n println!(\"{}\", mutable_borrow); // Error\n // mutable_borrow ends here\n println!(\"{}\", shared_borrow);\n // share_borrow ends here\n}\n
fn main() {\n let mut owner = 5;\n let shared_borrow = &owner; // shared_borrow starts here\n println!(\"{}\", shared_borrow);\n // shared_borrow ends here\n // mutable_borrow starts here\n let mutable_borrow = &mut owner; // mutable_borrow starts here\n println!(\"{}\", mutable_borrow);\n // mutable_borrow ends here\n}\n
-
\u200b\u5728\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u5185\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u5bf9\u200b\u540c\u4e00\u200b\u53d8\u91cf\u200b\u58f0\u660e\u200b\u65b0\u200b\u7684\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u3002
\u200b\u9519\u8bef\u200b\u6b63\u786e\u200b fn main() {\n let mut owner = 5;\n let mutable_borrow = &mut owner;\n let another_mutable_borrow = &mut owner;\n println!(\"{} {}\", mutable_borrow, another_mutable_borrow);\n // error[E0499]: cannot borrow `owner` as mutable more than once at a time\n}\n
fn main() {\n let mut owner = 5;\n let mutable_borrow = &mut owner;\n println!(\"{}\", mutable_borrow);\n let another_mutable_borrow = &mut owner;\n println!(\"{}\", another_mutable_borrow);\n}\n
-
\u200b\u5728\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u5185\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u8bbf\u95ee\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u6216\u200b\u5bf9\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u8fdb\u884c\u200b\u8d4b\u503c\u200b\u3002
\u200b\u9519\u8bef\u200b\u6b63\u786e\u200b fn main() {\n let mut owner = 5;\n let mutable_borrow = &mut owner;\n println!(\"{}\", owner + *mutable_borrow);\n // error[E0503]: cannot use `owner` because it was mutably borrowed\n}\n
fn main() {\n let mut owner = 5;\n let mutable_borrow = &mut owner;\n println!(\"{}\", *mutable_borrow + owner); // 10\n}\n
-
\u200b\u53ef\u4ee5\u200b\u7528\u200b\u6570\u636e\u5e93\u200b\u4e2d\u200b\u201c\u200b\u5171\u4eab\u200b\u9501\u200b\u201d\u200b\u548c\u200b\u201c\u200b\u6392\u200b\u4ed6\u200b\u9501\u200b\u201d\u200b\u7684\u200b\u6982\u5ff5\u200b\u6765\u200b\u7406\u89e3\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\u548c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u3002\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\u76f8\u5f53\u4e8e\u200b\u5bf9\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u52a0\u200b\u5171\u4eab\u200b\u9501\u200b\uff0c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u76f8\u5f53\u4e8e\u200b\u5bf9\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u52a0\u6392\u200b\u4ed6\u9501\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u540c\u200b\u4e00\u5757\u200b\u6570\u636e\u200b\uff0c\u200b\u5171\u4eab\u200b\u9501\u200b\u53ef\u4ee5\u200b\u540c\u65f6\u200b\u5b58\u5728\u200b\uff0c\u200b\u4f46\u6392\u200b\u4ed6\u200b\u9501\u200b\u53ea\u80fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u3002
-
\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u4e0d\u80fd\u200b\u8d85\u8fc7\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u3002
E0597: ... does not live long enoughE0515: cannot return value referencing local variable ... struct Foo<'a> {\n x: Option<&'a u32>,\n}\n\nfn main() {\n let mut x = Foo { x: None };\n {\n let y = 0;\n x.x = Some(&y);\n } // Leaving the scope of y, y is dropped\n println!(\"{:?}\", x.x) // error[E0597]: `y` does not live long enough\n}\n
fn one(x: &i32) -> &i32 {\n let ret = *x + 1;\n &ret // error[E0515]: cannot return value referencing local variable `ret`\n} // Leaving the scope of ret, ret is dropped\n\nfn main() {\n println!(\"{}\", *one(&5));\n}\n
"},{"location":"coding/rust/4/#_1","title":"\u751f\u547d\u5468\u671f","text":"\u200b\u5f15\u7528\u200b\u76f8\u5f53\u4e8e\u200b\u6307\u5411\u200b\u4e00\u6bb5\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u7684\u200b\u6307\u9488\u200b\uff0c\u200b\u5728\u200b\u6700\u540e\u200b\u4e00\u6b21\u200b\u8bbf\u95ee\u200b\u5f15\u7528\u200b\u540e\u200b\uff0c\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u5c31\u200b\u7ed3\u675f\u200b\u4e86\u200b\uff0c\u200b\u4f46\u200b\u5728\u200b\u4e00\u4e9b\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u9700\u8981\u200b\u7ee7\u7eed\u200b\u4fdd\u6301\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\uff0c\u200b\u6bd4\u5982\u200b\u5728\u200b\u51fd\u6570\u200b\u4e2d\u200b\u8fd4\u56de\u200b\u5f15\u7528\u200b\u3002\u200b\u5728\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u6765\u200b\u6307\u5b9a\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u3002
fn main() {\n let reference_to_nothing = dangle();\n // error[E0106]: missing lifetime specifier\n}\n\nfn dangle() -> &String {\n let s = String::from(\"hello\");\n\n &s // The lifetime of s is over, so this reference is dangling\n}\n
\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u6cdb\u578b\u200b\u53c2\u6570\u200b\u3001\u200b\u51fd\u6570\u53c2\u6570\u200b\u3001\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u800c\u200b\u4e0d\u80fd\u200b\u7528\u4e8e\u200b\u5f15\u7528\u200b\u58f0\u660e\u200b\u3002\u200b\u6709\u200b\u76f8\u540c\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u7684\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u76f8\u540c\u200b\u3002'static
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u7279\u6b8a\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\uff0c\u200b\u8868\u793a\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u662f\u200b\u6574\u4e2a\u200b\u7a0b\u5e8f\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\uff0c\u200b\u5373\u200b\u5f15\u7528\u200b\u6307\u5411\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u5728\u200b\u7a0b\u5e8f\u200b\u7ed3\u675f\u200b\u65f6\u624d\u200b\u4f1a\u200b\u88ab\u200b\u91ca\u653e\u200b\u3002\u200b\u6240\u6709\u200b\u6307\u5411\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u7684\u200b\u5f15\u7528\u200b\u90fd\u200b\u662f\u200b'static
\u200b\u7c7b\u578b\u200b\u3002
\u200b\u51fd\u6570\u200b\u590d\u6742\u200b\u5bf9\u8c61\u200bImpl & Trait\u200b\u6cdb\u578b\u200b fn function<'a>() -> &'a str {}\nfn function<'a>(x: &'a str) {}\nfn function<'a>(x: &'a str) -> &'a str {}\nfn function<'a>(x: &'a str, y: &'a str) -> &'a str {}\nfn function<'a, 'b>(x: &'a str, y: &'b str) -> &'a str {}\n
enum Enum<'a> {\n Variant1(&'a str),\n Variant2(&'a str) // exist as long as parent object exists\n}\nstruct Struct<'a> {\n field: &'a str // exist as long as parent object exists\n}\n
struct Struct<'a> {\n field: &'a str\n}\ntrait New<'a> {\n fn new() -> Self;\n}\nimpl<'a> New<'a> for Struct<'a> {\n fn new() -> Self {\n Struct { field: \"hello\" }\n }\n}\n
fn function<T>(x: T) where for<'a> T: Fn(&'a str) -> &'a str {}\nenum Enum<T> where for<'a> T: Fn(&'a str) -> &'a str { V(T) }\nstruct Struct<T> where for<'a> T: Fn(&'a str) -> &'a str { field: T }\nimpl<T> Struct<T> where for<'a> T: Fn(&'a str) -> &'a str {\n fn function(&self) -> &F { &self.field }\n}\n
\u200b\u5176\u4e2d\u200b\uff0cwhere for
\u200b\u6709\u200b\u53e6\u200b\u4e00\u79cd\u200b\u5199\u6cd5\u200b
fn function<T>(x: T) where T: for<'a> Fn(&'a str) -> &'a str {}\n
for
\u200b\u5bf9\u200bT
\u200b\u8fdb\u884c\u200b\u4e86\u200b\u9650\u5236\u200b\uff0c\u200b\u8868\u793a\u200bT
\u200b\u5fc5\u987b\u200b\u662f\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u4e14\u200b\u8fd9\u4e2a\u200b\u51fd\u6570\u200b\u7684\u200b\u53c2\u6570\u200b\u548c\u200b\u751f\u547d\u5468\u671f\u200b\u5fc5\u987b\u200b\u548c\u200b\u6a21\u677f\u200b\u5339\u914d\u200b\u3002
struct Closure<F> {\n data: (u8, u16),\n func: F,\n}\n\nimpl<F> Closure<F>\n where for<'a> F: Fn(&'a (u8, u16)) -> &'a u8,\n{\n fn call(&self) -> &u8 {\n (self.func)(&self.data)\n }\n}\n\nfn do_it(data: &(u8, u16)) -> &u8 { &data.0 }\n\nfn main() {\n let clo = Closure { data: (0, 1), func: do_it };\n println!(\"{}\", clo.call());\n}\n
\u200b\u4e0d\u540c\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u7684\u200b\u5f15\u7528\u200b\u4e0d\u80fd\u200b\u76f8\u4e92\u200b\u8d4b\u503c\u200b\uff0c\u200b\u5728\u200b\u4f5c\u4e3a\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\u65f6\u200b\uff0cRust\u200b\u4e5f\u200b\u4f1a\u200b\u68c0\u67e5\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u662f\u5426\u200b\u5339\u914d\u200b\u3002\u200b\u53ef\u4ee5\u200b\u7528\u200b'a: 'b
\u200b\u6765\u200b\u7ea6\u675f\u200b'a
\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u4e0d\u77ed\u4e8e\u200b'b
\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u3002
\u200b\u9519\u8bef\u200b\u6b63\u786e\u200b\u6b63\u786e\u200b fn two_args<'a, 'b>(a: &'a mut i32, b: &'b i32) -> &'b mut i32 {\n *a += b;\n a // error: lifetime may not live long enough\n}\nfn main() {\n let mut a = 3;\n let b: &mut i32 = two_args(&mut a, &4);\n println!(\"{}\", b);\n}\n
fn two_args<'a, 'b>(a: &'a mut i32, b: &'b i32) -> &'a mut i32 {\n *a += b;\n a\n}\nfn main() {\n let mut a = 3;\n let b: &mut i32 = two_args(&mut a, &4);\n println!(\"{}\", b);\n}\n
fn two_args<'a: 'b, 'b>(a: &'a mut i32, b: &'b i32) -> &'b mut i32 {\n *a += b;\n a\n}\nfn main() {\n let mut a = 3;\n let b: &mut i32 = two_args(&mut a, &4);\n println!(\"{}\", b);\n}\n
\u200b\u901a\u5e38\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u51fd\u6570\u200b\u58f0\u660e\u200b\u4e2d\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\uff0cRust\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u63a8\u65ad\u200b\u6bcf\u4e2a\u200b\u53c2\u6570\u200b\u548c\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b
-
\u200b\u6bcf\u4e2a\u200b\u8f93\u51fa\u200b\u53c2\u6570\u200b\u90fd\u200b\u4f1a\u200b\u5206\u914d\u200b\u4e00\u4e2a\u200b\u72ec\u7acb\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u3002
\u200b\u7701\u7565\u200b\u6807\u8bb0\u200b\u663e\u793a\u200b\u6807\u8bb0\u200b fn four_args(a: &i32, b: &i32, c: &i32, d: &i32) -> i32 {\n a + b + c + d\n}\n
fn four_args<'a, 'b, 'c, 'd>(a: &'a i32, b: &'b i32, c: &'c i32, d: &'d i32) -> i32 {\n a + b + c + d\n}\n
-
\u200b\u5982\u679c\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u8f93\u5165\u200b\u53c2\u6570\u200b\uff0c\u200b\u90a3\u4e48\u200b\u8fd9\u4e2a\u200b\u53c2\u6570\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u5c31\u662f\u200b\uff08\u200b\u6240\u6709\u200b\uff09\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u3002
\u200b\u7701\u7565\u200b\u6807\u8bb0\u200b\u663e\u793a\u200b\u6807\u8bb0\u200b fn one_arg(a: &i32) -> &i32 {\n a\n}\n
fn one_arg<'a>(a: &'a i32) -> &'a i32 {\n a\n}\n
-
\u200b\u5f53\u200b\u51fd\u6570\u200b\u7684\u200b\u67d0\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200b&self
\u200b\u6216\u200b&mut self
\u200b\u65f6\u200b\uff0c\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u548c\u200b&self
\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u76f8\u540c\u200b\u3002
\u200b\u7701\u7565\u200b\u6807\u8bb0\u200b\u663e\u793a\u200b\u6807\u8bb0\u200b struct Player {\n first_name: String,\n last_name: String,\n}\n\nimpl Player {\n fn full_name(&self) -> String {\n format!(\"{} {}\", self.first_name, self.last_name)\n }\n}\n
struct Player {\n first_name: String,\n last_name: String,\n}\n\nimpl Player {\n fn full_name<'a>(&'a self) -> String {\n format!(\"{} {}\", self.first_name, self.last_name)\n }\n}\n
-
\u200b\u5982\u679c\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u4e0a\u8ff0\u200b\u6761\u4ef6\u200b\uff0c\u200b\u5219\u200b\u9700\u8981\u200b\u663e\u5f0f\u200b\u6307\u5b9a\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u3002
\u200b\u9519\u8bef\u200b\u6b63\u786e\u200b fn two_args(a: &mut i32, b: &i32) -> &mut i32 {\n *a += b;\n a // error[E0106]: missing lifetime specifier\n}\nfn main() {\n let mut a = 3;\n let b: &mut i32 = two_args(&mut a, &4);\n println!(\"{}\", b);\n}\n
fn two_args<'a, 'b>(a: &'a mut i32, b: &'b i32) -> &'a mut i32 {\n *a += b;\n a\n}\nfn main() {\n let mut a = 3;\n let b: &mut i32 = two_args(&mut a, &4);\n println!(\"{}\", b);\n}\n
"},{"location":"coding/rust/5/","title":"Error Handling","text":"\u200b\u672c\u200b\u8282\u200b\u4ecb\u7ecd\u200bRust\u200b\u7684\u200b\u5f02\u5e38\u200b\u5904\u7406\u200b\u673a\u5236\u200b\u3002
"},{"location":"coding/rust/5/#_1","title":"\u7f16\u8bd1\u5668\u200b\u9519\u8bef","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u90e8\u5206\u200b\u9519\u8bef\u200b\u53ef\u4ee5\u200b\u5728\u200b\u7f16\u8bd1\u200b\u65f6\u200b\u88ab\u200b\u68c0\u6d4b\u200b\u51fa\u6765\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u9519\u8bef\u200b\u88ab\u200b\u79f0\u4e3a\u200b\u7f16\u8bd1\u200b\u65f6\u200b\u9519\u8bef\u200b\uff08compile-time error\uff09\u3002\u200b\u4f7f\u7528\u200brustc --explain
\u200b\u53ef\u4ee5\u200b\u67e5\u770b\u200b\u7f16\u8bd1\u200b\u65f6\u200b\u9519\u8bef\u200b\u7684\u200b\u8be6\u7ec6\u4fe1\u606f\u200b\u3002
rustc --explain E0382\n# A variable was used after its contents were moved elsewhere.\n#\n# Erroneous code example:\n#\n# struct MyStruct { s: u32 }\n#\n# fn main() {\n# let mut x = MyStruct { s: 5u32 };\n# let y = x;\n# x.s = 6;\n# println!(\"{}\", x.s);\n# }\n# ...\n
"},{"location":"coding/rust/5/#panic","title":"\u5f02\u5e38\u200b\uff08Panic\uff09","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u5f02\u5e38\u200b\u88ab\u200b\u79f0\u4e3a\u200bpanic\u3002\u200b\u5f53\u200b\u7a0b\u5e8f\u200b\u53d1\u751f\u200bpanic\u200b\u65f6\u200b\uff0cRust\u200b\u4f1a\u200b\u6253\u5370\u200b\u51fa\u200b\u5f02\u5e38\u200b\u4fe1\u606f\u200b\u5e76\u200b\u9000\u51fa\u200b\u7a0b\u5e8f\u200b\u3002\u200b\u6709\u200b\u591a\u4e2a\u200b\u5b8f\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\u3002
// \u200b\u4ee5\u4e0b\u200b\u7684\u200b\u5b8f\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u63a5\u53d7\u200b\u7c7b\u4f3c\u200bprintln!\u200b\u7684\u200b\u683c\u5f0f\u5316\u200b\u5b57\u7b26\u4e32\u200b\npanic!(\"This is a panic!\");\nunimplemented!(); // \u200b\u7528\u4e8e\u200b\u6807\u8bb0\u200b\u672a\u200b\u5b9e\u73b0\u200b\u7684\u200b\u4ee3\u7801\u200b\nunreachable!(); // \u200b\u7528\u4e8e\u200b\u6807\u8bb0\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u5230\u8fbe\u200b\u7684\u200b\u5206\u652f\u200b\n\n// \u200b\u4ee5\u4e0b\u200b\u5b8f\u200b\u7528\u4e8e\u200b\u6d4b\u8bd5\u200b\nassert!(false); // \u200b\u7528\u4e8e\u200b\u6d4b\u8bd5\u200b\u8868\u8fbe\u5f0f\u200b\u662f\u5426\u200b\u4e3a\u200btrue\nassert_eq!(1, 2); // \u200b\u7528\u4e8e\u200b\u6d4b\u8bd5\u200b\u4e24\u4e2a\u200b\u8868\u8fbe\u5f0f\u200b\u7684\u200b\u503c\u200b\u662f\u5426\u200b\u76f8\u7b49\u200b\nassert_ne!(1, 1); // \u200b\u7528\u4e8e\u200b\u6d4b\u8bd5\u200b\u4e24\u4e2a\u200b\u8868\u8fbe\u5f0f\u200b\u7684\u200b\u503c\u200b\u662f\u5426\u200b\u4e0d\u200b\u76f8\u7b49\u200b\n\n// \u200b\u5728\u200bDebug\u200b\u6a21\u5f0f\u200b\u6216\u200b\u4f7f\u7528\u200b-C debug-assertions\u200b\u53c2\u6570\u200b\u65f6\u200b\uff0c\u200b\u4ee5\u4e0b\u200b\u5b8f\u624d\u200b\u4f1a\u200b\u89e6\u53d1\u200b\ndebug_assert!(false);\ndebug_assert_eq!(1, 2);\ndebug_assert_ne!(1, 1);\n
"},{"location":"coding/rust/5/#_2","title":"\u5f02\u5e38\u200b\u5904\u7406","text":"Rust\u200b\u4e2d\u200b\u5185\u7f6e\u200b\u4e86\u200b\u4e24\u4e2a\u200b\u7c7b\u578b\u200bOption<T>
\u200b\u548c\u200bResult<T, E>
\u200b\u7528\u4e8e\u200b\u5f02\u5e38\u200b\u5904\u7406\u200b\uff0c\u200b\u5176\u200b\u5b9a\u4e49\u200b\u4e3a\u200b
enum Option<T> {\n None,\n Some(T),\n}\nenum Result<T, E> {\n Ok(T),\n Err(E),\n}\n
\u200b\u4ee5\u4e0b\u200b\uff0c\u200b\u5747\u200b\u4ee5\u200bT
\u200b\u4ee3\u8868\u200bOption::Some
\u200b\u6216\u200bResult::Ok
\u200b\u7684\u200b\u7c7b\u578b\u200b\uff0cE
\u200b\u4ee3\u8868\u200bResult::Err
\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002
-
Option
\u200b\u7c7b\u578b\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u53ef\u80fd\u200b\u4e0d\u200b\u5b58\u5728\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u5e38\u7528\u200b\u4e8e\u200b\u51fd\u6570\u53c2\u6570\u200b\u3001\u200b\u7ed3\u6784\u200b\u4f53\u5b57\u200b\u6bb5\u200b\u6216\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u4f7f\u7528\u200bmatch
\u200b\u8bed\u53e5\u200b\u53ef\u4ee5\u200b\u5339\u914d\u200bOption
\u200b\u7c7b\u578b\u200b\u53d6\u503c\u200b\u7684\u200b\u4e0d\u540c\u200b\u60c5\u51b5\u200b\u3002
fn main() {\n let x: Option<i32> = Some(5);\n match x {\n Some(i) => println!(\"{}\", i),\n None => println!(\"None\"),\n }\n}\n
- \u200b\u4f7f\u7528\u200b
is_some
\u200b\u548c\u200bis_none
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5feb\u901f\u200b\u5224\u65ad\u200bOption
\u200b\u7c7b\u578b\u200b\u662f\u5426\u200b\u4e3a\u200bSome
\u200b\u6216\u200bNone
\u3002 - \u200b\u4f7f\u7528\u200b
unwrap
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5c06\u200bOption
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bT
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5982\u679c\u200bOption
\u200b\u7c7b\u578b\u200b\u4e3a\u200bNone
\uff0c\u200b\u5219\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\u3002
-
Result
\u200b\u7c7b\u578b\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u53ef\u80fd\u200b\u51fa\u9519\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u5e38\u7528\u200b\u4e8e\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\u3002Ok
\u200b\u8868\u793a\u200b\u51fd\u6570\u200b\u6267\u884c\u200b\u6210\u529f\u200b\uff0cErr
\u200b\u8868\u793a\u200b\u51fd\u6570\u200b\u6267\u884c\u200b\u5931\u8d25\u200b\u3002
fn main() {\n let x: Result<i32, &str> = Ok(5);\n match x {\n Ok(i) => println!(\"{}\", i),\n Err(e) => println!(\"{}\", e),\n }\n}\n
- \u200b\u4f7f\u7528\u200b
is_ok
\u200b\u548c\u200bis_err
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5feb\u901f\u200b\u5224\u65ad\u200bResult
\u200b\u7c7b\u578b\u200b\u662f\u5426\u200b\u4e3a\u200bOk
\u200b\u6216\u200bErr
\u3002 -
\u200b\u4f7f\u7528\u200bok
\u200b\u548c\u200berr
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5c06\u200bResult<T, E>
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bOption<T>
\u200b\u7c7b\u578b\u200b\u3002\u200b\u5982\u679c\u200b\u8c03\u7528\u200b\u7684\u200b\u65b9\u6cd5\u200b\u548c\u200bResult
\u200b\u7c7b\u578b\u200b\u7684\u200b\u53d6\u503c\u200b\u76f8\u540c\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bSome(T)
\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bNone
\u3002
fn main() {\n let x: Result<i32, &str> = Ok(5);\n let y: Option<i32> = x.ok();\n println!(\"{:?}\", y); // Some(5)\n let x: Result<i32, &str> = Err(\"error\");\n let y: Option<i32> = x.ok();\n println!(\"{:?}\", y); // None\n}\n
-
\u200b\u4f7f\u7528\u200bunwrap
\u200b\u65b9\u6cd5\u200b\u6216\u200bexpect
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5c06\u200bResult
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bT
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5982\u679c\u200bResult
\u200b\u7c7b\u578b\u200b\u4e3a\u200bErr
\uff0c\u200b\u5219\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\uff0c\u200b\u8f93\u51fa\u200b\u7684\u200b\u5f02\u5e38\u200b\u4fe1\u606f\u200b\u5bf9\u5e94\u200b\u4e8e\u200bErr
\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u6216\u200bexpect
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u53c2\u6570\u200b\u3002
fn main() {\n let x: Result<i32, &str> = Ok(5);\n let y: i32 = x.unwrap();\n println!(\"{}\", y); // 5\n let x: Result<i32, &str> = Err(\"error\");\n let y: i32 = x.unwrap(); // thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: \"error\"', src/main.rs:2:26\n println!(\"{}\", y);\n}\n
unwrap
\u200b\u65b9\u6cd5\u200b\u6709\u200b\u5982\u4e0b\u200b\u53d8\u79cd\u200b\uff1a
expect
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u6307\u5b9a\u200b\u8df3\u51fa\u200b\u5f02\u5e38\u200b\u65f6\u200b\u7684\u200b\u63d0\u793a\u4fe1\u606f\u200b\u3002 - \uff08\u200b\u4ec5\u200b
Result
\u200b\u7c7b\u578b\u200b\uff09unwrap_err
\u200b\u65b9\u6cd5\u200b\u548c\u200bexpect_err
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u4e0e\u200bunwrap
\u200b\u76f8\u53cd\u200b\uff0c\u200b\u5f53\u200bResult
\u200b\u7c7b\u578b\u200b\u4e3a\u200bOk
\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bErr
\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u3002 unwrap_or
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200bT
\u200b\u7c7b\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5728\u200bunwrap
\u200b\u65b9\u6cd5\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u8fd4\u56de\u200b\u8be5\u200b\u53c2\u6570\u200b\u3002 -
unwrap_or_default
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5728\u200bunwrap
\u200b\u65b9\u6cd5\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u8fd4\u56de\u200b\u8be5\u200b\u9ed8\u8ba4\u503c\u200b\u3002\u200b\u8be5\u200b\u65b9\u6cd5\u200b\u8981\u6c42\u200bT
\u200b\u7c7b\u578b\u200b\u5b9e\u73b0\u200b\u4e86\u200bDefault
\u200b\u7279\u6027\u200b\u3002
struct MyStruct {\n s: i32\n}\n\nfn main() {\n let a: Option<MyStruct> = None;\n println!(\"{}\", a.unwrap_or_default().s);\n // error[E0277]: the trait bound `MyStruct: Default` is not satisfied\n}\n
-
unwrap_or_else
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\uff0c\u200b\u5728\u200bunwrap
\u200b\u65b9\u6cd5\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u8fd4\u56de\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002\u200b\u5176\u4e2d\u200b\uff0cResult
\u200b\u7c7b\u578b\u200b\u7684\u200b\u95ed\u5305\u200b\u53c2\u6570\u200b\u4e3a\u200bE
\u200b\u7c7b\u578b\u200b\uff0cOption
\u200b\u7c7b\u578b\u200b\u7684\u200b\u95ed\u5305\u200b\u53c2\u6570\u200b\u4e3a\u200b()
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u9700\u8981\u200b\u548c\u200bSome
\u200b\u6216\u200bOk
\u200b\u7684\u200b\u7c7b\u578b\u200b\u76f8\u540c\u200b\u3002
fn increment(x: i32) -> i32 {\n x + 1\n}\n\nfn main() {\n let a: Result<i32, i32> = Err(2);\n println!(\"{}\", a.unwrap_or_else(increment));\n // 3\n}\n
"},{"location":"coding/rust/5/#_3","title":"\u8fd0\u7b97","text":"Rust\u200b\u53ef\u4ee5\u200b\u5728\u200b\u4e0d\u200b\u53d6\u51fa\u200bOption
\u200b\u6216\u200bResult
\u200b\u7c7b\u578b\u200b\u7684\u200b\u503c\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u5bf9\u200b\u5176\u200b\u8fdb\u884c\u200b\u8fd0\u7b97\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u4ee5\u4e0b\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8bb0\u200bA
\u200b\u4e3a\u200b\u8c03\u7528\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff0cB
\u200b\u4e3a\u200b\u65b9\u6cd5\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5373\u200bA.method(B)
\u3002
Option
\u200b\u548c\u200bResult
\u200b\u7684\u200b\u771f\u503c\u200b
\u200b\u4e0d\u59a8\u200b\u5c06\u200bOption
\u200b\u548c\u200bResult
\u200b\u7c7b\u578b\u200b\u7684\u200bSome
\u200b\u548c\u200bOk
\u200b\u89c6\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\u503c\u200bT
\u200b\u79f0\u4e3a\u200b\u771f\u503c\u200b\uff0cNone
\u200b\u548c\u200bErr
\u200b\u89c6\u4e3a\u200b\u5047\u200b\uff0cErr
\u200b\u7684\u200b\u503c\u200bE
\u200b\u89c6\u4e3a\u200b\u5047\u503c\u200b\u3002
- \u200b\u903b\u8f91\u8fd0\u7b97\u200b
A.or(B)
\u200b\u4e0e\u200bA.and(B)
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u548c\u200b\u81ea\u8eab\u200b\u7c7b\u578b\u200b\u76f8\u540c\u200b\u7684\u200b\u53c2\u6570\u200b\u3002 - \u200b\u5bf9\u4e8e\u200b
or()
\uff0c\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bB
\u200b\u503c\u200b\u3002 - \u200b\u5bf9\u4e8e\u200b
and()
\uff0c\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u5047\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u5047\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bB
\u3002
A.or_else()
\u200b\u4e3a\u200bA.or(B)
\u200b\u7684\u200b\u53d8\u79cd\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002 A.and_then()
\u200b\u4e3a\u200bA.and(B)
\u200b\u7684\u200b\u53d8\u79cd\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200b\u4e3a\u200b\u5047\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u5047\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002 - \uff08\u200b\u4ec5\u200b
Option
\u200b\u7c7b\u578b\u200b\uff09A.filter()
\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn (T) -> bool
\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u4e14\u200b\u4ee5\u200b\u5176\u200b\u771f\u503c\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u540e\u200b\u8c03\u7528\u51fd\u6570\u200b\u8fd4\u56de\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bNone
\u3002 A.map()
\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn (T) -> U
\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u540e\u200b\u8c03\u7528\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u5047\u503c\u200b\u3002\u200b\u6ce8\u610f\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e3a\u200bOption<U>
\u200b\u6216\u200bResult<U, E>
\u3002 - \uff08\u200b\u4ec5\u200b
Result
\u200b\u7c7b\u578b\u200b\uff09A.map_err()
\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn (E) -> F
\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u5047\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u5047\u503c\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u540e\u200b\u8c03\u7528\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\u3002 - \uff08\u200b\u4ec5\u200b
Option
\u200b\u7c7b\u578b\u200b\uff09A.map_or()
\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200bU
\u200b\u7c7b\u578b\u200b\u7684\u200b\u9ed8\u8ba4\u503c\u200b\u548c\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn (T) -> U
\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u540e\u200b\u8c03\u7528\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u9ed8\u8ba4\u503c\u200b\u3002 A.map_or_else()
\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn () -> U
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn (T) -> U
\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u540e\u200b\u8c03\u7528\u200b\u7b2c\u4e8c\u4e2a\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u7b2c\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002
- \uff08\u200b\u4ec5\u200b
Option
\u200b\u7c7b\u578b\u200b\uff09A.ok_or()
\u200b\u7528\u4e8e\u200b\u5c06\u200bOption
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bResult
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200bE
\u200b\u7c7b\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u53c2\u6570\u200b\u4f5c\u4e3a\u200bErr
\u200b\u7684\u200b\u503c\u200b\u3002 A.ok_or_else()
\u200b\u4e3a\u200bA.ok_or()
\u200b\u7684\u200b\u53d8\u79cd\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002
A.as_ref()
\u200b\u548c\u200bA.as_mut()
\uff0c\u200b\u7528\u4e8e\u200b\u5c06\u200bOption<T>
\u200b\u6216\u200bResult<T, E>
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u5176\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5f15\u7528\u200b\u3002\u200b\u5176\u4e2d\u200bA.as_ref()
\u200b\u8fd4\u56de\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5f15\u7528\u200b\uff0c\u200b\u5373\u200bOption<&T>
\u200b\u6216\u200bResult<&T, &E>
\uff1bA.as_mut()
\u200b\u8fd4\u56de\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\uff0c\u200b\u5373\u200bOption<&mut T>
\u200b\u6216\u200bResult<&mut T, &mut E>
\u3002
"},{"location":"coding/rust/5/#_4","title":"\u5f02\u5e38\u200b\u4f20\u9012","text":"Rust\u200b\u4e2d\u200b\uff0c\u200b\u6709\u200b\u4e24\u79cd\u200b\u65b9\u5f0f\u200b\u53ef\u4ee5\u200b\u5411\u4e0a\u200b\u8fd4\u56de\u200b\u5f02\u5e38\u200b\u3002
-
?
\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u7528\u4e8e\u200b\u5c06\u200bOption
\u200b\u6216\u200bResult
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bT
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5982\u679c\u200bResult
\u200b\u7c7b\u578b\u200b\u4e3a\u200bErr
\u200b\u6216\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200bErr
\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u3002
fn fn_with_error<'a>() -> Result<i32, &'a str> {\n Err(\"Deterministic error\")\n}\nfn use_fn<'a>() -> Result<i32, &'a str> {\n let x = fn_with_error()?; // Directly return Err(\"Deterministic error\")\n Ok(x) // unreachable\n}\nfn main() {\n let x: &str = use_fn().unwrap_err();\n println!(\"{}\", x); // Deterministic error\n}\n
-
try!
\u200b\u5b8f\u200b\uff0c\u200b\u4e0e\u200b?
\u200b\u7684\u200b\u6548\u679c\u200b\u7b49\u540c\u200b\uff0c\u200b\u4f7f\u7528\u200b\u65b9\u5f0f\u200b\u4e3a\u200btry!(expression)
\u3002\u200b\u76ee\u524d\u200b\u5df2\u7ecf\u200b\u88ab\u200b\u5f03\u7528\u200b\uff0c\u200b\u4f7f\u7528\u200b?
\u200b\u4ee3\u66ff\u200b\u3002
fn fn_with_error<'a>() -> Result<i32, &'a str> {\n Err(\"Deterministic error\")\n}\nfn use_fn<'a>() -> Result<i32, &'a str> {\n let x = try!(fn_with_error()); // error: use of deprecated `try` macro\n Ok(x) // unreachable\n}\nfn main() {\n let x: &str = use_fn().unwrap_err();\n println!(\"{}\", x); // Deterministic error\n}\n
"},{"location":"coding/rust/5/#_5","title":"\u4e3b\u200b\u51fd\u6570","text":"Rust\u200b\u7684\u200bmain
\u200b\u51fd\u6570\u200b\u53ea\u80fd\u200b\u53d6\u200b()
\u200b\u6216\u200bResult<(), E>
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5176\u4e2d\u200bE
\u200b\u4e3a\u200bstd::error::Error
\u200b\u7684\u200b\u5b9e\u73b0\u200b\u7c7b\u578b\u200b\u3002\u200b\u5982\u679c\u200bmain
\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200bResult
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u5c06\u200bErr
\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u6253\u5370\u200b\u5230\u200bstderr
\u200b\u5e76\u200b\u9000\u51fa\u200b\u7a0b\u5e8f\u200b\u3002
use std::fs::File;\n\nfn main() -> std::io::Result<()> {\n let _ = File::open(\"not-existing-file.txt\")?; // Result::Err\n\n Ok(()) // Default return value\n // Must with this line, otherwise return () which is incompatible\n}\n
\u200b\u5982\u679c\u200bmain
\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u4e0d\u662f\u200b()
\u200b\u6216\u200bResult
\uff0c\u200b\u5219\u200b\u65e0\u6cd5\u200b\u901a\u8fc7\u200b\u7f16\u8bd1\u200b\u3002
fn main() -> i32 {\n 0\n}\n// error[E0277]: `main` has invalid return type `i32`\n
"},{"location":"coding/rust/5/#_6","title":"\u81ea\u5b9a\u4e49\u200b\u5f02\u5e38","text":"\u200b\u5728\u200bRust\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u81ea\u5b9a\u4e49\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u3002\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200bstd::error::Error
\u200b\u7279\u6027\u200b\uff0c\u200b\u8be5\u200b\u7279\u6027\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4ee5\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
fn source(&self) -> Option<&(dyn Error + 'static)>
\uff0c\u200b\u7528\u4e8e\u200b\u8fd4\u56de\u200b\u5f15\u8d77\u200b\u5f02\u5e38\u200b\u7684\u200b\u539f\u56e0\u200b\uff08\u200b\u53ef\u200b\u9009\u200b\uff09\u3002 fn Debug::fmt(&self, f: &mut Formatter<'_>) -> Result
\uff0c\u200b\u7528\u4e8e\u200b\u683c\u5f0f\u5316\u200b\u5f02\u5e38\u200b\u4fe1\u606f\u200b\uff08\u200b\u7528\u4e8e\u200b\u8c03\u8bd5\u200b\uff09\u3002 fn Display::fmt(&self, f: &mut Formatter<'_>) -> Result
\uff0c\u200b\u7528\u4e8e\u200b\u683c\u5f0f\u5316\u200b\u5f02\u5e38\u200b\u4fe1\u606f\u200b\uff08\u200b\u7528\u4e8e\u200b\u8f93\u51fa\u200b\uff09\u3002
struct MyError {\n code: i32,\n message: String\n}\n\nimpl std::error::Error for MyError {\n fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {\n None\n }\n}\n\nimpl std::fmt::Debug for MyError {\n fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n write!(\n f, \"MyError {{ code: {}, message: {} }} at file {} line {}\",\n self.code, self.message, file!(), line!()\n // file!() and line!() are macros to get the current file and line\n )\n }\n}\n\nimpl std::fmt::Display for MyError {\n fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n write!(f, \"MyError {{ code: {}, message: {} }}\", self.code, self.message)\n }\n}\n\n// Use the error\n\nfn raise_error() -> Result<(), MyError> {\n Err(MyError { code: 1, message: \"Error message\".to_string() })\n}\n\nfn main() -> Result<(), MyError> {\n let _ = raise_error()?;\n // MyError { code: 1, message: Error message } at file src/main.rs line 16\n Ok(())\n}\n
"},{"location":"coding/rust/5/#_7","title":"\u5f02\u5e38\u200b\u8f6c\u6362","text":"\u200b\u7531\u4e8e\u200bRust\u200b\u4e2d\u200b\u7684\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u662f\u200b\u9759\u6001\u200b\u7684\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5728\u200b\u5f02\u5e38\u200b\u4f20\u9012\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\uff0c\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u9047\u5230\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u4e0d\u200b\u5339\u914d\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\u200b\u6b64\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bFrom
\u200b\u7279\u6027\u200b\u5c06\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200b\u53e6\u200b\u4e00\u79cd\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u4ee5\u200bstd::io::Error
\u200b\u4e3a\u4f8b\u200b\u3002
impl std::convert::From<std::io::Error> for MyError {\n fn from(error: std::io::Error) -> Self {\n MyError { code: 2, message: error.to_string() }\n }\n}\n
\u200b\u6b64\u540e\u200b\uff0c\u200b\u65e0\u9700\u200b\u663e\u5f0f\u200b\u8c03\u7528\u200bFrom
\u200b\u7279\u6027\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5373\u53ef\u200b\u5c06\u200bstd::io::Error
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bMyError
\u200b\u7c7b\u578b\u200b\u3002
"},{"location":"coding/rust/6/","title":"Supplements for Basics","text":""},{"location":"coding/rust/6/#_1","title":"\u5ffd\u7565\u200b\u53d8\u91cf","text":"\u200b\u5728\u200b\u58f0\u660e\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\u5374\u200b\u6ca1\u6709\u200b\u4f7f\u7528\u200b\u65f6\u200b\uff0cRust\u200b\u4f1a\u200b\u7ed9\u51fa\u200b\u8b66\u544a\u200b\u3002\u200b\u5982\u679c\u200b\u4e0d\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u8fd9\u4e2a\u200b\u53d8\u91cf\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5728\u200b\u53d8\u91cf\u540d\u200b\u524d\u200b\u52a0\u4e0a\u200b\u4e0b\u5212\u7ebf\u200b\u524d\u7f00\u200b\u4f5c\u4e3a\u200b\u6807\u8bb0\u200b\u3002\u200b\u540d\u4e3a\u200b_
\u200b\u7684\u200b\u53d8\u91cf\u200b\u662f\u200b\u4e00\u4e2a\u200b\u7279\u6b8a\u200b\u7684\u200b\u53d8\u91cf\u200b\uff0c\u200b\u5b83\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u58f0\u660e\u200b\u591a\u6b21\u200b\uff0c\u200b\u4f46\u662f\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u4f7f\u7528\u200b\u3002
Download source code
fn main() {\n let _: i32 = 5;\n println!(\"{}\", _);\n // error: in expressions, `_` can only be used on the left-hand side of an assignment\n}\n
"},{"location":"coding/rust/6/#_2","title":"\u6a21\u5f0f\u5339\u914d","text":""},{"location":"coding/rust-gui/","title":"Rust GUI library","text":"The following pages are notes from Building a simple text editor with iced, a cross-platform GUI library for Rust using iced lib.
- Hello World
- Multi-line Input
- Theme and Cursor Indicator
- Async File Loading
- File Picker
- File Path Indicator
- New and Save
- Button prettify
- Syntax Highlighting
- Misc
"},{"location":"coding/rust-gui/1-hello-world/","title":"Hello World App","text":"Keywords: iced::Sandbox
, iced::Settings
, iced::widget::text
"},{"location":"coding/rust-gui/1-hello-world/#_1","title":"\u521b\u5efa\u200b\u9879\u76ee","text":"\u200b\u9996\u5148\u200b\uff0c\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b Rust \u200b\u9879\u76ee\u200b\uff0c\u200b\u5e76\u200b\u6dfb\u52a0\u200b\u5bf9\u200biced
\u200b\u5e93\u200b\u7684\u200b\u4f9d\u8d56\u200b\u3002
cargo new text-editor\ncd text-editor\ncargo add iced\n
\u200b\u6b64\u65f6\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\u5982\u4e0b\u200b\uff1a
fn main() {\n println!(\"Hello, world!\");\n}\n
"},{"location":"coding/rust-gui/1-hello-world/#gui","title":"\u521b\u5efa\u200bGUI\u200b\u5e94\u7528","text":"iced
\u200b\u7684\u200bGUI\u200b\u7c7b\u6709\u200bApplication
\u200b\u548c\u200bSandbox
\u200b\u4e24\u79cd\u200b\u3002\u200b\u5176\u4e2d\u200bSandbox
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u7b80\u5316\u7248\u200b\u7684\u200bApplication
\uff0c\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4e00\u4e9b\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u884c\u4e3a\u200b\u3002Sandbox
\u200b\u7279\u6027\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
pub trait Sandbox {\n type Message: std::fmt::Debug + Send;\n fn new() -> Self;\n fn title(&self) -> String;\n fn update(&mut self, message: Self::Message);\n fn view(&self) -> Element<'_, Self::Message>;\n fn theme(&self) -> Theme {\n Theme::default()\n }\n fn style(&self) -> theme::Application {\n theme::Application::default()\n }\n fn scale_factor(&self) -> f64 {\n 1.0\n }\n fn run(settings: Settings<()>) -> Result<(), Error>\n where\n Self: 'static + Sized,\n {\n <Self as Application>::run(settings)\n }\n}\n
\u200b\u4e3a\u4e86\u200b\u4f7f\u7528\u200bSandbox
\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200b\u5176\u4e2d\u200b\u672a\u200b\u5b9e\u73b0\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5373\u200bMessage
\u3001new
\u3001title
\u3001update
\u200b\u548c\u200bview
\u3002
-
Message
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b\uff0c\u200b\u7528\u4e8e\u200b\u5b9a\u4e49\u200b\u5e94\u7528\u200b\u4f1a\u200b\u4ea7\u751f\u200b\u7684\u200b\u6d88\u606f\u200b\u7c7b\u578b\u200b\uff0c\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200bstd::fmt::Debug
\u200b\u548c\u200bSend
\u200b\u7279\u6027\u200b\u3002
#[derive(Debug)] // Inherit the Debug trait\nenum Message {} // No message required\n
-
new
\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200bSandbox
\u200b\u5b9e\u4f8b\u200b\uff0c\u200b\u521d\u59cb\u5316\u200b\u5b9e\u4f8b\u200b\u72b6\u6001\u200b\uff0c\u200b\u4e00\u822c\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200bSelf
\u200b\u5373\u53ef\u200b\u3002
fn new() -> Self {\n Self\n}\n
-
title
\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u8fd4\u56de\u200bGUI\u200b\u7a97\u53e3\u200b\u7684\u200b\u6807\u9898\u200b\u3002
fn title(&self) -> String {\n String::from(\"A text editor\")\n}\n
-
update
\u200b\u65b9\u6cd5\u200b\u548c\u200bview
\u200b\u65b9\u6cd5\u200b\u5171\u540c\u200b\u7ec4\u6210\u200b\u5e94\u7528\u200b\u7684\u200b\u6d88\u606f\u200b\u5faa\u73af\u200b\uff1aupdate
\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u5904\u7406\u200b\u6d88\u606f\u200b\uff0c\u200b\u66f4\u65b0\u200b\u5e94\u7528\u200b\u72b6\u6001\u200b\uff0cview
\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u5728\u200b\u72b6\u6001\u200b\u66f4\u65b0\u200b\u540e\u200b\u66f4\u65b0\u200b\u5e94\u7528\u200b\u754c\u9762\u200b\u3002\u200b\u6b64\u5904\u200b\u6211\u4eec\u200b\u5728\u200bview
\u200b\u65b9\u6cd5\u200b\u4e2d\u200b\u653e\u7f6e\u200b\u4e00\u4e2a\u200b\u6587\u672c\u200b\u63a7\u4ef6\u200b\u3002
fn update(&mut self, message: Self::Message) {\n match message {\n // No message to handle\n }\n}\n\nfn view(&self) -> Element<'_, Self::Message> {\n text(\"Hello, world!\").into()\n}\n
\u200b\u901a\u8fc7\u200bSandbox::run
\u200b\u65b9\u6cd5\u200b\u542f\u52a8\u200b\u5e94\u7528\u200b\uff0c\u200b\u8be5\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200bResult<(), Error>
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u4f5c\u4e3a\u200bmain
\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use iced::{Element, Sandbox, Settings};\nuse iced::widget::text;\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor;\n\n#[derive(Debug)]\nenum Message {}\n\nimpl Sandbox for Editor {\n type Message = Message; // Define the type of messages\n fn new() -> Self {\n Self\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) {\n // Handle messages here\n match message {}\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n text(\"Hello, world!\").into()\n }\n}\n
"},{"location":"coding/rust-gui/10-misc/","title":"Miscellaneous","text":"\u200b\u672c\u200b\u8282\u200b\u6dfb\u52a0\u200b\u4e00\u4e9b\u200b\u989d\u5916\u200b\u529f\u80fd\u200b\u3002
\u200b\u9996\u5148\u200b\uff0c\u200b\u5f53\u200b\u6587\u4ef6\u200b\u6ca1\u6709\u200b\u88ab\u200b\u4fee\u6539\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8bbe\u7f6e\u200b\u7981\u7528\u200b\u4fdd\u5b58\u200b\u6309\u94ae\u200b\u3002\u200b\u8fd9\u6837\u200b\u53ef\u4ee5\u200b\u907f\u514d\u200b\u7528\u6237\u200b\u8bef\u64cd\u4f5c\u200b\u3002\u200b\u5728\u200bon_press_maybe
\u200b\u4e2d\u200b\u4f20\u5165\u200bNone
\u200b\u5373\u53ef\u200b\u3002\u200b\u540c\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6839\u636e\u200b\u6587\u4ef6\u200b\u7684\u200b\u4fee\u6539\u200b\u60c5\u51b5\u200b\u8bbe\u7f6e\u200b\u6309\u94ae\u200b\u7684\u200b\u6837\u5f0f\u200b\u3002
fn toolbar_button<'a>(description: &str, callback: Option<Message>) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n let lower = description.to_lowercase();\n let icon = text(match lower.as_str() {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n let is_disabled = callback.is_none();\n tooltip(\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press_maybe(callback).style(\n if is_disabled {\n theme::Button::Secondary\n } else {\n theme::Button::Primary\n }\n ),\n description, tooltip::Position::FollowCursor\n ).style(theme::Container::Box).into()\n}\n
\u200b\u540c\u65f6\u200b\u4fee\u6539\u200btoolbar_button
\u200b\u7684\u200b\u8c03\u7528\u200b\u3002
// ... In `view` function\nlet controls = row![\n toolbar_button(\"New\", Some(Message::NewButtonPressed)),\n toolbar_button(\"Open\", Some(Message::OpenButtonPressed)),\n toolbar_button(\"Save\", if self.modified { Some(Message::SaveButtonPressed) } else { None }),\n horizontal_space(Length::Fill),\n pick_list(highlighter::Theme::ALL, Some(self.theme), Message::ThemeChanged)\n].spacing(10);\n
\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u6dfb\u52a0\u200b\u4e0d\u540c\u200b\u7684\u200b\u5feb\u6377\u952e\u200b\uff0c\u200b\u4ee5\u200b\u65b9\u4fbf\u200b\u7528\u6237\u200b\u64cd\u4f5c\u200b\u3002
// In `impl Application for Editor`\nfn subscription(&self) -> Subscription<Message> {\n keyboard::on_key_press(|keycode, modifier| {\n match (keycode, modifier) {\n (keyboard::KeyCode::S, keyboard::Modifiers::COMMAND) => {\n Some(Message::SaveButtonPressed)\n },\n (keyboard::KeyCode::O, keyboard::Modifiers::COMMAND) => {\n Some(Message::OpenButtonPressed)\n },\n (keyboard::KeyCode::N, keyboard::Modifiers::COMMAND) => {\n Some(Message::NewButtonPressed)\n },\n _ => None\n }\n })\n}\n
\u200b\u8fd9\u6837\u200b\uff0c\u200b\u7528\u6237\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bCommand + S
\u200b\u6765\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\uff0cCommand + O
\u200b\u6765\u200b\u6253\u5f00\u200b\u6587\u4ef6\u200b\uff0cCommand + N
\u200b\u6765\u200b\u65b0\u5efa\u200b\u6587\u4ef6\u200b\u3002
\u200b\u6587\u4ef6\u200b\u7684\u200b\u6807\u9898\u680f\u200b\u901a\u5e38\u200b\u663e\u793a\u6587\u4ef6\u200b\u8def\u5f84\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u548c\u200b\u5de6\u4e0b\u89d2\u200b\u7684\u200b\u72b6\u6001\u680f\u200b\u4fdd\u6301\u200b\u540c\u6b65\u200b\u3002
// ... In `impl Application for Editor`\nfn title(&self) -> String {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n format!(\"{}{}\", path_text, suffix)\n}\n\n// ... In `view` function\nlet path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n} else {\n text(self.title())\n};\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\n\nuse iced::{executor, keyboard, theme, Application, Command, Element, Font, Length, Settings, Subscription, Theme};\nuse iced::highlighter::{self, Highlighter};\nuse iced::widget::{button, column, container, horizontal_space, pick_list, row, text, text_editor, tooltip};\n\nfn main() -> iced::Result {\n Editor::run(Settings {\n fonts: vec![include_bytes!(\"../fonts/editor-icon.ttf\").as_slice().into()],\n ..Default::default()\n })\n}\n\nstruct Editor {\n path: Option<PathBuf>,\n content: text_editor::Content,\n modified: bool,\n error: Option<Error>,\n theme: highlighter::Theme\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n FileSaved(Result<PathBuf, Error>),\n ThemeChanged(highlighter::Theme),\n NewButtonPressed,\n OpenButtonPressed,\n SaveButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None,\n modified: false,\n path: None,\n theme: highlighter::Theme::SolarizedDark\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n format!(\"{}{}\", path_text, suffix)\n }\n\n fn subscription(&self) -> Subscription<Message> {\n keyboard::on_key_press(|keycode, modifier| {\n match (keycode, modifier) {\n (keyboard::KeyCode::S, keyboard::Modifiers::COMMAND) => {\n Some(Message::SaveButtonPressed)\n },\n (keyboard::KeyCode::O, keyboard::Modifiers::COMMAND) => {\n Some(Message::OpenButtonPressed)\n },\n (keyboard::KeyCode::N, keyboard::Modifiers::COMMAND) => {\n Some(Message::NewButtonPressed)\n },\n _ => None\n }\n })\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n match &action {\n text_editor::Action::Edit(_) => self.modified = true,\n _ => {}\n }\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.modified = false;\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileSaved(Ok(path)) => {\n self.path = Some(path);\n self.modified = false;\n Command::none()\n },\n Message::FileOpened(Err(error)) | Message::FileSaved(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::ThemeChanged(theme) => {\n self.theme = theme;\n Command::none()\n },\n Message::NewButtonPressed => {\n self.content = text_editor::Content::new();\n self.error = None;\n self.path = None;\n self.modified = false;\n Command::none()\n },\n Message::OpenButtonPressed => {\n self.modified = false;\n Command::perform(pick_file(), Message::FileOpened)\n },\n Message::SaveButtonPressed => {\n let content = self.content.text();\n match self.modified {\n false => Command::none(),\n true => Command::perform(\n save_file(self.path.clone(), content),\n Message::FileSaved\n )\n }\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content)\n .on_edit(Message::EditorEdit)\n .highlight::<Highlighter>(\n highlighter::Settings {\n theme: self.theme,\n extension: self.path\n .as_ref()\n .and_then(|path| path.extension()?.to_str())\n .unwrap_or(\"rs\")\n .to_string()\n }, |highlighter, _theme| {\n highlighter.to_format()\n }\n )\n .font(Font::MONOSPACE);\n let controls = row![\n toolbar_button(\"New\", Some(Message::NewButtonPressed)),\n toolbar_button(\"Open\", Some(Message::OpenButtonPressed)),\n toolbar_button(\"Save\", if self.modified { Some(Message::SaveButtonPressed) } else { None }),\n horizontal_space(Length::Fill),\n pick_list(highlighter::Theme::ALL, Some(self.theme), Message::ThemeChanged)\n ].spacing(10);\n\n // Query cursor position\n let path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n } else {\n text(self.title())\n };\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![\n path_indicator,\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n if self.theme.is_dark() {\n Theme::Dark\n } else {\n Theme::Light\n }\n }\n}\n\nasync fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n\nasync fn save_file(path: Option<PathBuf>, content: String) -> Result<PathBuf, Error> {\n let path = if let Some(path) = path {\n path\n } else {\n rfd::AsyncFileDialog::new()\n .set_title(\"Save the file to...\")\n .save_file()\n .await\n .ok_or(Error::DialogClosed)?\n .path()\n .to_path_buf()\n };\n tokio::fs::write(&path, content)\n .await\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n .map(|_| path)\n}\n\nfn toolbar_button<'a>(description: &str, callback: Option<Message>) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n let lower = description.to_lowercase();\n let icon = text(match lower.as_str() {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n let is_disabled = callback.is_none();\n tooltip(\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press_maybe(callback).style(\n if is_disabled {\n theme::Button::Secondary\n } else {\n theme::Button::Primary\n }\n ),\n description, tooltip::Position::FollowCursor\n ).style(theme::Container::Box).into()\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"coding/rust-gui/2-multi-line-input/","title":"Add Multi-line Input","text":"Keywords: iced::widget::text_editor
, iced::widget::container
.
\u200b\u672c\u200b\u8282\u200b\u6211\u4eec\u200b\u5c06\u200btext
\u200b\u63a7\u4ef6\u200b\u66ff\u6362\u200b\u4e3a\u200btext_editor
\u200b\u63a7\u4ef6\u200b\uff0c\u200b\u4ee5\u200b\u5b9e\u73b0\u200b\u591a\u884c\u200b\u6587\u672c\u200b\u7684\u200b\u8f93\u5165\u200b\u3002
iced\u200b\u5e93\u200b\u7248\u672c\u200b
text_editor
\u200b\u63a7\u4ef6\u200b\u5c1a\u672a\u200b\u5728\u200b\u6b63\u5f0f\u200b\u7248\u672c\u200b\u4e2d\u200b\u53d1\u5e03\u200b\uff0c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bgit
\u200b\u4ed3\u5e93\u200b\u4e2d\u200b\u7684\u200b\u4ee3\u7801\u200b\u3002
[dependencies]\niced = { git = \"https://github.com/iced-rs/iced.git\", rev = \"refs/tags/text-editor\" }\n
\u200b\u9996\u5148\u200b\uff0c\u200b\u5c06\u200b\u5f15\u5165\u200b\u7684\u200biced::widget::text
\u200b\u66ff\u6362\u200b\u4e3a\u200biced::widget::text_editor
\u3002text_editor
\u200b\u662f\u200b\u6709\u200b\u72b6\u6001\u200b\u7684\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200bnew
\u200b\u4e2d\u200b\u521d\u59cb\u5316\u200b\u7a7a\u95f4\u200b\u72b6\u6001\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5728\u200bview
\u200b\u4e2d\u200b\u6839\u636e\u200b\u72b6\u6001\u200b\u66f4\u65b0\u200b\u63a7\u4ef6\u200b\u5185\u5bb9\u200b\u3002
struct Editor {\n content: text_editor::Content\n}\n\n// ...\n\nimpl Sandbox for Editor {\n type Message = Message;\n\n fn new() -> Self {\n Editor {\n content: text_editor::Content::new() // Initialize the content\n }\n }\n\n // ...\n\n fn view(&self) -> Element<'_, Message> {\n text_editor(&self.content).into() // Link the content state\n }\n}\n
\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cinto
\u200b\u65b9\u6cd5\u200b\u4f1a\u200b\u4f7f\u200b\u63a7\u4ef6\u200b\u5145\u6ee1\u200b\u6574\u4e2a\u200b\u7a97\u53e3\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bcontainer
\u200b\u5305\u56f4\u200btext_editor
\u200b\u63a7\u4ef6\u200b\u8f85\u52a9\u200b\u5e03\u5c40\u200b\u3002
use iced::widget::container;\n\n// ...\n\nimpl Sandbox for Editor {\n // ...\n fn view(&self) -> Element<'_, Message> {\n let editor = text_editor(&self.content);\n container(editor).padding(10).into() // Add padding and wrap the editor\n }\n}\n
\u200b\u6b64\u65f6\u200b\uff0c\u200b\u591a\u884c\u200b\u6587\u672c\u200b\u8f93\u5165\u6846\u200b\u7684\u200b\u5e03\u5c40\u200b\u5df2\u7ecf\u200b\u5b8c\u6210\u200b\u3002\u200b\u4f46\u200b\u7531\u4e8e\u200b\u8f93\u5165\u6846\u200b\u6ca1\u6709\u200b\u7ed1\u5b9a\u200b\u4e8b\u4ef6\u5904\u7406\u200b\uff0c\u200b\u56e0\u6b64\u200b\u76ee\u524d\u200b\u65e0\u6cd5\u200b\u8f93\u5165\u200b\u6587\u672c\u200b\u3002text_editor
\u200b\u63a7\u4ef6\u200b\u652f\u6301\u200b\u7684\u200b\u4e8b\u4ef6\u200b\u6709\u200b
pub enum Action {\n Move(Motion),\n Select(Motion),\n SelectWord,\n SelectLine,\n Edit(Edit),\n Click(Point),\n Drag(Point),\n Scroll { lines: i32 },\n}\n
\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u5c06\u200bEdit
\u200b\u4e8b\u4ef6\u200b\u5728\u200bupdate
\u200b\u548c\u200bview
\u200b\u4e2d\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b\uff0c\u200b\u540c\u65f6\u200b\u66f4\u65b0\u200bMessage
\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b\u3002
#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action)\n}\n\n// ...\n\nimpl Sandbox for Editor {\n // ...\n fn update(&mut self, message: Message) {\n match message {\n Message::EditorEdit(action) => {\n self.content = self.content.edit(action);\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit); // Bind the edit event\n container(editor).padding(10).into() // Add padding and wrap the editor\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use iced::{Element, Sandbox, Settings};\nuse iced::widget::{text_editor, container};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n content: text_editor::Content\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action)\n}\n\nimpl Sandbox for Editor {\n type Message = Message; // Define the type of messages\n\n fn new() -> Self {\n Self {\n content: text_editor::Content::new()\n }\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n self.content.edit(action);\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n container(editor).padding(10).into()\n }\n}\n
"},{"location":"coding/rust-gui/3-theme-and-cursor-indicator/","title":"Theme and Cursor Indicator","text":"Keywords: iced::widget::column
, iced::widget::row
, iced::widget::horizontal_space
, iced::Theme
, iced::Length
\u200b\u672c\u8282\u200b\u5c06\u200b\u7a97\u53e3\u200b\u8bbe\u7f6e\u200b\u4e3a\u200b\u6697\u8272\u200b\u8c03\u200b\uff0c\u200b\u5e76\u4e14\u200b\u901a\u8fc7\u200btext
\u200b\u63a7\u4ef6\u200b\u663e\u793a\u200b\u5149\u6807\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002
"},{"location":"coding/rust-gui/3-theme-and-cursor-indicator/#_1","title":"\u8bbe\u7f6e\u200b\u7a97\u53e3\u200b\u4e3b\u9898","text":"\u200b\u7a97\u53e3\u200b\u4e3b\u9898\u200b\u901a\u8fc7\u200btheme
\u200b\u51fd\u6570\u200b\u8bbe\u7f6e\u200b\uff0c\u200b\u5b9a\u4e49\u200b\u4e3b\u9898\u200b\u98ce\u683c\u200b\u7684\u200b\u7c7b\u200b\u4e3a\u200biced::Theme
\uff0cLight
\u200b\u548c\u200bDark
\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u4eae\u8272\u200b\u548c\u200b\u6697\u8272\u200b\u8c03\u200b\u3002
use iced::Theme\n\n// ...\n\nimpl Sandbox for Editor {\n // ...\n\n fn theme(&self) -> iced::Theme {\n iced::Theme::Dark // Set the window theme to dark\n }\n}\n
"},{"location":"coding/rust-gui/3-theme-and-cursor-indicator/#_2","title":"\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u5185\u5bb9","text":"\u200b\u5728\u200b\u7a0b\u5e8f\u200b\u542f\u52a8\u200b\u65f6\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u8bbe\u7f6e\u200b\u4e00\u4e2a\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff0c\u200b\u6b64\u5904\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200binclude_str!
\u200b\u5b8f\u5728\u200b\u7f16\u8bd1\u200b\u65f6\u200b\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\u5e76\u200b\u7528\u4e8e\u200b\u521d\u59cb\u5316\u200b\u6587\u672c\u6846\u200b\u7684\u200b\u72b6\u6001\u200b\u3002
impl Sandbox for Editor {\n // ...\n\n fn new() -> Self {\n Self {\n content: text_editor::Content::with(include_str!(\"main.rs\"))\n }\n }\n}\n
"},{"location":"coding/rust-gui/3-theme-and-cursor-indicator/#_3","title":"\u663e\u793a\u200b\u5149\u6807\u200b\u4f4d\u7f6e","text":"\u200b\u6587\u672c\u6846\u200b\u7684\u200b\u5149\u6807\u200b\u4f4d\u7f6e\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bself.content
\u200b\u72b6\u6001\u200b\u7684\u200bcursor_position
\u200b\u65b9\u6cd5\u200b\u83b7\u53d6\u200b\uff0c\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u5305\u542b\u200b\u5149\u6807\u200b\u4f4d\u7f6e\u200b\uff08\u200b\u4ece\u200b0\u200b\u5f00\u59cb\u200b\uff09\u200b\u7684\u200b\u5143\u7ec4\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6839\u636e\u200b\u5149\u6807\u200b\u4f4d\u7f6e\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200btext
\u200b\u63a7\u4ef6\u200b\u7528\u4e8e\u200b\u663e\u793a\u200b\u3002
- \u200b\u901a\u8fc7\u200b
column!
\u200b\u5b8f\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u5217\u200b\u5e03\u5c40\u200b\uff0c\u200b\u4e0a\u8fb9\u200b\u5305\u542b\u200b\u8f93\u5165\u200b\u6587\u672c\u6846\u200b\uff0c\u200b\u4e0b\u8fb9\u200b\u5305\u542b\u200b\u5149\u6807\u200b\u4f4d\u7f6e\u200b\u663e\u793a\u200b\u3002 - \u200b\u901a\u8fc7\u200b
row!
\u200b\u5b8f\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u884c\u200b\u5e03\u5c40\u200b\uff0c\u200b\u7ed3\u5408\u200bLength::Fill
\u200b\u628a\u200b\u5149\u6807\u200b\u4f4d\u7f6e\u200b\u538b\u7f29\u200b\u5230\u200b\u53f3\u4fa7\u200b\u5bf9\u9f50\u200b\u3002
use iced::widget::{column, row, horizontal_space, text};\nuse iced::Length;\n\n// ...\n\nimpl Sandbox for Editor {\n // ...\n\n fn view(&self) -> Element<'_, Message> {\n let editor = text_editor(&self.content);\n // Query cursor position\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![horizontal_space(Length::Fill), cursor_indicator];\n\n container(column![editor, status_bar].spacing(10)).padding(10).into()\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use iced::{Theme, Element, Sandbox, Settings, Length};\nuse iced::widget::{column, container, horizontal_space, row, text, text_editor};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n content: text_editor::Content\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action)\n}\n\nimpl Sandbox for Editor {\n type Message = Message; // Define the type of messages\n\n fn new() -> Self {\n Self {\n content: text_editor::Content::with(include_str!(\"main.rs\"))\n }\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n self.content.edit(action);\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n\n // Query cursor position\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![horizontal_space(Length::Fill), cursor_indicator];\n\n container(column![editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n
"},{"location":"coding/rust-gui/4-async-file-loading/","title":"Asynchronous File Loading","text":"Keywords: iced::Application
, iced::Command
, iced::executor
, std::io
, std::path::Path
, std::sync::Arc
, tokio::fs::read_to_string
\u200b\u4e3a\u4e86\u200b\u5b9e\u73b0\u200b\u5f02\u6b65\u200b\u6587\u4ef6\u200b\u52a0\u8f7d\u200b\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u4f7f\u7528\u200btokio
\u200b\u5e93\u200b
[dependencies]\ntokio = { version = \"1.32\", features = [\"fs\"] }\n
Sandbox
\u200b\u4e0d\u80fd\u200b\u76f4\u63a5\u200b\u6267\u884c\u200b\u5f02\u6b65\u200b\u51fd\u6570\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200bApplication
\u3002\u200b\u76f8\u6bd4\u200b\u4e8e\u200bSandbox
\uff0cApplication
\u200b\u9700\u8981\u200b\u989d\u5916\u200b\u5b9e\u73b0\u200b\u5982\u4e0b\u200b\u7c7b\u578b\u200b
impl Application for Editor {\n // ...\n type Theme; // Color theme\n type Executor; // Engine for running async tasks\n type Flags; // Initial state\n}\n
\u200b\u6b64\u5904\u200b\uff0cTheme
\u200b\u548c\u200bFlags
\u200b\u7c7b\u578b\u200b\u4e0d\u200b\u9700\u8981\u200b\u989d\u5916\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5206\u522b\u200b\u7528\u200biced::Theme
\u200b\u548c\u200b()
\u200b\u4ee3\u66ff\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cExecutor
\u200b\u7c7b\u578b\u200b\u9700\u8981\u200b\u7528\u200biced::executor::Default
\u200b\u4ee3\u66ff\u200b\u3002
\u200b\u5728\u200b\u4fee\u6539\u200b\u4e3a\u200bApplication
\u200b\u540e\u200b\uff0cnew
\u200b\u548c\u200bupdate
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u6807\u7b7e\u200b\u4e5f\u200b\u9700\u8981\u200b\u4fee\u6539\u200b\uff0cnew
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b(Self, Command<Message>)
\uff0cupdate
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200bCommand<Message>
\u3002\u200b\u5176\u4e2d\u200bCommand<Message>
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5f02\u6b65\u200b\u4efb\u52a1\u200b\uff0c\u200b\u5728\u200b\u6267\u884c\u200b\u5b8c\u6bd5\u200b\u540e\u200b\u4f1a\u200b\u53d1\u9001\u200b\u4e00\u4e2a\u200b\u5bf9\u5e94\u200b\u7c7b\u578b\u200b\u7684\u200bMessage
\u3002
impl Application for Editor {\n // ...\n\n fn new(_flags: ()) -> (Self, Command<Message>) {\n (\n Self {\n // ...\n },\n Command::none(),\n )\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n match message {\n // ...\n }\n\n Command::none()\n }\n}\n
\u200b\u6b64\u540e\u200b\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u7f16\u5199\u200b\u7528\u4e8e\u200b\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u7684\u200b\u51fd\u6570\u200b\u3002
use std::io;\nuse std::path::Path;\nuse std::sync::Arc;\n\nasync fn load_file<T>(path: T) -> Result<Arc<String>, io::ErrorKind>\n where T: AsRef<Path>\n{\n tokio::fs::read_to_string(path)\n .await\n .map(Arc::new)\n .map_err(|e| e.kind())\n}\n
\u200b\u5728\u200bnew
\u200b\u65b9\u6cd5\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bCommand
\u200b\u6765\u200b\u8c03\u7528\u200bload_file
\u200b\u51fd\u6570\u200b\u3002
enum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<Arc<String>, io::ErrorKind>)\n}\n\nimpl Application for Editor {\n // ...\n\n fn new(_flags: ()) -> (Self, Command<Message>) {\n let path = \"path/to/file.txt\";\n let file = load_file(path);\n\n (\n Self {\n // ...\n },\n Command::perform(\n load_file(format!(\"{}/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileLoaded,\n ),\n )\n }\n}\n
\u200b\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u65f6\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u53d1\u751f\u200b\u9519\u8bef\u200b\uff0c\u200b\u9700\u8981\u200b\u5bf9\u200b\u5f02\u5e38\u200b\u6d88\u606f\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b\u3002\u200b\u5728\u200bload_file
\u200b\u51fd\u6570\u200b\u4e2d\u200b\u5df2\u7ecf\u200b\u901a\u8fc7\u200bResult
\u200b\u8fd4\u56de\u200b\u4e86\u200b\u5bf9\u5e94\u200b\u7684\u200b\u9519\u8bef\u200b\u7c7b\u578b\u200b\uff0c\u200b\u53ea\u200b\u9700\u8981\u200b\u5728\u200bupdate
\u200b\u65b9\u6cd5\u200b\u4e2d\u200b\u5904\u7406\u200bMessage::FileOpened
\u200b\u5373\u53ef\u200b\u3002
struct Editor {\n // ...\n error: Option<io::ErrorKind>, // Use Option to store error\n}\n\n// ...\n\nimpl Application for Editor {\n // ...\n\n fn new(_flags: ()) -> (Self, Command<Message>) {\n (\n Self {\n // ...\n error: None, // Initialize error as None\n },\n // ...\n )\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // ...\n match message {\n // ...\n Message::FileOpened(Error(e)) => {\n self.error = Some(e); // Store error\n }\n }\n // ...\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use iced::{Theme, Element, Sandbox, Settings, Length};\nuse iced::widget::{column, container, horizontal_space, row, text, text_editor};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n content: text_editor::Content\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action)\n}\n\nimpl Sandbox for Editor {\n type Message = Message; // Define the type of messages\n\n fn new() -> Self {\n Self {\n content: text_editor::Content::with(include_str!(\"main.rs\"))\n }\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n self.content.edit(action);\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n\n // Query cursor position\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![horizontal_space(Length::Fill), cursor_indicator];\n\n container(column![editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n
"},{"location":"coding/rust-gui/5-file-picker/","title":"File Picker","text":"Keywords: iced::widget::button
, rfd::AsyncFileDialog
\u200b\u672c\u8282\u200b\u5728\u200b\u7a97\u53e3\u200b\u4e0a\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u6309\u94ae\u200b\uff0c\u200b\u70b9\u51fb\u200b\u540e\u5f39\u200b\u51fa\u200b\u6587\u4ef6\u200b\u9009\u62e9\u200b\u5bf9\u8bdd\u6846\u200b\uff0c\u200b\u9009\u62e9\u200b\u6587\u4ef6\u200b\u540e\u200b\u5c06\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\u663e\u793a\u200b\u5728\u200b\u7a97\u53e3\u200b\u4e0a\u200b\u3002\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u6dfb\u52a0\u200brfd
\u200b\u5e93\u200b\u7684\u200b\u4f9d\u8d56\u200b\uff0c\u200b\u7528\u4e8e\u200b\u6587\u4ef6\u200b\u9009\u62e9\u200b\u5bf9\u8bdd\u6846\u200b\u3002
cargo add rfd\n
\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u7f16\u5199\u200b\u7528\u4e8e\u200b\u663e\u793a\u6587\u4ef6\u200b\u9009\u62e9\u200b\u7a97\u53e3\u200b\u7684\u200b\u51fd\u6570\u200b\u3002\u200b\u6ce8\u610f\u200brfd::AsyncFileDialog
\u200b\u4f1a\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u5f02\u5e38\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u81ea\u5b9a\u4e49\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u3002
#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n\nasync fn pick_file() -> Result<Arc<String>, Error> {\n let handler = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?; // If error, return DialogClosed error\n load_file(handler.path()).await\n}\n
\u200b\u8c03\u6574\u200b\u7a97\u53e3\u200b\u5e03\u5c40\u200b\uff0c\u200b\u5728\u200b\u7a97\u53e3\u200b\u4e0a\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u6309\u94ae\u200b\u3002
impl Application for Editor {\n // ...\n\n fn view(&self) -> Element<'_, Message> {\n let controls = row![button(\"Open\")];\n // ...\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n}\n
\u200b\u4e4b\u540e\u200b\u9700\u8981\u200b\u6dfb\u52a0\u200b\u6309\u94ae\u200b\u7684\u200b\u70b9\u51fb\u200b\u4e8b\u4ef6\u5904\u7406\u200b\uff0c\u200b\u8c03\u7528\u200bpick_file
\u200b\u51fd\u6570\u200b\u3002
enum Message {\n // ...\n OpenButtonPressed\n}\n\nimpl Application for Editor {\n // ...\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n // ...\n Message::OpenButtonPressed => {\n Command::perform(pick_file(), Message::FileOpened)\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n let controls = row![button(\"Open\").on_press(Message::OpenButtonPressed)];\n // ...\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::Path;\nuse std::sync::Arc;\n\nuse iced::{executor, Application, Command, Element, Length, Settings, Theme};\nuse iced::widget::{button, column, container, horizontal_space, row, text, text_editor};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n content: text_editor::Content,\n error: Option<Error>\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<Arc<String>, Error>),\n OpenButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok(result)) => {\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileOpened(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::OpenButtonPressed => {\n Command::perform(pick_file(), Message::FileOpened)\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n let controls = row![button(\"Open\").on_press(Message::OpenButtonPressed)];\n\n // Query cursor position\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![horizontal_space(Length::Fill), cursor_indicator];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n\nasync fn pick_file() -> Result<Arc<String>, Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<Arc<String>, Error> {\n tokio::fs::read_to_string(path)\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"coding/rust-gui/6-file-path-indicator/","title":"File Path Indicator","text":"\u200b\u672c\u8282\u200b\u5728\u200b\u72b6\u6001\u680f\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u663e\u793a\u6587\u4ef6\u200b\u8def\u5f84\u200b\u7684\u200b\u6587\u672c\u200b\u63a7\u4ef6\u200b\u3002\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u5b58\u50a8\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u72b6\u6001\u200b\uff0c\u200b\u5e76\u200b\u5728\u200b\u521d\u59cb\u5316\u200b\u9636\u6bb5\u200b\u8bbe\u7f6e\u200b\u4e3a\u200bNone
\u3002
struct Editor {\n path: Option<PathBuf>,\n // ...\n}\n\nimpl Application for Editor {\n // ...\n fn new() -> (Editor, Command<Message>) {\n (\n Editor {\n path: None,\n // ...\n },\n // ...\n )\n }\n // ...\n}\n
Path\u200b\u4e0e\u200bPathBuf
std::path::Path
\u200b\u548c\u200bstd::path::PathBuf
\u200b\u7684\u200b\u5173\u7cfb\u200b\u7c7b\u4f3c\u200b\u4e8e\u200b&str
\u200b\u548c\u200bString
\u200b\u7684\u200b\u5173\u7cfb\u200b\u3002Path
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5f15\u7528\u200b\uff0cPathBuf
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u53ef\u53d8\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5b58\u50a8\u200b\u8def\u5f84\u200b\u72b6\u6001\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bPathBuf
\uff0c\u200b\u5f15\u7528\u200b\u8def\u5f84\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bPath
\u3002
\u200b\u4e4b\u524d\u200b\u7684\u200bload_file
\u200b\u51fd\u6570\u200b\u53ea\u200b\u8fd4\u56de\u200b\u4e86\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff0c\u200b\u6b64\u5904\u200b\u9700\u8981\u200b\u5c06\u200b\u6587\u4ef6\u200b\u7684\u200b\u8def\u5f84\u200b\u4e00\u540c\u200b\u8fd4\u56de\u200b\u3002\u200b\u6ce8\u610f\u200b\u51fd\u6570\u200b\u4e0d\u80fd\u200b\u8fd4\u56de\u200b\u5f15\u7528\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u5c06\u200b\u8def\u5f84\u200b\u8f6c\u6362\u200b\u4e3a\u200bPathBuf
\u200b\u7c7b\u578b\u200b\u3002and_then
\u200b\u65b9\u6cd5\u200b\u5904\u7406\u200bResult
\u200b\u7684\u200bOk
\u200b\u503c\u200b\uff0c\u200b\u5728\u200b\u6210\u529f\u200b\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u540e\u200b\u5c06\u200bPath
\u200b\u8f6c\u6362\u200b\u4e3a\u200bPathBuf
\u200b\u5e76\u200b\u8fd4\u56de\u200b\u3002\u200b\u8c03\u7528\u200bload_file
\u200b\u7684\u200bpick_file
\u200b\u51fd\u6570\u200b\u4e5f\u200b\u9700\u8981\u200b\u4e00\u5e76\u200b\u4fee\u6539\u200b\uff0c\u200b\u540c\u65f6\u200b\u8fd4\u56de\u200b\u8def\u5f84\u200b\u548c\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\u3002
async fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n // ...\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n
\u200b\u5728\u200b\u4fee\u6539\u200b\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u7684\u200b\u51fd\u6570\u200b\u540e\u200b\uff0c\u200b\u9700\u8981\u200b\u4fee\u6539\u200b\u51fd\u6570\u200b\u56de\u8c03\u200b\u4e8b\u4ef6\u200b\u7684\u200b\u7c7b\u578b\u200b\u548c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5904\u7406\u51fd\u6570\u200b
\u200b\u4fee\u6539\u200b\u540e\u200b\u4fee\u6539\u200b\u524d\u200b enum Message {\n // ...\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n}\n\nimpl Application for Editor {\n // ...\n fn update(&mut self, message: Message) -> Command<Message> {\n match message {\n // ...\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n }\n }\n}\n
enum Message {\n // ...\n FileOpened(Result<Arc<String>, Error>),\n}\n\nimpl Application for Editor {\n // ...\n fn update(&mut self, message: Message) -> Command<Message> {\n match message {\n // ...\n Message::FileOpened(Ok(result)) => {\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n }\n }\n}\n
\u200b\u6700\u540e\u200b\u5728\u200b\u72b6\u6001\u680f\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u6587\u672c\u200b\u63a7\u4ef6\u200b\u663e\u793a\u6587\u4ef6\u200b\u8def\u5f84\u200b\u5373\u53ef\u200b\u3002
impl Application for Editor {\n // ...\n fn view(&mut self) -> Element<Message> {\n // ...\n let path_indicator = match &self.path {\n None => text(\"\"),\n Some(path) => text(path.to_string_lossy())\n };\n let status_bar = row![\n path_indicator, // Add path indicator here\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n // ...\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\n\nuse iced::{executor, Application, Command, Element, Length, Settings, Theme};\nuse iced::widget::{button, column, container, horizontal_space, row, text, text_editor};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n path: Option<PathBuf>,\n content: text_editor::Content,\n error: Option<Error>\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n OpenButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None,\n path: None\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileOpened(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::OpenButtonPressed => {\n Command::perform(pick_file(), Message::FileOpened)\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n let controls = row![button(\"Open\").on_press(Message::OpenButtonPressed)];\n\n // Query cursor position\n let path_indicator = match &self.path {\n None => text(\"\"),\n Some(path) => text(path.to_string_lossy())\n };\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![\n path_indicator,\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n\nasync fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"coding/rust-gui/7-new-and-save/","title":"New and Save","text":"\u200b\u672c\u200b\u8282\u200b\u6dfb\u52a0\u200b\u65b0\u5efa\u200b\u548c\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\u7684\u200b\u529f\u80fd\u200b\u3002
\u200b\u9996\u5148\u200b\uff0c\u200b\u5728\u200bEditorEdit
\u200b\u6d88\u606f\u200b\u5904\u7406\u200b\u4e2d\u200b\u68c0\u67e5\u200b\u662f\u5426\u200b\u5bf9\u200b\u6587\u4ef6\u200b\u8fdb\u884c\u200b\u4e86\u200b\u4fee\u6539\u200b\uff0c\u200b\u5e76\u4e14\u200b\u8bb0\u5f55\u200b\u6587\u4ef6\u200b\u7684\u200b\u4fee\u6539\u200b\u72b6\u6001\u200b\u3002
struct Editor {\n // ...\n modified: bool\n}\n// ... In `update` function\n Message::EditorEdit(action) => {\n match &action {\n text_editor::Action::Edit(_) => self.modified = true,\n _ => {}\n }\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.modified = false;\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n // ...\n Message::OpenButtonPressed => {\n self.modified = false;\n Command::perform(pick_file(), Message::FileOpened)\n },\n
\u200b\u5176\u6b21\u200b\uff0c\u200b\u8c03\u6574\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u63a7\u4ef6\u200b\u7684\u200b\u4e0d\u540c\u200b\u663e\u793a\u200b\u72b6\u6001\u200b\uff1a
- \u200b\u5f53\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u4e3a\u200b\u7a7a\u65f6\u200b\uff0c\u200b\u4e3a\u200b\u65b0\u200b\u6587\u4ef6\u200b\uff0c\u200b\u663e\u793a\u200b\u201cNew File\u201d\u3002
- \u200b\u5f53\u200b\u6253\u5f00\u200b\u4e00\u4e2a\u200b\u6587\u4ef6\u200b\u65f6\u200b\uff0c\u200b\u663e\u793a\u6587\u4ef6\u200b\u8def\u5f84\u200b\u3002
- \u200b\u5f53\u200b\u6587\u4ef6\u200b\u88ab\u200b\u4fee\u6539\u200b\u540e\u200b\uff0c\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u540e\u200b\u52a0\u4e0a\u200b\u201c*\u201d\u3002
- \u200b\u5f53\u200b\u6253\u5f00\u200b\u6587\u4ef6\u200b\u51fa\u9519\u200b\u65f6\u200b\uff0c\u200b\u663e\u793a\u200b\u9519\u8bef\u4fe1\u606f\u200b\u3002
let path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n} else {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n text(format!(\"{}{}\", path_text, suffix))\n};\n
\u200b\u5728\u200b\u521b\u5efa\u200b\u6587\u4ef6\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u6e05\u7a7a\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u548c\u200b\u5185\u5bb9\u200b\uff0c\u200b\u4ee5\u53ca\u200b\u6e05\u7a7a\u200b\u9519\u8bef\u4fe1\u606f\u200b\u3002\u200b\u52a0\u5165\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u6d88\u606f\u200b\u7c7b\u578b\u200bNewButtonPressed
\uff0c\u200b\u7531\u200b\u4e00\u4e2a\u200b\u6309\u94ae\u200b\u89e6\u53d1\u200b\uff0c\u200b\u5728\u200bupdate
\u200b\u51fd\u6570\u200b\u4e2d\u200b\u6267\u884c\u200b\u8fd9\u4e2a\u200b\u903b\u8f91\u200b\u3002
\u200b\u6d88\u606f\u200b\u7c7b\u578b\u200b\u58f0\u660e\u200b\u6d88\u606f\u200b\u89e6\u53d1\u200b\u6267\u884c\u200b\u903b\u8f91\u200b enum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n NewButtonPressed,\n OpenButtonPressed\n}\n
// ... In `view` function\nlet controls = row![\n button(\"New\").on_press(Message::NewButtonPressed),\n button(\"Open\").on_press(Message::OpenButtonPressed)\n];\n
// ... In matching logic in `update` function\nMessage::NewButtonPressed => {\n self.content = text_editor::Content::new();\n self.error = None;\n self.path = None;\n self.modified = false;\n Command::none()\n},\n// ...\n
\u200b\u63a5\u4e0b\u6765\u200b\u5904\u7406\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\u7684\u200b\u903b\u8f91\u200b\uff0c\u200b\u5f53\u200b\u5b58\u5728\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u65f6\u200b\uff0c\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\uff0c\u200b\u5426\u5219\u200b\u6253\u5f00\u200b\u6587\u4ef6\u200b\u9009\u62e9\u200b\u5bf9\u8bdd\u6846\u200b\u3002
async fn save_file(path: Option<PathBuf>, content: String) -> Result<PathBuf, Error> {\n let path = if let Some(path) = path {\n path\n } else {\n rfd::AsyncFileDialog::new()\n .set_title(\"Save the file to...\")\n .save_file()\n .await\n .ok_or(Error::DialogClosed)?\n .path()\n .to_path_buf()\n };\n tokio::fs::write(&path, content)\n .await\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n .map(|_| path)\n}\n
\u200b\u5728\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b
- \u200b\u68c0\u67e5\u200b\u6587\u4ef6\u200b\u7684\u200b\u4fee\u6539\u200b\u72b6\u6001\u200b\uff0c\u200b\u5982\u679c\u200b\u6587\u4ef6\u200b\u6ca1\u6709\u200b\u4fee\u6539\u200b\uff0c\u200b\u4e0d\u200b\u6267\u884c\u200b\u4fdd\u5b58\u200b\u64cd\u4f5c\u200b\u3002
- \u200b\u68c0\u67e5\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u662f\u5426\u200b\u4e3a\u7a7a\u200b\uff0c\u200b\u5982\u679c\u200b\u4e3a\u7a7a\u200b\uff0c\u200b\u6253\u5f00\u200b\u6587\u4ef6\u200b\u9009\u62e9\u200b\u5bf9\u8bdd\u6846\u200b\uff0c\u200b\u5426\u5219\u200b\u76f4\u63a5\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\u3002
- \u200b\u52a0\u5165\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u6d88\u606f\u200b\u7c7b\u578b\u200b
SaveButtonPressed
\uff0c\u200b\u7531\u200b\u4e00\u4e2a\u200b\u6309\u94ae\u200b\u89e6\u53d1\u200b\uff0c\u200b\u5728\u200bupdate
\u200b\u51fd\u6570\u200b\u4e2d\u200b\u6267\u884c\u200b\u8fd9\u4e2a\u200b\u903b\u8f91\u200b\u3002
\u200b\u6d88\u606f\u200b\u7c7b\u578b\u200b\u58f0\u660e\u200b\u6d88\u606f\u200b\u89e6\u53d1\u200b\u6267\u884c\u200b\u903b\u8f91\u200b enum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n FileSaved(Result<PathBuf, Error>),\n NewButtonPressed,\n OpenButtonPressed,\n SaveButtonPressed\n}\n
// ... In `view` function\nlet controls = row![\n button(\"New\").on_press(Message::NewButtonPressed),\n button(\"Open\").on_press(Message::OpenButtonPressed),\n button(\"Save\").on_press(Message::SaveButtonPressed)\n];\n
// ... In matching logic in `update` function\nMessage::FileSaved(Ok(path)) => {\n self.path = Some(path);\n self.modified = false;\n Command::none()\n},\nMessage::FileOpened(Err(error)) | Message::FileSaved(Err(error)) => {\n self.error = Some(error);\n Command::none()\n},\n// ...\nMessage::SaveButtonPressed => {\n let content = self.content.text();\n match self.modified {\n false => Command::none(),\n true => Command::perform(\n save_file(self.path.clone(), content),\n Message::FileSaved\n )\n }\n}\n
\u200b\u6700\u540e\u200b\uff0c\u200b\u8c03\u6574\u200b\u4e09\u4e2a\u200b\u6309\u94ae\u200b\u4e4b\u95f4\u200b\u7684\u200b\u95f4\u8ddd\u200b
let controls = row![\n button(\"New\").on_press(Message::NewButtonPressed),\n button(\"Open\").on_press(Message::OpenButtonPressed),\n button(\"Save\").on_press(Message::SaveButtonPressed)\n].spacing(10);\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\n\nuse iced::{executor, Application, Command, Element, Length, Settings, Theme};\nuse iced::widget::{button, column, container, horizontal_space, row, text, text_editor};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n path: Option<PathBuf>,\n content: text_editor::Content,\n modified: bool,\n error: Option<Error>\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n FileSaved(Result<PathBuf, Error>),\n NewButtonPressed,\n OpenButtonPressed,\n SaveButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None,\n modified: false,\n path: None\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n match &action {\n text_editor::Action::Edit(_) => self.modified = true,\n _ => {}\n }\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.modified = false;\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileSaved(Ok(path)) => {\n self.path = Some(path);\n self.modified = false;\n Command::none()\n },\n Message::FileOpened(Err(error)) | Message::FileSaved(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::NewButtonPressed => {\n self.content = text_editor::Content::new();\n self.error = None;\n self.path = None;\n self.modified = false;\n Command::none()\n },\n Message::OpenButtonPressed => {\n self.modified = false;\n Command::perform(pick_file(), Message::FileOpened)\n },\n Message::SaveButtonPressed => {\n let content = self.content.text();\n match self.modified {\n false => Command::none(),\n true => Command::perform(\n save_file(self.path.clone(), content),\n Message::FileSaved\n )\n }\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n let controls = row![\n button(\"New\").on_press(Message::NewButtonPressed),\n button(\"Open\").on_press(Message::OpenButtonPressed),\n button(\"Save\").on_press(Message::SaveButtonPressed)\n ].spacing(10);\n\n // Query cursor position\n let path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n } else {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n text(format!(\"{}{}\", path_text, suffix))\n };\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![\n path_indicator,\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n\nasync fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n\nasync fn save_file(path: Option<PathBuf>, content: String) -> Result<PathBuf, Error> {\n let path = if let Some(path) = path {\n path\n } else {\n rfd::AsyncFileDialog::new()\n .set_title(\"Save the file to...\")\n .save_file()\n .await\n .ok_or(Error::DialogClosed)?\n .path()\n .to_path_buf()\n };\n tokio::fs::write(&path, content)\n .await\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n .map(|_| path)\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"coding/rust-gui/8-button-prettify/","title":"Button Prettify","text":"\u200b\u5728\u200b\u672c\u8282\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u628a\u200b\u6309\u94ae\u200b\u7684\u200b\u6587\u672c\u200b\u66ff\u6362\u200b\u4e3a\u200b\u56fe\u6807\u200b\uff0c\u200b\u5e76\u4e14\u200b\u6dfb\u52a0\u200b\u6587\u672c\u200b\u60ac\u6d6e\u200b\u63d0\u793a\u200b\u3002
\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u521b\u5efa\u200b\u5305\u542b\u200b\u56fe\u6807\u200b\u7684\u200b\u5b57\u4f53\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5728\u200bFontello\u200b\u4e0a\u200b\u9009\u62e9\u200b\u56fe\u6807\u200b\uff0c\u200b\u7136\u540e\u200b\u4e0b\u8f7d\u200b\u5b57\u4f53\u200b\u6587\u4ef6\u200b\u3002\u200b\u5c06\u200bttf
\u200b\u7248\u672c\u200b\u7684\u200b\u5b57\u4f53\u200b\u5b58\u653e\u200b\u5728\u200b\u9879\u76ee\u200b\u4e0b\u200b\u7684\u200bfonts/editor-icon.ttf
\u200b\u4e2d\u200b\u3002
\u200b\u7136\u540e\u200b\u5728\u200b\u4ee3\u7801\u200b\u4e2d\u200b\u52a0\u8f7d\u200b\u5b57\u4f53\u200b\u6587\u4ef6\u200b\uff0c\u200b\u5728\u200biced::Settings
\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u5b57\u4f53\u200b\uff1a
fn main() -> iced::Result {\n Editor::run(Settings {\n fonts: vec![include_bytes!(\"../fonts/editor-icon.ttf\").as_slice().into()],\n ..Default::default() // Expand the default settings\n })\n}\n
\u200b\u52a0\u8f7d\u200b\u5b57\u4f53\u200b\u540e\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u6309\u94ae\u200b\u7684\u200b\u8f93\u5165\u200b\u6587\u672c\u200b\u66ff\u6362\u200b\u4e3a\u200b\u56fe\u6807\u200b\uff0c\u200b\u4f7f\u7528\u200btext
\u200b\u63a7\u4ef6\u200b\u521b\u5efa\u200b\u56fe\u6807\u200b\u3002\u200b\u5728\u200b\u7f51\u9875\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u8bfb\u53d6\u200b\u5230\u200b\u5bf9\u5e94\u200b\u65b0\u5efa\u200b\u3001\u200b\u6253\u5f00\u200b\u3001\u200b\u4fdd\u5b58\u200b\u7684\u200bUnicode\u200b\u7f16\u7801\u200b\u5206\u522b\u200b\u4e3a\u200b\\u{E800}
\u3001\\u{F115}
\u3001\\u{E801}
\u3002
fn toolbar_button<'a>(description: &str, callback: Message) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n\n let icon = text(match description {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press(callback).into()\n}\n
\u200b\u4f7f\u7528\u200bbutton_icon
\u200b\u51fd\u6570\u200b\u66ff\u6362\u200b\u6309\u94ae\u200b\u539f\u672c\u200b\u7684\u200b\u8f93\u5165\u200b
// ... In `view` function\nlet controls = row![\n toolbar_button(\"new\", Message::NewButtonPressed),\n toolbar_button(\"open\", Message::OpenButtonPressed),\n toolbar_button(\"save\", Message::SaveButtonPressed)\n].spacing(10);\n
\u200b\u6700\u540e\u200b\uff0c\u200b\u5b9e\u73b0\u200b\u60ac\u6d6e\u200b\u63d0\u793a\u200b\uff0c\u200b\u4f7f\u7528\u200bTooltip
\u200b\u63a7\u4ef6\u200b\u5305\u88f9\u200b\u6309\u94ae\u200b\u5373\u53ef\u200b\u3002\u200b\u4e3a\u4e86\u200b\u7f8e\u89c2\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bstyle
\u200b\u65b9\u6cd5\u200b\u8bbe\u7f6e\u200b\u63d0\u793a\u6846\u200b\u7684\u200b\u6837\u5f0f\u200b\u3002
// ... In `view` function\nlet controls = row![\n toolbar_button(\"New\", Message::NewButtonPressed),\n toolbar_button(\"Open\", Message::OpenButtonPressed),\n toolbar_button(\"Save\", Message::SaveButtonPressed)\n].spacing(10);\n\n// ... In the outer scope\nfn toolbar_button<'a>(description: &str, callback: Message) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n let lower = description.to_lowercase();\n let icon = text(match lower.as_str() {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n\n tooltip(\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press(callback),\n description, tooltip::Position::FollowCursor\n ).style(theme::Container::Box).into() // Set the style of the tooltip\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\n\nuse iced::{executor, theme, Application, Command, Element, Font, Length, Settings, Theme};\nuse iced::widget::{button, column, container, horizontal_space, row, text, text_editor, tooltip};\n\nfn main() -> iced::Result {\n Editor::run(Settings {\n fonts: vec![include_bytes!(\"../fonts/editor-icon.ttf\").as_slice().into()],\n ..Default::default()\n })\n}\n\nstruct Editor {\n path: Option<PathBuf>,\n content: text_editor::Content,\n modified: bool,\n error: Option<Error>\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n FileSaved(Result<PathBuf, Error>),\n NewButtonPressed,\n OpenButtonPressed,\n SaveButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None,\n modified: false,\n path: None\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n match &action {\n text_editor::Action::Edit(_) => self.modified = true,\n _ => {}\n }\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.modified = false;\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileSaved(Ok(path)) => {\n self.path = Some(path);\n self.modified = false;\n Command::none()\n },\n Message::FileOpened(Err(error)) | Message::FileSaved(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::NewButtonPressed => {\n self.content = text_editor::Content::new();\n self.error = None;\n self.path = None;\n self.modified = false;\n Command::none()\n },\n Message::OpenButtonPressed => {\n self.modified = false;\n Command::perform(pick_file(), Message::FileOpened)\n },\n Message::SaveButtonPressed => {\n let content = self.content.text();\n match self.modified {\n false => Command::none(),\n true => Command::perform(\n save_file(self.path.clone(), content),\n Message::FileSaved\n )\n }\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n let controls = row![\n toolbar_button(\"New\", Message::NewButtonPressed),\n toolbar_button(\"Open\", Message::OpenButtonPressed),\n toolbar_button(\"Save\", Message::SaveButtonPressed)\n ].spacing(10);\n\n // Query cursor position\n let path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n } else {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n text(format!(\"{}{}\", path_text, suffix))\n };\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![\n path_indicator,\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n\nasync fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n\nasync fn save_file(path: Option<PathBuf>, content: String) -> Result<PathBuf, Error> {\n let path = if let Some(path) = path {\n path\n } else {\n rfd::AsyncFileDialog::new()\n .set_title(\"Save the file to...\")\n .save_file()\n .await\n .ok_or(Error::DialogClosed)?\n .path()\n .to_path_buf()\n };\n tokio::fs::write(&path, content)\n .await\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n .map(|_| path)\n}\n\nfn toolbar_button<'a>(description: &str, callback: Message) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n let lower = description.to_lowercase();\n let icon = text(match lower.as_str() {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n\n tooltip(\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press(callback),\n description, tooltip::Position::FollowCursor\n ).style(theme::Container::Box).into()\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"coding/rust-gui/9-syntax-highlighting/","title":"Syntax Highlighting","text":"Keywords: iced::widget::pick_list
\u200b\u672c\u200b\u8282\u200b\u6dfb\u52a0\u200b\u4ee3\u7801\u200b\u7f16\u8f91\u5668\u200b\u7684\u200b\u8bed\u6cd5\u200b\u9ad8\u4eae\u200b\u529f\u80fd\u200b\u3002
\u200b\u9996\u5148\u200b\uff0c\u200b\u4fee\u6539\u200b\u7f16\u8f91\u5668\u200b\u7684\u200b\u9ed8\u8ba4\u200b\u5b57\u4f53\u200b\u4e3a\u200b\u7b49\u200b\u5bbd\u200b\u5b57\u4f53\u200b\uff0c\u200b\u4ee5\u4fbf\u200b\u66f4\u597d\u200b\u5730\u200b\u663e\u793a\u200b\u4ee3\u7801\u200b\u3002
// ... In `view` function\nlet editor = text_editor(&self.content)\n .on_edit(Message::EditorEdit)\n .font(Font::MONOSPACE);\n
\u200b\u63a5\u4e0b\u6765\u200b\uff0c\u200b\u6dfb\u52a0\u200b\u9ad8\u4eae\u200b\u5904\u7406\u200b\u7684\u200b\u903b\u8f91\u200b\u3002\u200b\u9ad8\u4eae\u200b\u529f\u80fd\u200b\u7531\u200biced
\u200b\u7684\u200bhighlighter
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200bCargo.toml
\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u4f9d\u8d56\u200b\u3002
[dependencies]\niced = { git = \"https://github.com/iced-rs/iced.git\", rev = \"refs/tags/text-editor\", features = [ \"highlighter\" ] }\n
\u200b\u5728\u200b\u6587\u672c\u6846\u200b\u7684\u200bhighlight
\u200b\u65b9\u6cd5\u200b\u4e2d\u200b\u8bbe\u7f6e\u200b\u9ad8\u4eae\u200b\u3002highlight
\u200b\u65b9\u6cd5\u200b\u9700\u8981\u200b\u6307\u5b9a\u200b\u914d\u8272\u200b\u65b9\u6848\u200btheme
\u200b\u548c\u200b\u8bed\u6cd5\u200bextension
\u3002extension
\u200b\u53ef\u4ee5\u200b\u6839\u636e\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u7684\u200b\u540e\u7f00\u540d\u200b\u81ea\u52a8\u8bc6\u522b\u200b\uff0c\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u540e\u7f00\u540d\u200b\uff0c\u200b\u5219\u200b\u9ed8\u8ba4\u200b\u4e3a\u200brs
\u3002
let editor = text_editor(&self.content)\n .on_edit(Message::EditorEdit)\n .highlight::<Highlighter>( // use iced::highlighter::Highlighter\n highlighter::Settings {\n theme: highlighter::Theme::SolarizedDark, // Set the theme\n extension: self.path\n .as_ref()\n .and_then(|path| path.extension()?.to_str())\n .unwrap_or(\"rs\") // If extension is not found, use `rs`\n .to_string()\n }, |highlighter, _theme| {\n highlighter.to_format()\n }\n )\n .font(Font::MONOSPACE);\n
\u200b\u63a5\u4e0b\u6765\u200b\u6dfb\u52a0\u200b\u9ad8\u4eae\u200b\u98ce\u683c\u200b\u7684\u200b\u9009\u62e9\u200b\u529f\u80fd\u200b\u3002\u200b\u9996\u5148\u200b\u5728\u200bEditor
\u200b\u4e2d\u200b\u6dfb\u52a0\u200btheme
\u200b\u72b6\u6001\u200b\u4f5c\u4e3a\u200b\u5f53\u524d\u200b\u7684\u200b\u4e3b\u9898\u200b\uff0c\u200b\u5e76\u4e14\u200b\u8bbe\u7f6e\u200b\u521d\u59cb\u5316\u200b\u72b6\u6001\u200b\u3002
struct Editor {\n // ...\n theme: highlighter::Theme\n}\n// ... In `new` function\nSelf {\n // ...\n theme: highlighter::Theme::SolarizedDark\n},\n// ... In `view` function\nhighlighter::Settings {\n theme: self.theme,\n // ...\n}\n
\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200bpick_list
\u200b\u63a7\u4ef6\u200b\u7528\u4e8e\u200b\u9009\u62e9\u200b\u9ad8\u4eae\u200b\u98ce\u683c\u200b\uff0cpick_list
\u200b\u9700\u8981\u200b\u8bbe\u7f6e\u200b\u9009\u9879\u200b\u3001\u200b\u5f53\u524d\u200b\u9009\u4e2d\u200b\u9879\u200b\u548c\u200b\u89e6\u53d1\u200b\u4e8b\u4ef6\u200b\u3002\u200b\u6bcf\u6b21\u200b\u66f4\u65b0\u200b\u65f6\u200b\u90fd\u200b\u4f1a\u200b\u4ee5\u200b\u9009\u4e2d\u200b\u9879\u4e3a\u200b\u53c2\u6570\u200b\u89e6\u53d1\u200b\u4e8b\u4ef6\u200b\u3002
let controls = row![\n toolbar_button(\"New\", Message::NewButtonPressed),\n toolbar_button(\"Open\", Message::OpenButtonPressed),\n toolbar_button(\"Save\", Message::SaveButtonPressed),\n horizontal_space(Length::Fill),\n pick_list(highlighter::Theme::ALL, Some(self.theme), Message::ThemeChanged)\n].spacing(10);\n
\u200b\u540c\u65f6\u200b\u66f4\u65b0\u200bThemeChanged
\u200b\u4e8b\u4ef6\u200b\u7684\u200b\u5904\u7406\u200b\u903b\u8f91\u200b
// ... In `update` function\nMessage::ThemeChanged(theme) => {\n self.theme = theme;\n Command::none()\n}\n
\u200b\u5185\u7f6e\u200b\u7684\u200b\u90e8\u5206\u200b\u4e3b\u9898\u200b\u5e76\u200b\u4e0d\u662f\u200b\u6697\u8272\u200b\u4e3b\u9898\u200b\uff0c\u200b\u9700\u8981\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u6839\u636e\u200b\u4e3b\u9898\u200b\u7684\u200b\u4eae\u200b\u6697\u200b\u5207\u6362\u200b\u7a97\u53e3\u200b\u914d\u8272\u200b\u7684\u200b\u529f\u80fd\u200b\uff1a
// ... In `impl Application for Editor`\nfn theme(&self) -> Theme {\n if self.theme.is_dark() {\n Theme::Dark\n } else {\n Theme::Light\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\n\nuse iced::{executor, theme, Application, Command, Element, Font, Length, Settings, Theme};\nuse iced::highlighter::{self, Highlighter};\nuse iced::widget::{button, column, container, horizontal_space, pick_list, row, text, text_editor, tooltip};\n\nfn main() -> iced::Result {\n Editor::run(Settings {\n fonts: vec![include_bytes!(\"../fonts/editor-icon.ttf\").as_slice().into()],\n ..Default::default()\n })\n}\n\nstruct Editor {\n path: Option<PathBuf>,\n content: text_editor::Content,\n modified: bool,\n error: Option<Error>,\n theme: highlighter::Theme\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n FileSaved(Result<PathBuf, Error>),\n ThemeChanged(highlighter::Theme),\n NewButtonPressed,\n OpenButtonPressed,\n SaveButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None,\n modified: false,\n path: None,\n theme: highlighter::Theme::SolarizedDark\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n match &action {\n text_editor::Action::Edit(_) => self.modified = true,\n _ => {}\n }\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.modified = false;\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileSaved(Ok(path)) => {\n self.path = Some(path);\n self.modified = false;\n Command::none()\n },\n Message::FileOpened(Err(error)) | Message::FileSaved(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::ThemeChanged(theme) => {\n self.theme = theme;\n Command::none()\n },\n Message::NewButtonPressed => {\n self.content = text_editor::Content::new();\n self.error = None;\n self.path = None;\n self.modified = false;\n Command::none()\n },\n Message::OpenButtonPressed => {\n self.modified = false;\n Command::perform(pick_file(), Message::FileOpened)\n },\n Message::SaveButtonPressed => {\n let content = self.content.text();\n match self.modified {\n false => Command::none(),\n true => Command::perform(\n save_file(self.path.clone(), content),\n Message::FileSaved\n )\n }\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content)\n .on_edit(Message::EditorEdit)\n .highlight::<Highlighter>(\n highlighter::Settings {\n theme: self.theme,\n extension: self.path\n .as_ref()\n .and_then(|path| path.extension()?.to_str())\n .unwrap_or(\"rs\")\n .to_string()\n }, |highlighter, _theme| {\n highlighter.to_format()\n }\n )\n .font(Font::MONOSPACE);\n let controls = row![\n toolbar_button(\"New\", Message::NewButtonPressed),\n toolbar_button(\"Open\", Message::OpenButtonPressed),\n toolbar_button(\"Save\", Message::SaveButtonPressed),\n horizontal_space(Length::Fill),\n pick_list(highlighter::Theme::ALL, Some(self.theme), Message::ThemeChanged)\n ].spacing(10);\n\n // Query cursor position\n let path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n } else {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n text(format!(\"{}{}\", path_text, suffix))\n };\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![\n path_indicator,\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n if self.theme.is_dark() {\n Theme::Dark\n } else {\n Theme::Light\n }\n }\n}\n\nasync fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n\nasync fn save_file(path: Option<PathBuf>, content: String) -> Result<PathBuf, Error> {\n let path = if let Some(path) = path {\n path\n } else {\n rfd::AsyncFileDialog::new()\n .set_title(\"Save the file to...\")\n .save_file()\n .await\n .ok_or(Error::DialogClosed)?\n .path()\n .to_path_buf()\n };\n tokio::fs::write(&path, content)\n .await\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n .map(|_| path)\n}\n\nfn toolbar_button<'a>(description: &str, callback: Message) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n let lower = description.to_lowercase();\n let icon = text(match lower.as_str() {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n\n tooltip(\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press(callback),\n description, tooltip::Position::FollowCursor\n ).style(theme::Container::Box).into()\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"japanese/","title":"\u65e5\u8bed","text":"\u200b\u65e5\u8bed\u200b\u5b66\u4e60\u200b\u7b14\u8bb0\u200b
- \u200b\u65e5\u8bed\u200b(1) - 2023-2024\u200b\u5b66\u5e74\u200b\u79cb\u5b63\u200b\u5b66\u671f\u200b
- \u200b\u77ed\u8bed\u200b\u4e0e\u200b\u8868\u8fbe\u200b
- \u200b\u8bed\u6cd5\u200b
- \u200b\u5355\u8bcd\u8868\u200b
"},{"location":"japanese/japanese-1-grammar/","title":"\u65e5\u8bed\u200b(1)\u200b\u8bed\u6cd5","text":""},{"location":"japanese/japanese-1-grammar/#_1","title":"\u8bcd\u6cd5","text":"\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u7684\u200b\u5355\u8bcd\u200b\u8bcd\u6027\u200b\u4e3b\u8981\u200b\u6709\u200b\u540d\u8bcd\u200b\u3001\u200b\u52a8\u8bcd\u200b\u3001\u200b\u5f62\u5bb9\u8bcd\u200b\u3001\u200b\u526f\u8bcd\u200b\u3001\u200b\u52a9\u8bcd\u200b\u3001\u200b\u63a5\u7eed\u8bcd\u200b\u7b49\u200b\u3002\u200b\u5176\u4e2d\u200b\uff0c\u200b\u52a8\u8bcd\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3001III\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3001III\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3002\u200b\u5f62\u5bb9\u8bcd\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u3001II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u3002
- \u200b\u540d\u8bcd\u200b\u3001\u200b\u4ee3\u8bcd\u200b\u3001\u200b\u6570\u8bcd\u200b\u79f0\u4e3a\u200b\u300c\u200b\u4f53\u8a00\u200b\u300d\u3002
- \u200b\u52a8\u8bcd\u200b\u3001\u200b\u5f62\u5bb9\u8bcd\u200b\u3001\u200b\u5f62\u5bb9\u200b\u52a8\u8bcd\u200b\u79f0\u4e3a\u200b\u300c\u200b\u7528\u8a00\u200b\u300d\u3002
"},{"location":"japanese/japanese-1-grammar/#_2","title":"\u300c\u30a2\u30bd\u30b3\u30c9\u300d\u200b\u7cfb\u7edf","text":"\u200b\u5728\u200b\u65e5\u8bed\u200b\u4e2d\u200b\uff0c\u300c\u30a2\u30bd\u30b3\u30c9\u300d\u200b\u548c\u200b\u300c\u308c\u300d\uff08\u200b\u4e8b\u7269\u200b\uff09\u3001\u300c\u3053\u300d\uff08\u200b\u5730\u70b9\u200b\uff09\u3001\u300c\u3061\u3089\u300d\uff08\u200b\u65b9\u4f4d\u200b\uff09\u200b\u7b49\u200b\u6307\u793a\u200b\u4ee3\u8bcd\u200b\u8fde\u7528\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u8be5\u8bcd\u200b\u7684\u200b\u8fdc\u8fd1\u200b\u3002
\u200b\u524d\u7f00\u200b \u200b\u4e8b\u7269\u200b \u200b\u5730\u70b9\u200b \u200b\u65b9\u4f4d\u200b \u200b\u72b6\u6001\u200b \u200b\u8fd1\u79f0\u200b \u3053 \u3053\u308c \u3053\u3053 \u3053\u3061\u3089 \u3053\u3093\u306a \u200b\u4e2d\u79f0\u200b \u305d \u305d\u308c \u305d\u3053 \u305d\u3061\u3089 \u305d\u3093\u306a \u200b\u8fdc\u79f0\u200b \u3042 \u3042\u308c \u3042\u305d\u3053 \u3042\u3061\u3089 \u3042\u3093\u306a \u200b\u4e0d\u5b9a\u200b\u79f0\u200b \u3069 \u3069\u308c \u3069\u3053 \u3069\u3061\u3089 \u3069\u3093\u306a \u200b\u4e0d\u5b9a\u200b\u79f0\u200b\u662f\u200b\u7591\u95ee\u8bcd\u200b\uff0c\u200b\u7528\u4e8e\u200b\u63d0\u95ee\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_3","title":"\u5f62\u5bb9\u8bcd","text":"\u200b\u5f62\u5bb9\u8bcd\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u548c\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u3002I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u8bcd\u5c3e\u200b\u662f\u200b\u300c\u3044\u300d\uff0c\u200b\u5176\u4ed6\u200b\u7684\u200b\u90fd\u200b\u662f\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0cII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u53c8\u200b\u79f0\u4e3a\u200b\u5f62\u5bb9\u200b\u52a8\u8bcd\u200b\uff0c\u200b\u5176\u200b\u539f\u578b\u200b\u7684\u200b\u8bcd\u5c3e\u200b\u4e3a\u200b\u300c\u3060\u300d\u3002
I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u542b\u4e49\u200b II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u542b\u4e49\u200b \u3042\u305f\u3089\u3057\u3044 \u200b\u65b0\u200b\u7684\u200b \u3060\u3044\u3058\u3087\u3046\u3076 \u200b\u6ca1\u5173\u7cfb\u200b \u305f\u304b\u3044 \u200b\u9ad8\u200b\u7684\u200b \u3079\u3093\u308a \u200b\u65b9\u4fbf\u200b \u3072\u308d\u3044 \u200b\u5bbd\u200b\u7684\u200b \u3059\u304d \u200b\u559c\u6b22\u200b \u200b\u4f8b\u5916\u200b\uff1a\u200b\u7dba\u9e97\u200b\uff08\u304d\u308c\u3044\uff09\u3001\u200b\u5acc\u200b\u3044\uff08\u304d\u3089\u3044\uff09\u200b\u662f\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u200b\u4f46\u662f\u200b\u8bcd\u5c3e\u200b\u662f\u200b\u300c\u3044\u300d\u3002
\u200b\u5f62\u5bb9\u8bcd\u200b\u6709\u200b\u3066\u200b\u578b\u200b\u53d8\u5f62\u200b\u3002
\u3066\u200b\u578b\u200b\u306a\u3044\u200b\u578b\u200b\u3063\u305f\u200b\u578b\u200b \u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u8fde\u7528\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8fde\u63a5\u200b\u4e24\u4e2a\u200b\u5206\u53e5\u200b\u3002
- I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u8bcd\u5c3e\u200b\u7684\u200b\u300c\u3044\u300d\u200b\u53d8\u4e3a\u200b\u300c\u304f\u3066\u300d\u3002
- II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5728\u200b\u8bcd\u5c3e\u200b\u76f4\u63a5\u200b\u52a0\u4e0a\u200b\u300c\u3067\u300d\u3002
\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u3066\u200b\u578b\u200b \u3042\u305f\u3089\u3057\u3044 I\u200b\u7c7b\u200b \u3042\u305f\u3089\u3057\u304f\u3066 \u305f\u304b\u3044 I\u200b\u7c7b\u200b \u305f\u304b\u304f\u3066 \u3072\u308d\u3044 I\u200b\u7c7b\u200b \u3072\u308d\u304f\u3066 \u3079\u3093\u308a II\u200b\u7c7b\u200b \u3079\u3093\u308a\u3067 \u3059\u304d II\u200b\u7c7b\u200b \u3059\u304d\u3067 \u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u7b80\u4f53\u200b\u5426\u5b9a\u53e5\u200b\u4e2d\u200b\u3002
- I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u8bcd\u5c3e\u200b\u7684\u200b\u300c\u3044\u300d\u200b\u53d8\u4e3a\u200b\u300c\u304f\u306a\u3044\u300d\u3002
- II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u5728\u200b\u8bcd\u5c3e\u200b\u76f4\u63a5\u200b\u52a0\u4e0a\u200b\u300c\u3067\u306f\u306a\u3044\u300d\u3002
\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u306a\u3044\u200b\u578b\u200b \u3042\u305f\u3089\u3057\u3044 I\u200b\u7c7b\u200b \u3042\u305f\u3089\u3057\u304f\u306a\u3044 \u305f\u304b\u3044 I\u200b\u7c7b\u200b \u305f\u304b\u304f\u306a\u3044 \u3072\u308d\u3044 I\u200b\u7c7b\u200b \u3072\u308d\u304f\u306a\u3044 \u3079\u3093\u308a II\u200b\u7c7b\u200b \u3079\u3093\u308a\u3067\u306f\u306a\u3044 \u3059\u304d II\u200b\u7c7b\u200b \u3059\u304d\u3067\u306f\u306a\u3044 \u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3063\u305f\u200b\u578b\u200b\u662f\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u8fc7\u53bb\u200b\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u7b80\u4f53\u200b\u8fc7\u53bb\u200b\u53e5\u200b\u4e2d\u200b\u3002
- I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3063\u305f\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u8bcd\u5c3e\u200b\u7684\u200b\u300c\u3044\u300d\u200b\u53d8\u4e3a\u200b\u300c\u304b\u3063\u305f\u300d\u3002
- II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3063\u305f\u200b\u578b\u200b\u662f\u200b\u5728\u200b\u8bcd\u5c3e\u200b\u76f4\u63a5\u200b\u52a0\u4e0a\u200b\u300c\u3060\u3063\u305f\u300d\uff08\u200b\u76f8\u5f53\u4e8e\u200b\u539f\u578b\u200b\u76f4\u63a5\u200b\u52a0\u200b\u300c\u3063\u305f\u300d\uff09\u3002
\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u3063\u305f\u200b\u578b\u200b \u3042\u305f\u3089\u3057\u3044 I\u200b\u7c7b\u200b \u3042\u305f\u3089\u3057\u304b\u3063\u305f \u305f\u304b\u3044 I\u200b\u7c7b\u200b \u305f\u304b\u304b\u3063\u305f \u3072\u308d\u3044 I\u200b\u7c7b\u200b \u3072\u308d\u304b\u3063\u305f \u3079\u3093\u308a II\u200b\u7c7b\u200b \u3079\u3093\u308a\u3060\u3063\u305f \u3059\u304d II\u200b\u7c7b\u200b \u3059\u304d\u3060\u3063\u305f \u200b\u6ce8\u610f\u200b\u300c\u306a\u3044\u300d\u200b\u578b\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u770b\u4f5c\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u200b\u5176\u200b\u8fc7\u53bb\u200b\u5f62\u5f0f\u200b\u4e3a\u200b\u300c\u306a\u304b\u3063\u305f\u300d\u3002
- I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u4fee\u9970\u200b\u4f53\u8a00\u65f6\u200b\uff0c\u200b\u76f4\u63a5\u200b\u52a0\u4f53\u8a00\u200b\u5373\u53ef\u200b\uff0c\u200b\u4fee\u9970\u200b\u7528\u8a00\u65f6\u200b\uff08\u200b\u5373\u200b\u526f\u8bcd\u200b\u5f62\u5f0f\u200b\uff09\u200b\u9700\u8981\u200b\u5c06\u200b\u300c\u3044\u300d\u200b\u53d8\u4e3a\u200b\u300c\u304f\u300d\u3002
- II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u4fee\u9970\u200b\u4f53\u8a00\u65f6\u200b\u9700\u8981\u200b\u52a0\u200b\u300c\u306a\u300d\uff0c\u200b\u4fee\u9970\u200b\u7528\u8a00\u65f6\u200b\u9700\u8981\u200b\u52a0\u200b\u300c\u306b\u300d\u3002
"},{"location":"japanese/japanese-1-grammar/#_4","title":"\u52a8\u8bcd","text":"\u200b\u52a8\u8bcd\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3001II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3001III\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3002
- II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u8bcd\u5c3e\u200b\u662f\u200b\u300c\u308b\u300d\uff0c\u300c\u308b\u300d\u200b\u524d\u200b\u7684\u200b\u5047\u540d\u200b\u662f\u200b\u300c\u3044\u300d\u200b\u6bb5\u200b\u6216\u200b\u300c\u3048\u300d\u200b\u6bb5\u200b\u3002
- III\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u8bcd\u5c3e\u200b\u662f\u200b\u300c\u3059\u308b\u300d\u200b\u6216\u200b\u300c\u304f\u308b\u300d\u3002\u300c\u3059\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u52a8\u8bcd\u200b\u53c8\u200b\u79f0\u4e3a\u200b\u30b5\u200b\u53d8\u52a8\u200b\u8bcd\u200b\uff0c\u300c\u304f\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u52a8\u8bcd\u200b\u53c8\u200b\u79f0\u4e3a\u200b\u30ab\u200b\u53d8\u52a8\u200b\u8bcd\u200b\u3002
- \u200b\u5269\u4e0b\u200b\u6240\u6709\u200b\u7684\u200b\u52a8\u8bcd\u200b\u5747\u200b\u4e3a\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3002I\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u662f\u200b\u300c\u3046\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\u3002
\u200b\u52a8\u8bcd\u200b\u6709\u200b\u307e\u3059\u200b\u578b\u200b\u3001\u306a\u3044\u200b\u578b\u200b\u3001\u305f\u200b\u578b\u200b\u3001\u3066\u200b\u578b\u200b\u7b49\u200b\u4e0d\u540c\u200b\u7684\u200b\u53d8\u5f62\u200b\u3002
\u307e\u3059\u200b\u578b\u200b\u306a\u3044\u200b\u578b\u200b\u305f\u200b\u578b\u200b\u3066\u200b\u578b\u200b \u200b\u52a8\u8bcd\u200b\u7684\u200b\u307e\u3059\u200b\u578b\u200b\u662f\u200b\u52a8\u8bcd\u200b\u7684\u200b\u656c\u4f53\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u656c\u4f53\u200b\u53e5\u200b\u4e2d\u200b\u3002
- II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u307e\u3059\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u307e\u3059\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u307e\u3059\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u3059\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3057\u307e\u3059\u300d\uff0c\u200b\u4ee5\u200b\u300c\u304f\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u307e\u3059\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u304f\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u304d\u307e\u3059\u300d\u3002
- I\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u307e\u3059\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u300c\u3046\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u5bf9\u5e94\u200b\u7684\u200b\u300c\u3044\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\uff0c\u200b\u518d\u200b\u52a0\u4e0a\u200b\u300c\u307e\u3059\u300d\u3002
\u200b\u52a8\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u307e\u3059\u200b\u578b\u200b \u3042\u308b I\u200b\u7c7b\u200b \u3042\u308a\u307e\u3059 \u3067\u304d\u308b II\u200b\u7c7b\u200b \u3067\u304d\u307e\u3059 \u3068\u308b I\u200b\u7c7b\u200b \u3068\u308a\u307e\u3059 \u308c\u3093\u3057\u3085\u3046\u3059\u308b III\u200b\u7c7b\u200b \u308c\u3093\u3057\u3085\u3046\u3057\u307e\u3059 \u3082\u3064 I\u200b\u7c7b\u200b \u3082\u3061\u307e\u3059 \u200b\u52a8\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u52a8\u8bcd\u200b\u7684\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u7b80\u4f53\u200b\u5426\u5b9a\u53e5\u200b\u4e2d\u200b\u3002
- II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u306a\u3044\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u3059\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3057\u306a\u3044\u300d\uff0c\u200b\u4ee5\u200b\u300c\u304f\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u304f\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3053\u306a\u3044\u300d\u3002
- I\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u300c\u3046\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u5bf9\u5e94\u200b\u7684\u200b\u300c\u3042\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\uff0c\u200b\u518d\u200b\u52a0\u4e0a\u200b\u300c\u306a\u3044\u300d\u3002
\u200b\u52a8\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u306a\u3044\u200b\u578b\u200b \u3042\u308b I\u200b\u7c7b\u200b \u3042\u304b\u306a\u3044 \u3067\u304d\u308b II\u200b\u7c7b\u200b \u3067\u304d\u306a\u3044 \u3068\u308b I\u200b\u7c7b\u200b \u3068\u3089\u306a\u3044 \u308c\u3093\u3057\u3085\u3046\u3059\u308b III\u200b\u7c7b\u200b \u308c\u3093\u3057\u3085\u3046\u3057\u306a\u3044 \u3082\u3064 I\u200b\u7c7b\u200b \u3082\u305f\u306a\u3044 \u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u52a8\u8bcd\u200b\u7684\u200b\u8fc7\u53bb\u200b\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u7b80\u4f53\u200b\u8fc7\u53bb\u200b\u53e5\u200b\u4e2d\u200b\u3002
- II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u305f\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u3059\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3057\u305f\u300d\uff0c\u200b\u4ee5\u200b\u300c\u304f\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u304f\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u304d\u305f\u300d\u3002
- I\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u8bcd\u5c3e\u200b\u7684\u200b\u300c\u3046\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\u3002
- \u200b\u4ee5\u200b\u300c\u3046\u300d\u3001\u300c\u3064\u300d\u3001\u300c\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3063\u305f\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3080\u300d\u3001\u300c\u3076\u300d\u3001\u300c\u306c\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3093\u3060\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u304f\u300d\u3001\u300c\u3050\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3044\u305f\u300d\u200b\u548c\u200b\u300c\u3044\u3060\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3057\u305f\u300d\u3002
- \u200b\u7279\u4f8b\u200b\uff1a\u300c\u200b\u884c\u200b\u304f\u300d\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u300c\u3044\u3063\u305f\u300d\u3002
\u200b\u52a8\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u305f\u200b\u578b\u200b \u3042\u308b I\u200b\u7c7b\u200b \u3042\u3063\u305f \u3067\u304d\u308b II\u200b\u7c7b\u200b \u3067\u304d\u305f \u3068\u308b I\u200b\u7c7b\u200b \u3068\u3063\u305f \u308c\u3093\u3057\u3085\u3046\u3059\u308b III\u200b\u7c7b\u200b \u308c\u3093\u3057\u3085\u3046\u3057\u305f \u3082\u3064 I\u200b\u7c7b\u200b \u3082\u3063\u305f \u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u52a8\u8bcd\u200b\u7684\u200b\u8fde\u7528\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8fde\u63a5\u200b\u4e24\u4e2a\u200b\u5206\u53e5\u200b\u3002
- II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3066\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u3059\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3057\u3066\u300d\uff0c\u200b\u4ee5\u200b\u300c\u304f\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u304f\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u304d\u3066\u300d\u3002
- I\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u8bcd\u5c3e\u200b\u7684\u200b\u300c\u3046\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\u3002
- \u200b\u4ee5\u200b\u300c\u3046\u300d\u3001\u300c\u3064\u300d\u3001\u300c\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3063\u3066\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3080\u300d\u3001\u300c\u3076\u300d\u3001\u300c\u306c\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3093\u3067\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u304f\u300d\u3001\u300c\u3050\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3044\u3066\u300d\u200b\u548c\u200b\u300c\u3044\u3067\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3057\u3066\u300d\u3002
\u200b\u52a8\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u3066\u200b\u578b\u200b \u3042\u308b I\u200b\u7c7b\u200b \u3042\u3063\u3066 \u3067\u304d\u308b II\u200b\u7c7b\u200b \u3067\u304d\u3066 \u3068\u308b I\u200b\u7c7b\u200b \u3068\u3063\u3066 \u308c\u3093\u3057\u3085\u3046\u3059\u308b III\u200b\u7c7b\u200b \u308c\u3093\u3057\u3085\u3046\u3057\u3066 \u3082\u3064 I\u200b\u7c7b\u200b \u3082\u3063\u3066"},{"location":"japanese/japanese-1-grammar/#_5","title":"\u53e5\u6cd5","text":""},{"location":"japanese/japanese-1-grammar/#_6","title":"\u8bed\u53e5\u200b\u5206\u7c7b","text":"\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u7684\u200b\u8bed\u53e5\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u5b58\u5728\u200b\u53e5\u200b\uff08\u3042\u308a\u307e\u3059\u3001\u3044\u307e\u3059\uff09\u3001\u200b\u5224\u65ad\u53e5\u200b\uff08\u200b\u540d\u8bcd\u200b\uff09\u3001\u200b\u53d9\u8ff0\u200b\u53e5\u200b\uff08\u200b\u4e00\u822c\u200b\u52a8\u8bcd\u200b\uff09\u3001\u200b\u63cf\u5199\u200b\u53e5\u200b\uff08\u200b\u5f62\u5bb9\u8bcd\u200b\u3001\u200b\u5f62\u5bb9\u200b\u52a8\u8bcd\u200b\uff09\u3002\u200b\u5224\u65ad\u53e5\u200b\u548c\u200b\u63cf\u5199\u200b\u53e5\u200b\u7684\u200b\u656c\u4f53\u200b\u5f62\u5f0f\u200b\u662f\u200b\u300c\u301c\u3067\u3059\u300d\uff0c\u200b\u7b80\u4f53\u200b\u5f62\u5f0f\u200b\u662f\u200b\u300c\u301c\u3060\u300d\u3002\u200b\u53d9\u8ff0\u200b\u53e5\u200b\u548c\u200b\u5b58\u5728\u200b\u53e5\u200b\u7684\u200b\u656c\u4f53\u200b\u5f62\u5f0f\u200b\u662f\u200b\u300c\u301c\u307e\u3059\u300d\uff0c\u200b\u53c8\u79f0\u200b\u307e\u3059\u200b\u578b\u200b\u3002
\u200b\u53e5\u5b50\u200b\u7531\u200b\u4e0d\u540c\u200b\u7684\u200b\u300c\u200b\u6587\u8282\u200b\u300d\u200b\u7ec4\u6210\u200b\uff0c\u200b\u6587\u8282\u200b\u662f\u200b\u65e5\u8bed\u200b\u8bed\u6cd5\u7ed3\u6784\u200b\u4e2d\u200b\u7684\u200b\u5355\u5143\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u6587\u8282\u200b\u90fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u300c\u200b\u6838\u5fc3\u200b\u8bcd\u200b\u300d\uff0c\u200b\u6838\u5fc3\u200b\u8bcd\u200b\u7684\u200b\u8bcd\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u6587\u8282\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u6587\u8282\u200b\u4e2d\u200b\u7684\u200b\u9644\u5c5e\u200b\u8bcd\u200b\uff08\u200b\u52a9\u8bcd\u200b\uff09\u200b\u7528\u4e8e\u200b\u4fee\u9970\u200b\u6838\u5fc3\u200b\u8bcd\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u52a9\u8bcd\u200b\u53ea\u80fd\u200b\u7528\u4e8e\u200b\u4fee\u9970\u200b\u540d\u8bcd\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_7","title":"\u683c\u200b\u52a9\u8bcd","text":"\u200b\u683c\u200b\u52a9\u8bcd\u200b\u7528\u4e8e\u200b\u540d\u8bcd\u200b\u540e\u200b\uff0c\u200b\u8868\u793a\u200b\u540d\u8bcd\u200b\u5728\u200b\u53e5\u5b50\u200b\u4e2d\u200b\u7684\u200b\u8bed\u6cd5\u200b\u6210\u5206\u200b\u3002
\u304c\u306e\u306b\u3067\u3092\u304b\u3089\u3078\u3088\u308a\u307b\u3069 \u200b\u52a9\u8bcd\u200b\u300c\u304c\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e3b\u8bed\u200b\uff0c\u200b\u5176\u524d\u200b\u7684\u200b\u540d\u8bcd\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u6267\u884c\u8005\u200b\uff0c\u200b\u6216\u8005\u200b\u63cf\u5199\u200b\u3001\u200b\u5224\u65ad\u200b\u6216\u200b\u5b58\u5728\u200b\u7684\u200b\u5bf9\u8c61\u200b\u3002
\u300c\u200b\u79c1\u200b\u304c\u200b\u884c\u200b\u304d\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u53bb\u200b\u3002\uff08\u200b\u53d9\u8ff0\u200b\u53e5\u200b\uff09 \u300c\u200b\u79c1\u200b\u304c\u200b\u5b66\u751f\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u662f\u200b\u5b66\u751f\u200b\u3002\uff08\u200b\u5224\u65ad\u53e5\u200b\uff09 \u300c\u200b\u79c1\u200b\u304c\u3044\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u5728\u200b\u3002\uff08\u200b\u5b58\u5728\u200b\u53e5\u200b\uff09
\u200b\u52a9\u8bcd\u200b\u300c\u306e\u300d\u200b\u4f5c\u4e3a\u200b\u683c\u200b\u52a9\u8bcd\u200b\u65f6\u200b\u8868\u793a\u200b\u6240\u6709\u200b\u5173\u7cfb\u200b\uff0c\u200b\u5176\u524d\u200b\u7684\u200b\u540d\u8bcd\u200b\u8868\u793a\u200b\u88ab\u200b\u4fee\u9970\u200b\u7684\u200b\u5bf9\u8c61\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff0c\u300c\u306e\u300d\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u540c\u4f4d\u8bed\u200b\uff0c\u200b\u56e0\u6b64\u200b\u300c\u306e\u300d\u200b\u7684\u200b\u5b9e\u9645\u200b\u542b\u4e49\u200b\u9700\u8981\u200b\u6839\u636e\u200b\u4e0a\u4e0b\u6587\u200b\u6765\u200b\u786e\u5b9a\u200b\u3002
\u300c\u30de\u30a4\u30b1\u30eb\u3055\u3093\u306e\u200b\u5f8c\u200b\u8f29\u200b\u306e\u200b\u571f\u5c4b\u200b\u3068\u200b\u7533\u200b\u3057\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u662f\u200b\u8fc8\u514b\u5c14\u200b\u7684\u200b\u540e\u8f88\u200b\u571f\u5c4b\u200b\u3002
\u200b\u53e5\u200b\u4e2d\u200b\u7684\u200b\u300c\u30de\u30a4\u30b1\u30eb\u3055\u3093\u306e\u200b\u5f8c\u200b\u8f29\u200b\u300d\u200b\u8868\u793a\u200b\u8fc8\u514b\u5c14\u200b\u7684\u200b\u540e\u8f88\u200b\uff0c\u200b\u662f\u200b\u6240\u6709\u200b\u5173\u7cfb\u200b\uff0c\u300c\u200b\u5f8c\u200b\u8f29\u200b\u306e\u200b\u571f\u5c4b\u200b\u300d\u200b\u8868\u793a\u200b\u571f\u5c4b\u200b\u662f\u200b\u8fc8\u514b\u5c14\u200b\u7684\u200b\u540e\u8f88\u200b\uff0c\u200b\u662f\u200b\u540c\u4f4d\u8bed\u200b\u5173\u7cfb\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u306b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b
-
\u200b\u52a8\u4f5c\u200b\u53e5\u200b\u4e2d\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u6267\u884c\u200b\u65f6\u95f4\u200b\u3001\u200b\u5730\u70b9\u200b\u3001\u200b\u5bf9\u8c61\u200b\u7b49\u200b\u3002\u200b\u52a8\u8bcd\u200b\u9700\u8981\u200b\u662f\u200b\u79fb\u52a8\u200b\u52a8\u8bcd\u200b\u3002
\u300c7\u200b\u6642\u200b\u306b\u200b\u56f3\u200b\u66f8\u9928\u200b\u306b\u200b\u884c\u200b\u304d\u307e\u3059\u3002\u300d\uff1a7\u200b\u70b9\u53bb\u200b\u56fe\u4e66\u9986\u200b\u3002
-
\u200b\u5b58\u5728\u200b\u53e5\u200b\u4e2d\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u5b58\u5728\u200b\u7684\u200b\u5730\u70b9\u200b\u3002
\u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u306b\u200b\u672c\u200b\u304c\u3042\u308a\u307e\u3059\u3002\u300d\uff1a\u200b\u56fe\u4e66\u9986\u200b\u91cc\u200b\u6709\u200b\u4e66\u200b\u3002 \u300c\u200b\u79c1\u200b\u306b\u306f\u200b\u59c9\u200b\u304c\u200b\u4e00\u4eba\u200b\u3044\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u6709\u200b\u4e00\u4e2a\u200b\u59d0\u59d0\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u3067\u300d\u200b\u7528\u4e8e\u200b
-
\u200b\u63a5\u200b\u540d\u8bcd\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u6267\u884c\u200b\u624b\u6bb5\u200b\u6216\u200b\u65b9\u6cd5\u200b\u3002
\u300c\u200b\u96fb\u8eca\u200b\u3067\u200b\u884c\u200b\u304d\u307e\u3059\u3002\u300d\uff1a\u200b\u5750\u200b\u7535\u8f66\u200b\u53bb\u200b\u3002
-
\u200b\u63a5\u200b\u5730\u70b9\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u53d1\u751f\u200b\u5730\u70b9\u200b\u3002
\u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u3067\u200b\u52c9\u5f37\u200b\u3057\u307e\u3059\u3002\u300d\uff1a\u200b\u5728\u200b\u56fe\u4e66\u9986\u200b\u5b66\u4e60\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u3092\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff08\u200b\u4ed6\u200b\u52a8\u8bcd\u200b\uff09\u200b\u6216\u200b\u4f7f\u5f79\u200b\u6001\u200b\uff08\u200b\u81ea\u52a8\u8bcd\u200b\uff09\u3002
\u300c\u200b\u672c\u200b\u3092\u200b\u8aad\u200b\u307f\u307e\u3059\u3002\u300d\uff1a\u200b\u770b\u4e66\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u304b\u3089\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u8d77\u70b9\u200b\u3002
\u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u304b\u3089\u200b\u51fa\u200b\u767a\u200b\u3057\u307e\u3059\u3002\u300d\uff1a\u200b\u4ece\u200b\u56fe\u4e66\u9986\u200b\u51fa\u53d1\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u3078\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\uff08\u200b\u79fb\u52a8\u200b\u52a8\u8bcd\u200b\uff09\u200b\u7684\u200b\u7ec8\u70b9\u200b\u3002\uff08\u200b\u53ef\u4ee5\u200b\u4e0e\u200b\u300c\u306b\u300d\u200b\u4e92\u6362\u200b\uff09
\u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u3078\u200b\u884c\u200b\u304d\u307e\u3059\u3002\u300d\uff1a\u200b\u53bb\u200b\u56fe\u4e66\u9986\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u3088\u308a\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u6bd4\u8f83\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5176\u524d\u200b\u7684\u200b\u540d\u8bcd\u200b\u7684\u200b\u7a0b\u5ea6\u200b\u6bd4\u200b\u4e3b\u8bed\u200b\u7684\u200b\u7a0b\u5ea6\u200b\u5f31\u200b\u3002
\u300c\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u306f\u200b\u5317\u4eac\u5927\u5b66\u200b\u3088\u308a\u200b\u6709\u540d\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u6e05\u534e\u5927\u5b66\u200b\u6bd4\u200b\u5317\u4eac\u5927\u5b66\u200b\u6709\u540d\u200b\u3002
\u200b\u5728\u200b\u63cf\u8ff0\u200b\u53e5\u200b\u4e2d\u683c\u200b\u52a9\u8bcd\u200b\u300c\u307b\u3069\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u7a0b\u5ea6\u200b\uff0c\u200b\u7528\u4e8e\u200b\u5426\u5b9a\u53e5\u200b\u4e2d\u200b\u8868\u793a\u200b\u5176\u524d\u200b\u7684\u200b\u540d\u8bcd\u200b\u7684\u200b\u7a0b\u5ea6\u200b\u6bd4\u200b\u4e3b\u8bed\u200b\u7684\u200b\u7a0b\u5ea6\u200b\u5f3a\u200b\u3002
\u300c\u200b\u5317\u4eac\u5927\u5b66\u200b\u306f\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u307b\u3069\u200b\u6709\u540d\u200b\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u300d\uff1a\u200b\u5317\u4eac\u5927\u5b66\u200b\u6ca1\u6709\u200b\u6e05\u534e\u5927\u5b66\u200b\u6709\u540d\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_8","title":"\u526f\u200b\u52a9\u8bcd","text":"\u200b\u526f\u200b\u52a9\u8bcd\u200b\u7528\u4e8e\u200b\u4fee\u9970\u8bed\u200b\u6cd5\u200b\u6210\u5206\u200b\uff0c\u200b\u4efb\u4f55\u200b\u4e0d\u662f\u200b\u683c\u200b\u52a9\u8bcd\u200b\u3001\u200b\u63a5\u7eed\u200b\u52a9\u8bcd\u200b\u3001\u200b\u7ec8\u200b\u52a9\u8bcd\u200b\u7684\u200b\u52a9\u8bcd\u200b\u90fd\u200b\u662f\u200b\u526f\u200b\u52a9\u8bcd\u200b\u3002
\u306f\u307e\u3067\u3082\u306e\u307f\u3060\u3051\u3068\u304b\u304f\u3089\u3044\u304b \u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u306f\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u53e5\u5b50\u200b\u7684\u200b\u4e3b\u9898\u200b\uff0c\u200b\u8054\u7ed3\u200b\u524d\u200b\u4e00\u4e2a\u200b\u53e5\u5b50\u200b\u3002\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u5c06\u200b\u5176\u4ed6\u200b\u7684\u200b\u683c\u200b\u52a9\u8bcd\u200b\u4fee\u9970\u200b\u7684\u200b\u8bed\u6cd5\u200b\u6210\u5206\u200b\u4f5c\u4e3a\u200b\u4e3b\u9898\u200b\u3002\u300c\u306f\u300d\u200b\u6240\u200b\u4fee\u9970\u200b\u7684\u200b\u4e3b\u9898\u200b\u901a\u5e38\u200b\u5728\u200b\u53e5\u5b50\u200b\u7684\u200b\u5f00\u5934\u200b\u3002
-
\u200b\u5c06\u200b\u4e3b\u8bed\u200b\u4f5c\u4e3a\u200b\u4e3b\u9898\u200b\uff1a\u300c\u304c\u300d\u200b\u53d8\u4e3a\u200b\u300c\u306f\u300d
\u300c\u200b\u79c1\u200b\u306f\u200b\u5b66\u751f\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u662f\u200b\u5b66\u751f\u200b\u3002
-
\u200b\u5c06\u200b\u5730\u70b9\u200b\u4f5c\u4e3a\u200b\u4e3b\u9898\u200b\uff1a\u300c\u306b\u300d\u200b\u540e\u52a0\u200b\u300c\u306f\u300d
\u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u306e\u200b\u8fd1\u200b\u304f\u306b\u306f\u30b3\u30f3\u30d3\u30cb\u304c\u3042\u308a\u307e\u3059\u3002\u300d\uff1a\u200b\u56fe\u4e66\u9986\u200b\u9644\u8fd1\u200b\u6709\u200b\u4fbf\u5229\u5e97\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff0c\u200b\u7591\u95ee\u8bcd\u200b\u4e0d\u80fd\u200b\u4f5c\u4e3a\u200b\u4e3b\u9898\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e0d\u80fd\u200b\u7528\u200b\u300c\u306f\u300d\u200b\u4fee\u9970\u200b\u7591\u95ee\u8bcd\u200b\uff0c\u200b\u53ea\u80fd\u200b\u7528\u200b\u300c\u304c\u300d\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u307e\u3067\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u65f6\u95f4\u200b\u3001\u200b\u5730\u70b9\u200b\u3001\u200b\u8303\u56f4\u200b\u7b49\u200b\u7684\u200b\u7ec8\u70b9\u200b\uff0c\u200b\u8868\u793a\u200b\u201c\u200b\u76f4\u5230\u200b\u201d\u3001\u201c\u200b\u5230\u200b\u2026\u2026\u200b\u4e3a\u6b62\u200b\u201d\u3002\u200b\u53ef\u4ee5\u200b\u548c\u200b\u300c\u304b\u3089\u300d\u200b\u4e00\u8d77\u200b\u7528\u200b\uff0c\u200b\u8868\u793a\u200b\u201c\u200b\u4ece\u200b\u2026\u2026\u200b\u5230\u200b\u2026\u2026\u201d\u3002
\u300c\u3055\u3063\u304d\u307e\u3067\u200b\u56f3\u200b\u66f8\u9928\u200b\u306b\u3044\u307e\u3057\u305f\u3002\u300d\uff1a\u200b\u521a\u624d\u200b\u4e00\u76f4\u200b\u5728\u200b\u56fe\u4e66\u9986\u200b\u3002\uff08\u200b\u65f6\u95f4\u200b\uff09 \u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u307e\u3067\u200b\u884c\u200b\u304d\u307e\u3057\u3087\u3046\u3002\u300d\uff1a\u200b\u53bb\u200b\u56fe\u4e66\u9986\u200b\u5427\u200b\u3002\uff08\u200b\u5730\u70b9\u200b\uff09
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u3082\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u201c\u200b\u4e5f\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e0e\u200b\u524d\u9762\u200b\u7684\u200b\u5185\u5bb9\u200b\u76f8\u540c\u200b\u7684\u200b\u4e8b\u7269\u200b\u3002
\u300c\u200b\u79c1\u200b\u3082\u200b\u5b66\u751f\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u4e5f\u200b\u662f\u200b\u5b66\u751f\u200b\u3002 \u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u8fd1\u200b\u304f\u306b\u3082\u200b\u7dcf\u200b\u5408\u200b\u68df\u200b\u304c\u3042\u308a\u307e\u3059\u3002\u300d\uff1a\u200b\u56fe\u4e66\u9986\u200b\u9644\u8fd1\u200b\u4e5f\u200b\u6709\u200b\u7efc\u5408\u697c\u200b\u3002
\u200b\u6ce8\u610f\u200b\u300c\u304c\u300d\u3001\u300c\u306f\u300d\u3001\u300c\u3082\u300d\u200b\u4e0d\u80fd\u200b\u540c\u65f6\u200b\u7528\u4e8e\u200b\u540c\u4e00\u4e2a\u200b\u4e3b\u8bed\u200b\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u306e\u307f\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u201c\u200b\u53ea\u6709\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e0e\u200b\u524d\u9762\u200b\u7684\u200b\u5185\u5bb9\u200b\u4e0d\u540c\u200b\u7684\u200b\u4e8b\u7269\u200b\u3002
\u300c\u304a\u200b\u4f1a\u8a08\u200b\u306f\u200b\u73fe\u91d1\u200b\u306e\u307f\u3067\u3059\u3002\u300d\uff1a\u200b\u53ea\u6536\u200b\u73b0\u91d1\u200b\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u3060\u3051\u300d\u200b\u7684\u200b\u542b\u4e49\u200b\u540c\u200b\u300c\u306e\u307f\u300d\uff0c\u200b\u4f46\u662f\u200b\u300c\u3060\u3051\u300d\u200b\u7684\u200b\u8bed\u6c14\u200b\u66f4\u52a0\u200b\u53e3\u8bed\u200b\u3002
\u300c\u304a\u200b\u4f1a\u8a08\u200b\u306f\u200b\u73fe\u91d1\u200b\u3060\u3051\u3067\u3059\u3002\u300d\uff1a\u200b\u53ea\u6536\u200b\u73b0\u91d1\u200b\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u3068\u304b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u201c\u200b\u4f8b\u5982\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u5217\u4e3e\u200b\u4e8b\u7269\u200b\u3002
\u300c\u200b\u79c1\u200b\u306f\u200b\u65e5\u672c\u200b\u8a9e\u200b\u3068\u304b\u200b\u82f1\u8a9e\u200b\u3068\u304b\u200b\u4e2d\u56fd\u200b\u8a9e\u200b\u3068\u304b\u200b\u8a71\u200b\u305b\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u4f1a\u200b\u8bf4\u200b\u65e5\u8bed\u200b\u3001\u200b\u82f1\u8bed\u200b\u3001\u200b\u6c49\u8bed\u200b\u7b49\u200b\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u304f\u3089\u3044\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u201c\u200b\u5927\u7ea6\u200b\u201d\u3001\u201c\u200b\u5de6\u53f3\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u6570\u91cf\u200b\u3002\u200b\u524d\u9762\u200b\u7684\u200b\u540d\u8bcd\u200b\u4ee5\u200b\u62e8\u97f3\u200b\u7ed3\u5c3e\u200b\u65f6\u200b\uff0c\u300c\u304f\u3089\u3044\u300d\u200b\u53d8\u4e3a\u200b\u300c\u3050\u3089\u3044\u300d\u3002
\u300c\u200b\u5168\u90e8\u200b\u3067100\u200b\u5186\u200b\u304f\u3089\u3044\u3067\u3059\u3002\u300d\uff1a\u200b\u4e00\u5171\u200b\u5927\u7ea6\u200b100\u200b\u65e5\u5143\u200b\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u304b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e0d\u200b\u786e\u5b9a\u200b\u7684\u200b\u4e8b\u7269\u200b\u3002
\u300c\u3044\u3064\u304b\u200b\u56f3\u200b\u66f8\u9928\u200b\u306b\u200b\u884c\u200b\u304d\u307e\u3057\u3087\u3046\u3002\u300d\uff1a\u200b\u4ec0\u4e48\u200b\u65f6\u5019\u200b\u53bb\u200b\u56fe\u4e66\u9986\u200b\u5427\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_9","title":"\u63a5\u7eed\u200b\u52a9\u8bcd","text":"\u200b\u63a5\u7eed\u200b\u52a9\u8bcd\u200b\u7528\u4e8e\u200b\u8fde\u63a5\u200b\u4e24\u4e2a\u200b\u5206\u53e5\u200b\uff0c\u200b\u63a5\u200b\u5728\u200b\u7b2c\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u7684\u200b\u7ed3\u5c3e\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e24\u4e2a\u200b\u5206\u53e5\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5173\u7cfb\u200b\u3002
\u304c\u3051\u3069\u304b\u3089\u3068\u3082\u306e\u3067 \u300c\u304c\u300d\u200b\u5728\u200b\u5206\u53e5\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u65f6\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u8f7b\u5fae\u200b\u7684\u200b\u8f6c\u6298\u200b\u8bed\u6c14\u200b\u3002\u200b\u524d\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u867d\u7136\u200b\u2026\u2026\u201d\uff0c\u200b\u540e\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u4f46\u662f\u200b\u2026\u2026\u201d\u3002
\u300c\u200b\u79c1\u200b\u3067\u3059\u304c\u3001\u200b\u4f55\u200b\u3067\u3059\u304b\u3002\u300d\uff1a\u200b\u6211\u200b\u662f\u200b\uff0c\u200b\u6709\u200b\u4ec0\u4e48\u200b\u4e8b\u200b\u5417\u200b\uff1f
\u300c\u3051\u3069\u300d\u200b\u5728\u200b\u5206\u53e5\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u65f6\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u8f6c\u6298\u200b\u8bed\u6c14\u200b\u3002\u200b\u524d\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u867d\u7136\u200b\u2026\u2026\u201d\uff0c\u200b\u540e\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u4f46\u662f\u200b\u2026\u2026\u201d\u3002\u300c\u3051\u3069\u300d\u200b\u7684\u200b\u8bed\u6c14\u200b\u6bd4\u200b\u300c\u304c\u300d\u200b\u66f4\u52a0\u200b\u53e3\u8bed\u200b\uff0c\u200b\u662f\u200b\u300c\u3051\u308c\u3069\u3082\u300d\u200b\u7684\u200b\u7f29\u5199\u200b\u3002\u200b\u9664\u4e86\u200b\u300c\u3051\u3069\u300d\uff0c\u300c\u3051\u308c\u3069\u3082\u300d\u200b\u8fd8\u6709\u200b\u300c\u3051\u308c\u3069\u300d\u3001\u300c\u3051\u3069\u3082\u300d\u200b\u7b49\u200b\u7f29\u5199\u200b\u5f62\u5f0f\u200b\u3002
\u300c\u305d\u3046\u306a\u3093\u3067\u3059\u3051\u3069\u3001\u3084\u306f\u308a\u200b\u5927\u200b\u5909\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u867d\u7136\u200b\u662f\u200b\u8fd9\u6837\u200b\uff0c\u200b\u4f46\u662f\u200b\u8fd8\u662f\u200b\u5f88\u200b\u8f9b\u82e6\u200b\u3002
\u300c\u304b\u3089\u300d\u200b\u5728\u200b\u5206\u53e5\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u65f6\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u56e0\u679c\u5173\u7cfb\u200b\u3002\u200b\u524d\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u56e0\u4e3a\u200b\u2026\u2026\u201d\uff0c\u200b\u540e\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u6240\u4ee5\u200b\u2026\u2026\u201d\u3002\u200b\u5728\u200b\u8868\u793a\u200b\u56e0\u679c\u5173\u7cfb\u200b\u65f6\u200b\uff0c\u300c\u304b\u3089\u300d\u200b\u524d\u200b\u5fc5\u987b\u200b\u662f\u200b\u4e00\u4e2a\u200b\u53e5\u5b50\u200b\u3002\u300c\u304b\u3089\u300d\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u52a0\u200b\u540e\u8fb9\u200b\u7684\u200b\u5206\u53e5\u200b\uff0c\u200b\u7528\u4e8e\u200b\u9648\u8ff0\u200b\u539f\u56e0\u200b\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u304b\u3089\u3001\u200b\u6dbc\u200b\u3057\u3044\u200b\u6240\u200b\u306b\u200b\u884c\u200b\u304d\u307e\u3057\u3087\u3046\u3002\u300d\uff1a\u200b\u56e0\u4e3a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\uff0c\u200b\u6240\u4ee5\u200b\u53bb\u200b\u51c9\u5feb\u200b\u7684\u200b\u5730\u65b9\u200b\u5427\u200b\u3002
\u300c\u3068\u3082\u300d\u200b\u8868\u793a\u200b\u603b\u6570\u200b\uff0c\u200b\u76f8\u5f53\u4e8e\u200b\u6c49\u8bed\u200b\u4e2d\u200b\u7684\u200b\u201c\u200b\u5171\u200b\u201d\u3001\u201c\u200b\u90fd\u200b\u201d\u3002
\u300c\u304a\u200b\u4e8c\u4eba\u200b\u3068\u3082\u30db\u30c3\u30c8\u30b3\u30fc\u30d2\u30fc\u3067\u3088\u308d\u3057\u3044\u3067\u3059\u304b\u3002\u300d\uff1a\u200b\u4e24\u4f4d\u200b\u90fd\u200b\u8981\u200b\u559d\u200b\u70ed\u5496\u5561\u200b\u5417\u200b\uff1f
\u300c\u306e\u3067\u300d\u200b\u5728\u200b\u5206\u53e5\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u65f6\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u56e0\u679c\u5173\u7cfb\u200b\u3002\u200b\u524d\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u56e0\u4e3a\u200b\u2026\u2026\u201d\uff0c\u200b\u540e\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u6240\u4ee5\u200b\u2026\u2026\u201d\u3002\u200b\u5728\u200b\u8868\u793a\u200b\u56e0\u679c\u5173\u7cfb\u200b\u65f6\u200b\uff0c\u300c\u306e\u3067\u300d\u200b\u524d\u200b\u662f\u200b\u4e00\u4e2a\u200b\u7b80\u4f53\u200b\u53e5\u200b\u3002\u200b\u5982\u679c\u200b\u300c\u306e\u3067\u300d\u200b\u524d\u200b\u662f\u200b\u4e00\u4e2a\u200b\u540d\u8bcd\u200b\u6216\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u200b\u9700\u8981\u200b\u5c06\u200b\u7b80\u4f53\u200b\u53e5\u200b\u7684\u200b\u300c\u3060\u300d\u200b\u53d8\u4e3a\u200b\u300c\u306a\u300d\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u306e\u3067\u3001\u200b\u6dbc\u200b\u3057\u3044\u200b\u6240\u200b\u306b\u200b\u884c\u200b\u304d\u307e\u3057\u3087\u3046\u3002\u300d\uff1a\u200b\u56e0\u4e3a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\uff0c\u200b\u6240\u4ee5\u200b\u53bb\u200b\u51c9\u5feb\u200b\u7684\u200b\u5730\u65b9\u200b\u5427\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_10","title":"\u7ec8\u200b\u52a9\u8bcd","text":"\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u7684\u200b\u7ec8\u200b\u52a9\u8bcd\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u53e5\u5b50\u200b\u7684\u200b\u8bed\u6c14\u200b\u53d8\u5316\u200b\u3002
\u304b\u306d\u3088\u3088\u306d \u300c\u304b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u7591\u95ee\u200b\u7684\u200b\u8bed\u6c14\u200b\u3002\u200b\u5728\u200b\u53e5\u5b50\u200b\u7684\u200b\u7ed3\u5c3e\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u7591\u95ee\u53e5\u200b\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u3067\u3059\u304b\u3002\u300d\uff1a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\u5417\u200b\uff1f
\u300c\u306d\u300d\u200b\u53ef\u4ee5\u200b\u8868\u8fbe\u200b\u786e\u8ba4\u200b\u6216\u200b\u611f\u53f9\u200b\u7684\u200b\u8bed\u6c14\u200b\u3002\u200b\u5f53\u200b\u300c\u306d\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u786e\u8ba4\u200b\u7684\u200b\u8bed\u6c14\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u8bfb\u200b\u5347\u8c03\u200b\uff1b\u200b\u5f53\u200b\u300c\u306d\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u611f\u53f9\u200b\u7684\u200b\u8bed\u6c14\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u8bfb\u200b\u964d\u8c03\u200b\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u571f\u66dc\u65e5\u200b\u3067\u3059\u306d\u3002\u300d\u200b\u4eca\u5929\u200b\u662f\u200b\u661f\u671f\u516d\u200b\u5427\u200b\uff1f\uff08\u200b\u786e\u8ba4\u200b\uff09 \u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u3067\u3059\u306d\u3002\u300d\uff1a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\u554a\u200b\u3002\uff08\u200b\u611f\u53f9\u200b\uff09
\u300c\u3088\u300d\u200b\u7528\u4e8e\u200b\u5f3a\u8c03\u200b\u81ea\u5df1\u200b\u7684\u200b\u89c2\u70b9\u200b\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u3067\u3059\u3088\u3002\u300d\uff1a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\u554a\u200b\u3002
\u300c\u3088\u306d\u300d\u200b\u540c\u65f6\u200b\u5305\u542b\u200b\u4e86\u200b\u300c\u3088\u300d\u200b\u548c\u200b\u300c\u306d\u300d\u200b\u7684\u200b\u8bed\u6c14\u200b\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u3067\u3059\u3088\u306d\u3002\u300d\uff1a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\uff0c\u200b\u5bf9\u200b\u5427\u200b\uff1f
"},{"location":"japanese/japanese-1-grammar/#_11","title":"\u300c\u306f\u300d\u200b\u4e0e\u200b\u300c\u304c\u300d","text":"\u200b\u52a9\u8bcd\u200b\u300c\u304c\u300d\u200b\u662f\u200b\u683c\u200b\u52a9\u8bcd\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e3b\u8bed\u200b\uff0c\u300c\u306f\u300d\u200b\u662f\u200b\u526f\u200b\u52a9\u8bcd\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e3b\u9898\u200b\u3002\u200b\u4e3b\u9898\u200b\u662f\u200b\u6307\u200b\u53e5\u5b50\u200b\u4e3b\u8981\u200b\u63cf\u8ff0\u200b\u7684\u200b\u8bdd\u9898\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7531\u200b\u4e3b\u8bed\u200b\u6216\u200b\u5176\u4ed6\u200b\u6210\u5206\u200b\u5145\u5f53\u200b\u3002
- \u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u306e\u200b\u8fd1\u200b\u304f\u306b\u306f\u30b3\u30f3\u30d3\u30cb\u304c\u3042\u308a\u307e\u3059\u3002\u300d
- \u300c\u30b3\u30f3\u30d3\u30cb\u306f\u200b\u56f3\u200b\u66f8\u9928\u200b\u306e\u200b\u8fd1\u200b\u304f\u306b\u3042\u308a\u307e\u3059\u3002\u300d
- \u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u306e\u3061\u304b\u304f\u306b\u30b3\u30f3\u30d3\u30cb\u304c\u3042\u308a\u307e\u3059\u3002\u300d
- \u200b\u7b2c\u200b1\u200b\u53e5\u200b\u4e2d\u200b\u4e3b\u8981\u200b\u5f3a\u8c03\u200b\u56fe\u4e66\u9986\u200b\u7684\u200b\u9644\u8fd1\u200b\u6709\u200b\u4fbf\u5229\u5e97\u200b\uff0c\u200b\u53e5\u5b50\u200b\u7684\u200b\u4e3b\u9898\u200b\u662f\u200b\u56fe\u4e66\u9986\u200b\u9644\u8fd1\u200b\u7684\u200b\u4e1c\u897f\u200b\uff1b\u200b\u7b2c\u200b2\u200b\u53e5\u200b\u4e2d\u200b\u4e3b\u8981\u200b\u5f3a\u8c03\u200b\u4fbf\u5229\u5e97\u200b\u5728\u200b\u56fe\u4e66\u9986\u200b\u9644\u8fd1\u200b\uff0c\u200b\u53e5\u5b50\u200b\u7684\u200b\u4e3b\u9898\u200b\u662f\u200b\u4fbf\u5229\u5e97\u200b\u3002
- \u200b\u7b2c\u200b3\u200b\u53e5\u200b\u4e0d\u200b\u5305\u542b\u200b\u4e3b\u9898\u200b\uff0c\u200b\u4ec5\u4ec5\u200b\u9648\u8ff0\u200b\u4e86\u200b\u56fe\u4e66\u9986\u200b\u9644\u8fd1\u200b\u6709\u200b\u4fbf\u5229\u5e97\u200b\u3002
\u200b\u5f53\u200b\u56de\u7b54\u200b\u7591\u95ee\u53e5\u200b\u65f6\u200b\uff0c\u200b\u5982\u679c\u200b\u7591\u95ee\u53e5\u200b\u662f\u200b\u7528\u200b\u300c\u304c\u300d\u200b\u63d0\u95ee\u200b\u7684\u200b\uff0c\u200b\u5728\u200b\u56de\u7b54\u200b\u7684\u200b\u65f6\u5019\u200b\u4e5f\u200b\u9700\u8981\u200b\u7528\u200b\u300c\u304c\u300d\u3002
\u200b\u901a\u5e38\u200b\u6765\u8bf4\u200b\uff1a
- \u300c\u306f\u300d\u200b\u901a\u5e38\u200b\u7528\u4e8e\u200b\u63d0\u793a\u200b\u5df2\u6709\u200b\u7684\u200b\u4fe1\u606f\u200b\uff0c\u300c\u304c\u300d\u200b\u7528\u4e8e\u200b\u63d0\u793a\u200b\u65b0\u200b\u7684\u200b\u4fe1\u606f\u200b\u3002
- \u300c\u306f\u300d\u200b\u5f3a\u8c03\u200b\uff08\u200b\u4f20\u8fbe\u200b\uff09\u200b\u7684\u200b\u901a\u5e38\u200b\u662f\u200b\u300c\u306f\u300d\u200b\u540e\u9762\u200b\u7684\u200b\u5185\u5bb9\u200b\uff0c\u300c\u304c\u300d\u200b\u5f3a\u8c03\u200b\uff08\u200b\u4f20\u8fbe\u200b\uff09\u200b\u7684\u200b\u901a\u5e38\u200b\u662f\u200b\u300c\u304c\u300d\u200b\u524d\u9762\u200b\u7684\u200b\u5185\u5bb9\u200b\u3002
- \u200b\u7528\u4e8e\u200b\u5f62\u5bb9\u200b\u80fd\u529b\u200b\u7684\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff08\u300c\u3058\u3087\u3046\u305a\u300d\u3001\u300c\u3078\u305f\u300d\u3001\u300c\u200b\u597d\u200b\u304d\u300d\u3001\u300c\u3068\u304f\u3044\u300d\uff09\u200b\u6216\u200b\u52a8\u8bcd\u200b\uff08\u300c\u3067\u304d\u308b\u300d\u3001\u300c\u308f\u304b\u308b\u300d\uff09\u200b\u7684\u200b\u4e3b\u8bed\u200b\u53ea\u80fd\u200b\u7528\u200b\u300c\u304c\u300d\uff0c\u200b\u4e0d\u80fd\u200b\u7528\u200b\u300c\u306f\u300d\u3002
"},{"location":"japanese/japanese-1-grammar/#_12","title":"\u63a5\u7eed\u8bcd","text":"\u200b\u63a5\u7eed\u8bcd\u200b\u653e\u5728\u200b\u53e5\u5b50\u200b\u7684\u200b\u5f00\u5934\u200b\uff0c\u200b\u540e\u9762\u200b\u53ef\u4ee5\u200b\u63a5\u200b\u53e5\u5b50\u200b\u6216\u200b\u77ed\u8bed\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u8be5\u53e5\u200b\u548c\u200b\u524d\u200b\u4e00\u53e5\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5173\u7cfb\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_13","title":"\u3057\u304b\u3057","text":"\u300c\u3057\u304b\u3057\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u8f6c\u6298\u200b\u5173\u7cfb\u200b\uff0c\u200b\u76f8\u5f53\u4e8e\u200b\u6c49\u8bed\u200b\u4e2d\u200b\u7684\u200b\u201c\u200b\u4f46\u662f\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u53e5\u5b50\u200b\u7684\u200b\u5f00\u5934\u200b\u3002
\u300c\u3057\u304b\u3057\u3001\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u3067\u3059\u306d\u3002\u300d\uff1a\u200b\u4f46\u662f\u200b\uff0c\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\u5427\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_14","title":"\u3067\u3082","text":"\u300c\u3067\u3082\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u8f6c\u6298\u200b\u5173\u7cfb\u200b\uff0c\u200b\u76f8\u5f53\u4e8e\u200b\u6c49\u8bed\u200b\u4e2d\u200b\u7684\u200b\u201c\u200b\u4f46\u662f\u200b\u201d\uff0c\u200b\u8bed\u6c14\u200b\u6bd4\u200b\u300c\u3057\u304b\u3057\u300d\u200b\u66f4\u52a0\u200b\u53e3\u8bed\u200b\u3002
\u300c\u3067\u3082\u3001\u200b\u5348\u200b\u5f8c\u200b\u304b\u3089\u306f\u200b\u6dbc\u200b\u3057\u304f\u306a\u308a\u307e\u3059\u3002\u300d\uff1a\u200b\u4f46\u662f\u200b\uff0c\u200b\u4ece\u200b\u4e0b\u5348\u200b\u5f00\u59cb\u200b\u4f1a\u200b\u51c9\u5feb\u200b\u4e00\u4e9b\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_15","title":"\u305d\u308c\u304b\u3089","text":"\u300c\u305d\u308c\u304b\u3089\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u987a\u63a5\u200b\u5173\u7cfb\u200b\uff0c\u200b\u76f8\u5f53\u4e8e\u200b\u6c49\u8bed\u200b\u4e2d\u200b\u7684\u200b\u201c\u200b\u7136\u540e\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u53e5\u5b50\u200b\u7684\u200b\u5f00\u5934\u200b\u3002
\u300c\u305d\u308c\u304b\u3089\u3001\u200b\u56f3\u200b\u66f8\u9928\u200b\u306b\u200b\u884c\u200b\u304d\u307e\u3057\u3087\u3046\u3002\u300d\uff1a\u200b\u7136\u540e\u200b\uff0c\u200b\u53bb\u200b\u56fe\u4e66\u9986\u200b\u5427\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_16","title":"\u8bed\u6cd5","text":""},{"location":"japanese/japanese-1-grammar/#_17","title":"\u656c\u4f53\u200b\u53e5\u200b\u53ca\u200b\u65f6\u6001\u53d8\u5316","text":""},{"location":"japanese/japanese-1-grammar/#_18","title":"\u540d\u8bcd\u200b\u53e5\u200b\u4e0e\u200b\u52a8\u200b\u8bcd\u53e5","text":"\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u7684\u200b\u65f6\u6001\u53d8\u5316\u200b\u4e3b\u8981\u200b\u6709\u200b\u73b0\u5728\u200b\u548c\u200b\u8fc7\u53bb\u200b\u65f6\u200b\u3002\u200b\u540d\u8bcd\u200b\u656c\u4f53\u200b\u53e5\u200b\u4ee5\u200b\u300c\u3067\u3059\u300d\u200b\u7ed3\u53e5\u200b\uff0c\u200b\u5176\u200b\u5728\u200b\u4e0d\u540c\u200b\u65f6\u6001\u200b\u4e0b\u200b\u7684\u200b\u53d8\u5f62\u200b\u5982\u4e0b\u200b\uff1a
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \u301c\u3067\u3059\u3002 \u301c\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 \u200b\u8fc7\u53bb\u200b \u301c\u3067\u3057\u305f\u3002 \u301c\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \u300c\u3067\u306f\u300d\u200b\u53ef\u4ee5\u200b\u66ff\u6362\u6210\u200b\u300c\u3058\u3083\u300d\u3002
\u200b\u52a8\u8bcd\u200b\u656c\u4f53\u200b\u53e5\u200b\u4ee5\u200b\u300c\u307e\u3059\u300d\u200b\u7ed3\u53e5\u200b\uff0c\u200b\u5176\u200b\u5728\u200b\u4e0d\u540c\u200b\u65f6\u6001\u200b\u4e0b\u200b\u7684\u200b\u53d8\u5f62\u200b\u5982\u4e0b\u200b\uff1a
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \u301c\u307e\u3059\u3002 \u301c\u307e\u305b\u3093\u3002 \u200b\u8fc7\u53bb\u200b \u301c\u307e\u3057\u305f\u3002 \u301c\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \u200b\u5b58\u5728\u200b\u53e5\u200b\u7684\u200b\u52a8\u8bcd\u200b\u6709\u200b\u4e24\u79cd\u200b\uff0c\u200b\u5373\u200b\u300c\u3042\u308b\u300d\uff08\u3042\u308a\u307e\u3059\uff09\u200b\u548c\u200b\u300c\u3044\u308b\u300d\uff08\u3044\u307e\u3059\uff09\uff0c\u200b\u5176\u4e2d\u200b\u300c\u3042\u308b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u65e0\u200b\u751f\u547d\u200b\u7684\u200b\u4e8b\u7269\u200b\uff0c\u300c\u3044\u308b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u6709\u200b\u751f\u547d\u200b\u7684\u200b\u4e8b\u7269\u200b\u3002
\u200b\u8868\u793a\u200b\u63d0\u8bae\u200b\u65f6\u200b\uff0c\u200b\u7528\u200b\u300c\u307e\u3057\u3087\u3046\u300d\u200b\u6216\u200b\u300c\u307e\u3057\u3087\u3046\u304b\u300d\u200b\u4ee3\u66ff\u200b\u300c\u307e\u3059\u300d\u3002\u200b\u8868\u793a\u200b\u63a8\u6d4b\u200b\u65f6\u200b\uff0c\u200b\u7528\u200b\u300c\u3067\u3057\u3087\u3046\u300d\u200b\u4ee3\u66ff\u200b\u300c\u3067\u3059\u300d\u3002
"},{"location":"japanese/japanese-1-grammar/#_19","title":"\u63cf\u8ff0\u200b\u53e5","text":"\u200b\u5bf9\u4e8e\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u200b\u5176\u200b\u5728\u200b\u4e0d\u540c\u200b\u65f6\u6001\u200b\u4e0b\u200b\u7684\u200b\u53d8\u5f62\u200b\u5982\u4e0b\u200b\uff08\u201c\uff5e\u201d\u200b\u6307\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u8bcd\u5e72\u200b\uff0c\u200b\u5373\u200b\u53bb\u6389\u200b\u300c\u3044\u300d\u200b\u7684\u200b\u90e8\u5206\u200b\uff09\uff1a
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \u301c\u3044\u3067\u3059\u3002 \u301c\u304f\u3042\u308a\u307e\u305b\u3093\u3002 \u200b\u8fc7\u53bb\u200b \u301c\u304b\u3063\u305f\u3067\u3059\u3002 \u301c\u304f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \u200b\u6ce8\u610f\u200b\u300c\u306a\u3044\u300d\u200b\u4e5f\u200b\u662f\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u300c\u3042\u308a\u307e\u305b\u3093\u300d\u200b\u548c\u200b\u300c\u306a\u3044\u3067\u3059\u300d\u200b\u7b49\u4ef7\u200b\u3002\u200b\u56e0\u6b64\u200b\u8fd8\u6709\u200b\u5982\u4e0b\u200b\u53d8\u5f62\u200b\uff1a
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \u301c\u3044\u3067\u3059\u3002 \uff5e\u304f\u306a\u3044\u3067\u3059\u3002 \u200b\u8fc7\u53bb\u200b \u301c\u304b\u3063\u305f\u3067\u3057\u305f\u3002 \u301c\u304f\u306a\u304b\u3063\u305f\u3067\u3059 \u200b\u4ee5\u4e0b\u200b\u4e24\u4e2a\u200b\u53e5\u5b50\u200b\u7b49\u4ef7\u200b\uff1a
\u300c\u200b\u79c1\u200b\u306f\u200b\u9ad8\u200b\u304f\u306a\u3044\u3067\u3059\u3002\u300d \u300c\u200b\u79c1\u200b\u306f\u200b\u9ad8\u200b\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u300d
II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff08\u200b\u5f62\u5bb9\u200b\u52a8\u8bcd\u200b\uff09\u200b\u7684\u200b\u53d8\u5f62\u200b\u548c\u200b\u540d\u8bcd\u200b\u76f8\u540c\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_20","title":"\u52a8\u200b\u8bcd\u53e5\u200b\u7684\u200b\u8fdb\u884c\u200b\u65f6\u200b\u4e0e\u200b\u5b8c\u6210\u200b\u65f6","text":"\u300c\u3066\u3044\u307e\u3059\u300d\u200b\u4e0e\u200b\u6301\u7eed\u6027\u200b\u52a8\u8bcd\u200b\u8fde\u7528\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u8fdb\u884c\u200b\u65f6\u200b\uff1b\u200b\u4e0e\u200b\u77ac\u95f4\u200b\u52a8\u8bcd\u200b\u8fde\u7528\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u5b8c\u6210\u200b\u65f6\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_21","title":"\u987a\u63a5\u200b\u5173\u7cfb","text":"\u200b\u4e24\u4e2a\u200b\u5206\u53e5\u200b\u5982\u679c\u200b\u4e0d\u662f\u200b\u8868\u793a\u200b\u8f6c\u6298\u200b\u3001\u200b\u6761\u4ef6\u200b\u7b49\u200b\u5173\u7cfb\u200b\uff0c\u200b\u8868\u793a\u200b\u987a\u63a5\u200b\u5173\u7cfb\u200b\u65f6\u200b\uff0c\u200b\u6784\u6210\u200b\u987a\u63a5\u200b\u5173\u7cfb\u200b\u3002\u200b\u7b2c\u4e00\u4e2a\u200b\u4ece\u53e5\u200b\u7684\u200b\u53e5\u200b\u5c3e\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u300c\u3066\u300d\u200b\u578b\u200b\uff08\u200b\u8fde\u7528\u200b\u578b\u200b\uff09\u200b\u7ed3\u5c3e\u200b\u3002
\u300c\u200b\u79c1\u200b\u306f\u200b\u65e5\u672c\u200b\u8a9e\u200b\u3092\u200b\u52c9\u5f37\u200b\u3057\u3066\u3001\u200b\u4e2d\u56fd\u200b\u8a9e\u200b\u3092\u200b\u52c9\u5f37\u200b\u3057\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u5b66\u4e60\u200b\u65e5\u8bed\u200b\uff0c\u200b\u4e5f\u200b\u5b66\u4e60\u200b\u6c49\u8bed\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_22","title":"\u5f62\u5f0f\u200b\u4f53\u8a00","text":"\u200b\u5f62\u5f0f\u200b\u4f53\u8a00\u200b\u662f\u200b\u6307\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u62bd\u8c61\u6982\u5ff5\u200b\u7684\u200b\u540d\u8bcd\u200b\uff0c\u200b\u5982\u200b\u300c\u3053\u3068\u300d\u3001\u300c\u306e\u300d\u3001\u300c\u3082\u306e\u300d\u200b\u7b49\u200b\u3002\u200b\u5f62\u5f0f\u200b\u4f53\u8a00\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u4e3b\u8bed\u200b\u6216\u200b\u5bbe\u8bed\u200b\uff0c\u200b\u4e0e\u200b\u52a8\u8bcd\u200b\u539f\u578b\u200b\u8fde\u7528\u200b\u65f6\u200b\u76f8\u5f53\u4e8e\u200b\u52a8\u540d\u8bcd\u200b\u3002
\u200b\u5f62\u5f0f\u200b\u4f53\u8a00\u200b \u200b\u542b\u4e49\u200b \u3053\u3068 \u200b\u4e8b\u60c5\u200b\uff08\u200b\u4e00\u822c\u200b\u8868\u793a\u200b\u4e8b\u60c5\u200b\u3001\u200b\u4e8b\u5b9e\u200b\u3001\u200b\u5185\u5bb9\u200b\uff09 \u306e \u200b\u4e8b\u60c5\u200b\uff08\u200b\u4e00\u822c\u200b\u8868\u793a\u200b\u4eba\u200b\u3001\u200b\u4e8b\u200b\u3001\u200b\u7269\u200b\uff09 \u3068\u3053\u308d \u200b\u5730\u70b9\u200b\uff08\u200b\u7528\u6765\u200b\u505a\u200b\u2026\u2026\uff09 \u3082\u306e \u200b\u7269\u54c1\u200b\uff08\u200b\u7528\u6765\u200b\u505a\u200b\u2026\u2026\uff09 \u200b\u56f3\u200b\u66f8\u9928\u200b\u306f\u200b\u52c9\u5f37\u200b\u3059\u308b\u3068\u3053\u308d\u3067\u3059\u3002\uff1a\u200b\u56fe\u4e66\u9986\u200b\u662f\u200b\u5b66\u4e60\u200b\u7684\u200b\u5730\u65b9\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_23","title":"\u6bd4\u8f83\u7ea7\u200b\u4e0e\u200b\u6700\u9ad8\u7ea7","text":"\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u6bd4\u8f83\u200b\u7684\u200b\u52a9\u8bcd\u200b\u4e3a\u200b\u300c\u3088\u308a\u300d\u200b\u548c\u200b\u300c\u307b\u3069\u300d\u3002\u200b\u8981\u200b\u8868\u793a\u200b\u201cA\u200b\u6bd4\u200bB\u200b\u66f4\u200b\u2026\u2026\u201d\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u7684\u200b\u8868\u8fbe\u65b9\u5f0f\u200b\uff1a
- \u300cA\u306fB\u3088\u308a\u301c\u300d\uff0c\u200b\u8868\u793a\u200b\u201cA\u200b\u6bd4\u200bB\u200b\u66f4\u200b\u2026\u2026\u201d\uff0c\u200b\u5728\u200b\u53e3\u8bed\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u300cA\u306f\u300d\u200b\u6765\u200b\u66f4\u200b\u591a\u200b\u5f3a\u8c03\u200b\u7528\u4e8e\u200b\u6bd4\u8f83\u200b\u7684\u200b\u57fa\u51c6\u200b\u3002
- \u300cB\u3088\u308aA\u306e\u200b\u65b9\u200b\u304c\u300d\u200b\u8868\u793a\u200b\u201cA\u200b\u6bd4\u200bB\u200b\u66f4\u200b\u2026\u2026\u201d\uff0c\u200b\u5728\u200b\u53e3\u8bed\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u300cB\u3088\u308a\u300d\uff0c\u200b\u66f4\u200b\u591a\u200b\u5f3a\u8c03\u200b\u4e3b\u8bed\u200bA\u3002
- \u300cB\u306fA\u307b\u3069\u301c\u3042\u308a\u307e\u305b\u3093\u300d\uff0c\u200b\u8868\u793a\u200b\u201cB\u200b\u4e0d\u5982\u200bA\u2026\u2026\u201d\u3002
\u200b\u5728\u200b\u7591\u95ee\u53e5\u200b\u4e2d\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200b\u300cA\u3068B\u3068\u3069\u3061\u3089\u306e\u200b\u65b9\u200b\u304c\u301c\u3067\u3059\u304b\u300d\u200b\u6765\u200b\u8be2\u95ee\u200bA\u200b\u548c\u200bB\u200b\u54ea\u4e2a\u200b\u66f4\u200b\u2026\u2026\u3002\u200b\u5176\u4e2d\u200b\u300c\u306e\u200b\u65b9\u200b\u300d\u200b\u8868\u793a\u200b\u201c\u2026\u2026\u200b\u7684\u200b\u7a0b\u5ea6\u200b\u201d\uff0c\u200b\u5728\u200b\u95ee\u53e5\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u3002\u200b\u6ce8\u610f\u200b\u5728\u200b\u56de\u7b54\u200b\u7591\u95ee\u53e5\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200b\u300c\u304c\u300d\u3002\u200b\u5982\u679c\u200b\u4e24\u8005\u200b\u7a0b\u5ea6\u200b\u5dee\u4e0d\u591a\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200b\u300c\u3069\u3061\u3089\u3082\u301c\u300d\u200b\u56de\u7b54\u200b\u3002
\u300c\u200b\u5317\u4eac\u5927\u5b66\u200b\u3068\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u3068\u3069\u3061\u3089\u306e\u200b\u65b9\u200b\u304c\u200b\u6709\u540d\u200b\u3067\u3059\u304b\u3002\u300d\uff1a\u200b\u5317\u4eac\u5927\u5b66\u200b\u548c\u200b\u6e05\u534e\u5927\u5b66\u200b\u54ea\u4e2a\u200b\u66f4\u200b\u6709\u540d\u200b\uff1f \u300c\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u306e\u200b\u65b9\u200b\u304c\u200b\u6709\u540d\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u5317\u4eac\u5927\u5b66\u200b\u66f4\u200b\u6709\u540d\u200b\u3002 \u200b\u6216\u200b \u300c\u3069\u3061\u3089\u3082\u200b\u6709\u540d\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u4e24\u4e2a\u200b\u90fd\u200b\u6709\u540d\u200b\u3002
\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u8868\u8fbe\u200b\u6700\u9ad8\u7ea7\u200b\u7684\u200b\u65b9\u5f0f\u200b\u6709\u200b\u4e24\u79cd\u200b\uff1a
-
\u200b\u526f\u8bcd\u200b\u300c\u200b\u4e00\u756a\u200b\u300d\uff0c\u200b\u8868\u793a\u200b\u201c\u200b\u6700\u200b\u2026\u2026\u201d\uff0c\u200b\u5728\u200b\u53e5\u5b50\u200b\u4e2d\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u300c\u301c\u306e\u200b\u4e2d\u200b\u3067\u300d\u200b\u6765\u200b\u9650\u5236\u200b\u6bd4\u8f83\u200b\u7684\u200b\u8303\u56f4\u200b\u3002
\u300c\u200b\u5317\u4eac\u200b\u306e\u200b\u5927\u5b66\u200b\u306e\u200b\u4e2d\u200b\u3067\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u304c\u200b\u4e00\u756a\u200b\u6709\u540d\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u5728\u200b\u5317\u4eac\u200b\u7684\u200b\u5927\u5b66\u200b\u4e2d\u200b\uff0c\u200b\u6e05\u534e\u5927\u5b66\u200b\u6700\u200b\u6709\u540d\u200b\u3002
-
\u200b\u4f7f\u7528\u200b\u201c\u200b\u6ca1\u6709\u200b\u6bd4\u200b\u2026\u2026\u200b\u66f4\u200b\u2026\u2026\u201d\u200b\u7684\u200b\u53e5\u5f0f\u200b\uff0c\u200b\u5373\u200b\u300cA\u307b\u3069\u301cB\u306f\u3042\u308a\u307e\u305b\u3093\u300d\u3002\u200b\u5176\u4e2d\u200b\uff0cB\u200b\u4e3a\u200b\u5f62\u5f0f\u200b\u4f53\u8a00\u200b\uff0c\u200b\u8868\u793a\u200b\u201c\u2026\u2026\u200b\u7684\u200b\u4e1c\u897f\u200b\u201d\u3002\u200b\u6ce8\u610f\u200b\u7528\u4e8e\u200b\u6709\u200b\u751f\u547d\u200b\u7684\u200b\u4e8b\u7269\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200b\u300c\u3044\u307e\u305b\u3093\u300d\u3002
\u300c\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u307b\u3069\u200b\u6709\u540d\u200b\u306a\u200b\u5927\u5b66\u200b\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u300d\uff1a\u200b\u6ca1\u6709\u200b\u6bd4\u200b\u6e05\u534e\u5927\u5b66\u200b\u66f4\u200b\u6709\u540d\u200b\u7684\u200b\u5927\u5b66\u200b\u4e86\u200b\u3002
\u200b\u63d0\u95ee\u200b\u6700\u9ad8\u7ea7\u200b\u65f6\u200b\u7684\u200b\u4e00\u822c\u200b\u53e5\u5f0f\u200b\u4e3a\u200b\u300cA\u3067\u3069\u3053\u304c\u200b\u4e00\u756a\u200b\u301c\u3067\u3059\u304b\u300d\u200b\u6216\u200b\u300cA\u3067\u3069\u306e\u301c\u304c\u200b\u4e00\u756a\u200b\u301c\u3067\u3059\u304b\u300d\uff0c\u200b\u610f\u200b\u4e3a\u200bA\u200b\u4e2d\u200b\u6700\u200b\u2026\u2026\u200b\u7684\u200b\u662f\u200b\u54ea\u4e2a\u200b\u2026\u2026\u3002
"},{"location":"japanese/japanese-1-grammar/#_24","title":"\u7b80\u4f53\u200b\u53e5","text":"\u200b\u5f53\u200b\u4f7f\u7528\u200b\u63a5\u7eed\u200b\u52a9\u8bcd\u200b\u300c\u306e\u3067\u300d\u200b\u65f6\u200b\uff0c\u200b\u524d\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u7b80\u4f53\u200b\u53e5\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_25","title":"\u540d\u8bcd\u200b\u53e5","text":"\u200b\u5bf9\u4e8e\u200b\u53e5\u5b50\u200b\u7ed3\u5c3e\u200b\u662f\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u7b80\u4f53\u200b\u53e5\u200b\u65e0\u9700\u200b\u505a\u51fa\u200b\u53d8\u5316\u200b\u3002
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \uff5e\u3044 \uff5e\u304f\u306a\u3044 \u200b\u8fc7\u53bb\u200b \uff5e\u304b\u3063\u305f \uff5e\u304f\u306a\u304b\u3063\u305f \u200b\u5bf9\u4e8e\u200b\u53e5\u5b50\u200b\u7ed3\u5c3e\u200b\u662f\u200b\u540d\u8bcd\u200b\u548c\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u7b80\u4f53\u200b\u53e5\u200b\u662f\u200b\u5728\u200b\u53e5\u200b\u5c3e\u200b\u52a0\u4e0a\u200b\u300c\u3060\u300d\uff08II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u539f\u578b\u200b\uff09\u3002\u200b\u8fc7\u53bb\u200b\u65f6\u200b\u7b80\u4f53\u200b\u53e5\u200b\u662f\u200b\u5728\u200b\u53e5\u200b\u5c3e\u200b\u52a0\u4e0a\u200b\u300c\u3060\u3063\u305f\u300d\u3002\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b\u52a0\u4e0a\u200b\u300c\u3067\u306f\u306a\u3044\u300d\u200b\u6216\u200b\u300c\u3067\u306f\u306a\u3063\u304b\u305f\u300d\u3002
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \u301c\u3060 \u301c\u3067\u306f\u306a\u3044 \u200b\u8fc7\u53bb\u200b \u301c\u3060\u3063\u305f \u301c\u3067\u306f\u306a\u304b\u3063\u305f"},{"location":"japanese/japanese-1-grammar/#_26","title":"\u52a8\u200b\u8bcd\u53e5","text":"\u200b\u5728\u200b\u7b80\u4f53\u200b\u53e5\u200b\u4e2d\u200b\uff0c\u200b\u52a8\u8bcd\u200b\u4f7f\u7528\u200b\u5176\u200b\u539f\u578b\u200b\u3002\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b\u4e2d\u200b\u4f7f\u7528\u200b\u5176\u200b\u306a\u3044\u200b\u578b\u200b\uff0c\u200b\u8fc7\u53bb\u200b\u65f6\u200b\u4f7f\u7528\u200b\u5176\u200b\u305f\u200b\u578b\u200b\u3002\u200b\u6ce8\u610f\u200b\u300c\u306a\u3044\u300d\u200b\u662f\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5176\u200b\u8fc7\u53bb\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b\u4e3a\u200b\u300c\u306a\u304b\u3063\u305f\u300d\u3002
"},{"location":"japanese/japanese-1-grammar/#_27","title":"\u306e\u3067\u3059/\u3093\u3067\u3059\u200b\u7ed3\u6784","text":"\u300c\u306e\u3067\u3059\u300d\u200b\u548c\u200b\u300c\u3093\u3067\u3059\u300d\u200b\u591a\u200b\u7528\u4e8e\u200b\u53e3\u8bed\u200b\uff0c\u200b\u8868\u793a\u200b\u89e3\u91ca\u200b\u3001\u200b\u8bf4\u660e\u200b\u3001\u200b\u8bf7\u6c42\u200b\u3001\u200b\u5efa\u8bae\u200b\u7b49\u200b\u8bed\u6c14\u200b\u3002II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u6216\u200b\u540d\u8bcd\u200b\u9700\u8981\u200b\u5728\u200b\u7b80\u4f53\u200b\u53e5\u200b\u5f62\u5f0f\u200b\u540e\u200b\u52a0\u4e0a\u200b\u300c\u306a\u300d\uff0c\u200b\u518d\u200b\u52a0\u200b\u300c\u306e\u3067\u3059\u300d\u200b\u6216\u200b\u300c\u3093\u3067\u3059\u300d\uff1bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u76f4\u63a5\u200b\u52a0\u200b\u300c\u306e\u3067\u3059\u300d\u200b\u6216\u200b\u300c\u3093\u3067\u3059\u300d\u3002
"},{"location":"japanese/japanese-1-pattern/","title":"\u65e5\u8bed\u200b(1)\u200b\u77ed\u8bed\u200b\u4e0e\u200b\u8868\u8fbe","text":""},{"location":"japanese/japanese-1-pattern/#1-4","title":"1-4\u200b\u8bfe","text":" - \u300c\u304a\u3084\u3059\u307f\u306a\u3055\u3044\u300d\uff1a\u200b\u665a\u5b89\u200b
- \u300c\u304a\u200b\u75b2\u200b\u308c\u200b\u69d8\u200b\u300d\uff1a\u200b\u8f9b\u82e6\u200b\u4e86\u200b
- \u300c\u308f\u304b\u308a\u307e\u3057\u305f\u300d\uff1a\u200b\u6211\u200b\u77e5\u9053\u200b\u4e86\u200b
- \u300c\u200b\u521d\u200b\u3081\u307e\u3057\u3066\u300d\uff1a\u200b\u521d\u6b21\u89c1\u9762\u200b
- \u300c\u304a\u200b\u5143\u200b\u6c17\u200b\u3067\u3059\u304b\u300d\uff1a\u200b\u60a8\u597d\u200b\u5417\u200b\uff1f
- \u300c\u304a\u304b\u3052\u3055\u307e\u3067\u3001\u200b\u5143\u200b\u6c17\u200b\u3067\u3059\u300d\uff1a\u200b\u8c22\u8c22\u60a8\u200b\uff0c\u200b\u6211\u200b\u5f88\u200b\u597d\u200b\u3002
- \u300c\u200b\u884c\u200b\u3063\u3066\u304d\u307e\u3059\u300d\uff1a\u200b\u6211\u200b\u8d70\u200b\u4e86\u200b
- \u300c\u200b\u884c\u200b\u3063\u3066\u3089\u3063\u3057\u3083\u3044\u300d\uff1a\u200b\u4e00\u8def\u987a\u98ce\u200b
- \u300c\u305f\u3060\u3044\u307e\u300d\uff1a\u200b\u6211\u200b\u56de\u6765\u200b\u4e86\u200b
- \u300c\u304a\u200b\u5e30\u200b\u308a\u306a\u3055\u3044\u300d\uff1a\u200b\u6b22\u8fce\u200b\u56de\u6765\u200b
- \u300c\u3055\u3088\u3046\u306a\u3089\u300d\uff1a\u200b\u518d\u89c1\u200b
- \u300c\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u300d\uff1a\u200b\u975e\u5e38\u200b\u611f\u8c22\u60a8\u200b
- \u300c\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3057\u305f\u300d\uff1a\u200b\u975e\u5e38\u200b\u611f\u8c22\u60a8\u200b
"},{"location":"japanese/japanese-1-pattern/#5","title":"\u7b2c\u200b5\u200b\u8bfe","text":" - \u300c\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059\u300d\uff1a\u200b\u65e9\u4e0a\u597d\u200b
- \u300c\u3053\u3093\u306b\u3061\u306f\u300d\uff1a\u200b\u4f60\u597d\u200b
- \u300c\u3053\u3093\u3070\u3093\u306f\u300d\uff1a\u200b\u665a\u4e0a\u200b\u597d\u200b
- \u300c\u3088\u308d\u3057\u304f\u304a\u200b\u9858\u200b\u3044\u3057\u307e\u3059\u300d\u3001\u300c\u3088\u308d\u3057\u304f\u304a\u200b\u9858\u200b\u3044\u3044\u305f\u3057\u307e\u3059\u300d\uff1a\u200b\u8bf7\u591a\u5173\u7167\u200b
- \u200b\u5173\u4e8e\u200b\u95ee\u53e5\u200b
- \u200b\u80af\u5b9a\u200b\u56de\u590d\u200b\uff1a\u300c\u306f\u3044\u3001\u305d\u3046\u3067\u3059\u300d\uff0c\u200b\u6ce8\u610f\u200b\u300c\u306f\u3044\u300d\u200b\u4e0d\u80fd\u200b\u591a\u6b21\u91cd\u590d\u200b\u3002
- \u200b\u5426\u5b9a\u200b\u56de\u590d\u200b\uff1a\u300c\u3044\u3044\u3048\u3001\u200b\u9055\u200b\u3044\u307e\u3059\u300d
"},{"location":"japanese/japanese-1-pattern/#6","title":"\u7b2c\u200b6\u200b\u8bfe","text":" - \u300c\u3048\u3048\u3068\u300d\uff1a\u200b\u55ef\u200b\u2026\u2026\uff0c\u200b\u8868\u793a\u200b\u77ed\u6682\u200b\u7684\u200b\u505c\u987f\u200b\u6216\u200b\u601d\u8003\u200b
- \u200b\u5207\u5165\u200b\u8bdd\u9898\u200b
- \u300c\u3042\u306e\u3046\u300d\uff1a\u200b\u90a3\u4e2a\u200b\u2026\u2026
- \u300c\u3059\u307f\u307e\u305b\u3093\uff08\u304c\uff09\u300d\uff1a\u200b\u4e0d\u597d\u610f\u601d\u200b
- \u200b\u7ed3\u675f\u200b\u8bdd\u9898\u200b
- \u300c\u200b\u5931\u793c\u200b\u3057\u307e\u3059\u300d\uff1a\u200b\u5931\u966a\u200b\u4e86\u200b
- \u300c\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3057\u305f\u300d\uff1a\u200b\u4eca\u5929\u200b\u975e\u5e38\u200b\u611f\u8c22\u60a8\u200b
- \u300c\u3067\u306f\u3001\u307e\u305f\u300d\uff1a\u200b\u90a3\u4e48\u200b\uff0c\u200b\u518d\u89c1\u200b
"},{"location":"japanese/japanese-1-pattern/#7","title":"\u7b2c\u200b7\u200b\u8bfe","text":" - \u300c\u200b\u5931\u793c\u200b\u3057\u307e\u3057\u305f\u300d\uff1a\u200b\u4e0d\u597d\u610f\u601d\u200b\uff0c\u200b\u7528\u4e8e\u200b\u5931\u793c\u200b\u3001\u200b\u5931\u656c\u200b\u7684\u200b\u884c\u4e3a\u200b\u3002
- \u300c\u304a\u200b\u4e16\u8a71\u200b\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u300d\uff1a\u200b\u611f\u8c22\u60a8\u200b\u4e00\u76f4\u200b\u4ee5\u6765\u200b\u7684\u200b\u7167\u987e\u200b\u3002
- \u200b\u4ecb\u7ecd\u200b\u5bb6\u5ead\u6210\u5458\u200b
- \u300c\u200b\u5fa1\u5b85\u200b\u300d\u200b\u7528\u4e8e\u200b\u5c0a\u79f0\u200b\u5bf9\u65b9\u200b\u7684\u200b\u5bb6\u5ead\u200b\uff0c\u300c\u3046\u3061\u300d\u200b\u7528\u4e8e\u200b\u79f0\u547c\u200b\u81ea\u5df1\u200b\u7684\u200b\u5bb6\u5ead\u200b\u3002
- \u300cA\u306b\u306f\uff5e\u304c\u3044\u307e\u3059\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200bA\u200b\u6709\u200b\uff5e\u200b\u5bb6\u5ead\u6210\u5458\u200b\uff0c\u200b\u5982\u679c\u200b\u6709\u200b\u591a\u4f4d\u200b\uff0c\u200b\u5219\u200b\u5728\u200b\u300c\u304c\u300d\u200b\u540e\u52a0\u200b\u6570\u91cf\u8bcd\u200b\uff0c\u300c\u3068\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u5e76\u5217\u200b\u3002
- \u300c\u305d\u3046\u306a\u3093\u3067\u3059\u300d\uff1a\u200b\u8868\u793a\u200b\u53cd\u590d\u200b\u786e\u8ba4\u200b\u540e\u200b\u7684\u200b\u5f3a\u8c03\u200b\u3002
"},{"location":"japanese/japanese-1-pattern/#8","title":"\u7b2c\u200b8\u200b\u8bfe","text":" - \u300c\u301c\u3067\u200b\u5b9c\u200b\u3057\u3044\u3067\u3059\u304b\u300d\u200b\u7528\u4e8e\u200b\u5411\u200b\u5bf9\u65b9\u200b\u786e\u8ba4\u200b\uff5e\u200b\u4e2d\u200b\u7684\u200b\u5185\u5bb9\u200b\u662f\u5426\u200b\u5408\u9002\u200b\u3002\u200b\u53ef\u4ee5\u200b\u5982\u4e0b\u200b\u56de\u7b54\u200b
- \u300c\u306f\u3044\u3001\u200b\u5927\u4e08\u592b\u200b\u3067\u3059\u3002\u300d
- \u300c\u306f\u3044\u3001\u304a\u200b\u9858\u200b\u3044\u3057\u307e\u3059\u3002\u300d
- \u200b\u8d2d\u7269\u200b
- \u200b\u63d0\u51fa\u200b\u9700\u6c42\u200b\uff1a\u300c\u301c\u306f\u3042\u308a\u307e\u3059\u304b\u300d\u3001\u300c\u301c\u3092\u304f\u3060\u3055\u3044\u300d\u3001\u300c\u301c\u3092\u304a\u200b\u9858\u200b\u3044\u3057\u307e\u3059\u300d\u3002
- \u200b\u8be2\u95ee\u200b\u4ef7\u683c\u200b\uff1a\u300c\u301c\uff08\u304a\uff09\u3044\u304f\u3089\u3067\u3059\u304b\u300d
- \u200b\u9009\u62e9\u200b\uff1a\u300c\u301c\u306b\u3057\u307e\u3059\u300d\u3001\u300c\u301c\u3067\u300d
- \u200b\u5c31\u9910\u200b
- \u200b\u9910\u524d\u200b\uff1a\u300c\u3044\u305f\u3060\u304d\u307e\u3059\u300d\uff1a\u200b\u6211\u8981\u200b\u5f00\u59cb\u200b\u5403\u200b\u4e86\u200b\u3002
- \u200b\u9910\u540e\u200b\uff1a\u300c\u3054\u200b\u99b3\u200b\u8d70\u200b\u69d8\u200b\u3067\u3057\u305f\u300d\uff1a\u200b\u60a8\u200b\u7684\u200b\u6b3e\u5f85\u200b\u771f\u662f\u200b\u592a\u597d\u4e86\u200b\u3002
- \u300c\u3054\u3061\u3085\u3046\u3082\u3093\u306f\uff1f\u300d\uff1a\u200b\u60a8\u200b\u70b9\u200b\u4ec0\u4e48\u200b\uff1f
"},{"location":"japanese/japanese-1-pattern/#9","title":"\u7b2c\u200b9\u200b\u8bfe","text":" - \u300c\u304a\u200b\u4e45\u200b\u3057\u3076\u308a\u3067\u3059\u300d\uff1a\u200b\u597d\u4e45\u4e0d\u89c1\u200b
- \u300c\uff08\u305d\u308c\u306f\uff09\u3088\u304b\u3063\u305f\u3067\u3059\u306d\u300d\uff1a\u200b\u592a\u597d\u4e86\u200b
- \u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u81ea\u5df1\u200b\uff0c\u200b\u5bf9\u200b\u81ea\u5df1\u200b\u65f6\u4e0d\u52a0\u200b\u300c\u306d\u300d
- \u300c\u200b\u52c9\u5f37\u200b\u306b\u306a\u308a\u307e\u3059\u300d\uff1a\u200b\u53d7\u76ca\u532a\u6d45\u200b
- \u300c\u200b\u9811\u5f35\u200b\u3063\u3066\uff08\u304f\u3060\u3055\u3044\uff09\u300d\uff1a\u200b\u52a0\u6cb9\u200b
- \u300c\u304a\u305f\u3093\u3058\u3087\u3046\u3073\u306f\u3044\u3064\u3067\u3059\u304b\u300d\uff1a\u200b\u60a8\u200b\u7684\u200b\u751f\u65e5\u200b\u662f\u200b\u4ec0\u4e48\u200b\u65f6\u5019\u200b\uff1f
- \u300c\u200b\u79c1\u200b\u306e\u200b\u8a95\u200b\u751f\u65e5\u200b\u306f\u306a\u306a\u304c\u3064\u306b\u3058\u3085\u3046\u308d\u304f\u306b\u3061\u3067\u3059\u300d\uff1a\u200b\u6211\u200b\u7684\u200b\u751f\u65e5\u200b\u662f\u200b7\u200b\u6708\u200b26\u200b\u65e5\u200b\u3002
- \u300c\u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u300d\uff1a\u200b\u606d\u559c\u200b\u60a8\u200b
"},{"location":"japanese/japanese-1-pattern/#10","title":"\u7b2c\u200b10\u200b\u8bfe","text":" - \u300c\u301c\u306f\u200b\u7a7a\u200b\u3044\u3066\u3044\u307e\u3059\u300d\uff1a\uff5e\u200b\u6709\u7a7a\u200b
- \u300c\u301c\u305f\u3044\u3067\u3059\u300d\uff1a\u200b\u60f3\u8981\u200b\uff5e
- \u300c\u301c\u304c\u200b\u697d\u200b\u3057\u307f\u3067\u3059\u300d\uff1a\uff5e\u200b\u4ee4\u4eba\u200b\u671f\u5f85\u200b
- \u200b\u63d0\u51fa\u200b\u9080\u8bf7\u200b\uff1a
- \u300c\uff08\u200b\u4e00\u7dd2\u200b\u306b\uff09\u301c\u307e\u3057\u3087\u3046\u304b\u300d\uff1a\u200b\u4e00\u8d77\u200b\uff5e\u200b\u5427\u200b\uff1f
- \u300c\u301c\u306f\u3069\u3046\u3067\u3059\u304b\u300d\uff1a\uff5e\u200b\u600e\u4e48\u6837\u200b\uff1f
- \u300c\u301c\u304c\u3044\u3044\u3067\u3059\u304b\u300d\uff1a\uff5e\u200b\u597d\u200b\u5417\u200b\uff1f\uff08\uff5e\u200b\u5fc5\u987b\u200b\u662f\u200b\u7591\u95ee\u8bcd\u200b\uff09
- \u200b\u56de\u7b54\u200b\u9080\u8bf7\u200b
- \u200b\u63a5\u53d7\u200b\u9080\u8bf7\u200b\uff1a\u300c\u306f\u3044\u3001\u3044\u3044\u3067\u3059\u306d\u300d\u3001\u300c\u305d\u3057\u307e\u3057\u3087\u3046\u300d
- \u200b\u62d2\u7edd\u200b\u9080\u8bf7\u200b\uff1a\u300c\u3059\u307f\u307e\u305b\u3093\u3001\u3061\u3087\u3063\u3068\u2026\u2026\u300d\u3001\u300c\u3044\u3044\u3048\u3001\u3051\u3063\u3053\u3046\u3067\u3059\u3002\u300d\u3001\u300c\u3044\u3044\u3067\u3059\u300d
"},{"location":"japanese/japanese-1-pattern/#11","title":"\u7b2c\u200b11\u200b\u8bfe","text":" - \u300c\u200b\u5168\u7136\u200b\u301c\u300d\uff1a\u200b\u5b8c\u5168\u200b\u4e0d\u200b\uff5e\uff0c\u200b\u7528\u4e8e\u200b\u5426\u5b9a\u53e5\u200b\u3002
- \u300c\u305d\u3046\u306a\u3093\u3067\u3059\u304b\u300d\uff1a\u200b\u662f\u200b\u5417\u200b\uff1f\u200b\u8868\u793a\u200b\u66f4\u200b\u60ca\u8bb6\u200b\u7684\u200b\u8bed\u6c14\u200b\u3002
"},{"location":"japanese/japanese-1-pattern/#12","title":"\u7b2c\u200b12\u200b\u8bfe","text":" - \u300c\uff08\u3059\u307f\u307e\u305b\u3093\u3001\uff09\u301c\u3066\u304f\u3060\u3055\u3044\u300d\uff1a\u200b\u8bf7\u200b\uff5e
- \u300c\u301c\u3066\u304f\u3060\u3055\u3044\u307e\u305b\u3093\u304b\u300d\uff1a\u200b\u8bf7\u200b\uff5e\u200b\u5417\u200b\uff1f\uff08\u200b\u7528\u4e8e\u200b\u4e0b\u7ea7\u200b\u5bf9\u200b\u4e0a\u7ea7\u200b\uff09
"},{"location":"japanese/japanese-1-pattern/#1311","title":"\u7b2c\u200b13\u200b\u8bfe\u200b\uff08\u200b\u65b0\u4e16\u7eaa\u200b\u521d\u7ea7\u200b\u7b2c\u200b11\u200b\u8bfe\u200b\uff09","text":" - \u300c\u200b\u6559\u200b\u3048\u3066\u304f\u3060\u3055\u3044\u300d\uff1a\u200b\u8bf7\u200b\u544a\u8bc9\u200b\u6211\u200b
- \u300c\u200b\u5b89\u5fc3\u200b\u3057\u3066\u304f\u3060\u3055\u3044\u300d\uff1a\u200b\u8bf7\u200b\u653e\u5fc3\u200b
- \u300c\u3067\u306f\u3001\u304a\u200b\u5143\u200b\u6c17\u200b\u3067\u300d\uff1a\u200b\u90a3\u4e48\u200b\uff0c\u200b\u4fdd\u91cd\u200b
- \u300c\u3054\u200b\u5bb6\u65cf\u200b\u306e\u200b\u7686\u200b\u69d8\u200b\u306b\u3082\u3088\u308d\u3057\u304f\u300d\uff1a\u200b\u8bf7\u4ee3\u200b\u6211\u200b\u5411\u200b\u60a8\u200b\u7684\u200b\u5bb6\u4eba\u200b\u95ee\u597d\u200b
- \u300c\u3069\u3046\u3082\u300d\uff1a\u200b\u975e\u5e38\u611f\u8c22\u200b
"},{"location":"japanese/japanese-1-vocab/","title":"\u65e5\u8bed\u200b(1) \u200b\u5355\u8bcd\u8868","text":""},{"location":"japanese/japanese-1-vocab/#_1","title":"\u52a8\u8bcd","text":"I\u200b\u7c7b\u200b\u52a8\u8bcd\u200bII\u200b\u7c7b\u200b\u52a8\u8bcd\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b \u200b\u52a8\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u5206\u7c7b\u200b \u200b\u542b\u4e49\u200b \u200b\u9055\u200b\u3046 \u3061\u304c\u3046 \u200b\u81ea\u200bI \u200b\u4e0d\u662f\u200b \u200b\u5408\u200b\u3046 \u3042\u3046 \u200b\u81ea\u200bI \u200b\u5408\u9002\u200b \u200b\u4ed8\u200b\u304d\u200b\u5408\u200b\u3046 \u3064\u304d\u3042\u3046 \u200b\u81ea\u200bI \u200b\u4ea4\u5f80\u200b \u3053\u305f\u308f\u308b \u200b\u81ea\u200bI \u200b\u8bb2\u7a76\u200b \u200b\u9811\u5f35\u200b\u308b \u304c\u3093\u3070\u308b \u200b\u81ea\u200bI \u200b\u52a0\u6cb9\u200b \u200b\u884c\u200b\u304f \u3044\u304f \u200b\u81ea\u200bI \u200b\u53bb\u200b \u200b\u7a7a\u200b\u304f \u3042\u304f \u200b\u81ea\u200bI \u200b\u7a7a\u95f2\u200b \u200b\u5206\u200b\u304b\u308b \u308f\u304b\u308b \u200b\u81ea\u200bI \u200b\u660e\u767d\u200b \u304b\u304b\u308b \u200b\u81ea\u200bI \u200b\u82b1\u8d39\u200b \u200b\u5e30\u200b\u308b \u304b\u3048\u308b \u200b\u81ea\u200bI \u200b\u56de\u5bb6\u200b \u200b\u8981\u200b\u308b \u3044\u308b \u200b\u81ea\u200bI \u200b\u9700\u8981\u200b \u200b\u6e07\u200b\u304f \u304b\u308f\u304f \u200b\u81ea\u200bI \u200b\u53e3\u6e34\u200b \u200b\u7b11\u200b\u3046 \u308f\u3089\u3046 \u200b\u81ea\u200bI \u200b\u7b11\u200b \u200b\u6b8b\u200b\u308b \u306e\u3053\u308b \u200b\u81ea\u200bI \u200b\u5269\u4e0b\u200b \u200b\u558b\u200b\u308b \u3057\u3083\u3079\u308b \u200b\u4ed6\u200bI \u200b\u804a\u5929\u200b \u200b\u4f7f\u200b\u3046 \u3064\u304b\u3046 \u200b\u4ed6\u200bI \u200b\u4f7f\u7528\u200b \u200b\u7533\u200b\u3059 \u3082\u3046\u3059 \u200b\u4ed6\u200bI \u200b\u53eb\u200b \u200b\u8aad\u200b\u3080 \u3088\u3080 \u200b\u4ed6\u200bI \u200b\u8bfb\u200b \u200b\u64ae\u200b\u308b \u3068\u308b \u200b\u4ed6\u200bI \u200b\u62cd\u7167\u200b \u200b\u4f5c\u200b\u308b \u3064\u304f\u308b \u200b\u4ed6\u200bI \u200b\u505a\u200b \u200b\u98f2\u200b\u3080 \u306e\u3080 \u200b\u4ed6\u200bI \u200b\u559d\u200b \u200b\u5f85\u200b\u3064 \u307e\u3064 \u200b\u4ed6\u200bI \u200b\u7b49\u5f85\u200b \u200b\u9078\u200b\u3076 \u3048\u3089\u3076 \u200b\u4ed6\u200bI \u200b\u9009\u62e9\u200b \u200b\u601d\u200b\u3046 \u304a\u3082\u3046 \u200b\u4ed6\u200bI \u200b\u8ba4\u4e3a\u200b \u200b\u8a00\u200b\u3046 \u3044\u3046 \u200b\u4ed6\u200bI \u200b\u8bf4\u200b \u200b\u904e\u200b\u3054\u3059 \u3059\u3054\u3059 \u200b\u4ed6\u200bI \u200b\u5ea6\u8fc7\u200b \u200b\u52a8\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u5206\u7c7b\u200b \u200b\u542b\u4e49\u200b \u3044\u308b \u200b\u81ea\u200bII \u200b\u6709\u200b \u200b\u9045\u200b\u308c\u308b \u304a\u304f\u308c\u308b \u200b\u81ea\u200bII \u200b\u8fdf\u5230\u200b \u200b\u53d7\u200b\u3051\u308b \u3046\u3051\u308b \u200b\u4ed6\u200bII \u200b\u53c2\u52a0\u200b \u200b\u6559\u200b\u3048\u308b \u304a\u3057\u3048\u308b \u200b\u4ed6\u200bII \u200b\u6559\u200b \u200b\u898b\u200b\u308b \u307f\u308b \u200b\u4ed6\u200bII \u200b\u770b\u200b \u200b\u98df\u200b\u3079\u308b \u305f\u3079\u308b \u200b\u4ed6\u200bII \u200b\u5403\u200b \u200b\u958b\u200b\u3051\u308b \u3042\u3051\u308b \u200b\u4ed6\u200bII \u200b\u6253\u5f00\u200b \u200b\u52a8\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u5206\u7c7b\u200b \u200b\u542b\u4e49\u200b \u304f\u308b \u200b\u81ea\u200bIII \u200b\u6765\u200b \u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u505a\u200b \u200b\u7d39\u4ecb\u200b\u3059\u308b \u3057\u3087\u3046\u304b\u3044\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u4ecb\u7ecd\u200b \u200b\u5931\u793c\u200b\u3059\u308b \u3057\u3064\u308c\u3044\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5931\u793c\u200b \u200b\u4f1a\u8a08\u200b\u3059\u308b \u304b\u3044\u3051\u3044\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u7ed3\u8d26\u200b \u200b\u6ce8\u6587\u200b\u3059\u308b \u3061\u3085\u3046\u3082\u3093\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u70b9\u83dc\u200b \u200b\u55b6\u200b\u696d\u200b\u3059\u308b \u3048\u3044\u304e\u3087\u3046\u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u8425\u4e1a\u200b \u200b\u52c9\u5f37\u200b\u3059\u308b \u3079\u3093\u304d\u3087\u3046\u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u5b66\u4e60\u200b \u200b\u5408\u683c\u200b\u3059\u308b \u3054\u3046\u304b\u304f\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5408\u683c\u200b\u3001\u200b\u901a\u8fc7\u200b \u200b\u7559\u5b66\u200b\u3059\u308b \u308a\u3085\u3046\u304c\u304f\u3059\u308b \u200b\u81ea\u200bIII \u200b\u7559\u5b66\u200b \u200b\u6599\u7406\u200b\u3059\u308b \u308a\u3087\u3046\u308a\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u505a\u996d\u200b \u200b\u98df\u4e8b\u200b\u3059\u308b \u3057\u3087\u304f\u3058\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5403\u996d\u200b \u200b\u9762\u63a5\u200b\u3059\u308b \u3081\u3093\u305b\u3064\u3059\u308b \u200b\u81ea\u200bIII \u200b\u9762\u8bd5\u200b \u200b\u52aa\u529b\u200b\u3059\u308b \u3069\u308a\u3087\u304f\u3059\u308b \u200b\u81ea\u200bIII \u200b\u52aa\u529b\u200b \u200b\u81ea\u708a\u200b\u3059\u308b \u3058\u3059\u3044\u3059\u308b \u200b\u81ea\u200bIII \u200b\u81ea\u5df1\u200b\u505a\u996d\u200b \u200b\u8cea\u554f\u200b\u3059\u308b \u3057\u3064\u3082\u3093\u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u63d0\u95ee\u200b \u200b\u904b\u52d5\u200b\u3059\u308b \u3046\u3093\u3069\u3046\u3059\u308b \u200b\u81ea\u200bIII \u200b\u8fd0\u52a8\u200b \u200b\u7df4\u7fd2\u200b\u3059\u308b \u308c\u3093\u3057\u3085\u3046\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u7ec3\u4e60\u200b \u200b\u904b\u200b\u8ee2\u200b\u3059\u308b \u3046\u3093\u3066\u3093\u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u5f00\u8f66\u200b \u200b\u6c7a\u5b9a\u200b\u3059\u308b \u3051\u3063\u3066\u3044\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u51b3\u5b9a\u200b \u200b\u6765\u200b\u65e5\u200b\u3059\u308b \u3089\u3044\u306b\u3061\u3059\u308b \u200b\u81ea\u200bIII \u200b\u6765\u200b\u65e5\u672c\u200b \u200b\u5230\u200b\u7740\u200b\u3059\u308b \u3068\u3046\u3061\u3083\u304f\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5230\u8fbe\u200b \u200b\u4e88\u5b9a\u200b\u3059\u308b \u3088\u3066\u3044\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u9884\u5b9a\u200b \u200b\u5c31\u200b\u8077\u200b\u3059\u308b \u3057\u3085\u3046\u3057\u3087\u304f\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5c31\u804c\u200b \u200b\u8cbf\u6613\u200b\u3059\u308b \u307c\u3046\u3048\u304d\u3059\u308b \u200b\u81ea\u200bIII \u200b\u8d38\u6613\u200b \u200b\u6b8b\u696d\u200b\u3059\u308b \u3056\u3093\u304e\u3087\u3046\u3059\u308b \u200b\u81ea\u200bIII \u200b\u52a0\u73ed\u200b \u200b\u5fc3\u914d\u200b\u3059\u308b \u3057\u3093\u3071\u3044\u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u62c5\u5fc3\u200b \u200b\u5b89\u5fc3\u200b\u3059\u308b \u3042\u3093\u3057\u3093\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5b89\u5fc3\u200b \u200b\u65c5\u884c\u200b\u3059\u308b \u308a\u3087\u3053\u3046\u3059\u308b \u200b\u81ea\u200bIII \u200b\u65c5\u884c\u200b \u200b\u8a66\u200b\u9a13\u200b\u3059\u308b \u3057\u3051\u3093\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u8003\u8bd5\u200b \u200b\u6848\u5185\u200b\u3059\u308b \u3042\u3093\u306a\u3044\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u966a\u540c\u200b\u6e38\u89c8"},{"location":"japanese/japanese-1-vocab/#_2","title":"\u5f62\u5bb9\u8bcd","text":"I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5b89\u200b\u3044 \u3084\u3059\u3044 \u200b\u4fbf\u5b9c\u200b \u200b\u5b9c\u200b\u3057\u3044 \u3088\u308d\u3057\u3044 \u200b\u597d\u200b \u200b\u5fd9\u200b\u3057\u3044 \u3044\u305d\u304c\u3057\u3044 \u200b\u5fd9\u200b \u200b\u697d\u200b\u3057\u3044 \u305f\u306e\u3057\u3044 \u200b\u5f00\u5fc3\u200b \u200b\u591a\u200b\u3044 \u304a\u304a\u3044 \u200b\u591a\u200b \u200b\u53b3\u200b\u3057\u3044 \u304d\u3073\u3057\u3044 \u200b\u4e25\u683c\u200b \u200b\u65b0\u200b\u3057\u3044 \u3042\u305f\u3089\u3057\u3044 \u200b\u65b0\u200b \u200b\u7f8e\u5473\u200b\u3057\u3044 \u304a\u3044\u3057\u3044 \u200b\u597d\u5403\u200b \u200b\u512a\u200b\u3057\u3044 \u3084\u3055\u3057\u3044 \u200b\u6e29\u67d4\u200b \u200b\u5927\u200b\u304d\u3044 \u304a\u304a\u304d\u3044 \u200b\u5927\u200b \u200b\u9ad8\u200b\u3044 \u305f\u304b\u3044 \u200b\u9ad8\u200b \u200b\u9762\u767d\u200b\u3044 \u304a\u3082\u3057\u308d\u3044 \u200b\u6709\u8da3\u200b \u200b\u96e3\u200b\u3057\u3044 \u3080\u305a\u304b\u3057\u3044 \u200b\u96be\u200b \u200b\u9577\u200b\u3044 \u306a\u304c\u3044 \u200b\u957f\u200b \u3059\u3054\u3044 \u200b\u5389\u5bb3\u200b \u200b\u7fa8\u200b\u307e\u3057\u3044 \u3046\u3089\u3084\u307e\u3057\u3044 \u200b\u7fa1\u6155\u200b \u200b\u6065\u200b\u305a\u304b\u3057\u3044 \u306f\u305a\u304b\u3057\u3044 \u200b\u5bb3\u7f9e\u200b \u200b\u6016\u200b\u3044 \u3053\u308f\u3044 \u200b\u5bb3\u6015\u200b \u200b\u5c11\u200b\u306a\u3044 \u3059\u304f\u306a\u3044 \u200b\u5c11\u200b \u200b\u60aa\u200b\u3044 \u308f\u308b\u3044 \u200b\u574f\u200b \u200b\u5bd2\u200b\u3044 \u3055\u3080\u3044 \u200b\u51b7\u200b \u200b\u75db\u200b\u3044 \u3044\u305f\u3044 \u200b\u75bc\u200b \u200b\u901f\u200b\u3044 \u306f\u3084\u3044 \u200b\u5feb\u200b \u200b\u5e83\u200b\u3044 \u3072\u308d\u3044 \u200b\u5bbd\u200b \u200b\u9045\u200b\u3044 \u304a\u305d\u3044 \u200b\u6162\u200b \u200b\u8efd\u200b\u3044 \u304b\u308b\u3044 \u200b\u8f7b\u200b \u200b\u604b\u200b\u3057\u3044 \u3053\u3044\u3057\u3044 \u200b\u7231\u6155\u200b \u200b\u7518\u200b\u3044 \u3042\u307e\u3044 \u200b\u751c\u200b \u200b\u6dbc\u200b\u3057\u3044 \u3059\u305a\u3057\u3044 \u200b\u51c9\u723d\u200b \u200b\u6691\u200b\u3044 \u3042\u3064\u3044 \u200b\u70ed\u200b \u3046\u307e\u3089\u306a\u3044 \u200b\u65e0\u804a\u200b\u7684\u200b \u200b\u61d0\u200b\u304b\u3057\u3044 \u306a\u3064\u304b\u3057\u3044 \u200b\u6000\u5ff5\u200b \u200b\u7d20\u6674\u200b\u3089\u3057\u3044 \u3059\u3070\u3089\u3057\u3044 \u200b\u68d2\u200b \u200b\u73cd\u200b\u3057\u3044 \u3081\u305a\u3089\u3057\u3044 \u200b\u7a00\u6709\u200b \u200b\u826f\u200b\u3044 \u3088\u3044 \u200b\u597d\u200b \u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5acc\u200b\u3044 \u304d\u3089\u3044 \u200b\u8ba8\u538c\u200b \u200b\u8272\u200b\u3005\u200b \u3044\u308d\u3044\u308d \u200b\u5404\u79cd\u5404\u6837\u200b \u305d\u3063\u304f\u308a \u200b\u4e00\u6a21\u4e00\u6837\u200b \u200b\u5931\u793c\u200b \u3057\u3064\u308c\u3044 \u200b\u5931\u793c\u200b \u200b\u5927\u200b\u5909\u200b \u305f\u3044\u3078\u3093 \u200b\u975e\u5e38\u200b \u200b\u5225\u200b\u3005\u200b \u3079\u3064\u3079\u3064 \u200b\u5206\u5f00\u200b \u200b\u5927\u4e08\u592b\u200b \u3060\u3044\u3058\u3087\u3046\u3076 \u200b\u6ca1\u5173\u7cfb\u200b \u200b\u4e45\u200b\u3057\u3076\u308a \u3072\u3055\u3057\u3076\u308a \u200b\u76f8\u9694\u200b\u8bb8\u4e45\u200b \u200b\u81ea\u7531\u200b \u3058\u3086\u3046 \u200b\u81ea\u7531\u200b \u200b\u5143\u200b\u6c17\u200b \u3052\u3093\u304d \u200b\u7cbe\u795e\u200b \u200b\u9759\u200b\u304b \u3057\u305a\u304b \u200b\u5b89\u9759\u200b \u200b\u4e0a\u200b\u624b\u200b \u3058\u3087\u3046\u305a \u200b\u719f\u7ec3\u200b \u200b\u597d\u200b\u304d \u3059\u304d \u200b\u559c\u6b22\u200b \u200b\u697d\u200b\u3057\u307f \u305f\u306e\u3057\u307f \u200b\u671f\u5f85\u200b \u200b\u89aa\u5207\u200b \u3057\u3093\u305b\u3064 \u200b\u4eb2\u5207\u200b \u200b\u7d50\u69cb\u200b \u3051\u3063\u3053\u3046 \u200b\u5f88\u200b\u597d\u200b \u200b\u6b8b\u5ff5\u200b \u3056\u3093\u306d\u3093 \u200b\u9057\u61be\u200b \u304a\u200b\u6d12\u843d\u200b \u304a\u3057\u3083\u308c \u200b\u65f6\u9ae6\u200b \u200b\u7dba\u9e97\u200b \u304d\u308c\u3044 \u200b\u6f02\u4eae\u200b \u200b\u771f\u9762\u76ee\u200b \u307e\u3058\u3081 \u200b\u8ba4\u771f\u200b \u307a\u3089\u307a\u3089 \u200b\u6d41\u5229\u200b \u200b\u52e4\u52c9\u200b \u304d\u3093\u3079\u3093 \u200b\u52e4\u594b\u200b \u200b\u91cd\u8981\u200b \u3058\u3085\u3046\u3088\u3046 \u200b\u91cd\u8981\u200b \u200b\u5927\u4e8b\u200b \u3060\u3044\u3058 \u200b\u91cd\u8981\u200b \u200b\u5927\u597d\u200b\u304d \u3060\u3044\u3059\u304d \u200b\u975e\u5e38\u200b\u559c\u6b22\u200b \u200b\u4fbf\u5229\u200b \u3079\u3093\u308a \u200b\u65b9\u4fbf\u200b \u200b\u6709\u540d\u200b \u3086\u3046\u3081\u3044 \u200b\u6709\u540d\u200b \u200b\u71b1\u5fc3\u200b \u306d\u3063\u3057\u3093 \u200b\u70ed\u5fc3\u200b \u200b\u82e6\u624b\u200b \u306b\u304c\u3066 \u200b\u4e0d\u200b\u64c5\u957f\u200b \u200b\u4e0b\u624b\u200b \u3078\u305f \u200b\u4e0d\u200b\u64c5\u957f\u200b \u200b\u5f97\u610f\u200b \u3068\u304f\u3044 \u200b\u64c5\u957f\u200b \u200b\u5fc3\u914d\u200b \u3057\u3093\u3071\u3044 \u200b\u62c5\u5fc3\u200b \u200b\u5b89\u5fc3\u200b \u3042\u3093\u3057\u3093 \u200b\u5b89\u5fc3\u200b \u200b\u5143\u200b\u6c17\u200b \u3052\u3093\u304d \u200b\u7cbe\u795e\u200b \u200b\u4e0d\u8981\u200b \u3075\u3088\u3046 \u200b\u4e0d\u8981\u200b \u200b\u7c21\u200b\u5358\u200b \u304b\u3093\u305f\u3093 \u200b\u7b80\u5355\u200b \u200b\u4e00\u751f\u200b\u61f8\u547d\u200b \u3044\u3063\u3057\u3087\u3046\u3051\u3093\u3081\u3044 \u200b\u62fc\u547d\u200b \u200b\u5927\u5207\u200b \u305f\u3044\u305b\u3064 \u200b\u91cd\u8981"},{"location":"japanese/japanese-1-vocab/#_3","title":"\u6570\u5b57\u200b\u3001\u200b\u65f6\u95f4\u200b\u3001\u200b\u65e5\u671f","text":""},{"location":"japanese/japanese-1-vocab/#_4","title":"\u6570\u5b57","text":"\u200b\u6ce8\u610f\u200b\uff1a
- 1\u200b\u4eba\u200b\u548c\u200b2\u200b\u4eba\u200b\u7684\u200b\u7279\u6b8a\u200b\u5199\u6cd5\u200b\u3002
- 4\u200b\u4eba\u200b\u7684\u200b\u5199\u6cd5\u200b\u662f\u200b\u300c\u3088\u306b\u3093\u300d\uff0c\u200b\u800c\u200b\u4e0d\u662f\u200b\u300c\u3088\u3093\u306b\u3093\u300d\u3002
- 7\u30019\u200b\u4eba\u200b\u7684\u200b\u5199\u6cd5\u200b\u6709\u200b\u4e24\u79cd\u200b\u3002
- \u300c\u3072\u3083\u304f\u300d\u200b\u548c\u200b\u300c\u305b\u3093\u300d\u200b\u53ef\u4ee5\u200b\u7528\u6765\u200b\u76f4\u63a5\u200b\u8868\u793a\u200b100\u200b\u548c\u200b1000\uff0c\u200b\u800c\u200b\u300c\u307e\u3093\u300d\u200b\u548c\u200b\u300c\u304a\u304f\u300d\u200b\u9700\u8981\u200b\u52a0\u4e0a\u200b\u300c\u3044\u3061\u300d\u200b\u6765\u200b\u8868\u793a\u200b1\u200b\u4e07\u200b\u548c\u200b1\u200b\u4ebf\u200b\u3002
\u200b\u6570\u5b57\u200b \u200b\u5047\u540d\u200b \u200b\u6570\u5b57\u200b \u200b\u5047\u540d\u200b 1 \u3044\u3061 1\u200b\u4eba\u200b \u3072\u3068\u308a 2 \u306b 2\u200b\u4eba\u200b \u3075\u305f\u308a 3 \u3055\u3093 3\u200b\u4eba\u200b \u3055\u3093\u306b\u3093 4 \u3088\u3093 4\u200b\u4eba\u200b \u3088\u306b\u3093 5 \u3054 5\u200b\u4eba\u200b \u3054\u306b\u3093 6 \u308d\u304f 6\u200b\u4eba\u200b \u308d\u304f\u306b\u3093 7 \u306a\u306a 7\u200b\u4eba\u200b \u3057\u3061\u306b\u3093/\u306a\u306a\u306b\u3093 8 \u306f\u3061 8\u200b\u4eba\u200b \u306f\u3061\u306b\u3093 9 \u304d\u3085\u3046 9\u200b\u4eba\u200b \u304d\u3085\u3046\u306b\u3093/\u304f\u306b\u3093 10 \u3058\u3085\u3046 10\u200b\u4eba\u200b \u3058\u3085\u3046\u306b\u3093 \u200b\u767e\u200b \u3072\u3083\u304f \u200b\u5343\u200b \u305b\u3093 \u200b\u4e07\u200b \u3044\u3061\u307e\u3093 \u200b\u5104\u200b \u304a\u304f"},{"location":"japanese/japanese-1-vocab/#_5","title":"\u91cf\u8bcd","text":"\u200b\u6ce8\u610f\u200b\uff1a
- \u200b\u6570\u5b57\u200b+\u300c\u3064\u300d\u200b\u7684\u200b\u5199\u6cd5\u200b\uff0c\u200b\u9664\u4e86\u200b7\u200b\u662f\u200b\u76f4\u63a5\u200b\u52a0\u200b\u300c\u3064\u300d\u200b\u4ee5\u5916\u200b\uff0c\u200b\u5176\u4ed6\u200b\u90fd\u200b\u6709\u200b\u660e\u663e\u200b\u7684\u200b\u53d8\u5316\u200b\u3002
- \u200b\u6570\u5b57\u200b+\u300c\u200b\u500b\u200b\u3001\u200b\u672c\u200b\u3001\u200b\u518a\u200b\u300d\u200b\u7684\u200b\u5199\u6cd5\u200b\uff0c\u200b\u9664\u4e86\u200b1\u30016\u30018\u300110\u200b\u662f\u200b\u76f4\u63a5\u200b\u52a0\u200b\u300c\u200b\u500b\u200b\u300d\u200b\u4ee5\u5916\u200b\uff0c\u200b\u5176\u4ed6\u200b\u90fd\u200b\u5c06\u200b\u6570\u5b57\u200b\u8bfb\u97f3\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5047\u540d\u200b\u8f6c\u4e3a\u200b\u501a\u97f3\u200b\u300c\u3063\u300d\uff0c\u200b\u518d\u200b\u52a0\u200b\u300c\u200b\u500b\u200b\u300d\uff0c\u200b\u5982\u200b\u300c\u3044\u3063\u3053\u300d\u3001\u300c\u308d\u3063\u3053\u300d\u3001\u300c\u306f\u3063\u3053\u300d\u3001\u300c\u3058\u3085\u3063\u3053\u300d\u3002
- \u200b\u6570\u5b57\u200b+\u300c\u200b\u672c\u200b\u300d\u200b\u7684\u200b\u5199\u6cd5\u200b\uff0c\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b1\u30013\u30016\u30018\u300110\u200b\u9700\u8981\u200b\u5c06\u200b\u300c\u307b\u300d\u200b\u7684\u200b\u8bfb\u97f3\u200b\u53d8\u4e3a\u200b\u300c\u307d\u300d\u3002
- \u200b\u6570\u5b57\u200b+\u300c\u200b\u679a\u200b\u3001\u200b\u53f0\u200b\u300d\uff0c\u200b\u76f4\u63a5\u200b\u5728\u200b\u6570\u5b57\u200b\u540e\u9762\u200b\u52a0\u200b\u300c\u200b\u679a\u200b\u300d\u200b\u6216\u200b\u300c\u200b\u53f0\u200b\u300d\u200b\u5373\u53ef\u200b\u3002
\u200b\u6570\u91cf\u200b \u3064 \u200b\u500b\u200b \u200b\u672c\u200b \u200b\u518a\u200b \u200b\u679a\u200b \u200b\u53f0\u200b 1 \u3072\u3068\u3064 \u3044\u3063\u3053 \u3044\u3063\u307d\u3093 \u3044\u3063\u3055\u3064 \u3044\u3061\u307e\u3044 \u3044\u3061\u3060\u3044 2 \u3075\u305f\u3064 \u306b\u3053 \u306b\u307b\u3093 \u306b\u3055\u3064 \u306b\u307e\u3044 \u306b\u3060\u3044 3 \u307f\u3063\u3064 \u3055\u3093\u3053 \u3055\u3093\u307d\u3093 \u3055\u3093\u3055\u3064 \u3055\u3093\u307e\u3044 \u3055\u3093\u3060\u3044 4 \u3088\u3063\u3064 \u3088\u3093\u3053 \u3088\u3093\u307b\u3093 \u3088\u3093\u3055\u3064 \u3088\u3093\u307e\u3044 \u3088\u3093\u3060\u3044 5 \u3044\u3064\u3064 \u3054\u3053 \u3054\u307b\u3093 \u3054\u3055\u3064 \u3054\u307e\u3044 \u3054\u3060\u3044 6 \u3080\u3063\u3064 \u308d\u3063\u3053 \u308d\u3063\u307d\u3093 \u308d\u304f\u3055\u3064 \u308d\u304f\u307e\u3044 \u308d\u304f\u3060\u3044 7 \u306a\u306a\u3064 \u306a\u306a\u3053 \u306a\u306a\u307b\u3093 \u306a\u306a\u3055\u3064 \u306a\u306a\u307e\u3044 \u306a\u306a\u3060\u3044 8 \u3084\u3063\u3064 \u306f\u3063\u3053 \u306f\u3063\u307d\u3093 \u306f\u3063\u3055\u3064 \u306f\u3061\u307e\u3044 \u306f\u3061\u3060\u3044 9 \u3053\u3053\u306e\u3064 \u304d\u3085\u3046\u3053 \u304d\u3085\u3046\u307b\u3093 \u304d\u3085\u3046\u3055\u3064 \u304d\u3085\u3046\u307e\u3044 \u304d\u3085\u3046\u3060\u3044 10 \u3068\u304a \u3058\u3085\u3063\u3053 \u3058\u3085\u3063\u307d\u3093 \u3058\u3085\u3063\u3055\u3064 \u3058\u3085\u3046\u307e\u3044 \u3058\u3085\u3046\u3060\u3044"},{"location":"japanese/japanese-1-vocab/#_6","title":"\u5c0f\u65f6","text":"\u200b\u534a\u5c0f\u65f6\u200b\u5728\u200b\u300c\u200b\u6642\u9593\u200b\u300d\u200b\u540e\u52a0\u200b\u300c\u200b\u534a\u200b\uff08\u306f\u3093\uff09\u300d\u200b\u5373\u53ef\u200b\u3002
\u200b\u65f6\u95f4\u200b \u200b\u5047\u540d\u200b \u200b\u65f6\u95f4\u200b \u200b\u5047\u540d\u200b \u200b\u65f6\u95f4\u200b \u200b\u5047\u540d\u200b 1\u200b\u6642\u9593\u200b \u3044\u3061\u3058\u304b\u3093 9\u200b\u6642\u9593\u200b \u304f\u3058\u304b\u3093 17\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u306a\u306a\u3058\u304b\u3093 2\u200b\u6642\u9593\u200b \u306b\u3058\u304b\u3093 10\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u3058\u304b\u3093 18\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u306f\u3061\u3058\u304b\u3093 3\u200b\u6642\u9593\u200b \u3055\u3093\u3058\u304b\u3093 11\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u3044\u3061\u3058\u304b\u3093 19\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u304f\u3058\u304b\u3093 4\u200b\u6642\u9593\u200b \u3088\u3058\u304b\u3093 12\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u306b\u3058\u304b\u3093 20\u200b\u6642\u9593\u200b \u306b\u3058\u3085\u3046\u3058\u304b\u3093 5\u200b\u6642\u9593\u200b \u3054\u3058\u304b\u3093 13\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u3055\u3093\u3058\u304b\u3093 21\u200b\u6642\u9593\u200b \u306b\u3058\u3085\u3046\u3044\u3061\u3058\u304b\u3093 6\u200b\u6642\u9593\u200b \u308d\u304f\u3058\u304b\u3093 14\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u3088\u3058\u304b\u3093 22\u200b\u6642\u9593\u200b \u306b\u3058\u3085\u3046\u306b\u3058\u304b\u3093 7\u200b\u6642\u9593\u200b \u3057\u3061\u3058\u304b\u3093 15\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u3054\u3058\u304b\u3093 23\u200b\u6642\u9593\u200b \u306b\u3058\u3085\u3046\u3055\u3093\u3058\u304b\u3093 8\u200b\u6642\u9593\u200b \u306f\u3061\u3058\u304b\u3093 16\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u308d\u304f\u3058\u304b\u3093 24\u200b\u6642\u9593\u200b \u306b\u3058\u3085\u3046\u3088\u3058\u304b\u3093"},{"location":"japanese/japanese-1-vocab/#_7","title":"\u5206\u949f","text":"\u65f6\u95f4\u200b \u200b\u5047\u540d\u200b \u200b\u65f6\u95f4\u200b \u200b\u5047\u540d\u200b 1\u200b\u5206\u200b \u3044\u3063\u3077\u3093 1\u200b\u5206\u534a\u200b \u3044\u3063\u3077\u3093\u306f\u3093 2\u200b\u5206\u200b \u306b\u3075\u3093 2\u200b\u5206\u534a\u200b \u306b\u3075\u3093\u306f\u3093 3\u200b\u5206\u200b \u3055\u3093\u3077\u3093 3\u200b\u5206\u534a\u200b \u3055\u3093\u3077\u3093\u306f\u3093 4\u200b\u5206\u200b \u3088\u3093\u3077\u3093 4\u200b\u5206\u534a\u200b \u3088\u3093\u3077\u3093\u306f\u3093 5\u200b\u5206\u200b \u3054\u3075\u3093 5\u200b\u5206\u534a\u200b \u3054\u3075\u3093\u306f\u3093 6\u200b\u5206\u200b \u308d\u3063\u3077\u3093 6\u200b\u5206\u534a\u200b \u308d\u3063\u3077\u3093\u306f\u3093 7\u200b\u5206\u200b \u306a\u306a\u3075\u3093 7\u200b\u5206\u534a\u200b \u306a\u306a\u3075\u3093\u306f\u3093 8\u200b\u5206\u200b \u306f\u3063\u3077\u3093 8\u200b\u5206\u534a\u200b \u306f\u3063\u3077\u3093\u306f\u3093 9\u200b\u5206\u200b \u304d\u3085\u3046\u3075\u3093 9\u200b\u5206\u534a\u200b \u304d\u3085\u3046\u3075\u3093\u306f\u3093 10\u200b\u5206\u200b \u3058\u3085\u3063\u3077\u3093 10\u200b\u5206\u534a\u200b \u3058\u3085\u3063\u3077\u3093\u306f\u3093"},{"location":"japanese/japanese-1-vocab/#_8","title":"\u65e5\u671f","text":"\u200b\u6ce8\u610f\u200b\uff1a1-10\u200b\u65e5\u200b\u7684\u200b\u53d8\u5316\u200b\u6bd4\u8f83\u200b\u7279\u6b8a\u200b\uff0c\u200b\u5176\u4f59\u200b\u7684\u200b\u90fd\u200b\u662f\u200b\u6570\u5b57\u200b+\u300c\u200b\u65e5\u200b\u300d\u3002
\u200b\u65e5\u671f\u200b \u200b\u5047\u540d\u200b \u200b\u65e5\u671f\u200b \u200b\u5047\u540d\u200b \u200b\u65e5\u671f\u200b \u200b\u5047\u540d\u200b 1\u200b\u65e5\u200b \u3064\u3044\u305f\u3061 11\u200b\u65e5\u200b \u3058\u3085\u3046\u3044\u3061\u306b\u3061 21\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u3044\u3061\u306b\u3061 2\u200b\u65e5\u200b \u3075\u3064\u304b 12\u200b\u65e5\u200b \u3058\u3085\u3046\u306b\u306b\u3061 22\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u306b\u306b\u3061 3\u200b\u65e5\u200b \u307f\u3063\u304b 13\u200b\u65e5\u200b \u3058\u3085\u3046\u3055\u3093\u306b\u3061 23\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u3055\u3093\u306b\u3061 4\u200b\u65e5\u200b \u3088\u3063\u304b 14\u200b\u65e5\u200b \u3058\u3085\u3046\u3088\u3063\u304b 24\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u3088\u3063\u304b 5\u200b\u65e5\u200b \u3044\u3064\u304b 15\u200b\u65e5\u200b \u3058\u3085\u3046\u3054\u306b\u3061 25\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u3054\u306b\u3061 6\u200b\u65e5\u200b \u3080\u3044\u304b 16\u200b\u65e5\u200b \u3058\u3085\u3046\u308d\u304f\u306b\u3061 26\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u308d\u304f\u306b\u3061 7\u200b\u65e5\u200b \u306a\u306e\u304b 17\u200b\u65e5\u200b \u3058\u3085\u3046\u3057\u3061\u306b\u3061 27\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u3057\u3061\u306b\u3061 8\u200b\u65e5\u200b \u3088\u3046\u304b 18\u200b\u65e5\u200b \u3058\u3085\u3046\u306f\u3061\u306b\u3061 28\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u306f\u3061\u306b\u3061 9\u200b\u65e5\u200b \u3053\u3053\u306e\u304b 19\u200b\u65e5\u200b \u3058\u3085\u3046\u304f\u306b\u3061 29\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u304f\u306b\u3061 10\u200b\u65e5\u200b \u3068\u304a\u304b 20\u200b\u65e5\u200b \u306f\u3064\u304b 30\u200b\u65e5\u200b \u3055\u3093\u3058\u3085\u3046\u306b\u3061 31\u200b\u65e5\u200b \u3055\u3093\u3058\u3085\u3046\u3044\u3061\u306b\u3061"},{"location":"japanese/japanese-1-vocab/#_9","title":"\u661f\u671f","text":"\u661f\u671f\u200b \u200b\u661f\u671f\u200b \u200b\u661f\u671f\u4e00\u200b \u200b\u6708\u66dc\u65e5\u200b \u3052\u3064\u3088\u3046\u3073 \u200b\u661f\u671f\u4e8c\u200b \u200b\u706b\u66dc\u65e5\u200b \u304b\u3088\u3046\u3073 \u200b\u661f\u671f\u4e09\u200b \u200b\u6c34\u66dc\u65e5\u200b \u3059\u3044\u3088\u3046\u3073 \u200b\u661f\u671f\u56db\u200b \u200b\u6728\u66dc\u65e5\u200b \u3082\u304f\u3088\u3046\u3073 \u200b\u661f\u671f\u4e94\u200b \u200b\u91d1\u66dc\u65e5\u200b \u304d\u3093\u3088\u3046\u3073 \u200b\u661f\u671f\u516d\u200b \u200b\u571f\u66dc\u65e5\u200b \u3069\u3088\u3046\u3073 \u200b\u661f\u671f\u65e5\u200b \u200b\u65e5\u66dc\u65e5\u200b \u306b\u3061\u3088\u3046\u3073"},{"location":"japanese/japanese-1-vocab/#_10","title":"\u5355\u8bcd\u8868","text":""},{"location":"japanese/japanese-1-vocab/#5","title":"\u7b2c\u200b5\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u3084\u3042 \u200b\u55e8\u200b \u301c\u3055\u3093 \u200b\u5148\u751f\u200b \u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059 \u200b\u65e9\u4e0a\u597d\u200b \u200b\u4eca\u65e5\u200b \u304d\u3087\u3046 \u200b\u4eca\u5929\u200b \u200b\u6388\u696d\u200b \u3058\u3085\u304e\u3087\u3046 \u200b\u8bfe\u200b \u200b\u4eca\u200b \u3044\u307e \u200b\u73b0\u5728\u200b \u200b\u90e8\u6d3b\u52d5\u200b \u3076\u304b\u3064\u3069\u3046 \u200b\u793e\u56e2\u6d3b\u52a8\u200b \u200b\u6253\u200b\u3061\u200b\u5408\u200b\u308f\u305b \u3046\u3061\u3042\u308f\u305b \u200b\u5546\u91cf\u200b \u200b\u50d5\u200b \u307c\u304f \u200b\u6211\u200b \u301c\u305f\u3061 ~\u200b\u4eec\u200b \u200b\u90e8\u6d3b\u200b \u3076\u304b\u3064 \u200b\u793e\u56e2\u200b \u200b\u59d4\u54e1\u4f1a\u200b \u3044\u3044\u3093\u304b\u3044 \u200b\u59d4\u5458\u4f1a\u200b \u30e1\u30f3\u30d0\u30fc \u200b\u6210\u5458\u200b \u200b\u7d39\u4ecb\u200b\u3057\u307e\u3059 \u3057\u3087\u3046\u304b\u3044\u3057\u307e\u3059 \u200b\u4ecb\u7ecd\u200b \u200b\u53cb\u9054\u200b \u3068\u3082\u3060\u3061 \u200b\u670b\u53cb\u200b \u200b\u5148\u8f29\u200b \u305b\u3093\u3071\u3044 \u200b\u524d\u8f88\u200b \u305d\u3046 \u200b\u662f\u200b\u7684\u200b \u200b\u521d\u200b\u3081\u307e\u3057\u3066 \u306f\u3058\u3081\u307e\u3057\u3066 \u200b\u521d\u6b21\u89c1\u9762\u200b \u3088\u308d\u3057\u304f \u200b\u8bf7\u591a\u5173\u7167\u200b \u200b\u4eca\u5e74\u200b \u3053\u3068\u3057 \u200b\u4eca\u5e74\u200b \u200b\u65b0\u5165\u751f\u200b \u3057\u3093\u306b\u3085\u3046\u305b\u3044 \u200b\u65b0\u751f\u200b \u200b\u4e2d\u56fd\u200b \u3061\u3085\u3046\u3054\u304f \u200b\u4e2d\u56fd\u200b \u304b\u3089 \u200b\u4ece\u200b \u200b\u6765\u200b\u307e\u3057\u305f \u304d\u307e\u3057\u305f \u200b\u6765\u200b \u200b\u65b9\u200b \u304b\u305f \u200b\u4eba\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u793e\u9577\u200b \u3057\u3083\u3061\u3087\u3046 \u200b\u603b\u7ecf\u7406\u200b \u3053\u3061\u3089 \u200b\u8fd9\u8fb9\u200b \u30af\u30e9\u30b9\u30e1\u30fc\u30c8 \u200b\u540c\u73ed\u540c\u5b66\u200b \u3042\u306a\u305f \u200b\u4f60\u200b \u200b\u79c1\u200b \u308f\u305f\u3057 \u200b\u6211\u200b \u200b\u5f7c\u200b \u304b\u308c \u200b\u4ed6\u200b \u200b\u5f7c\u5973\u200b \u304b\u306e\u3058\u3087 \u200b\u5979\u200b \u200b\u5148\u751f\u200b \u305b\u3093\u305b\u3044 \u200b\u8001\u5e08\u200b \u3053\u3093\u306b\u3061\u306f \u200b\u4f60\u597d\u200b \u3053\u3093\u3070\u3093\u306f \u200b\u665a\u4e0a\u200b\u597d\u200b \u200b\u7533\u200b\u3057\u307e\u3059 \u3082\u3046\u3057\u307e\u3059 \u200b\u53eb\u200b \u200b\u51fa\u8eab\u200b \u3057\u3085\u3063\u3057\u3093 \u200b\u51fa\u8eab\u200b\uff0c\u200b\u6765\u81ea\u200b \u200b\u5317\u4eac\u200b \u307a\u304d\u3093 \u200b\u5317\u4eac\u200b \u200b\u7d4c\u200b\u6e08\u200b \u3051\u3044\u3056\u3044 \u200b\u7ecf\u6d4e\u200b \u200b\u5b66\u90e8\u200b \u304c\u304f\u3076 \u200b\u7cfb\u200b \u200b\u5f8c\u200b\u8f29\u200b \u3053\u3046\u306f\u3044 \u200b\u540e\u8f88\u200b \u200b\u9055\u200b\u3044\u307e\u3059 \u3061\u304c\u3044\u307e\u3059 \u200b\u4e0d\u662f\u200b \u200b\u4e8c\u5e74\u751f\u200b \u306b\u306d\u3093\u305b\u3044 \u200b\u4e8c\u5e74\u7ea7\u200b \u200b\u4e00\u5e74\u751f\u200b \u3044\u3061\u306d\u3093\u305b\u3044 \u200b\u4e00\u5e74\u7ea7\u200b \u200b\u6771\u4eac\u200b \u3068\u3046\u304d\u3087\u3046 \u200b\u4e1c\u4eac\u200b \u200b\u4f1a\u793e\u200b\u54e1\u200b \u304b\u3044\u3057\u3083\u3044\u3093 \u200b\u516c\u53f8\u200b\u804c\u5458\u200b \u200b\u5de5\u5b66\u200b\u90e8\u200b \u3053\u3046\u304c\u304f\u3076 \u200b\u5de5\u5b66\u200b\u7cfb\u200b \u200b\u6cd5\u5b66\u90e8\u200b \u307b\u3046\u304c\u304f\u3076 \u200b\u6cd5\u5b66\u7cfb\u200b \u200b\u97d3\u56fd\u200b \u304b\u3093\u3053\u304f \u200b\u97e9\u56fd\u200b \u200b\u65e5\u672c\u200b\u4eba\u200b \u306b\u307b\u3093\u3058\u3093 \u200b\u65e5\u672c\u200b\u4eba\u200b \u200b\u5927\u200b\u5b66\u9662\u200b\u751f\u200b \u3060\u3044\u304c\u304f\u3044\u3093\u305b\u3044 \u200b\u7814\u7a76\u751f\u200b \u200b\u5b66\u90e8\u200b\u751f\u200b \u304c\u304f\u3076\u305b\u3044 \u200b\u672c\u79d1\u751f\u200b \u200b\u7559\u5b66\u751f\u200b \u308a\u3085\u3046\u304c\u304f\u305b\u3044 \u200b\u7559\u5b66\u751f\u200b \u30a2\u30e1\u30ea\u30ab \u200b\u7f8e\u56fd\u200b \u200b\u4ed5\u4e8b\u200b \u3057\u3054\u3068 \u200b\u5de5\u4f5c\u200b \u200b\u4f11\u200b\u307f \u3084\u3059\u307f \u200b\u4f11\u606f\u200b \u200b\u4e09\u5e74\u751f\u200b \u3055\u3093\u306d\u3093\u305b\u3044 \u200b\u4e09\u5e74\u7ea7\u200b \u200b\u56f3\u200b\u66f8\u9928\u200b \u3068\u3057\u3087\u304b\u3093 \u200b\u56fe\u4e66\u9986\u200b \u30a2\u30eb\u30d0\u30a4\u30c8 \u200b\u517c\u804c\u200b \u200b\u663c\u200b\u3054\u200b\u98ef\u200b \u3072\u308b\u3054\u306f\u3093 \u200b\u5348\u996d\u200b \u200b\u8a66\u200b\u9a13\u200b \u3057\u3051\u3093 \u200b\u8003\u8bd5\u200b \u200b\u65e5\u672c\u200b\u8a9e\u200b \u306b\u307b\u3093\u3054 \u200b\u65e5\u8bed\u200b \u200b\u90e8\u9577\u200b \u3076\u3061\u3087\u3046 \u200b\u90e8\u957f\u200b \u30c1\u30fc\u30e0 \u200b\u961f\u200b \u30ea\u30fc\u30c0\u30fc \u200b\u961f\u957f\u200b \u200b\u65b0\u200b\u5165\u793e\u200b\u54e1\u200b \u3057\u3093\u306b\u3085\u3046\u3057\u3083\u3044\u3093 \u200b\u65b0\u200b\u5458\u5de5\u200b \u200b\u53f8\u4f1a\u8005\u200b \u3057\u304b\u3044\u3057\u3083 \u200b\u4e3b\u6301\u4eba\u200b \u30a2\u30b7\u30b9\u30bf\u30f3\u30c8 \u200b\u52a9\u624b"},{"location":"japanese/japanese-1-vocab/#6","title":"\u7b2c\u200b6\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u3044\u3089\u3057\u3083\u3044\u307e\u3059 \u200b\u6765\u200b \u200b\u5c11\u200b\u3005\u200b \u3057\u3087\u3046\u3057\u3087\u3046 \u200b\u7a0d\u200b\u7b49\u200b \u304a\u200b\u5f85\u200b\u3061\u304f\u3060\u3055\u3044 \u304a\u307e\u3061\u304f\u3060\u3055\u3044 \u200b\u8bf7\u7a0d\u7b49\u200b \u200b\u5b66\u751f\u200b\u8a3c\u200b \u304c\u304f\u305b\u3044\u3057\u3087\u3046 \u200b\u5b66\u751f\u8bc1\u200b \u30e6\u30fc\u30b6\u30fc \u200b\u7528\u6237\u200b \u30a2\u30a4\u30c7\u30a3\u30fc ID \u30e6\u30fc\u30b6\u30fc\u30a2\u30a4\u30c7\u30a3\u30fc \u200b\u7528\u6237\u200bID \u305d\u308c\u304b\u3089 \u200b\u7136\u540e\u200b \u200b\u5730\u200b\u56f3\u200b \u3061\u305a \u200b\u5730\u56fe\u200b \u30d1\u30f3\u30d5\u30ec\u30c3\u30c8 \u200b\u5c0f\u518c\u5b50\u200b \u200b\u4eca\u591c\u200b \u3053\u3093\u3084 \u200b\u4eca\u665a\u200b \u200b\u61c7\u89aa\u200b\u4f1a\u200b \u3053\u3093\u3057\u3093\u304b\u3044 \u200b\u8054\u6b22\u4f1a\u200b \u200b\u4f1a\u5834\u200b \u304b\u3044\u3058\u3087\u3046 \u200b\u4f1a\u573a\u200b \u3069\u3061\u3089 \u200b\u54ea\u91cc\u200b \u200b\u7dcf\u200b\u5408\u200b\u68df\u200b \u305d\u3046\u3054\u3046\u3068\u3046 \u200b\u7efc\u5408\u697c\u200b \u301c\u304b\u3044 ~\u200b\u5c42\u200b \u200b\u8fd1\u200b\u304f \u3061\u304b\u304f \u200b\u9644\u8fd1\u200b \u307b\u3089 \u200b\u770b\u200b \u3053\u3053 \u200b\u8fd9\u91cc\u200b \u3044\u307e\u3059 \u200b\u6709\u200b \u3053\u308c\u304b\u3089 \u200b\u4ece\u200b\u73b0\u5728\u200b\u5f00\u59cb\u200b \u3053\u3061\u3089\u3053\u305d \u200b\u5f7c\u6b64\u5f7c\u6b64\u200b \u200b\u4e0a\u200b \u3046\u3048 \u200b\u4e0a\u200b \u200b\u4e0b\u200b \u3057\u305f \u200b\u4e0b\u200b \u200b\u524d\u200b \u307e\u3048 \u200b\u524d\u200b \u200b\u5f8c\u200b\u308d \u3046\u3057\u308d \u200b\u540e\u200b \u200b\u53f3\u200b \u307f\u304e \u200b\u53f3\u200b \u200b\u5de6\u200b \u3072\u3060\u308a \u200b\u5de6\u200b \u200b\u4e2d\u200b \u306a\u304b \u200b\u4e2d\u200b \u200b\u5916\u200b \u305d\u3068 \u200b\u5916\u200b \u200b\u96a3\u200b \u3068\u306a\u308a \u200b\u65c1\u8fb9\u200b \u200b\u8fd1\u200b\u304f \u3061\u304b\u304f \u200b\u9644\u8fd1\u200b \u200b\u9593\u200b \u3042\u3044\u3060 \u200b\u4e2d\u95f4\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u304a\u200b\u624b\u6d17\u200b\u3044 \u304a\u3066\u3042\u3089\u3044 \u200b\u6d17\u624b\u95f4\u200b \u200b\u5929\u200b\u6c17\u200b \u3066\u3093\u304d \u200b\u5929\u6c14\u200b \u200b\u82e6\u200b\u52b4\u200b \u304f\u308d\u3046 \u200b\u8f9b\u82e6\u200b \u307e\u305f \u200b\u53c8\u200b\uff0c\u200b\u518d\u200b \u200b\u5f8c\u200b \u3042\u3068 \u200b\u4ee5\u540e\u200b \u200b\u6765\u9031\u200b \u3089\u3044\u3057\u3085\u3046 \u200b\u4e0b\u5468\u200b \u200b\u4f55\u200b \u306a\u306b \u200b\u4ec0\u4e48\u200b \u3069\u3053 \u200b\u54ea\u91cc\u200b \u200b\u8ab0\u200b \u3060\u308c \u200b\u8c01\u200b \u3044\u3064 \u200b\u4ec0\u4e48\u200b\u65f6\u5019\u200b \u3069\u306a\u305f \u200b\u54ea\u4f4d\u200b \u200b\u660e\u65e5\u200b \u3042\u3057\u305f \u200b\u660e\u5929\u200b \u200b\u6628\u65e5\u200b \u304d\u306e\u3046 \u200b\u6628\u5929\u200b \u200b\u6559\u5ba4\u200b \u304d\u3087\u3046\u3057\u3064 \u200b\u6559\u5ba4\u200b \u3055\u3063\u304d \u200b\u521a\u624d\u200b \u200b\u96a3\u200b \u3068\u306a\u308a \u200b\u65c1\u8fb9\u200b \u200b\u53c2\u52a0\u8005\u200b \u3055\u3093\u304b\u3057\u3083 \u200b\u53c2\u52a0\u8005\u200b \u30ea\u30b9\u30c8 \u200b\u540d\u5355\u200b \u200b\u540d\u524d\u200b \u306a\u307e\u3048 \u200b\u540d\u5b57\u200b \u200b\u4e0b\u200b \u3057\u305f \u200b\u4e0b\u200b \u200b\u793e\u54e1\u200b\u5bee\u200b \u3057\u3083\u3044\u3093\u308a\u3087\u3046 \u200b\u5458\u5de5\u200b\u5bbf\u820d\u200b \u200b\u90e8\u5c4b\u200b \u3078\u3084 \u200b\u623f\u95f4\u200b \u200b\u9375\u200b \u304b\u304e \u200b\u94a5\u5319\u200b \u200b\u98df\u5802\u200b \u3057\u3087\u304f\u3069\u3046 \u200b\u98df\u5802\u200b \u200b\u4f1a\u8b70\u5ba4\u200b \u304b\u3044\u304e\u3057\u3064 \u200b\u4f1a\u8bae\u5ba4\u200b \u200b\u51b7\u200b\u8535\u200b\u5eab\u200b \u308c\u3044\u305e\u3046\u3053 \u200b\u51b0\u7bb1\u200b \u200b\u6d17\u6fef\u200b\u6a5f\u200b \u305b\u3093\u305f\u304f\u304d \u200b\u6d17\u8863\u673a\u200b \u200b\u81ea\u52d5\u200b\u8ca9\u200b\u58f2\u200b\u6a5f\u200b \u3058\u3069\u3046\u306f\u3093\u3070\u3044\u304d \u200b\u81ea\u52a8\u552e\u8d27\u673a\u200b \u200b\u56fd\u969b\u8ab2\u200b \u3053\u304f\u3055\u3044\u304b \u200b\u56fd\u9645\u90e8\u200b \u200b\u968e\u6bb5\u200b \u304b\u3044\u3060\u3093 \u200b\u697c\u68af\u200b \u200b\u5de6\u5074\u200b \u3072\u3060\u308a\u304c\u308f \u200b\u5de6\u8fb9\u200b \u200b\u672c\u200b \u307b\u3093 \u200b\u4e66\u200b \u200b\u7bb1\u200b \u306f\u3053 \u200b\u7bb1\u5b50\u200b \u200b\u4e2d\u200b \u306a\u304b \u200b\u4e2d\u200b \u30d7\u30ec\u30bb\u30f3\u30c8 \u200b\u793c\u7269\u200b \u200b\u7814\u7a76\u5ba4\u200b \u3051\u3093\u304d\u3085\u3046\u3057\u3064 \u200b\u7814\u7a76\u5ba4\u200b \u200b\u55b6\u200b\u696d\u8ab2\u200b \u3048\u3044\u304e\u3087\u3046\u304b \u200b\u8425\u4e1a\u90e8\u200b \u200b\u767a\u200b\u8868\u200b\u4f1a\u200b \u306f\u3063\u3074\u3087\u3046\u304b\u3044 \u200b\u53d1\u8868\u200b\u4f1a\u200b \u200b\u5165\u200b\u308a\u200b\u53e3\u200b \u3044\u308a\u3050\u3061 \u200b\u5165\u53e3\u200b \u30b3\u30f3\u30b5\u30fc\u30c8 \u200b\u97f3\u4e50\u4f1a\u200b \u200b\u904b\u52d5\u5834\u200b \u3046\u3093\u3069\u3046\u3058\u3087\u3046 \u200b\u8fd0\u52a8\u573a\u200b \u200b\u8aac\u200b\u660e\u200b\u4f1a\u200b \u305b\u3064\u3081\u3044\u304b\u3044 \u200b\u8bf4\u660e\u4f1a\u200b \u200b\u5efa\u7269\u200b \u305f\u3066\u3082\u306e \u200b\u5efa\u7b51\u7269\u200b \u200b\u53f3\u5074\u200b \u307f\u304e\u304c\u308f \u200b\u53f3\u8fb9"},{"location":"japanese/japanese-1-vocab/#7","title":"\u7b2c\u200b7\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u3082\u3057\u304b\u3057\u3066 \u200b\u6216\u8bb8\u200b \u200b\u59c9\u200b \u3042\u306d \u200b\u59d0\u59d0\u200b \u304a\u200b\u59c9\u200b\u3055\u3093 \u304a\u306d\u3048\u3055\u3093 \u200b\u59d0\u59d0\u200b \u200b\u5931\u793c\u200b \u3057\u3064\u308c\u3044 \u200b\u5931\u793c\u200b \u3044\u3064\u3082 \u200b\u7ecf\u5e38\u200b \u200b\u4e16\u8a71\u200b \u305b\u308f \u200b\u7167\u987e\u200b \u305d\u3063\u304f\u308a \u200b\u4e00\u6a21\u4e00\u6837\u200b \u304d\u3087\u3046\u3060\u3044 \u200b\u5144\u5f1f\u59d0\u59b9\u200b \u200b\u5bb6\u200b \u3046\u3061 \u200b\u5bb6\u200b \u301c\u200b\u4eba\u200b \u306b\u3093 ~\u200b\u4eba\u200b \u200b\u5f1f\u200b \u304a\u3068\u3046\u3068 \u200b\u5f1f\u5f1f\u200b \u3082\u3046 \u200b\u8fd8\u200b \u200b\u4e00\u4eba\u200b \u3072\u3068\u308a \u200b\u4e00\u4e2a\u200b\u4eba\u200b \u200b\u4e00\u7dd2\u200b \u3044\u3063\u3057\u3087 \u200b\u4e00\u8d77\u200b \u200b\u6d77\u5916\u200b \u304b\u3044\u304c\u3044 \u200b\u6d77\u5916\u200b \u200b\u5927\u200b\u5909\u200b \u305f\u3044\u3078\u3093 \u200b\u975e\u5e38\u200b \u200b\u7686\u200b \u307f\u3093\u306a \u200b\u5927\u5bb6\u200b \u200b\u7236\u200b \u3061\u3061 \u200b\u7236\u4eb2\u200b \u200b\u6bcd\u200b \u306f\u306f \u200b\u6bcd\u4eb2\u200b \u200b\u5144\u200b \u3042\u306b \u200b\u54e5\u54e5\u200b \u200b\u59bb\u200b \u3064\u307e \u200b\u59bb\u5b50\u200b \u200b\u592b\u200b \u304a\u3063\u3068 \u200b\u4e08\u592b\u200b \u200b\u59b9\u200b \u3044\u3082\u3046\u3068 \u200b\u59b9\u59b9\u200b \u200b\u7956\u7236\u200b \u305d\u3075 \u200b\u7956\u7236\u200b \u200b\u7956\u6bcd\u200b \u305d\u307c \u200b\u7956\u6bcd\u200b \u200b\u53d4\u6bcd\u200b \u304a\u3070 \u200b\u59d1\u59d1\u200b \u200b\u53d4\u7236\u200b \u304a\u3058 \u200b\u59d1\u4e08\u200b \u200b\u606f\u5b50\u200b \u3080\u3059\u3053 \u200b\u513f\u5b50\u200b \u200b\u5a18\u200b \u3080\u3059\u3081 \u200b\u5973\u513f\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u8da3\u5473\u200b \u3057\u3085\u307f \u200b\u7231\u597d\u200b \u200b\u6620\u753b\u200b \u3048\u3044\u304c \u200b\u7535\u5f71\u200b \u200b\u9451\u8cde\u200b \u304b\u3093\u3057\u3087\u3046 \u200b\u6b23\u8d4f\u200b \u200b\u6b21\u200b \u3064\u304e \u200b\u4e0b\u200b\u4e00\u6b21\u200b \u301c\u200b\u541b\u200b \u304f\u3093 ~\u200b\u541b\u200b \u200b\u5ba2\u200b \u304d\u3083\u304f \u200b\u5ba2\u4eba\u200b \u200b\u4e88\u7d04\u200b \u3088\u3084\u304f \u200b\u9884\u7ea6\u200b \u200b\u756a\u53f7\u200b \u3070\u3093\u3054\u3046 \u200b\u53f7\u7801\u200b \u30d1\u30b9\u30dd\u30fc\u30c8 \u200b\u62a4\u7167\u200b \u30b9\u30bf\u30c3\u30d5 \u200b\u5de5\u4f5c\u4eba\u5458\u200b \u200b\u533b\u8005\u200b \u3044\u3057\u3083 \u200b\u533b\u751f\u200b \u200b\u53e3\u200b \u304f\u3061 \u200b\u5634\u200b \u200b\u958b\u200b\u3051\u308b \u3042\u3051\u308b \u200b\u6253\u5f00\u200b \u200b\u4ed8\u200b\u304d\u200b\u5408\u200b\u3046 \u3064\u304d\u3042\u3046 \u200b\u4ea4\u5f80\u200b \u304a\u200b\u6bcd\u200b\u3055\u3093 \u304a\u304b\u3042\u3055\u3093 \u200b\u5988\u5988\u200b \u200b\u5fa1\u5b85\u200b \u304a\u305f\u304f \u200b\u60a8\u200b\u5bb6\u200b 2\u200b\u4eba\u200b \u3075\u305f\u308a \u200b\u4e24\u4e2a\u200b\u4eba\u200b \u200b\u4e00\u4eba\u200b\u3063\u200b\u5b50\u200b \u3072\u3068\u308a\u3063\u3053 \u200b\u72ec\u751f\u5b50\u5973\u200b \u200b\u4f55\u4eba\u200b \u306a\u3093\u306b\u3093 \u200b\u51e0\u4e2a\u200b\u4eba\u200b \u200b\u5bb6\u65cf\u200b \u304b\u305e\u304f \u200b\u5bb6\u5ead\u200b \u200b\u5199\u771f\u200b \u3057\u3083\u3057\u3093 \u200b\u7167\u7247\u200b \u200b\u5927\u962a\u200b \u304a\u304a\u3055\u304b \u200b\u5927\u962a\u200b \u3044\u304f\u3064 \u200b\u51e0\u4e2a\u200b \u301c\u200b\u6b73\u200b \u3055\u3044 ~\u200b\u5c81\u200b \u200b\u53bb\u5e74\u200b \u304d\u3087\u306d\u3093 \u200b\u53bb\u5e74\u200b \u200b\u5916\u56fd\u4eba\u200b \u304c\u3044\u3053\u304f\u3058\u3093 \u200b\u5916\u56fd\u4eba\u200b \u30d5\u30e9\u30f3\u30b9 \u200b\u6cd5\u56fd\u200b \u30da\u30c3\u30c8 \u200b\u5ba0\u7269\u200b \u200b\u732b\u200b \u306d\u3053 \u200b\u732b\u200b \u200b\u4e8c\u5339\u200b \u306b\u3072\u304d \u200b\u4e24\u53ea\u200b \u200b\u5916\u56fd\u200b\u8a9e\u200b \u304c\u3044\u3053\u304f\u3054 \u200b\u5916\u8bed\u200b \u200b\u82f1\u8a9e\u200b \u3048\u3044\u3054 \u200b\u82f1\u8bed\u200b \u200b\u5c0f\u200b\u8aac\u200b \u3057\u3087\u3046\u305b\u3064 \u200b\u5c0f\u8bf4\u200b \u305f\u304f\u3055\u3093 \u200b\u5f88\u591a\u200b \u200b\u540c\u7d1a\u751f\u200b \u3069\u3046\u304d\u3085\u3046\u305b\u3044 \u200b\u540c\u5e74\u7ea7\u200b\u540c\u5b66\u200b \u200b\u90e8\u4e0b\u200b \u3076\u304b \u200b\u90e8\u4e0b\u200b \u30a4\u30ae\u30ea\u30b9 \u200b\u82f1\u56fd\u200b \u30c9\u30a4\u30c4 \u200b\u5fb7\u56fd"},{"location":"japanese/japanese-1-vocab/#8","title":"\u7b2c\u200b8\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5e97\u54e1\u200b \u3066\u3093\u3044\u3093 \u200b\u5e97\u5458\u200b \u30e9\u30f3\u30c1 \u200b\u5348\u9910\u200b \u30e1\u30cb\u30e5\u30fc \u200b\u83dc\u5355\u200b \u200b\u5168\u90e8\u200b \u305c\u3093\u3076 \u200b\u5168\u90e8\u200b \u30bd\u30d5\u30c8\u30c9\u30ea\u30f3\u30af \u200b\u8f6f\u996e\u6599\u200b \u301c\u200b\u4ed8\u200b\u304d \u3064\u304d \u200b\u9644\u5e26\u200b \u200b\u5186\u200b \u3048\u3093 \u200b\u65e5\u5143\u200b \u200b\u5b89\u200b\u3044 \u3084\u3059\u3044 \u200b\u4fbf\u5b9c\u200b \u200b\u4f1a\u8a08\u200b \u304b\u3044\u3051\u3044 \u200b\u7ed3\u8d26\u200b \u200b\u73fe\u91d1\u200b \u3052\u3093\u304d\u3093 \u200b\u73b0\u91d1\u200b \u200b\u7167\u200b\u308a\u200b\u713c\u200b\u304d \u3066\u308a\u3084\u304d \u200b\u7167\u70e7\u200b \u30c1\u30ad\u30f3 \u200b\u9e21\u8089\u200b \u200b\u88cf\u200b \u3046\u3089 \u200b\u91cc\u9762\u200b \u30d4\u30b6 \u200b\u62ab\u8428\u200b \u200b\u6ce8\u6587\u200b \u3061\u3085\u3046\u3082\u3093 \u200b\u70b9\u83dc\u200b \u3069\u3046\u305e \u200b\u8bf7\u200b \u30db\u30c3\u30c8 \u200b\u70ed\u200b\u7684\u200b \u30b3\u30fc\u30d2\u30fc \u200b\u5496\u5561\u200b \u200b\u5b9c\u200b\u3057\u3044 \u3088\u308d\u3057\u3044 \u200b\u597d\u200b \u200b\u7a0e\u200b\u8fbc\u200b\u307f \u305c\u3044\u3053\u307f \u200b\u542b\u7a0e\u200b \u200b\u5225\u200b\u3005\u200b \u3079\u3064\u3079\u3064 \u200b\u5206\u5f00\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5473\u200b\u564c\u200b\u6c41\u200b \u307f\u305d\u3057\u308b \u200b\u5473\u200b\u564c\u200b\u6c64\u200b \u30b5\u30e9\u30c0 \u200b\u6c99\u62c9\u200b \u200b\u672c\u200b\u65e5\u200b \u307b\u3093\u3058\u3064 \u200b\u4eca\u5929\u200b \u200b\u6301\u200b\u3061\u200b\u5e30\u200b\u308a \u3082\u3061\u304b\u3048\u308a \u200b\u6253\u5305\u200b \u200b\u55b6\u200b\u696d\u200b \u3048\u3044\u304e\u3087\u3046 \u200b\u8425\u4e1a\u200b \u200b\u5927\u4e08\u592b\u200b \u3060\u3044\u3058\u3087\u3046\u3076 \u200b\u6ca1\u5173\u7cfb\u200b \u200b\u98df\u200b\u5f8c\u200b \u3057\u3087\u304f\u3054 \u200b\u996d\u540e\u200b \u200b\u7a0e\u200b\u629c\u200b\u304d \u305c\u3044\u306c\u304d \u200b\u4e0d\u542b\u7a0e\u200b \u30b9\u30de\u30db \u200b\u667a\u80fd\u624b\u673a\u200b \u30c6\u30b9\u30bf\u30fc \u200b\u8bd5\u7528\u54c1\u200b \u3057\u308d\u3044 \u200b\u767d\u8272\u200b \u200b\u540d\u53e4\u5c4b\u200b \u306a\u3054\u3084 \u200b\u540d\u53e4\u5c4b\u200b \u30c1\u30b1\u30c3\u30c8 \u200b\u7968\u200b \u3044\u304f\u3089 \u200b\u591a\u5c11\u200b\u94b1\u200b \u200b\u713c\u200b\u304d\u200b\u9ce5\u200b \u3084\u304d\u3068\u308a \u200b\u70e4\u9e21\u8089\u200b\u4e32\u200b \u304a\u200b\u8336\u200b \u304a\u3061\u3083 \u200b\u8336\u200b \u30ab\u30fc\u30c9 \u200b\u5361\u200b \u30a2\u30ea\u30da\u30a4 \u200b\u652f\u4ed8\u5b9d\u200b \u3086\u3063\u304f\u308a \u200b\u6162\u6162\u200b\u5730\u200b \u307b\u3093\u306e \u200b\u4e00\u70b9\u70b9\u200b \u200b\u6c17\u200b\u6301\u200b\u3061 \u304d\u3082\u3061 \u200b\u5fc3\u60c5\u200b \u200b\u5408\u200b\u3046 \u3042\u3046 \u200b\u5408\u9002\u200b \u200b\u8f9e\u66f8\u200b \u3058\u3057\u3087 \u200b\u8bcd\u5178\u200b \u200b\u81ea\u200b\u8ee2\u200b\u8eca\u200b \u3058\u3066\u3093\u3057\u3083 \u200b\u81ea\u884c\u8f66\u200b \u200b\u624b\u5e33\u200b \u3066\u3061\u3087\u3046 \u200b\u8bb0\u4e8b\u672c\u200b \u30d1\u30bd\u30b3\u30f3 \u200b\u7535\u8111\u200b \u30d3\u30fc\u30eb \u200b\u5564\u9152\u200b \u30a2\u30c3\u30d7\u30eb\u30d1\u30a4 \u200b\u82f9\u679c\u6d3e\u200b \u30cf\u30f3\u30d0\u30fc\u30ac\u30fc \u200b\u6c49\u5821\u200b \u200b\u5730\u4e0b\u200b \u3061\u304b \u200b\u5730\u4e0b\u200b \u30cf\u30f3\u30c9\u30bd\u30fc\u30d7 \u200b\u6d17\u624b\u6db2\u200b \u200b\u5965\u200b \u304a\u304f \u200b\u6df1\u5904\u200b \u200b\u68da\u200b \u305f\u306a \u200b\u67b6\u5b50\u200b \u30d5\u30e9\u30a4\u30c9\u30c1\u30ad\u30f3 \u200b\u70b8\u9e21\u200b \u200b\u7d05\u8336\u200b \u3053\u3046\u3061\u3083 \u200b\u7ea2\u8336\u200b \u305f\u3053\u200b\u713c\u200b\u304d \u305f\u3053\u3084\u304d \u200b\u7ae0\u9c7c\u70e7\u200b \u304a\u200b\u5bff\u53f8\u200b \u304a\u3059\u3057 \u200b\u5bff\u53f8\u200b \u3068\u3093\u304b\u3064 \u200b\u732a\u6392"},{"location":"japanese/japanese-1-vocab/#9","title":"\u7b2c\u200b9\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u4e45\u200b\u3057\u3076\u308a \u3072\u3055\u3057\u3076\u308a \u200b\u597d\u4e45\u4e0d\u89c1\u200b \u3069\u3046 \u200b\u600e\u4e48\u6837\u200b \u200b\u5927\u5b66\u200b \u3060\u3044\u304c\u304f \u200b\u5927\u5b66\u200b \u200b\u751f\u6d3b\u200b \u305b\u3044\u304b\u3064 \u200b\u751f\u6d3b\u200b \u200b\u52c9\u5f37\u200b \u3079\u3093\u304d\u3087\u3046 \u200b\u5b66\u4e60\u200b \u200b\u5fd9\u200b\u3057\u3044 \u3044\u305d\u304c\u3057\u3044 \u200b\u5fd9\u200b \u3067\u304d\u308b \u200b\u80fd\u200b \u200b\u697d\u200b\u3057\u3044 \u305f\u306e\u3057\u3044 \u200b\u5f00\u5fc3\u200b \u200b\u591a\u200b\u3044 \u304a\u304a\u3044 \u200b\u591a\u200b \u200b\u6bce\u200b\u65e5\u200b \u307e\u3044\u306b\u3061 \u200b\u6bcf\u5929\u200b \u200b\u5348\u524d\u200b \u3054\u305c\u3093 \u200b\u4e0a\u5348\u200b \u200b\u5348\u200b\u5f8c\u200b \u3054\u3054 \u200b\u4e0b\u5348\u200b \u200b\u81ea\u7531\u200b \u3058\u3086\u3046 \u200b\u81ea\u7531\u200b \u200b\u4eca\u200b\u5b66\u671f\u200b \u3053\u3093\u304c\u3063\u304d \u200b\u672c\u5b66\u671f\u200b \u200b\u6765\u200b\u6708\u200b \u3089\u3044\u3052\u3064 \u200b\u4e0b\u4e2a\u6708\u200b \u200b\u5236\u4f5c\u200b\u5c55\u200b \u305b\u3044\u3055\u304f\u3066\u3093 \u200b\u5236\u4f5c\u200b\u5c55\u200b \u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u200b\u5c55\u793a\u200b \u3061\u3087\u3063\u3068 \u200b\u7a0d\u200b\u7b49\u200b \u3068\u3063\u3066\u3082 \u200b\u975e\u5e38\u200b \u200b\u53b3\u200b\u3057\u3044 \u304d\u3073\u3057\u3044 \u200b\u4e25\u683c\u200b \u200b\u7d30\u90e8\u200b \u3055\u3044\u3076 \u200b\u7ec6\u8282\u200b \u3053\u3060\u308f\u308b \u200b\u8bb2\u7a76\u200b \u3084\u306f\u308a \u200b\u4ecd\u65e7\u200b \u200b\u9811\u5f35\u200b\u308b \u304c\u3093\u3070\u308b \u200b\u52a0\u6cb9\u200b \u3088\u304b\u3063\u305f \u200b\u592a\u597d\u4e86\u200b \u3057\u304b\u3057 \u200b\u4f46\u662f\u200b \u3067\u3082 \u200b\u4f46\u662f\u200b \u301c\u304c \u200b\u4f46\u662f\u200b \u301c\u3051\u3069 \u200b\u4f46\u662f\u200b \u3060\u304b\u3089 \u200b\u6240\u4ee5\u200b \u301c\u304b\u3089 \u200b\u6240\u4ee5\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5143\u200b\u6c17\u200b \u3052\u3093\u304d \u200b\u7cbe\u795e\u200b \u200b\u5f7c\u6c0f\u200b \u304b\u308c\u3057 \u200b\u7537\u670b\u53cb\u200b \u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b \u305b\u3044\u304b\u3060\u3044\u304c\u304f \u200b\u6e05\u534e\u5927\u5b66\u200b \u200b\u5408\u683c\u200b \u3054\u3046\u304b\u304f \u200b\u5408\u683c\u200b \u304a\u3081\u3066\u3068\u3046 \u200b\u606d\u559c\u200b \u200b\u9759\u200b\u304b \u3057\u305a\u304b \u200b\u5b89\u9759\u200b \u200b\u4eca\u6708\u200b \u3053\u3093\u3052\u3064 \u200b\u672c\u6708\u200b \u200b\u4f55\u65e5\u200b \u306a\u3093\u306b\u3061 \u200b\u51e0\u53f7\u200b \u200b\u6bce\u200b\u6708\u200b \u307e\u3044\u3064\u304d \u200b\u6bcf\u6708\u200b \u200b\u99c5\u200b\u524d\u200b \u3048\u304d\u307e\u3048 \u200b\u8f66\u7ad9\u200b\u524d\u200b \u200b\u65b0\u200b\u3057\u3044 \u3042\u305f\u3089\u3057\u3044 \u200b\u65b0\u200b\u7684\u200b \u200b\u5c45\u9152\u200b\u5c4b\u200b \u3044\u3056\u304b\u3084 \u200b\u5c45\u9152\u200b\u5c4b\u200b \u200b\u7f8e\u5473\u200b\u3057\u3044 \u304a\u3044\u3057\u3044 \u200b\u597d\u5403\u200b \u200b\u8a95\u200b\u751f\u65e5\u200b \u305f\u3093\u3058\u3087\u3046\u3073 \u200b\u751f\u65e5\u200b \u3042\u307e\u308a \u200b\u4e0d\u592a\u200b \u200b\u4e0a\u200b\u624b\u200b \u3058\u3087\u3046\u305a \u200b\u64c5\u957f\u200b \u200b\u597d\u200b\u304d \u3059\u304d \u200b\u559c\u6b22\u200b \u200b\u512a\u200b\u3057\u3044 \u3084\u3055\u3057\u3044 \u200b\u6e29\u67d4\u200b \u200b\u5fa1\u852d\u200b \u304a\u304b\u3052 \u200b\u591a\u4e8f\u200b \u200b\u7559\u5b66\u200b \u308a\u3085\u3046\u304c\u304f \u200b\u7559\u5b66\u200b \u200b\u6700\u8fd1\u200b \u3055\u3044\u304d\u3093 \u200b\u6700\u8fd1\u200b \u200b\u5927\u200b\u304d\u3044 \u304a\u304a\u304d\u3044 \u200b\u5927\u200b \u200b\u9ad8\u200b\u3044 \u305f\u304b\u3044 \u200b\u9ad8\u200b \u304b\u304b\u308b \u200b\u82b1\u8d39\u200b \u200b\u9762\u767d\u200b\u3044 \u304a\u3082\u3057\u308d\u3044 \u200b\u6709\u8da3\u200b \u200b\u96e3\u200b\u3057\u3044 \u3080\u305a\u304b\u3057\u3044 \u200b\u96be\u200b \u200b\u5bbf\u984c\u200b \u3057\u3085\u304f\u3060\u3044 \u200b\u4f5c\u4e1a\u200b \u200b\u8ab2\u984c\u200b \u304b\u3060\u3044 \u200b\u8bfe\u9898\u200b \u200b\u767a\u200b\u8868\u200b \u306f\u3063\u3074\u3087\u3046 \u200b\u53d1\u8a00\u200b \u200b\u4eca\u5ea6\u200b \u3053\u3093\u3069 \u200b\u4e0b\u6b21\u200b \u200b\u9031\u672b\u200b \u3057\u3085\u3046\u307e\u3064 \u200b\u5468\u672b\u200b \u200b\u6a21\u64ec\u200b\u30c6\u30b9\u30c8 \u3082\u304e\u30c6\u30b9\u30c8 \u200b\u6a21\u62df\u8003\u8bd5"},{"location":"japanese/japanese-1-vocab/#10","title":"\u7b2c\u200b10\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5168\u54e1\u200b \u305c\u3093\u3044\u3093 \u200b\u5168\u5458\u200b \u200b\u9577\u200b\u3044 \u306a\u304c\u3044 \u200b\u957f\u200b \u30b3\u30e1\u30f3\u30c8 \u200b\u8bc4\u8bba\u200b \u3042\u3063\u3068\u3044\u3046\u200b\u9593\u200b \u3042\u3063\u3068\u3044\u3046\u307e \u200b\u4e00\u4e0b\u5b50\u200b \u200b\u898b\u200b\u308b \u307f\u308b \u200b\u770b\u200b \u200b\u884c\u200b\u304f \u3044\u304f \u200b\u53bb\u200b \u200b\u7a7a\u200b\u304f \u3042\u304f \u200b\u7a7a\u200b \u200b\u4f5c\u54c1\u200b \u3055\u304f\u3072\u3093 \u200b\u4f5c\u54c1\u200b \u200b\u697d\u200b\u3057\u307f \u305f\u306e\u3057\u307f \u200b\u671f\u5f85\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5e2d\u200b \u305b\u304d \u200b\u5ea7\u4f4d\u200b \u200b\u98df\u4e8b\u4f1a\u200b \u3057\u3087\u304f\u3058\u304b\u3044 \u200b\u996d\u5c40\u200b \u200b\u5f01\u200b\u5f53\u200b \u3079\u3093\u3068\u3046 \u200b\u4fbf\u5f53\u200b \u200b\u5b66\u98df\u200b \u304c\u304f\u3057\u3087\u304f \u200b\u5b66\u6821\u98df\u5802\u200b \u200b\u89aa\u5207\u200b \u3057\u3093\u305b\u3064 \u200b\u4eb2\u5207\u200b \u200b\u98df\u8cbb\u200b \u3057\u3087\u304f\u3072 \u200b\u996d\u94b1\u200b \u200b\u590f\u4f11\u200b\u307f \u306a\u3064\u3084\u3059\u307f \u200b\u6691\u5047\u200b \u200b\u51ac\u4f11\u200b\u307f \u3075\u3086\u3084\u3059\u307f \u200b\u5bd2\u5047\u200b \u200b\u4f1a\u793e\u200b \u304b\u3044\u3057\u3083 \u200b\u516c\u53f8\u200b \u200b\u5b66\u6821\u200b \u304c\u3063\u3053\u3046 \u200b\u5b66\u6821\u200b \u200b\u5f85\u200b\u3061\u200b\u5408\u200b\u308f\u305b \u307e\u3061\u3042\u308f\u305b \u200b\u7ea6\u4f1a\u200b \u200b\u7d50\u69cb\u200b \u3051\u3063\u3053\u3046 \u200b\u53ef\u4ee5\u200b\u7684\u200b \u200b\u591c\u200b \u3088\u308b \u200b\u665a\u4e0a\u200b \u200b\u7f8e\u8853\u9928\u200b \u3073\u3058\u3085\u3064\u304b\u3093 \u200b\u7f8e\u672f\u9986\u200b \u200b\u6b8b\u5ff5\u200b \u3056\u3093\u306d\u3093 \u200b\u9057\u61be\u200b \u200b\u4f1a\u8b70\u200b \u304b\u3044\u304e \u200b\u4f1a\u8bae\u200b \u200b\u6691\u200b\u3044 \u3042\u3064\u3044 \u200b\u70ed\u200b \u200b\u6599\u7406\u200b \u308a\u3087\u3046\u308a \u200b\u6599\u7406\u200b \u304a\u200b\u6d12\u843d\u200b \u304a\u3057\u3083\u308c \u200b\u65f6\u9ae6\u200b \u200b\u7dba\u9e97\u200b \u304d\u308c\u3044 \u200b\u6f02\u4eae\u200b \u200b\u6697\u200b\u3044 \u304f\u3089\u3044 \u200b\u9ed1\u6697\u200b \u200b\u72ed\u200b\u3044 \u305b\u307e\u3044 \u200b\u72ed\u7a84\u200b \u200b\u771f\u9762\u76ee\u200b \u307e\u3058\u3081 \u200b\u8ba4\u771f\u200b \u200b\u98df\u4e8b\u200b \u3057\u3087\u304f\u3058 \u200b\u5403\u996d\u200b \u3059\u3054\u3044 \u200b\u5389\u5bb3\u200b \u200b\u53e3\u982d\u200b \u3053\u3046\u3068\u3046 \u200b\u53e3\u5934\u200b \u3081\u3093\u305b\u3064 \u200b\u9762\u8bd5\u200b \u200b\u7f8e\u8853\u5c55\u200b \u3073\u3058\u3085\u3064\u3066\u3093 \u200b\u7f8e\u672f\u200b\u5c55\u200b \u200b\u5fd8\u5e74\u200b\u4f1a\u200b \u307c\u3046\u306d\u3093\u304b\u3044 \u200b\u5e74\u7ec8\u200b\u4f1a"},{"location":"japanese/japanese-1-vocab/#11","title":"\u7b2c\u200b11\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5168\u7136\u200b \u305c\u3093\u305c\u3093 \u200b\u5168\u7136\u200b \u307a\u3089\u307a\u3089 \u200b\u6d41\u5229\u200b \u3060\u3063\u3066 \u200b\u56e0\u4e3a\u200b \u200b\u5358\u200b\u8a9e\u200b \u305f\u3093\u3054 \u200b\u5355\u8bcd\u200b \u200b\u91cf\u200b \u308a\u3087\u3046 \u200b\u91cf\u200b \u200b\u52e4\u52c9\u200b \u304d\u3093\u3079\u3093 \u200b\u52e4\u594b\u200b \u30c6\u30f3\u30b7\u30e7\u30f3 \u200b\u6c14\u6c1b\u200b\u70ed\u70c8\u200b\u7684\u200b\u6837\u5b50\u200b \u200b\u8a71\u200b \u306f\u306a\u3057 \u200b\u8bdd\u200b \u200b\u7fa8\u200b\u307e\u3057\u3044 \u3046\u3089\u3084\u307e\u3057\u3044 \u200b\u7fa1\u6155\u200b \u200b\u58f0\u200b \u3053\u3048 \u200b\u58f0\u97f3\u200b \u200b\u91cd\u8981\u200b \u3058\u3085\u3046\u3088\u3046 \u200b\u91cd\u8981\u200b \u200b\u8a9e\u5b66\u200b \u3054\u304c\u304f \u200b\u8bed\u8a00\u200b \u200b\u57fa\u672c\u200b \u304d\u307b\u3093 \u200b\u57fa\u672c\u200b \u3057\u3083\u3079\u308b \u200b\u8bf4\u200b \u200b\u6065\u200b\u305a\u304b\u3057\u3044 \u306f\u305a\u304b\u3057\u3044 \u200b\u5bb3\u7f9e\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u3068\u3053\u308d \u200b\u5730\u65b9\u200b \u200b\u6016\u200b\u3044 \u3053\u308f\u3044 \u200b\u53ef\u6015\u200b \u200b\u5185\u5bb9\u200b \u306a\u3044\u3088\u3046 \u200b\u5185\u5bb9\u200b \u200b\u5206\u200b\u304b\u308b \u308f\u304b\u308b \u200b\u61c2\u200b \u200b\u5b50\u200b \u3053 \u200b\u5b69\u5b50\u200b \u200b\u91ce\u83dc\u200b \u3084\u3055\u3044 \u200b\u852c\u83dc\u200b \u200b\u8089\u200b \u306b\u304f \u200b\u8089\u200b \u200b\u5acc\u200b\u3044 \u304d\u3089\u3044 \u200b\u8ba8\u538c\u200b \u200b\u98df\u200b\u3079\u308b \u305f\u3079\u308b \u200b\u5403\u200b \u3082\u306e \u200b\u4e1c\u897f\u200b \u200b\u5c11\u200b\u306a\u3044 \u3059\u304f\u306a\u3044 \u200b\u5c11\u200b \u200b\u904b\u52d5\u4f1a\u200b \u3046\u3093\u3069\u3046\u304b\u3044 \u200b\u8fd0\u52a8\u4f1a\u200b \u200b\u60aa\u200b\u3044 \u308f\u308b\u3044 \u200b\u574f\u200b \u200b\u5c02\u200b\u9580\u5e97\u200b \u305b\u3093\u3082\u3093\u3066\u3093 \u200b\u4e13\u5356\u5e97\u200b \u200b\u5bd2\u200b\u3044 \u3055\u3080\u3044 \u200b\u51b7\u200b \u200b\u80cc\u200b \u305b \u200b\u8eab\u9ad8\u200b \u200b\u624b\u200b\u6599\u7406\u200b \u3066\u308a\u3087\u3046\u308a \u200b\u81ea\u5df1\u200b\u505a\u200b\u7684\u200b\u996d\u200b \u200b\u52aa\u529b\u200b \u3069\u308a\u3087\u304f \u200b\u52aa\u529b\u200b \u200b\u5927\u4e8b\u200b \u3060\u3044\u3058 \u200b\u91cd\u8981\u200b \u200b\u6f2b\u753b\u200b \u307e\u3093\u304c \u200b\u6f2b\u753b\u200b \u200b\u8aad\u200b\u3080 \u3088\u3080 \u200b\u8bfb\u200b \u200b\u5927\u597d\u200b\u304d \u3060\u3044\u3059\u304d \u200b\u975e\u5e38\u200b\u559c\u6b22\u200b \u200b\u4fbf\u5229\u200b \u3079\u3093\u308a \u200b\u65b9\u4fbf\u200b \u200b\u4f7f\u200b\u3046 \u3064\u304b\u3046 \u200b\u4f7f\u7528\u200b \u200b\u96fb\u8eca\u200b \u3067\u3093\u3057\u3083 \u200b\u7535\u8f66\u200b \u200b\u9045\u200b\u308c\u308b \u304a\u304f\u308c\u308b \u200b\u8fdf\u5230\u200b \u200b\u65e9\u200b\u304f \u306f\u3084\u304f \u200b\u5feb\u200b \u200b\u982d\u200b \u3042\u305f\u307e \u200b\u5934\u200b \u200b\u75db\u200b\u3044 \u3044\u305f\u3044 \u200b\u75bc\u200b \u200b\u5730\u4e0b\u200b\u9244\u200b \u3061\u304b\u3066\u3064 \u200b\u5730\u94c1\u200b \u200b\u901f\u200b\u3044 \u306f\u3084\u3044 \u200b\u5feb\u200b \u200b\u4e2d\u83ef\u200b\u6599\u7406\u200b \u3061\u3085\u3046\u304b\u308a\u3087\u3046\u308a \u200b\u4e2d\u9910\u200b \u200b\u753a\u200b \u307e\u3061 \u200b\u8857\u9053\u200b \u200b\u793e\u4f1a\u200b\u4eba\u200b \u3057\u3083\u304b\u3044\u3058\u3093 \u200b\u793e\u4f1a\u200b\u4eba\u200b \u200b\u55ab\u200b\u8336\u5e97\u200b \u304d\u3063\u3055\u3066\u3093 \u200b\u5496\u5561\u5e97\u200b \u200b\u5916\u200b \u305d\u3068 \u200b\u5916\u9762\u200b \u200b\u5e83\u200b\u3044 \u3072\u308d\u3044 \u200b\u5bbd\u200b \u200b\u74b0\u5883\u200b \u304b\u3093\u304d\u3087\u3046 \u200b\u73af\u5883\u200b \u30ab\u30c4\u200b\u4e3c\u200b \u30ab\u30c4\u3069\u3093 \u200b\u732a\u6392\u200b\u996d\u200b \u200b\u5bcc\u58eb\u5c71\u200b \u3075\u3058\u3055\u3093 \u200b\u5bcc\u58eb\u5c71\u200b \u200b\u6210\u7e3e\u200b \u305b\u3044\u305b\u304d \u200b\u6210\u7ee9\u200b \u200b\u696d\u754c\u200b \u304e\u3087\u3046\u304b\u3044 \u200b\u884c\u4e1a\u200b \u200b\u6709\u540d\u200b \u3086\u3046\u3081\u3044 \u200b\u6709\u540d\u200b \u200b\u6570\u5b66\u200b \u3059\u3046\u304c\u304f \u200b\u6570\u5b66\u200b \u200b\u56fd\u8a9e\u200b \u3053\u304f\u3054 \u200b\u56fd\u8bed\u200b \u200b\u6b74\u200b\u53f2\u200b \u308c\u304d\u3057 \u200b\u5386\u53f2\u200b \u200b\u6587\u5b66\u200b \u3076\u3093\u304c\u304f \u200b\u6587\u5b66\u200b \u200b\u793e\u4f1a\u5b66\u200b \u3057\u3083\u304b\u3044\u304c\u304f \u200b\u793e\u4f1a\u5b66\u200b \u200b\u5316\u5b66\u200b \u304b\u304c\u304f \u200b\u5316\u5b66\u200b \u200b\u71b1\u5fc3\u200b \u306d\u3063\u3057\u3093 \u200b\u70ed\u5fc3\u200b \u200b\u6b4c\u200b \u3046\u305f \u200b\u6b4c\u200b \u200b\u7269\u77e5\u200b\u308a \u3082\u306e\u3057\u308a \u200b\u535a\u5b66\u200b \u200b\u4eba\u200b\u6c17\u200b \u306b\u3093\u304d \u200b\u4eba\u6c14"},{"location":"japanese/japanese-1-vocab/#12","title":"\u7b2c\u200b12\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u305d\u308d\u305d\u308d \u200b\u4e0d\u4e45\u200b \u304a\u200b\u663c\u200b \u304a\u3072\u308b \u200b\u4e2d\u5348\u200b \u3059\u308b \u200b\u505a\u200b \u200b\u671d\u200b\u3054\u200b\u98ef\u200b \u3042\u3055\u3054\u306f\u3093 \u200b\u65e9\u996d\u200b \u200b\u9045\u200b\u3044 \u304a\u305d\u3044 \u200b\u665a\u200b \u200b\u8efd\u200b\u3044 \u304b\u308b\u3044 \u200b\u8f7b\u200b \u200b\u5915\u98df\u200b \u3086\u3046\u3057\u3087\u304f \u200b\u665a\u996d\u200b \u200b\u6b8b\u200b\u308a \u306e\u3053\u308a \u200b\u5269\u4f59\u200b \u200b\u81ea\u708a\u200b \u3058\u3059\u3044 \u200b\u81ea\u5df1\u200b\u505a\u996d\u200b \u305f\u307e\u306b \u200b\u5076\u5c14\u200b \u200b\u4f5c\u200b\u308b \u3064\u304f\u308b \u200b\u505a\u200b \u200b\u52ff\u8ad6\u200b \u3082\u3061\u308d\u3093 \u200b\u5f53\u7136\u200b \u200b\u4e2d\u56fd\u200b\u4eba\u200b \u3061\u3085\u3046\u3054\u304f\u3058\u3093 \u200b\u4e2d\u56fd\u200b\u4eba\u200b \u200b\u548c\u200b\u98df\u200b \u308f\u3057\u3087\u304f \u200b\u65e5\u672c\u6599\u7406\u200b \u200b\u9903\u5b50\u200b \u304e\u3087\u3046\u3056 \u200b\u997a\u5b50\u200b \u200b\u9ebb\u5a46\u8c46\u8150\u200b \u307e\u30fc\u307c\u3069\u3046\u3075 \u200b\u9ebb\u5a46\u8c46\u8150\u200b \u200b\u751f\u7269\u200b \u306a\u307e\u3082\u306e \u200b\u751f\u200b\u7684\u200b\u4e1c\u897f\u200b \u200b\u82e6\u624b\u200b \u306b\u304c\u3066 \u200b\u4e0d\u200b\u64c5\u957f\u200b \u200b\u6642\u200b\u3005\u200b \u3068\u304d\u3069\u304d \u200b\u6709\u65f6\u5019\u200b \u200b\u604b\u200b\u3057\u3044 \u3053\u3044\u3057\u3044 \u200b\u7231\u6155\u200b \u200b\u4f5c\u200b\u308a\u200b\u65b9\u200b \u3064\u304f\u308a\u304b\u305f \u200b\u505a\u6cd5\u200b \u200b\u662f\u975e\u200b \u305c\u3072 \u200b\u4e00\u5b9a\u200b \u200b\u6559\u200b\u3048\u308b \u304a\u3057\u3048\u308b \u200b\u6559\u200b \u3068\u304b \u200b\u7b49\u7b49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u307e\u3060 \u200b\u8fd8\u200b \u200b\u98df\u200b\u3079\u200b\u9803\u200b \u305f\u3079\u3054\u308d \u200b\u98df\u7269\u200b\u6700\u200b\u597d\u5403\u200b\u7684\u200b\u65f6\u5019\u200b \u200b\u6c34\u6cf3\u200b \u3059\u3044\u3048\u3044 \u200b\u6e38\u6cf3\u200b \u200b\u5c11\u200b\u3057 \u3059\u3053\u3057 \u200b\u4e00\u70b9\u70b9\u200b \u200b\u8cea\u554f\u200b \u3057\u3064\u3082\u3093 \u200b\u95ee\u9898\u200b \u3069\u3046\u3057\u3066 \u200b\u4e3a\u4ec0\u4e48\u200b \u200b\u672c\u5f53\u200b\u306b \u307b\u3093\u3068\u3046\u306b \u200b\u771f\u7684\u200b \u3060\u304b\u3089 \u200b\u6240\u4ee5\u200b \u200b\u7406\u7cfb\u200b \u308a\u3051\u3044 \u200b\u7406\u79d1\u200b \u200b\u79d1\u76ee\u200b \u304b\u3082\u304f \u200b\u79d1\u76ee\u200b \u200b\u7d0d\u8c46\u200b \u306a\u3063\u3068\u3046 \u200b\u7eb3\u8c46\u200b \u200b\u6620\u753b\u9928\u200b \u3048\u3044\u304c\u304b\u3093 \u200b\u7535\u5f71\u9662\u200b \u200b\u7518\u200b\u3044 \u3042\u307e\u3044 \u200b\u751c\u200b \u200b\u904b\u52d5\u200b \u3046\u3093\u3069\u3046 \u200b\u8fd0\u52a8\u200b \u3078\u305f \u200b\u4e0d\u200b\u64c5\u957f\u200b \u200b\u5f97\u610f\u200b \u3068\u304f\u3044 \u200b\u64c5\u957f\u200b \u200b\u5f8c\u200b\u308d \u3046\u3057\u308d \u200b\u540e\u9762\u200b \u200b\u7df4\u7fd2\u200b \u308c\u3093\u3057\u3085\u3046 \u200b\u7ec3\u4e60\u200b \u200b\u554f\u984c\u200b \u3082\u3093\u3060\u3044 \u200b\u95ee\u9898\u200b \u200b\u85ac\u200b \u304f\u3059\u308a \u200b\u836f\u200b \u200b\u60a3\u8005\u200b \u304b\u3093\u3058\u3083 \u200b\u75c5\u4eba\u200b \u200b\u99c5\u200b \u3048\u304d \u200b\u8f66\u7ad9\u200b \u200b\u904b\u200b\u8ee2\u200b\u624b\u200b \u3046\u3093\u3066\u3093\u3057\u3085 \u200b\u53f8\u673a\u200b \u200b\u64ae\u200b\u308b \u3068\u308b \u200b\u62cd\u7167\u200b \u200b\u904b\u200b\u8ee2\u200b \u3046\u3093\u3066\u3093 \u200b\u5f00\u8f66\u200b \u200b\u672c\u5c4b\u200b \u307b\u3093\u3084 \u200b\u4e66\u5e97\u200b \u301c\u200b\u5c4b\u200b \u3084 ~\u200b\u5e97\u200b \u200b\u5929\u5a66\u200b\u7f85\u200b \u3066\u3093\u3077\u3089 \u200b\u5929\u5987\u200b\u7f57\u200b \u200b\u96e8\u200b \u3042\u3081 \u200b\u96e8\u200b \u200b\u6dbc\u200b\u3057\u3044 \u3059\u305a\u3057\u3044 \u200b\u51c9\u723d\u200b \u200b\u6674\u200b\u308c \u306f\u308c \u200b\u6674\u5929\u200b \u200b\u5546\u54c1\u200b \u3057\u3087\u3046\u3072\u3093 \u200b\u5546\u54c1\u200b \u200b\u685c\u200b \u3055\u304f\u3089 \u200b\u6a31\u82b1\u200b \u200b\u5473\u200b \u3042\u3058 \u200b\u5473\u9053\u200b \u200b\u8272\u200b \u3044\u308d \u200b\u989c\u8272\u200b \u200b\u521d\u200b\u3081\u3066 \u306f\u3058\u3081\u3066 \u200b\u7b2c\u4e00\u6b21\u200b \u200b\u7389\u5b50\u200b\u713c\u200b\u304d \u305f\u307e\u3054\u3084\u304d \u200b\u714e\u86cb\u200b \u3064\u307e\u3089\u306a\u3044 \u200b\u65e0\u804a\u200b \u200b\u697d\u200b\u5668\u200b \u304c\u3063\u304d \u200b\u4e50\u5668\u200b \u200b\u9eba\u200b \u3081\u3093 \u200b\u9762\u6761\u200b \u200b\u9055\u200b\u3046 \u3061\u304c\u3046 \u200b\u4e0d\u200b\u4e00\u6837"},{"location":"japanese/japanese-1-vocab/#1311","title":"\u7b2c\u200b13\u200b\u8bfe\u200b\uff08\u200b\u65b0\u4e16\u7eaa\u200b\u521d\u7ea7\u200b\u7b2c\u200b11\u200b\u8bfe\u200b\uff09","text":"\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u7a7a\u6e2f\u200b \u304f\u3046\u3053\u3046 \u200b\u673a\u573a\u200b \u200b\u6c7a\u5b9a\u200b \u3051\u3063\u3066\u3044 \u200b\u51b3\u5b9a\u200b \u200b\u6765\u200b\u65e5\u200b \u3089\u3044\u306b\u3061 \u200b\u6765\u200b\u65e5\u672c\u200b \u200b\u5230\u200b\u7740\u200b \u3068\u3046\u3061\u3083\u304f \u200b\u5230\u8fbe\u200b \u200b\u4f55\u6642\u200b \u306a\u3093\u3058 \u200b\u51e0\u70b9\u200b \u200b\u4e88\u5b9a\u200b \u3088\u3066\u3044 \u200b\u9884\u5b9a\u200b \u200b\u8fce\u200b\u3048\u308b \u3080\u304b\u3048\u308b \u200b\u8fce\u63a5\u200b \u200b\u5e30\u200b\u308b \u304b\u3048\u308b \u200b\u56de\u5bb6\u200b \u200b\u5c31\u200b\u8077\u200b \u3057\u3085\u3046\u3057\u3087\u304f \u200b\u5c31\u804c\u200b \u200b\u8cbf\u6613\u200b \u307c\u3046\u3048\u304d \u200b\u8d38\u6613\u200b \u200b\u4f7f\u200b\u3046 \u3064\u304b\u3046 \u200b\u4f7f\u7528\u200b \u200b\u6b8b\u696d\u200b \u3056\u3093\u304e\u3087\u3046 \u200b\u52a0\u73ed\u200b \u200b\u65e5\u200b\u3005\u200b \u3072\u3073 \u200b\u65e5\u5b50\u200b \u200b\u61d0\u200b\u304b\u3057\u3044 \u306a\u3064\u304b\u3057\u3044 \u200b\u6000\u5ff5\u200b \u200b\u4f4f\u5c45\u200b \u3058\u3085\u3046\u304d\u3087 \u200b\u4f4f\u6240\u200b \u200b\u6c7a\u200b\u3057\u3066 \u3051\u3063\u3057\u3066 \u200b\u7edd\u4e0d\u200b \u200b\u5fc3\u914d\u200b \u3057\u3093\u3071\u3044 \u200b\u62c5\u5fc3\u200b \u3044\u308b \u200b\u9700\u8981\u200b \u200b\u5b89\u200b\u3044 \u3084\u3059\u3044 \u200b\u4fbf\u5b9c\u200b \u200b\u7d39\u4ecb\u200b \u3057\u3087\u3046\u304b\u3044 \u200b\u4ecb\u7ecd\u200b \u200b\u5b89\u5fc3\u200b \u3042\u3093\u3057\u3093 \u200b\u5b89\u5fc3\u200b \u3067\u306f \u200b\u90a3\u4e48\u200b \u200b\u5143\u200b\u6c17\u200b \u3052\u3093\u304d \u200b\u7cbe\u795e\u200b \u200b\u69d8\u200b \u3055\u307e \uff08\u200b\u7528\u4e8e\u200b\u656c\u79f0\u200b\uff09 \u200b\u5589\u200b \u306e\u3069 \u200b\u5589\u5499\u200b \u200b\u6e07\u200b\u304f \u304b\u308f\u304f \u200b\u6e34\u200b \u200b\u98f2\u200b\u3080 \u306e\u3080 \u200b\u559d\u200b \u200b\u5bcc\u58eb\u5c71\u200b \u3075\u3058\u3055\u3093 \u200b\u5bcc\u58eb\u5c71\u200b \u200b\u7d20\u6674\u200b\u3089\u3057\u3044 \u3059\u3070\u3089\u3057\u3044 \u200b\u7f8e\u597d\u200b \u200b\u7b11\u200b\u3046 \u308f\u3089\u3046 \u200b\u7b11\u200b \u3042\u306e \u200b\u90a3\u4e2a\u200b \u304a\u200b\u624b\u6d17\u200b\u3044 \u304a\u3066\u3042\u3089\u3044 \u200b\u6d17\u624b\u95f4\u200b \u307e\u3064 \u200b\u7b49"},{"location":"japanese/japanese-1-vocab/#1412","title":"\u7b2c\u200b14\u200b\u8bfe\u200b\uff08\u200b\u65b0\u4e16\u7eaa\u200b\u521d\u7ea7\u200b\u7b2c\u200b12\u200b\u8bfe\u200b\uff09","text":"\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u6d77\u5916\u200b \u304b\u3044\u304c\u3044 \u200b\u6d77\u5916\u200b \u200b\u65c5\u884c\u200b \u308a\u3087\u3053\u3046 \u200b\u65c5\u884c\u200b \u200b\u73cd\u200b\u3057\u3044 \u3081\u305a\u3089\u3057\u3044 \u200b\u73cd\u8d35\u200b \u3053\u3068 \u200b\u4e8b\u60c5\u200b \u200b\u4f8b\u200b\u3048\u3070 \u305f\u3068\u3048\u3070 \u200b\u4f8b\u5982\u200b \u200b\u65b0\u5a5a\u200b \u3057\u3093\u3053\u3093 \u200b\u65b0\u5a5a\u200b \u200b\u56fd\u5185\u200b \u3053\u304f\u306a\u3044 \u200b\u56fd\u5185\u200b \u200b\u9078\u200b\u3076 \u3048\u3089\u3076 \u200b\u9009\u62e9\u200b \u200b\u5c11\u200b\u306a\u3044 \u3059\u304f\u306a\u3044 \u200b\u601d\u200b\u3046 \u304a\u3082\u3046 \u200b\u8ba4\u4e3a\u200b \u200b\u591a\u200b\u304f \u304a\u304a\u304f \u200b\u591a\u200b \u200b\u8a00\u200b\u3046 \u3044\u3046 \u200b\u8bf4\u200b \u200b\u5404\u5730\u200b \u304b\u304f\u3061 \u200b\u5404\u5730\u200b \u200b\u77ed\u671f\u200b \u305f\u3093\u304d \u200b\u77ed\u671f\u200b \u200b\u500b\u200b\u4eba\u200b \u3053\u3058\u3093 \u200b\u4e2a\u4eba\u200b \u200b\u5927\u52e2\u200b \u304a\u304a\u305c\u3044 \u200b\u5927\u591a\u6570\u200b \u200b\u56fd\u200b \u304f\u306b \u200b\u56fd\u5bb6\u200b \u200b\u65b9\u200b \u307b\u3046 \u200b\u65b9\u9762\u200b \u200b\u5024\u200b\u6bb5\u200b \u306d\u3060\u3093 \u200b\u4ef7\u683c\u200b \u200b\u5834\u5408\u200b \u3070\u3042\u3044 \u200b\u60c5\u51b5\u200b \u200b\u4e0d\u8981\u200b \u3075\u3088\u3046 \u200b\u4e0d\u200b\u9700\u8981\u200b \u200b\u7c21\u200b\u5358\u200b \u304b\u3093\u305f\u3093 \u200b\u7b80\u5355\u200b \u3057\u304b\u3057 \u200b\u4f46\u662f\u200b \u200b\u4e00\u751f\u200b\u61f8\u547d\u200b \u3044\u3063\u3057\u3087\u3046\u3051\u3093\u3081\u3044 \u200b\u52aa\u529b\u200b \u200b\u52c9\u5f37\u200b \u3079\u3093\u304d\u3087\u3046 \u200b\u5b66\u4e60\u200b \u200b\u8cb4\u91cd\u200b \u304d\u3061\u3087\u3046 \u200b\u8d35\u91cd\u200b \u200b\u9752\u6625\u200b \u305b\u3044\u3057\u3085\u3093 \u200b\u9752\u6625\u200b \u200b\u4e00\u65e5\u200b \u3044\u3061\u306b\u3061 \u200b\u4e00\u5929\u200b \u200b\u5927\u5207\u200b \u305f\u3044\u305b\u3064 \u200b\u91cd\u8981\u200b \u200b\u590f\u4f11\u200b\u307f \u306a\u3064\u3084\u3059\u307f \u200b\u6691\u5047\u200b \u200b\u904e\u200b\u3054\u3059 \u3059\u3054\u3059 \u200b\u5ea6\u8fc7\u200b \u200b\u6b8b\u200b\u308b \u306e\u3053\u308b \u200b\u5269\u4f59\u200b \u200b\u8a66\u200b\u9a13\u200b \u3057\u3051\u3093 \u200b\u8003\u8bd5\u200b \u200b\u53d7\u200b\u3051\u308b \u3046\u3051\u308b \u200b\u53c2\u52a0\u200b \u304a\u200b\u76c6\u200b \u304a\u307c\u3093 \u200b\u76c2\u200b\u5170\u76c6\u200b \u304f\u308b \u200b\u6765\u200b \u200b\u4e07\u91cc\u200b\u9577\u200b\u57ce\u200b \u3070\u3093\u308a\u3061\u3087\u3046\u3058\u3087\u3046 \u200b\u4e07\u91cc\u957f\u57ce\u200b \u200b\u6848\u5185\u200b \u3042\u3093\u306a\u3044 \u200b\u5bfc\u6e38\u200b \u305d\u3046 \u200b\u8fd9\u6837\u200b \u200b\u826f\u200b\u3044 \u3088\u3044 \u200b\u597d"},{"location":"latex/","title":"LaTeX","text":"\u200b\u8bb0\u5f55\u200bLaTeX\u200b\u7684\u200b\u4f7f\u7528\u200b\u3002
"},{"location":"latex/#_1","title":"\u57fa\u672c\u200b\u6392\u7248","text":" - \u200b\u5b57\u4f53\u200b\u4e0e\u200b\u5b57\u53f7\u200b
- \u200b\u5217\u8868\u200b
"},{"location":"latex/#_2","title":"\u6570\u5b66\u516c\u5f0f\u200b\u6392\u7248","text":" - \u200b\u6570\u5b66\u200b\u7b26\u53f7\u200b
- \u200b\u7b26\u53f7\u200b\u5806\u53e0\u200b
- \u200b\u7279\u6b8a\u200b\u6280\u5de7\u200b
"},{"location":"latex/#_3","title":"\u56fe\u8868\u200b\u6392\u7248","text":""},{"location":"latex/#tikz","title":"tikz\u200b\u7ed8\u56fe","text":" - pgfplots\u200b\u56fe\u8868\u200b
"},{"location":"latex/#_4","title":"\u8868\u683c\u200b\u6392\u7248","text":" - tabular\u200b\u73af\u5883\u200b
"},{"location":"latex/#_5","title":"\u5176\u4ed6","text":" - musixtex
- \u200b\u4f7f\u7528\u200bLaTeX\u200b\u521b\u5efa\u200b\u5e7b\u706f\u7247\u200b
- \u200b\u9012\u5f52\u200b
"},{"location":"latex/advanced/recursion/","title":"\u9012\u5f52","text":"LaTeX\u200b\u4e2d\u200b\u7684\u200b\u9012\u5f52\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\\def
\u200b\u547d\u4ee4\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u5728\u200b\u5b9a\u4e49\u200b\u7684\u200b\u5b8f\u4e2d\u200b\u5305\u542b\u200b\u81ea\u8eab\u200b\u5373\u53ef\u200b\u3002
\\def\\recursion#1{\n \\ifx#1\\relax\n \\relax\n \\else\n do something\n \\expandafter\\recursion\n \\fi\n}\n
\u200b\u5728\u200b\u5b8f\u200b\u7b2c\u4e00\u6b21\u200b\u5c55\u5f00\u200b\u540e\u200b\uff0c\u200b\u5982\u679c\u200b#1
\u200b\u4e0d\u662f\u200b\\relax
\uff0c\u200b\u5219\u200b\u4f1a\u200b\u8f6c\u5165\u200b\\else
\u200b\u8bed\u53e5\u200b\u8fdb\u884c\u200b\u7b2c\u4e8c\u6b21\u200b\u5c55\u5f00\u200b\u3002
- \u200b\u5b8f\u200b\u5b9a\u4e49\u200b\u4e2d\u200b\u5f15\u7528\u200b\u7684\u200b\u5b8f\u200b\u540d\u79f0\u200b\u524d\u200b\u5fc5\u987b\u200b\u52a0\u200b
\\expandafter
\uff0c\u200b\u8868\u793a\u200b\u5728\u200b\u5c55\u5f00\u200b\u5f53\u524d\u200b\u5b8f\u540e\u200b\u624d\u200b\u5c55\u5f00\u200b\\recursion
\uff1b \\relax
\u200b\u662f\u200b\u5b8f\u200b\u7684\u200b\u7ec8\u6b62\u200b\u6761\u4ef6\u200b\uff0c\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u9700\u8981\u200b\u4ee5\u200b\\relax
\u200b\u7ed3\u5c3e\u200b\u3002
"},{"location":"latex/basics/fonts/","title":"LaTeX\u200b\u4e2d\u200b\u7684\u200b\u5b57\u4f53\u200b\u4e0e\u200b\u5b57\u53f7","text":""},{"location":"latex/basics/fonts/#_1","title":"\u5b57\u53f7","text":"\\(\\LaTeX\\)\u200b\u4e2d\u5171\u200b\u6709\u200b\\tiny
\u3001\\scriptsize
\u3001\\footnotesize
\u3001\\small
\u3001\\normalsize
\u3001\\large
\u3001\\Large
\u3001\\LARGE
\u3001\\huge
\u3001\\Huge
\u200b\u7b49\u200b10\u200b\u79cd\u200b\u76f8\u5bf9\u200b\u5c3a\u5bf8\u200b\u7684\u200b\u5b57\u53f7\u200b\u8bbe\u7f6e\u200b\u3002\u200b\u6bcf\u6b21\u200b\u4fee\u6539\u200b\u5b57\u53f7\u200b\u540e\u200b\uff0c\u200b\u4f1a\u200b\u5bf9\u200b\u547d\u4ee4\u200b\u540e\u200b\u6240\u6709\u200b\u7684\u200b\u6587\u672c\u200b\u751f\u6548\u200b\u3002\u200b\u5982\u679c\u200b\u4ec5\u200b\u9700\u8981\u200b\u4fee\u6539\u200b\u4e00\u90e8\u5206\u200b\u6587\u5b57\u200b\u7684\u200b\u5b57\u53f7\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u9700\u8981\u200b\u8c03\u6574\u200b\u5b57\u53f7\u200b\u7684\u200b\u90e8\u5206\u200b\u4f7f\u7528\u200b\u82b1\u200b\u62ec\u53f7\u200b{}
\u200b\u5305\u56f4\u200b\u3002
LaTeX\u200b\u4e2d\u200b\u7684\u200b\u5b57\u53f7\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\centering\n\\tiny tiny \\\\\n\\scriptsize scriptsize \\\\\n\\footnotesize footnotesize \\\\\n\\small small \\\\\n\\normalsize normalsize \\\\\n\\large large \\\\\n\\Large Large \\\\\n\\LARGE LARGE \\\\\n\\huge huge \\\\\n\\Huge Huge \\\\\n
"},{"location":"latex/basics/lists/","title":"\u5217\u8868","text":"\u200b\u5728\u200bLaTeX\u200b\u4e2d\u200b\uff0cenumerate
\u200b\u73af\u5883\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u7f16\u53f7\u200b\u5217\u8868\u200b\uff0citemize
\u200b\u73af\u5883\u200b\u4e0e\u200bdescription
\u200b\u73af\u5883\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u7b26\u53f7\u200b\u5217\u8868\u200b\u3002\u200b\u6240\u6709\u200b\u7684\u200b\u5217\u8868\u200b\u4f7f\u7528\u200b\\item
\u200b\u547d\u4ee4\u200b\u5b9a\u4e49\u200b\u5217\u8868\u200b\u9879\u200b\u3002\u200b\u5217\u8868\u200b\u53ef\u4ee5\u200b\u81ea\u5b9a\u4e49\u200b\u4f7f\u7528\u200b\u7684\u200b\u7f16\u53f7\u200b\u4e0e\u200b\u7b26\u53f7\u200b\u3002
\u200b\u5f53\u200b\u5217\u8868\u200b\u88ab\u200b\u5d4c\u5957\u200b\u65f6\u200b\uff0c\u200b\u4e0d\u540c\u200b\u5c42\u6b21\u200b\u7684\u200b\u5217\u8868\u200b\u4f1a\u200b\u4f7f\u7528\u200b\u4e0d\u540c\u200b\u7684\u200b\u7f16\u53f7\u200b\u4ee5\u200b\u907f\u514d\u200b\u6df7\u6dc6\u200b\u3002
"},{"location":"latex/basics/lists/#_2","title":"\u57fa\u672c\u200b\u4f7f\u7528","text":""},{"location":"latex/basics/lists/#enumerate","title":"enumerate
\u200b\u73af\u5883","text":"enumerate
\u200b\u73af\u5883\u200b\u7684\u200b\u4f7f\u7528\u200b\u65b9\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
\\begin{enumerate}\n \\item This is an item.\n \\item This is an item.\n \\item This is an item.\n\\end{enumerate}\n
\u200b\u6e32\u67d3\u200b\u540e\u200b\u7684\u200b\u6548\u679c\u200b\uff1a
- This is an item.
- This is an item.
- This is an item.
enumerate
\u200b\u73af\u5883\u200b\u9ed8\u8ba4\u200b\u4f7f\u7528\u200b1. 2. 3. ...
\u200b\u8fdb\u884c\u200b\u7f16\u53f7\u200b\uff0c\u200b\u81ea\u5b9a\u4e49\u200b\u7f16\u53f7\u200b\u901a\u8fc7\u200b\u5728\u200b\\begin{enumerate}
\u200b\u540e\u200b\u6dfb\u52a0\u200b\u53c2\u6570\u200b\u5b9e\u73b0\u200b\u3002
\\begin{enumerate}[A.]\n \\item This is an item.\n \\item This is an item.\n \\item This is an item.\n\\end{enumerate}\n
\u200b\u6e32\u67d3\u200b\u540e\u200b\u7684\u200b\u6548\u679c\u200b\uff1a
A. This is an item. B. This is an item. C. This is an item.
\u200b\u5728\u200benumerate
\u200b\u4e0e\u200bitem
\u200b\u73af\u5883\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\setlength
\u200b\u8c03\u8282\u200b\u5217\u8868\u200b\u9879\u200b\u4e4b\u95f4\u200b\u7684\u200b\u8ddd\u79bb\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
\\setlength{\\itemsep}{0pt}\n\\setlength{\\parskip}{0pt}\n\\setlength{\\itemindent}{1em}\n
\u200b\u81ea\u5b9a\u4e49\u200b\u7f16\u53f7\u200b\u5217\u8868\u200b\u9700\u8981\u200b\u5f15\u5165\u200benumerate
\u200b\u5305\u200b\uff1a\\usepackage{enumerate}
"},{"location":"latex/basics/lists/#itemize","title":"itemize
\u200b\u73af\u5883","text":"itemize
\u200b\u73af\u5883\u200b\u7528\u4e8e\u200b\u751f\u6210\u200b\u7b26\u53f7\u200b\u5217\u8868\u200b\uff0c\u200b\u4f7f\u7528\u200b\u65b9\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
\\begin{itemize}\n \\item This is an item.\n \\item This is an item.\n \\item This is an item.\n\\end{itemize}\n
\u200b\u6e32\u67d3\u200b\u540e\u200b\u7684\u200b\u6548\u679c\u200b\uff1a
- This is an item.
- This is an item.
- This is an item.
\\item
\u200b\u547d\u4ee4\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e2d\u62ec\u53f7\u200b\u6307\u5b9a\u200b\u5f53\u524d\u200b\u9879\u200b\u4f7f\u7528\u200b\u7684\u200b\u7b26\u53f7\u200b\uff0c\u200b\u5982\u200b\\item[-]
\u200b\u4f7f\u7528\u200b-
\u200b\u4f5c\u4e3a\u200b\u7b26\u53f7\u200b
"},{"location":"latex/floats/table/","title":"tabular\u200b\u73af\u5883","text":"tabular
\u200b\u73af\u5883\u200b\u662f\u200b\\(\\LaTeX{}\\)\u200b\u7528\u4e8e\u200b\u521b\u5efa\u8868\u683c\u200b\u7684\u200b\u73af\u5883\u200b\u3002
"},{"location":"latex/floats/table/#_1","title":"\u57fa\u672c\u200b\u4f7f\u7528","text":"\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\u6f14\u793a\u200b\u4e86\u200btabular
\u200b\u8bed\u53e5\u200b\u7684\u200b\u4f7f\u7528\u200b\u65b9\u6cd5\u200b,\u200b\u751f\u6210\u200b\u4e00\u4e2a\u200b3\u200b\u884c\u200b3\u200b\u5217\u200b\u7684\u200b\u8868\u683c\u200b\u3002
tabular\u200b\u57fa\u672c\u200b\u4f7f\u7528\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{|c|c|c|}\n \\hline 2 & 9 & 4 \\\\\n \\hline 7 & 5 & 3 \\\\\n \\hline 6 & 1 & 8 \\\\\n \\hline\n\\end{tabular}\n
"},{"location":"latex/floats/table/#_2","title":"\u5bfc\u8a00\u200b\u533a","text":"\\begin{tabular}
\u200b\u5176\u540e\u200b\u7d27\u8ddf\u200b\u7684\u200b\u4e00\u5bf9\u200b\u62ec\u53f7\u200b\u5185\u200b\u662f\u200b\u5bfc\u8a00\u200b\u533a\u200b\uff0c\u200b\u5bfc\u8a00\u200b\u533a\u200b\u89c4\u5b9a\u200b\u4e86\u200b\u5355\u5143\u683c\u200b\u7684\u200b\u7eb5\u5411\u200b\u8fb9\u6846\u200b\u548c\u200b\u5355\u5143\u683c\u200b\u5185\u200b\u5143\u7d20\u200b\u7684\u200b\u5bf9\u9f50\u200b\u65b9\u5f0f\u200b\u3002
l
\u3001c
\u3001r
\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u5de6\u200b\u5bf9\u9f50\u200b\uff0c\u200b\u5c45\u4e2d\u200b\uff0c\u200b\u53f3\u200b\u5bf9\u9f50\u200b |
\u3001||
\u200b\u5bf9\u5e94\u200b\u8868\u683c\u200b\u7eb5\u5411\u200b\u6846\u7ebf\u200b\u7c7b\u578b\u200b\uff08\u200b\u5355\u7ebf\u200b\u6216\u200b\u53cc\u7ebf\u200b\uff09 @{exp}
\u200b\u6307\u5b9a\u200b\u63d2\u5165\u200b\u5230\u200b\u5217\u4e2d\u200b\u7684\u200b\u6587\u672c\u200b *{n}{pre}
\u200b\u6307\u200b\u91cd\u590d\u200bpre
\u200b\u5185\u5bb9\u200bn
\u200b\u6b21\u200b p{len}
\u200b\u5c06\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5217\u200b\u653e\u5165\u200b\u4e00\u4e2a\u200bparbox\u200b\u4e2d\u200b
\u200b\u6839\u636e\u200b\u5982\u200b\u4e0a\u200b\u8868\u8ff0\u200b\uff0c\u200b\u5bfc\u8a00\u200b\u533a\u200b{|c|c|c|}
\u200b\u7b49\u4ef7\u200b\u4e8e\u200b{*{3}{|c}|}
\u200b\u5bfc\u8a00\u200b\u533a\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{||l|c|r||}\n \\hline 2 & 91 & 4 \\\\\n \\hline 71 & 5 & 32 \\\\\n \\hline 652 & 251 & 89 \\\\\n \\hline\n\\end{tabular}\n
"},{"location":"latex/floats/table/#_3","title":"\u5408\u5e76\u200b\u5355\u5143\u683c","text":"\u200b\u6a2a\u5411\u200b\u5408\u5e76\u200b\u5355\u5143\u683c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\multicolumn
\u200b\u547d\u4ee4\u200b\uff0c\u200b\u7eb5\u5411\u200b\u5408\u5e76\u200b\u5355\u5143\u683c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bmultirow
\u200b\u5b8f\u5305\u200b\u4e2d\u200b\u7684\u200b\\multirow
\u200b\u547d\u4ee4\u200b\uff1a
\\multicolumn
\u200b\u547d\u4ee4\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\u5408\u5e76\u200b\u5217\u200b\u7684\u200b\u6570\u91cf\u200b\uff0c\u200b\u7b2c\u4e8c\u4e2a\u200b\u53c2\u6570\u200b\u662f\u200b\u5408\u5e76\u200b\u540e\u200b\u5355\u5143\u683c\u200b\u7684\u200b\u5bfc\u8a00\u200b\u5217\u200b \\multirow
\u200b\u547d\u4ee4\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\u5408\u5e76\u200b\u884c\u200b\u7684\u200b\u6570\u91cf\u200b\uff0c\u200b\u7b2c\u4e8c\u4e2a\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200bLaTeX\u200b\u81ea\u884c\u200b\u8bbe\u7f6e\u200b\u5bbd\u5ea6\u200b\uff0c\u200b\u7b2c\u4e09\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200b\u5355\u5143\u683c\u200b\u5185\u5bb9\u200b
\u200b\u5408\u5e76\u200b\u5355\u5143\u683c\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{|ccc|}\n \\hline\n 2 & 9 & 4\\\\\n 7 & \\multicolumn{2}{c|} {\\multirow{2}*{{?}}} \\\\\n 6 & &\\\\\n \\hline\n\\end{tabular}\n
"},{"location":"latex/floats/table/#_4","title":"\u4e09\u7ebf\u200b\u8868","text":"LaTeX\u200b\u4e2d\u200b\u4f7f\u7528\u200b\u4e09\u7ebf\u200b\u8868\u200b\u9700\u8981\u200b\u7528\u5230\u200bbooktabs
\u200b\u5b8f\u5305\u200b\uff0c\u200b\u52a0\u5165\u200b\u5b8f\u5305\u200b\u540e\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\toprule
\u3001\\midrule
\u200b\u4e0e\u200b\\bottomrule
\u200b\u753b\u7ebf\u200b\uff08\u200b\u4e0d\u5e94\u200b\u518d\u200b\u4f7f\u7528\u200b\\hline
\u200b\u547d\u4ee4\u200b\uff09\u3002
\u200b\u4e09\u7ebf\u200b\u8868\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{ccc}\n \\toprule\n 2 & 91 & 4 \\\\\n \\midrule\n 71 & 5 & 32 \\\\\n 652 & 251 & 89 \\\\\n \\bottomrule\n\\end{tabular}\n
"},{"location":"latex/floats/table/#_5","title":"\u989c\u8272\u200b\u586b\u5145","text":"\u200b\u989c\u8272\u200b\u586b\u5145\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bcolortbl
\u200b\u5b8f\u5305\u200b\uff0c\u200b\u4f7f\u7528\u200b\\rowcolor
\u200b\u547d\u4ee4\u200b\u6307\u5b9a\u200b\u884c\u200b\u7684\u200b\u586b\u5145\u200b\u989c\u8272\u200b\uff0c\u200b\u6216\u200b\\cellcolor
\u200b\u547d\u4ee4\u200b\u6307\u5b9a\u200b\u5355\u5143\u683c\u200b\u7684\u200b\u586b\u5145\u200b\u989c\u8272\u200b\u3002\u200b\u586b\u5145\u200b\u989c\u8272\u200b\u53ef\u4ee5\u200b\u9009\u62e9\u200b\u7070\u5ea6\u200b[gray]
\u200b\u6216\u200b\u5f69\u8272\u200b[rgb]
\u3002
\u200b\u989c\u8272\u200b\u586b\u5145\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{ccc}\n \\rowcolor[gray]{0.6} 2 & 9 & 4 \\\\\n \\rowcolor[gray]{0.7} 7 & 5 & 3 \\\\\n \\rowcolor[gray]{0.8} 6 & 1 & 8 \\\\\n\\end{tabular}\n
"},{"location":"latex/floats/table/#_6","title":"\u659c\u7ebf\u200b\u8868\u5934","text":"\u200b\u659c\u7ebf\u200b\u8868\u5934\u200b\u7531\u200bdiagbox
\u200b\u5b8f\u5305\u200b\u63d0\u4f9b\u200b\uff0c\u200b\u4f7f\u7528\u200b\u65b9\u6cd5\u200b\u5982\u4e0b\u200b\uff1a
\u200b\u659c\u7ebf\u200b\u8868\u5934\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{|l|ccc|}\n \\hline\n \\diagbox{Time}{Room}{Day} & Mon & Tue & Wed \\\\\n \\hline\n Morning & used & used & \\\\\n Afternoon & & used & used \\\\\n \\hline\n\\end{tabular}\n
"},{"location":"latex/math/stack/","title":"LaTeX \u200b\u7b26\u53f7\u200b\u5806\u53e0","text":""},{"location":"latex/math/stack/#_1","title":"\u7b26\u53f7\u200b\u4e0a\u4e0b\u200b\u52a0\u200b\u6587\u672c","text":"\u200b\u90e8\u5206\u200b\u5927\u578b\u200b\u8fd0\u7b97\u7b26\u200b\uff08\u200b\u53c2\u89c1\u200b\u6570\u5b66\u200b\u7b26\u53f7\u200b\uff09\u200b\u53ef\u4ee5\u200b\u52a0\u5165\u200b\u4e0a\u4e0b\u200b\u6807\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u884c\u95f4\u200b\u516c\u5f0f\u200b\uff0c\u200b\u8fd0\u7b97\u7b26\u200b\u7684\u200b\u4e0a\u4e0b\u200b\u6807\u6709\u200b\u4e24\u79cd\u200b\u4f4d\u7f6e\u200b\u9009\u62e9\u200b\uff1a
- \u200b\u4e0a\u4e0b\u200b\u6807\u5728\u200b\u7b26\u53f7\u200b\u4e0a\u4e0b\u200b\u4e24\u4fa7\u200b\uff0c\u200b\u5982\u200b $$ \\sum_{i=0}^\\infty $$
- \u200b\u4e0a\u4e0b\u200b\u6807\u5728\u200b\u7b26\u53f7\u200b\u53f3\u4fa7\u200b\uff0c\u200b\u5982\u200b $$ \\int_0^\\infty $$
\u200b\u884c\u5185\u200b\u516c\u5f0f\u200b\u9ed8\u8ba4\u200b\u6240\u6709\u200b\u7684\u200b\u4e0a\u4e0b\u200b\u6807\u90fd\u200b\u5728\u200b\u7b26\u53f7\u200b\u53f3\u4fa7\u200b\uff0c\u200b\u5982\u200b\\(\\sum_{i=0}^\\infty\\)\u3002\u200b\u4f7f\u7528\u200b\\limits
\u200b\u53ef\u4ee5\u200b\u5f3a\u5236\u200b\u4e0a\u4e0b\u200b\u6807\u51fa\u200b\u73b0\u5728\u200b\u8fd0\u7b97\u7b26\u200b\u4e0a\u4e0b\u200b\u4e24\u4fa7\u200b\uff0c\u200b\u5982\u200b
\\limits
\u200b\u547d\u4ee4\u200b
LaTeX\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b $\\sum\\limits_{i=0}^\\infty$\n
\\(\\sum\\limits_{i=0}^\\infty\\)
\\overset
\u3001\\underset
\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u5728\u200b\u7b26\u53f7\u200b\u4e0a\u4e0b\u200b\u63d2\u5165\u200b\u7b26\u53f7\u200b\u3002\\stackrel
\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u4e0e\u200b\\overset
\u200b\u76f8\u540c\u200b\u7684\u200b\u529f\u80fd\u200b\u3002
\\overset
\u200b\u547d\u4ee4\u200b\u4e0e\u200b\\underset
\u200b\u547d\u4ee4\u200b
LaTeX\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{equation*}\n \\begin{aligned}\n &\\overset{above}{\\rightarrow} \\\\\n &\\underset{below}{\\rightarrow} \\\\\n \\end{aligned}\n\\end{\\equation*}\n
\\[ \\begin{aligned} &\\overset{above}{\\rightarrow} \\\\ &\\underset{below}{\\rightarrow} \\\\ \\end{aligned} \\] \u200b\u5982\u679c\u200b\u9700\u8981\u200b\u6362\u884c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\substack
\u200b\u547d\u4ee4\u200b\uff1a
\\substack
\u200b\u547d\u4ee4\u200b
LaTeX\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{equation*}\n \\begin{aligned}\n &\\overset{\\substack{above1 \\\\ above2}}{\\rightarrow} \\\\\n &\\underset{\\substack{below1 \\\\ below2}}{\\rightarrow} \\\\\n \\end{aligned}\n\\end{\\equation*}\n
\\[ \\begin{aligned} &\\overset{\\substack{above1 \\\\ above2}}{\\rightarrow} \\\\ &\\underset{\\substack{below1 \\\\ below2}}{\\rightarrow} \\\\ \\end{aligned} \\]"},{"location":"latex/math/stack/#_2","title":"\u7bad\u5934\u200b\u4e0a\u4e0b\u200b\u52a0\u200b\u6587\u672c","text":"\\overset
\u3001\\stackrel
\u200b\u4e0e\u200b\\underset
\u200b\u53ea\u80fd\u200b\u5b9e\u73b0\u200b\u7bad\u5934\u200b\u4e0a\u4e0b\u200b\u52a0\u200b\u6587\u672c\u200b\uff0c\u200b\u7bad\u5934\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e0d\u80fd\u200b\u968f\u200b\u6587\u672c\u200b\u957f\u5ea6\u200b\u81ea\u52a8\u200b\u8c03\u6574\u200b\u3002amsmath
\u200b\u5b8f\u5305\u200b\u63d0\u4f9b\u200b\u4e86\u200b\\xleftarrow
\u200b\u4e0e\u200b\\xrightarrow
\uff0c\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u7bad\u5934\u200b\u4e0a\u4e0b\u200b\u52a0\u200b\u6587\u672c\u200b\uff0c\u200b\u540c\u65f6\u200b\u7bad\u5934\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u9002\u5e94\u200b\u6587\u672c\u200b\u7684\u200b\u957f\u5ea6\u200b\u3002extarrows
\u200b\u5b8f\u5305\u200b\u63d0\u4f9b\u200b\u4e86\u200b\\xlongequal
\u200b\u547d\u4ee4\u200b\uff0c\u200b\u5b9e\u73b0\u200b\u7b49\u200b\u53f7\u200b\u4e0a\u4e0b\u200b\u52a0\u200b\u6587\u672c\u200b\uff0c\u200b\u793a\u4f8b\u200b\u5982\u4e0b\u200b\uff1a
\\xrightarrow
\u200b\u547d\u4ee4\u200b
LaTeX\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{itemize}\n \\item $\\xleftarrow[\\text{below}]{\\text{above}}$\n \\item $\\xrightarrow[\\text{very very long below}]{\\text{very very long above}}$\n \\item $\\xlongequal[\\text{very very long below}]{\\text{very very long above}}$\n\\end{itemize}\n
\u200b\u5b9a\u4e49\u200b\u7b26\u53f7\u200b\\(\\triangleq\\)\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u4f7f\u7528\u200b\\triangleq
\u200b\u8f93\u5165\u200b\u3002
"},{"location":"latex/math/symbols/","title":"LaTeX \u200b\u6570\u5b66\u200b\u7b26\u53f7","text":"\u200b\u6536\u96c6\u200b\\(\\LaTeX\\)\u200b\u5e38\u7528\u200b\u7684\u200b\u6570\u5b66\u200b\u7b26\u53f7\u200b\u547d\u4ee4\u200b
"},{"location":"latex/math/symbols/#_1","title":"\u5b57\u6bcd\u200b\u53d8\u4f53","text":"\u200b\u5e38\u7528\u547d\u4ee4\u200b\u6709\u200b\uff1a\\mathcal
\u3001\\mathbb
\u3001\\mathfrak
\u3001\\mathsf
\u3001\\mathbf
\u3001\\boldsymbol
\u3001\\mathit
\u3001\\mathrm
\u200b\u7b49\u200b\u3002\u200b\u5176\u4e2d\u200b\\mathcal
\u3001\\mathbb
\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u5927\u5199\u5b57\u6bcd\u200b\uff0c\u200b\u5176\u4f59\u200b\u547d\u4ee4\u200b\u5927\u5199\u200b\u3001\u200b\u5c0f\u5199\u5b57\u6bcd\u200b\u901a\u7528\u200b
\\mathcal{A}
\uff1a\\(\\mathcal A\\) \\mathbb{A}
\uff1a\\(\\mathbb A\\) \\mathfrak{A}
\uff1a\\(\\mathfrak A\\) \\mathsf{A}
\uff1a\\(\\mathsf A\\) \\mathbf{A}
\uff1a\\(\\mathbf A\\) \\boldsymbol{A}
\uff1a\\(\\boldsymbol A\\) \\mathit{A}
\uff1a\\(\\mathit A\\)\uff08\u200b\u65e0\u200b\u6548\u679c\u200b\uff09 \\mathrm{A}
\uff1a\\(\\mathrm A\\) \\mathscr{A}
\uff1a\\(\\mathscr A\\)\uff08\u200b\u9700\u8981\u200b\u5f15\u5165\u200b\u5b8f\u5305\u200bmathrsfs
\uff09
"},{"location":"latex/math/symbols/#_2","title":"\u5e0c\u814a\u5b57\u6bcd","text":"\u5c0f\u5199\u200b \u200b\u547d\u4ee4\u200b \u200b\u5927\u5199\u200b \u200b\u547d\u4ee4\u200b \u200b\u53d8\u4f53\u200b \u200b\u547d\u4ee4\u200b \\(\\alpha\\) \\alpha
\\(A\\) A
\\(\\beta\\) \\beta
\\(B\\) B
\\(\\gamma\\) \\gamma
\\(\\Gamma\\) \\Gamma
\\(\\varGamma\\) \\varGamma
\\(\\delta\\) \\delta
\\(\\Delta\\) \\Delta
\\(\\varDelta\\) \\varDelta
\\(\\epsilon\\) \\epsilonn
\\(E\\) E
\\(\\varepsilon\\) \\varepsilon
\\(\\zeta\\) \\zeta
\\(Z\\) Z
\\(\\eta\\) \\eta
\\(H\\) H
\\(\\theta\\) \\theta
\\(\\Theta\\) \\Theta
\\(\\vartheta,\\varTheta\\) \\vartheta,\\varTheta
\\(\\iota\\) \\iota
\\(I\\) I
\\(\\kappa\\) \\kappa
\\(K\\) K
\\(\\varkappa\\) \\varkappa
\\(\\lambda\\) \\lambda
\\(\\Lambda\\) \\Lambda
\\(\\varLambda\\) \\varLambda
\\(\\mu\\) \\mu
\\(M\\) M
\\(\\nu\\) \\nu
\\(N\\) N
\\(\\xi\\) \\xi
\\(\\Xi\\) \\Xi
\\(\\varXi\\) \\varXi
\\(o\\) o
\\(O\\) O
\\(\\pi\\) \\pi
\\(\\Pi\\) \\Pi
\\(\\varpi, \\varPi\\) \\varpi,\\varPi
\\(\\rho\\) \\rho
\\(P\\) P
\\(\\varrho\\) \\varrho
\\(\\sigma\\) \\sigma
\\(\\Sigma\\) \\Sigma
\\(\\varsigma, \\varSigma\\) \\varsigma,\\varSigma
\\(\\tau\\) \\tau
\\(T\\) T
\\(\\upsilon\\) \\upsilon
\\(\\Upsilon\\) \\Upsilon
\\(\\varUpsilon\\) \\varUpsilon
\\(\\phi\\) \\phi
\\(\\Phi\\) \\Phi
\\(\\varphi, \\varPhi\\) \\varphi,\\varPhi
\\(\\chi\\) \\chi
\\(X\\) X
\\(\\psi\\) \\psi
\\(\\Psi\\) \\Psi
\\(\\varPsi\\) \\varPsi
\\(\\omega\\) \\omega
\\(\\Omega\\) \\Omega
\\(\\varOmega\\) \\varOmega
"},{"location":"latex/math/symbols/#_3","title":"\u8fd0\u7b97\u7b26","text":"\u200b\u5e38\u89c1\u200b\u8fd0\u7b97\u7b26\u200b\u5217\u4e8e\u200b\u4e0b\u8868\u200b\uff1a
"},{"location":"latex/math/symbols/#_4","title":"\u6570\u5b66\u200b\u8fd0\u7b97","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\times\\) \\times
\\(\\div\\) \\div
\\(\\odot\\) \\odot
\\(\\oplus\\) \\oplus
\\(\\otimes\\) \\otimes
"},{"location":"latex/math/symbols/#_5","title":"\u96c6\u5408\u200b\u8fd0\u7b97","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\in\\) \\in
\\(\\ni\\) \\ni
\\(\\subset\\) \\subset
\\(\\subseteq\\) \\subseteq
\\(\\subseteqq\\) \\oplsubseteqqu
\\(\\subsetneq\\) \\subsetneq
\\(\\subsetneqq\\) \\subsetneqq
\\(\\supset\\) \\subset
\\(\\supseteq\\) \\subseteq
\\(\\supseteqq\\) \\oplsubseteqqu
\\(\\supsetneq\\) \\subsetneq
\\(\\supsetneqq\\) \\subsetneqq
\\(\\cap\\) \\cap
\\(\\cup\\) \\cup
"},{"location":"latex/math/symbols/#_6","title":"\u5173\u7cfb\u200b\u8fd0\u7b97\u7b26","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\geq\\) \\geq
\\(\\geqq\\) \\geqq
\\(\\geqslant\\) \\geqslant
\\(\\gg\\) \\gg
\\(\\ggg\\) \\ggg
\\(\\leq\\) \\leq
\\(\\leqq\\) \\leqq
\\(\\leqslant\\) \\leqslant
\\(\\ll\\) \\ll
\\(\\lll\\) \\lll
\\(\\sim\\) \\sim
\\(\\approx\\) \\approx
"},{"location":"latex/math/symbols/#_7","title":"\u903b\u8f91\u200b\u8fd0\u7b97\u7b26","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\lnot\\) \\lnot
\\(\\land\\) \\land
\\(\\lor\\) \\lor
\\(\\forall\\) \\forall
\\(\\exists\\) \\exists
"},{"location":"latex/math/symbols/#_8","title":"\u51fd\u6570\u200b\u4e0e\u200b\u590d\u6742\u200b\u8fd0\u7b97","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\frac ab\\) \\frac{a}{b}
\\(\\sum_i^n f\\) \\sum_{i}^{n} f
\\(\\prod_i^n f\\) \\prod_{i}^{n} f
\\(\\sqrt[x]{y}\\) \\sqrt[x]{y}
\\(\\int_a^bf(x)\\mathrm dx\\) \\int_a^bf(x)\\mathrm dx
\\(\\oint_Df(x)\\mathrm dx\\) \\oint_Df(x)\\mathrm dx
\\(\\iint_Df(x)\\mathrm dx\\) \\iint_Df(x)\\mathrm dx
\\(\\iiint_Df(x)\\mathrm dx\\) \\iiint_Df(x)\\mathrm dx
\\(\\partial\\) \\partial
\\(\\log\\) \\log
\\(\\ln\\) \\ln
\\(\\lg\\) \\lg
\\(\\exp\\) \\exp
\\(a\\mod b\\) a\\mod b
\\(\\max\\) \\max
\\(\\min\\) \\min
\\(\\arg\\) \\arg
\\(\\sin\\) \\sin
\\(\\cos\\) \\cos
\\(\\tan\\) \\tan
\\(\\cot\\) \\cot
\\(\\sinh\\) \\sinh
\\(\\cosh\\) \\cosh
\\(\\tanh\\) \\tanh
\\(\\coth\\) \\coth
\\(\\arcsin\\) \\arcsin
\\(\\arccos\\) \\arccos
\\(\\arctan\\) \\arctan
\\(\\ker\\) \\ker
\\(\\dim\\) \\dim
\\(\\det\\) \\det
\\(\\lim\\) \\lim
\\(\\inf\\) \\inf
"},{"location":"latex/math/symbols/#_9","title":"\u62ec\u53f7","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\{\\) \\{
\\(\\}\\) \\}
\\(\\langle\\) \\langle
\\(\\rangle\\) \\rangle
\\(\\lceil\\) \\lceil
\\(\\rceil\\) \\rceil
\\(\\lfloor\\) \\lfloor
\\(\\rfloor\\) \\rfloor
\\(\\|\\) \\|
"},{"location":"latex/math/tricks/","title":"\u7279\u6b8a\u200b\u6280\u5de7","text":""},{"location":"latex/math/tricks/#_2","title":"\u516c\u5f0f\u200b\u5185\u200b\u4e2d\u6587","text":"\u200b\u4f7f\u7528\u200b\u547d\u4ee4\u200b\\text
\u200b\u6216\u200b\\mbox
\u200b\u53ef\u4ee5\u200b\u5728\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u52a0\u5165\u200b\u4e2d\u6587\u200b\u6587\u672c\u200b\u3002\u200b\u5982\u679c\u200b\u4f7f\u7528\u200b\\mathrm
\uff0c\u200b\u5219\u200b\u4e0d\u4f1a\u200b\u663e\u793a\u200b\u4e2d\u6587\u200b\u3002
"},{"location":"latex/math/tricks/#_3","title":"\u9690\u5f62\u200b\u5b57\u7b26","text":"\\phantom
\u200b\u547d\u4ee4\u200b\u53ef\u4ee5\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u5360\u636e\u200b\u4e00\u5b9a\u200b\u7a7a\u95f4\u200b\u7684\u200b\u7a7a\u767d\u200b\uff0c\u200b\u7a7a\u767d\u200b\u7684\u200b\u957f\u5bbd\u200b\u7531\u200b\u53c2\u6570\u200b\u7684\u200b\u5c3a\u5bf8\u200b\u51b3\u5b9a\u200b\uff1a
\\[ \\begin{aligned} \\bbox[border: 2px solid magenta]{\\phantom{\\int_0^1 x\\mathrm dx}} \\; & \\bbox[border: 2px solid magenta]{\\int_0^1 x\\mathrm dx} \\\\ \\bbox[border: 2px solid magenta]{\\int_0^1 x\\mathrm dx} \\; & \\end{aligned} \\] \u200b\u6b64\u5916\u200b\uff0c\\phantom
\u200b\u6709\u200b\u4e24\u4e2a\u200b\u53d8\u79cd\u200b\\vphantom
\u200b\u4e0e\u200b\\hphantom
\uff0c\u200b\u524d\u8005\u200b\u521b\u9020\u200b\u4e00\u4e2a\u200b\u5bbd\u5ea6\u200b\u4e3a\u200b0\uff0c\u200b\u9ad8\u5ea6\u200b\u4e3a\u200b\u6307\u5b9a\u200b\u9ad8\u5ea6\u200b\u7684\u200b\u7a7a\u767d\u200b\uff1b\u200b\u540e\u8005\u200b\u521b\u9020\u200b\u4e00\u4e2a\u200b\u9ad8\u5ea6\u200b\u4e3a\u200b0\uff0c\u200b\u5bbd\u5ea6\u200b\u4e3a\u200b\u6307\u5b9a\u200b\u5bbd\u5ea6\u200b\u7684\u200b\u7a7a\u767d\u200b\u3002\u200b\u5728\u200b\u5c3a\u5bf8\u200b\u6839\u636e\u200b\u5185\u5bb9\u200b\u800c\u53d8\u200b\u7684\u200b\u5bb9\u5668\u200b\u4e2d\u200b\uff0c\\phantom
\u200b\u7b49\u200b\u4e00\u7cfb\u5217\u200b\u547d\u4ee4\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u63a7\u5236\u200b\u5bb9\u5668\u200b\u7684\u200b\u5927\u5c0f\u200b\u3002
\\vphantom
\u200b\u4f7f\u7528\u200b\u573a\u666f\u200b
\u200b\u5728\u200b\\left
\u3001\\right
\u200b\u7b49\u200b\u547d\u4ee4\u200b\u53ea\u80fd\u200b\u5728\u200b\u4e00\u884c\u200b\u4e0a\u200b\u63a7\u5236\u200b\u5de6\u53f3\u200b\u4e24\u4fa7\u200b\u62ec\u53f7\u200b\u7684\u200b\u5927\u5c0f\u200b\uff0c\u200b\u800c\u200b\u5f53\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u8de8\u884c\u200b\uff0c\\left
\u3001\\right
\u200b\u5219\u200b\u65e0\u6cd5\u200b\u6b63\u786e\u200b\u5339\u914d\u200b\u3002\u200b\u6b64\u65f6\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\vphantom
\u200b\u547d\u4ee4\u200b\u5c06\u200b\u62ec\u53f7\u200b\u6491\u5f00\u200b\u3002
\u200b\u4e0d\u200b\u4f7f\u7528\u200b\\vphantom
\u200b\u4f7f\u7528\u200b\\vphantom
\\begin{equation}\n \\begin{aligned}\n \\frac{\\partial ^2\\Pi(x, t)}{\\partial x\\partial t} =\n & -(p-s)\\mathbb E_{Q, B, L}\\left[D(t)|Q(t)\\leq x\\right]f_{Q(t)}(x) \\\\\n & + h\\mathbb P(t < B + L) - h\\mathbb E_{B, L} \\\\\n & \\times \\left[\\int_{t}^\\mathbb{B+L}\\mathbb E_Q\\left[D(t)|Q(t) - Q(\\tau)\\leq x, B\\leq t, L\\right]\\right. \\\\\n & \\color{magenta} \\times \\left. f_{Q(t) - Q(\\tau) | B\\leq t}(x)\\mathbb P(B\\leq t)\\mathrm d \\tau\\right]\n \\end{aligned}\n\\end{equation}\n
\\[ \\begin{aligned} \\frac{\\partial ^2\\Pi(x, t)}{\\partial x\\partial t} = & -(p-s)\\mathbb E_{Q, B, L}\\left[D(t)|Q(t)\\leq x\\right]f_{Q(t)}(x) \\\\ & + h\\mathbb P(t < B + L) - h\\mathbb E_{B, L} \\\\ & \\times \\left[\\int_{t}^\\mathbb{B+L}\\mathbb E_Q\\left[D(t)|Q(t) - Q(\\tau)\\leq x, B\\leq t, L\\right]\\right. \\\\ & \\color{magenta} \\times \\left. f_{Q(t) - Q(\\tau) | B\\leq t}(x)\\mathbb P(B\\leq t)\\mathrm d \\tau\\right] \\end{aligned} \\] \\begin{equation}\n \\begin{aligned}\n \\frac{\\partial ^2\\Pi(x, t)}{\\partial x\\partial t} =\n & -(p-s)\\mathbb E_{Q, B, L}\\left[D(t)|Q(t)\\leq x\\right]f_{Q(t)}(x) \\\\\n & + h\\mathbb P(t < B + L) - h\\mathbb E_{B, L} \\\\\n & \\times \\left[\\int_{t}^\\mathbb{B+L}\\mathbb E_Q\\left[D(t)|Q(t) - Q(\\tau)\\leq x, B\\leq t, L\\right]\\right. \\\\\n & \\color{magenta} \\times \\left.\\vphantom{\\int_t^{B+L}} f_{Q(t) - Q(\\tau) | B\\leq t}(x)\\mathbb P(B\\leq t)\\mathrm d \\tau\\right]\n \\end{aligned}\n\\end{equation}\n
\\[ \\begin{aligned} \\frac{\\partial ^2\\Pi(x, t)}{\\partial x\\partial t} = & -(p-s)\\mathbb E_{Q, B, L}\\left[D(t)|Q(t)\\leq x\\right]f_{Q(t)}(x) \\\\ & + h\\mathbb P(t < B + L) - h\\mathbb E_{B, L} \\\\ & \\times \\left[\\int_{t}^\\mathbb{B+L}\\mathbb E_Q\\left[D(t)|Q(t) - Q(\\tau)\\leq x, B\\leq t, L\\right]\\right. \\\\ & \\color{magenta} \\times \\left.\\vphantom{\\int_t^{B+L}} f_{Q(t) - Q(\\tau) | B\\leq t}(x)\\mathbb P(B\\leq t)\\mathrm d \\tau\\right] \\end{aligned} \\]"},{"location":"latex/misc/beamer/","title":"\u4f7f\u7528\u200bLaTeX\u200b\u521b\u5efa\u200b\u5e7b\u706f\u7247","text":"\u200b\u9996\u5148\u200b\uff0c\u200b\u9700\u8981\u200b\u6307\u5b9a\u200bdocumentclass
\u200b\u4e3a\u200bbeamer
\u200b\u7c7b\u578b\u200b\uff1a
\\documentclass{beamer}\n
\u200b\u6bcf\u200b\u4e00\u5f20\u200b\u5e7b\u706f\u7247\u200b\u4f7f\u7528\u200bframe
\u200b\u73af\u5883\u200b\uff0c\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u7a7a\u767d\u200b\u5e7b\u706f\u7247\u200b\uff1a
\\begin{frame}\n\\end{frame}\n
\u200b\u7b2c\u4e00\u9875\u200bPPT\u200b\u901a\u5e38\u200b\u663e\u793a\u200bPPT\u200b\u7684\u200b\u6807\u9898\u200b\u3001\u200b\u4f5c\u8005\u200b\u7684\u200b\u4e2a\u4eba\u4fe1\u606f\u200b\u7b49\u200b\u5185\u5bb9\u200b\uff1a
\\title{\u200b\u6807\u9898\u200b}\n\\subtitle{\u200b\u526f\u6807\u9898\u200b}\n\\author{\u200b\u4f5c\u8005\u200b}\n\\institute{\u200b\u7ec4\u7ec7\u200b}\n\\date{\\today} % \u200b\u663e\u793a\u200b\u65e5\u671f\u200b\n\\titlepage\n
"},{"location":"latex/misc/musixtex/","title":"\u4e50\u8c31\u200b\u6392\u7248","text":"musixtex
\u200b\u662f\u200bLaTeX\u200b\u4e2d\u200b\u7528\u6765\u200b\u6392\u7248\u200b\u4e50\u8c31\u200b\u7684\u200b\u5b8f\u5305\u200b\u3002\u200b\u4ee5\u4e0b\u5185\u5bb9\u200b\u9488\u5bf9\u200b\u9f13\u8c31\u200b\u6392\u7248\u200b\u3002
\\usepackage{musixtex}\n\\input{musixper} % \u200b\u52a0\u5165\u200b\u4e86\u200b\u9f13\u8c31\u200b\u6392\u7248\u200b\u7684\u200b\u4e00\u4e9b\u200b\u5185\u5bb9\u200b\n
"},{"location":"latex/misc/musixtex/#_2","title":"\u97f3\u9ad8\u200b\u5bf9\u7167\u8868","text":"\u200b\u4ece\u200b\u5de6\u5411\u53f3\u200b\u4f9d\u6b21\u200b\u4e3a\u200bA-Q
"},{"location":"latex/misc/musixtex/#_3","title":"\u57fa\u672c\u200b\u4f7f\u7528","text":"musixtex
\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u4e86\u200bmusic
\u200b\u73af\u5883\u200b\uff0c\u200b\u5728\u200bmusic
\u200b\u73af\u5883\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u5bf9\u200b\u4e50\u8c31\u200b\u8fdb\u884c\u200b\u8bbe\u7f6e\u200b\u3002\u200b\u7136\u540e\u200b\u5728\u200b\u547d\u4ee4\u200b\\startextract
\u200b\u548c\u200b\\zendextract
\u200b\u4e4b\u95f4\u200b\u8f93\u5165\u200b\u97f3\u7b26\u200b\u3002
\\begin{music}\n \\instrumentnumber{1} % \u200b\u4e50\u5668\u200b\n \\setclefsymbol1\\empty % \u200b\u8c31\u53f7\u200b\n \\nobarnumbers % \u200b\u53d6\u6d88\u200b\u5c0f\u8282\u200b\u7f16\u53f7\u200b\n \\generalmeter{\\meterfrac44} % \u200b\u8282\u62cd\u200b\n \\startextract\n % Enter notes here\n \\zendextract\n\\end{music}\n
\u200b\u5728\u200b\u672c\u200b\u5c0f\u8282\u200b\u4e2d\u200b\uff0cp
\u200b\u8868\u793a\u200b\u97f3\u7b26\u200b\u5bf9\u5e94\u200b\u7684\u200b\u97f3\u9ad8\u200b\u3002
"},{"location":"latex/misc/musixtex/#_4","title":"\u786e\u5b9a\u200b\u97f3\u7b26\u200b\u5206\u5e03\u200b\u95f4\u8ddd","text":"\u200b\u4f7f\u7528\u200b\\notes
\u200b\u7684\u200b\u4e0d\u540c\u200b\u5927\u5c0f\u5199\u200b\u5f62\u5f0f\u200b\u6765\u200b\u786e\u5b9a\u200b\u97f3\u7b26\u200b\u7684\u200b\u5206\u5e03\u200b\u95f4\u8ddd\u200b\u3002
\\notes ... \\en % Suitable for sixteenth notes\n\\Notes ... \\en % Suitable for eighth notes\n\\NOtes ... \\en % Suitable for quarter notes\n
\\notes
\\Notes
\\NOtes
"},{"location":"latex/misc/musixtex/#_5","title":"\u97f3\u7b26","text":"\u200b\u97f3\u7b26\u200b\u547d\u4ee4\u200b\u7531\u200b\u4e24\u200b\u90e8\u5206\u200b\u7ec4\u6210\u200b\uff1a\u200b\u65f6\u503c\u200b+\u200b\u65b9\u5411\u200b\u3002\u200b\u4e0d\u540c\u200b\u97f3\u7b26\u200b\u7684\u200b\u65f6\u503c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u547d\u4ee4\u200b\u5982\u4e0b\u200b\u8868\u200b\u6240\u793a\u200b
\u200b\u65f6\u503c\u200b \u200b\u5168\u97f3\u7b26\u200b \u200b\u4e8c\u5206\u200b \u200b\u56db\u5206\u200b \u200b\u516b\u5206\u200b \u200b\u5341\u516d\u5206\u200b \u200b\u547d\u4ee4\u200b w
h
q
c
cc
u
\u200b\u8868\u793a\u200b\u5411\u4e0a\u200b\u7684\u200b\u97f3\u7b26\u200b\uff0cl
\u200b\u8868\u793a\u200b\u5411\u4e0b\u200b\u7684\u200b\u97f3\u7b26\u200b\uff0ca
\u200b\u8868\u793a\u200b\u81ea\u52a8\u200b\u8bbe\u7f6e\u200b\u97f3\u7b26\u200b\u65b9\u5411\u200b\u3002\u200b\u5982\u200b\\qu{p}
\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u5411\u4e0a\u200b\u7684\u200b\u56db\u5206\u97f3\u7b26\u200b\u3002\u200b\u5982\u679c\u200b\u4e0d\u200b\u52a0\u200b\u65b9\u5411\u200b\uff0c\u200b\u5219\u200b\u6ca1\u6709\u200b\u97f3\u7b26\u200b\u7684\u200b\u201c\u200b\u6746\u200b\u201d\u3002
\u200b\u5728\u200b\u65b9\u5411\u200b\u540e\u9762\u200b\u52a0\u4e0a\u200bp
\u200b\u8868\u793a\u200b\u9644\u70b9\u200b\uff0cpp
\u200b\u8868\u793a\u200b\u53cc\u200b\u9644\u70b9\u200b\u3002
\u200b\u6bcf\u200b\u8f93\u5165\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\uff0c\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u547d\u4ee4\u200b\u8f93\u5165\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u4fbf\u4f1a\u200b\u5411\u200b\u540e\u200b\u79fb\u52a8\u200b\u3002\u200b\u5982\u679c\u200b\u8981\u200b\u8f93\u5165\u200b\u548c\u5f26\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u4e4b\u524d\u200b\uff0c\u200b\u4f7f\u7528\u200bz
+\u200b\u65f6\u503c\u200b\u8868\u793a\u200b\u8fd9\u4e2a\u200b\u97f3\u7b26\u200b\u4e0d\u5411\u200b\u540e\u200b\u79fb\u52a8\u200b\u8f93\u5165\u200b\u4f4d\u7f6e\u200b\u3002
\u200b\u5982\u679c\u200b\u4e24\u4e2a\u200b\u97f3\u7b26\u200b\u79bb\u5f97\u200b\u8fc7\u8fd1\u200b\uff0c\u200b\u4f7f\u7528\u200bl
\u200b\u5c06\u200b\u97f3\u7b26\u200b\u5411\u200b\u5de6\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u7684\u200b\u4f4d\u7f6e\u200b\uff0cr
\u200b\u5c06\u200b\u97f3\u7b26\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002
\\NOtes \\zq d\\qu g\\rq g\\qu f\\zq e\\qu h\\zq f\\qu k \\en\n
"},{"location":"latex/misc/musixtex/#_6","title":"\u7b26\u6760","text":"\u200b\u5982\u679c\u200b\u516b\u5206\u200b\u6216\u200b\u66f4\u200b\u77ed\u200b\u7684\u200b\u97f3\u7b26\u200b\u8fde\u7eed\u200b\u51fa\u73b0\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u97f3\u7b26\u200b\u4e4b\u95f4\u200b\u4f7f\u7528\u200b\u7b26\u6760\u200b\u76f8\u8fde\u200b\uff0c\u200b\u901a\u5e38\u200b\u6bcf\u200b\u56db\u4e2a\u200b\u97f3\u7b26\u200b\u8fde\u6210\u200b\u4e00\u7ec4\u200b\u3002\u200b\u7b26\u6760\u200b\u7684\u200b\u5b9a\u4e49\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
% \u200b\u4e0a\u65b9\u200b\n\\ibu{n}{p}{s} <notes-under-beam> \\tbu{n} <the-last-note>\n% \u200b\u4e0b\u65b9\u200b\n\\ibl{n}{p}{s} <notes-under-beam> \\tbl{n} <the-last-note>\n
\u200b\u5176\u4e2d\u200bn
\u200b\u4e3a\u200b\u7f16\u53f7\u200b\uff0cp
\u200b\u4e3a\u200b\u5f00\u59cb\u200b\u7684\u200b\u97f3\u7b26\u200b\u9ad8\u5ea6\u200b\uff0cs
\u200b\u4e3a\u200b\u659c\u5ea6\u200b\u3002\u200b\u547d\u4ee4\u200b\u91cc\u200bb
\u200b\u7684\u200b\u4e2a\u6570\u200b\u7b49\u4e8e\u200b\u663e\u793a\u200b\u7684\u200b\u7b26\u200b\u6760\u6570\u200b\u3002\u200b\u4e0e\u200b\u7b26\u6760\u200b\u76f8\u8fde\u200b\u7684\u200b\u97f3\u7b26\u200b\u6807\u8bb0\u200b\u4e3a\u200b\u65f6\u503c\u200b+b
+\u200b\u7f16\u53f7\u200b\uff0c\u200b\u5982\u679c\u200b\u540c\u4e00\u200b\u4f4d\u7f6e\u200b\u6709\u200b\u591a\u4e2a\u200b\u97f3\u7b26\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u65f6\u503c\u200b\u524d\u9762\u200b\u52a0\u200bz
\u3002\u200b\u6ce8\u610f\u200b\u97f3\u7b26\u200b\u4e4b\u95f4\u200b\u4e0d\u8981\u200b\u52a0\u200b\u7a7a\u683c\u200b\u3002
\\Notes\\ibu0j0\\qb0j\\qb0j\\qb0j\\tbu0\\qb0j\\en\n\\notes\\ibbu0j0\\qb0j\\qb0j\\qb0j\\tbu0\\qb0j\\en\n\\NOtes\\qu j\\en\n
\\tbu{n}\\qb{n}{p}
\u200b\u53ef\u4ee5\u200b\u7f29\u5199\u200b\u4e3a\u200b\\tqu{n}{p}
\uff0c\\tbl{n}{p}\\qb{n}{p}
\u200b\u53ef\u4ee5\u200b\u7f29\u5199\u200b\u4e3a\u200b\\tql{n}{p}
\uff0c\\tbu{n}\\zqb{n}{p}
\u200b\u53ef\u4ee5\u200b\u7f29\u5199\u200b\u4e3a\u200b\\zqu{n}{p}
\uff0c\\tbl{n}{p}\\zqb{n}{p}
\u200b\u53ef\u4ee5\u200b\u7f29\u5199\u200b\u4e3a\u200b\\zql{n}{p}
\\ibu
\u200b\u4e2d\u200b\u9700\u8981\u200b\u624b\u52a8\u200b\u786e\u5b9a\u200b\u659c\u7387\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200b\u5bf9\u5e94\u200b\u7684\u200b\\Ibu
\u200b\u547d\u4ee4\u200b\u81ea\u52a8\u200b\u786e\u5b9a\u200b\uff1a
\\Ibu{n}{p1}{p2}{np}\n
\u200b\u5176\u4e2d\u200b{n}
\u200b\u4e3a\u200b\u7f16\u53f7\u200b\uff0cp1
\u200b\u4e3a\u200b\u7b2c\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u9ad8\u5ea6\u200b\uff0cp2
\u200b\u4e3a\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u9ad8\u5ea6\u200b\uff0cnp
\u200b\u4e3a\u200b\u97f3\u7b26\u200b\u4e2a\u6570\u200b\u3002
\\Notes\\Ibu0dk4\\qb0d\\qb0h\\qb0f\\tbu0\\qb0k\\en\n\\Notes\\Ibu0kd4\\qb0k\\qb0f\\qb0h\\tbu0\\qb0d\\en\n
\u200b\u5f53\u200b\u4e0d\u200b\u5305\u542b\u200b\u548c\u5f26\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200bD
\u3001T
\u3001Q
\u200b\u5feb\u901f\u200b\u8f93\u5165\u200b\u5305\u542b\u200b2\u30013\u30014\u200b\u4e2a\u200b\u97f3\u7b26\u200b\u7684\u200b\u7b26\u6760\u200b\u3002
\\Notes\\Qqbu dhfk\\en\n\\notes\\Qqbbu kfhd\\Qqbbl dhfk\\en\n
\u200b\u5f53\u200b\u5728\u200b\u7b26\u6760\u200b\u4e2d\u200b\u9700\u8981\u200b\u6539\u53d8\u200b\u7b49\u7ea7\u200b\u65f6\u200b\uff0c\u200b\u4f7f\u7528\u200b\\nbu
\u200b\u5c06\u200b\u7b49\u7ea7\u200b\u589e\u52a0\u200b\u5230\u200bb
\u200b\u7684\u200b\u4e2a\u6570\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7ea7\u6570\u200b\uff0c\u200b\u4f7f\u7528\u200b\\ibu
\u200b\u5c06\u200b\u7b49\u7ea7\u200b\u51cf\u5c11\u200b\u5230\u200bb
\u200b\u7684\u200b\u4e2a\u6570\u200b\u51cf\u4e00\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7ea7\u6570\u200b\u3002
\\Notes\\ibu0k0\\qb0j\\en\\notes\\nbbu0\\qb0j\\tbu0\\qb0j\\en\n\\notes\\ibbu0j0\\qb0j\\tbbu0\\qb0j\\en\\Notes\\tbu0\\qb0j\\en\n
\u200b\u4f7f\u7528\u200b\\roff{}
\u200b\u5728\u200b\u5f53\u524d\u200b\u97f3\u7b26\u200b\u53f3\u4fa7\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u5bf9\u5e94\u200b\u7b49\u7ea7\u200b\u7684\u200b\u77ed\u6760\u200b\uff0c\u200b\u5f53\u200b\\tbbu
\u200b\u914d\u5408\u200b\u66f4\u200b\u9ad8\u7b49\u7ea7\u200b\u8f93\u5165\u200b\u65f6\u200b\uff0c\u200b\u5728\u200b\u5f53\u524d\u200b\u97f3\u7b26\u200b\u5de6\u4fa7\u200b\u4f4d\u7f6e\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u5bf9\u5e94\u200b\u7b49\u7ea7\u200b\u77ed\u6760\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u6765\u200b\u8f93\u5165\u200b\u5207\u5206\u97f3\u200b\u3002
\\notes\\ibbu0j0\\qb0j\\tbbu0\\qb0j\\en\n\\Notes\\tbu0\\qb0j\\en\n\n\\notes\\ibbu0j0\\roff{\\tbbu0}\\qb0j\\en\n\\Notes\\qb0j\\tbbu0\\en\n\\notes\\tbu0\\qb0j\\en\n
"},{"location":"latex/misc/musixtex/#_7","title":"\u4f11\u6b62\u7b26","text":"\u200b\u4f11\u6b62\u7b26\u200b\u7684\u200b\u547d\u4ee4\u200b\u4e3a\u200b
\u200b\u65f6\u503c\u200b \u200b\u5168\u97f3\u7b26\u200b \u200b\u4e8c\u5206\u200b \u200b\u56db\u5206\u200b \u200b\u516b\u5206\u200b \u200b\u5341\u516d\u5206\u200b \u200b\u547d\u4ee4\u200b \\pause
\\hp
\\qp
\\ds
\\qs
\u200b\u5728\u200b\u547d\u4ee4\u200b\u524d\u200b\u4f7f\u7528\u200b\\raise
\u200b\u8c03\u6574\u200b\u4f11\u6b62\u7b26\u200b\u9ad8\u5ea6\u200b\uff0c\\Interligne
\u200b\u8868\u793a\u200b\u7ebf\u200b\u95f4\u8ddd\u200b\uff1b\u200b\u4f7f\u7528\u200b\\rlap
\u200b\u4f7f\u4e0b\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u505c\u7559\u200b\u5728\u200b\u539f\u4f4d\u200b\u3002
\\NOtes\\qp\\en\n\\Notes\\ds\\ds\\en\n\\NOtes\\raise2\\Interligne\\rlap\\qp\\raise-2\\Interligne\\qp\\qp \\en \\doublebar\n
"},{"location":"latex/misc/musixtex/#_8","title":"\u6587\u672c","text":"\u200b\u4f7f\u7528\u200bcharnote{p}{text}
\u200b\u524d\u9762\u200b\u52a0\u200b\\z
\u3001\\c
\u3001\\l
\u200b\u5728\u200b\u8c31\u200b\u4e0a\u200b\u6dfb\u52a0\u200b\u6587\u5b57\u200b\uff0c\\z
\u3001\\c
\u3001\\l
\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u5de6\u200b\u3001\u200b\u4e2d\u200b\u3001\u200b\u53f3\u200b\u5bf9\u9f50\u200b\u5f53\u524d\u200b\u97f3\u7b26\u200b\u3002char{num}{text}
\u200b\u548c\u200bcharnote
\u200b\u7528\u6cd5\u200b\u76f8\u540c\u200b\uff0c\u200b\u4f46\u200b\u4f7f\u7528\u200b\u6570\u5b57\u200b\u6765\u200b\u8868\u793a\u200b\u4f4d\u7f6e\u200b\uff1a\u200b\u4ece\u200b\u6700\u200b\u4e0b\u65b9\u200b\u7684\u200b\u7ebf\u200b\u5f00\u59cb\u200b\uff0c\u200b\u6587\u672c\u200b\u57fa\u7ebf\u200b\u5bf9\u9f50\u200b\u6570\u5b57\u200b\u8868\u793a\u200b\u7684\u200b\u7ebf\u200b\u3002
"},{"location":"latex/misc/musixtex/#_9","title":"\u8282\u62cd","text":"\u200b\u4f7f\u7528\u200b\\metron{\\qu}{60}
\u200b\u6765\u200b\u8bbe\u7f6e\u200b\u8282\u62cd\u200b\uff0c\u200b\u8282\u62cd\u200b\u4e5f\u200b\u662f\u200b\u6587\u672c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200b\u76f8\u5173\u200b\u547d\u4ee4\u200b\u653e\u5728\u200b\u8c31\u200b\u4e0a\u200b\u3002\u200b\u53ef\u4ee5\u200b\u7528\u200b\\smallnotesize
\u3001\\tinynotesize
\u200b\u8c03\u8282\u200b\u97f3\u7b26\u200b\u5927\u5c0f\u200b\u3002
"},{"location":"latex/misc/musixtex/#_10","title":"\u9f13\u8c31","text":"\u200b\u9f13\u8c31\u200b\u4e2d\u200b\u4ee3\u8868\u200b\u51fb\u6253\u200b\u9572\u200b\u7247\u200b\u7684\u200b\u97f3\u7b26\u200b\u7531\u200bmusixper
\u200b\u6269\u5c55\u200b\u5305\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u4f7f\u7528\u200b\\input
\u200b\u547d\u4ee4\u200b\u5f15\u5165\u200b\u3002\u200b\u5982\u4e0b\u200b\u7b26\u53f7\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\\dc, \\dh, \\do, \\y, \\x, \\ox, \\ro, k
\uff0c\u200b\u52a0\u200b\u5728\u200b\u5bf9\u5e94\u200b\u7684\u200b\u97f3\u7b26\u200b\u65f6\u503c\u200b\u524d\u200b\u3002
\\Notes\\ibu0o0\\dcqb0o\\dhqb0o\\doqb0o\\tbu0\\yqb0o\\en\n\\Notes\\ibu0o0\\xqb0o\\oxqb0o\\roqb0o\\tbu0\\kqb0o\\en\n
\u200b\u6253\u51fb\u4e50\u200b\u4f7f\u7528\u200b\u7684\u200b\u8c31\u53f7\u200b\u7528\u200b\\setclefsymbol1{\\drumclef}
\u200b\u547d\u4ee4\u200b\u5f15\u5165\u200b\u3002\u200b\u97f3\u9ad8\u200b\u8bb0\u53f7\u200b\u548c\u200b\u9ad8\u97f3\u200b\u8c31\u53f7\u200b\u4e00\u81f4\u200b\uff0c\u200b\u7235\u58eb\u9f13\u200b\u4e2d\u200b\u7684\u200b\u4e0d\u540c\u200b\u58f0\u90e8\u200b\u5bf9\u5e94\u200b\u4e94\u7ebf\u8c31\u200b\u7684\u200b\u4e0d\u540c\u200b\u97f3\u9ad8\u200b\u5982\u4e0b\u200b\u56fe\u200b\u6240\u793a\u200b
"},{"location":"latex/tikz/pgfplots/","title":"pgfplots","text":"\u200b\u501f\u52a9\u200b\u5b8f\u5305\u200bpgfplots
\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bTikZ\u200b\u7ed8\u5236\u200b\u6298\u7ebf\u56fe\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\u3002
pgfplots\u200b\u7ed8\u5236\u200b\u6298\u7ebf\u56fe\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{figure}[htbp]\n \\begin{tikzpicture}\n \\begin{axis}[sharp plot]\n \\addplot coordinates{(0, 5)(1, 9)(2, 7)(3, 4)(4, 10)};\n \\end{axis}\n \\end{tikzpicture}\n\\end{figure}\n
axis
\u200b\u63a7\u5236\u200b\u4e00\u4e2a\u200b\u56fe\u50cf\u200b\uff0c\\begin{axis}
\u200b\u540e\u200b\u53ef\u4ee5\u200b\u52a0\u200b\u4e00\u5bf9\u200b\u65b9\u62ec\u53f7\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8bbe\u5b9a\u200b\u56fe\u7247\u200b\u7684\u200b\u53c2\u6570\u200b\u3002addplot
\u200b\u63a7\u5236\u200b\u56fe\u50cf\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5176\u540e\u200b\u540c\u6837\u200b\u53ef\u4ee5\u200b\u52a0\u200b\u4e00\u5bf9\u200b\u65b9\u62ec\u53f7\u200b\u7528\u4e8e\u200b\u63a7\u5236\u53c2\u6570\u200b\u3002
"},{"location":"latex/tikz/pgfplots/#axis","title":"axis
\u200b\u73af\u5883","text":"axis
\u200b\u73af\u5883\u200b\u53ef\u7528\u200b\u7684\u200b\u53c2\u6570\u200b\u5982\u4e0b\u200b\u6240\u200b\u5217\u200b\uff1a
[sharp plot, smooth]
\u200b\u7b49\u200b\uff0c\u200b\u8868\u660e\u200b\u6298\u7ebf\u56fe\u200b\u7684\u200b\u66f2\u7ebf\u200b\u662f\u5426\u200b\u7ecf\u8fc7\u200b\u5e73\u6ed1\u200b xlabel
\u200b\u4e0e\u200bylabel
\uff0c\u200b\u63a7\u5236\u200b\u5750\u6807\u8f74\u200b\u7684\u200b\u6807\u6ce8\u200b\u3002 title
\u200b\u63a7\u5236\u200b\u56fe\u50cf\u200b\u7684\u200b\u6807\u9898\u200b xmode
\u200b\u4e0e\u200bymode
\u200b\u63a7\u5236\u200b\u5750\u6807\u8f74\u200b\u662f\u200b\u7ebf\u6027\u200b\u5750\u6807\u8f74\u200b\uff08normal
\uff09\u200b\u8fd8\u662f\u200b\u5bf9\u6570\u200b\u5750\u6807\u8f74\u200b\uff08log
\uff09 xtick distance
\u200b\u4e0e\u200bytick distance
\u200b\u63a7\u5236\u200b\u5750\u6807\u8f74\u200b\u523b\u5ea6\u200b\u5927\u5c0f\u200b xmin, xmax
\u200b\u4e0e\u200bymin, ymax
\u200b\u63a7\u5236\u200b\u5750\u6807\u8f74\u200b\u7684\u200b\u8303\u56f4\u200b - \u200b\u5f53\u200b\u6307\u5b9a\u200b\u5750\u6807\u8f74\u200b\u8303\u56f4\u200b\u65f6\u200b\uff0c\u200b\u5982\u679c\u200b
enlargelimits
\u200b\u6307\u5b9a\u200b\u4e3a\u200btrue
\uff0c\u200b\u5219\u200b\u5750\u6807\u8f74\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u653e\u5927\u200b\u4ee5\u200b\u7b26\u5408\u200b\u8f93\u5165\u200b\u6570\u636e\u200b
\u200b\u5982\u4e0b\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u7a7a\u200b\u7684\u200b\u56fe\u50cf\u200b\uff0cx\u200b\u5750\u6807\u8f74\u200b\u4e3a\u200b\u7ebf\u6027\u200b\uff0cy\u200b\u5750\u6807\u8f74\u200b\u4e3a\u200b\u5bf9\u6570\u200b\uff1a
axis\u200b\u53c2\u6570\u200b\u793a\u4f8b\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{figure}[htbp]\n \\begin{tikzpicture}\n \\begin{axis}[\n xlabel=Year,\n ylabel=Inventory,\n xmin=2019, xmax=2021,\n ymin=100, ymax=1000,\n xtick distance=1,\n title=Inventory Graph,\n xmode=normal, ymode=log\n ]\n \\end{axis}\n \\end{tikzpicture}\n\\end{figure}\n
\u200b\u6709\u5173\u200b\u66f4\u200b\u591a\u200b\u53c2\u6570\u200b\uff0c\u200b\u8bf7\u200b\u53c2\u89c1\u200bpgfplots \u200b\u624b\u518c\u200b
"},{"location":"latex/tikz/pgfplots/#addplot","title":"\\addplot
","text":"\\addplot
\u200b\u547d\u4ee4\u200b\u53ef\u4ee5\u200b\u5411\u200b\u56fe\u50cf\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u6298\u7ebf\u56fe\u200b\u6216\u200b\u51fd\u6570\u200b\u3002
\\addplot coordinates{}
\u200b\u7528\u4e8e\u200b\u7ed8\u5236\u200b\u6298\u7ebf\u56fe\u200b\uff0c\u200b\u5176\u4e2d\u200bcoordinates
\u200b\u4e2d\u200b\u7684\u200b\u5750\u6807\u200b\u7528\u200b\u5706\u62ec\u53f7\u200b\u62ec\u8d77\u200b \\addplot [smooth] {f(x)}
\u200b\u7528\u4e8e\u200b\u7ed8\u5236\u200b\u5e73\u6ed1\u200b\u7684\u200b\u6298\u7ebf\u56fe\u200b\uff0c\u200b\u5176\u4e2d\u200bf(x)
\u200b\u4e3a\u200b\u51fd\u6570\u200b\u8868\u8fbe\u5f0f\u200b
axis\u200b\u53c2\u6570\u200b\u793a\u4f8b\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{figure}[htbp]\n \\begin{tikzpicture}\n \\begin{axis}[\n xlabel=$x$ variable,\n ylabel=$y$ variable,\n xmin=0, xmax=7,\n title=Regression Example,\n ]\n \\addplot coordinates{(0, 5)(1, 9)(2, 7)(3, 4)(4, 10)};\n \\addlegendentry{\\small Data}\n \\addplot [smooth, red]{0.5*x + 6};\n \\addlegendentry{\\small Regressor}\n \\end{axis}\n \\end{tikzpicture}\n\\end{figure}\n
\\addplot
\u200b\u6709\u200b\u5982\u4e0b\u200b\u53c2\u6570\u200b\uff1a
smooth
\u200b\u5982\u679c\u200b\u5b58\u5728\u200b\uff0c\u200b\u7ed8\u5236\u200b\u4e0d\u200b\u5305\u542b\u200b\u70b9\u200b\u5750\u6807\u200b\u7684\u200b\u5e73\u6ed1\u200b\u56fe\u50cf\u200b [color]
\u200b\u8bbe\u7f6e\u200b\u989c\u8272\u200b\u3002
"},{"location":"math/","title":"\u8bfe\u7a0b\u200b\u7b14\u8bb0","text":"\u200b\u4ee5\u4e0b\u200b\u6574\u7406\u200b\u4e86\u200b\u8bfe\u4e0a\u200b\u7684\u200b\u5185\u5bb9\u200b
- \u200b\u79bb\u6563\u6570\u5b66\u200b
- \u200b\u8fd0\u7b79\u5b66\u200b\u4e0e\u200b\u7ebf\u6027\u89c4\u5212\u200b
- \u200b\u5bf9\u7b56\u200b\u3001\u200b\u51b3\u7b56\u200b\u4e0e\u200b\u6392\u961f\u200b\u8bba\u200b
- \u200b\u8fd0\u4f5c\u200b\u7ba1\u7406\u200b
- \u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b
- \u200b\u51f8\u200b\u4f18\u5316\u200b
- \u200b\u56e0\u679c\u200b\u63a8\u65ad\u200b
"},{"location":"math/#_2","title":"\u6269\u5c55\u200b\u9605\u8bfb","text":""},{"location":"math/#_3","title":"\u6570\u5b66\u5206\u6790","text":" - \u200b\u521d\u4e2d\u200b\u7ade\u8d5b\u200b:\\(x+y+z=1\\)\uff0c\u200b\u6c42\u200b\\(xy+2yz+3zx\\)\u200b\u7684\u200b\u6700\u5927\u503c\u200b? - \u200b\u4e88\u4e00\u4eba\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u628a\u200b\\([-0.5,0.5]\\)\u200b\u5185\u200b\u6240\u6709\u200b\u5b9e\u6570\u200b\u76f8\u52a0\u200b\uff0c\u200b\u5f97\u51fa\u200b\u7684\u200b\u7ed3\u679c\u200b\u662f\u200b\\(0\\)\u200b\u5417\u200b\uff1f - Be2SiO4\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u5982\u4f55\u200b\u6c42\u200b\u5fae\u5206\u65b9\u7a0b\u200b \\(y'' + y = 0\\) \u200b\u7684\u200b\u901a\u89e3\u200b\uff1f - \u200b\u4e88\u4e00\u4eba\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u4e3a\u4ec0\u4e48\u200b \\(\\ln x\\) \u200b\u6c42\u5bfc\u200b\u662f\u200b \\(1/x\\)\uff1f - \u200b\u8881\u8d85\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \\(\\ln x (x>1, x\\in \\mathbb Z)\\) \u200b\u53ef\u80fd\u200b\u662f\u200b\u6709\u7406\u6570\u200b\u5417\u200b\uff1f - \u200b\u4e88\u4e00\u4eba\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u79ef\u5206\u200b\u7b26\u53f7\u200b\u5185\u53d6\u200b\u5fae\u5206\u200b\u662f\u200b\u4e00\u79cd\u200b\u4ec0\u4e48\u200b\u65b9\u6cd5\u200b\uff1f - \u200b\u77e5\u4e4e\u200b
- \u200b\u4e00\u6761\u200b\u4ece\u200b\\((0,0)\\)\u200b\u51fa\u53d1\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(1\\)\u200b\u7684\u200b\u66f2\u7ebf\u200b\uff0c\u200b\u56f4\u7ed5\u200b\\(x\\)\u200b\u8f74\u200b\u65cb\u8f6c\u200b\u4ea7\u751f\u200b\u7684\u200b\u65cb\u8f6c\u4f53\u200b\u7684\u200b\u6700\u5927\u200b\u4f53\u79ef\u200b\u662f\u200b\u591a\u5c11\u200b\uff1f - \u200b\u865a\u200b\u8c03\u5b50\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
"},{"location":"math/#_4","title":"\u6982\u7387\u8bba\u200b\u4e0e\u200b\u968f\u673a\u200b\u8fc7\u7a0b","text":" - \u200b\u6570\u5b66\u200b\u671f\u671b\u200b\u5927\u4e8e\u200b\u96f6\u200b\u7684\u200b\u6e38\u620f\u200b\u4e00\u5b9a\u200b\u80fd\u200b\u8d5a\u94b1\u200b\u5417\u200b - \u200b\u9648\u58a8\u77b3\u200bnono\u200b\u7684\u200b\u6587\u7ae0\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u7532\u4e59\u200b\u4e24\u4eba\u200b\u4e0b\u56f4\u68cb\u200b\uff0c\u200b\u7532\u80dc\u200b\u7684\u200b\u6982\u7387\u200b\u4e3a\u200b\\(a\\)\uff0c\u200b\u4e59\u80dc\u200b\u7684\u200b\u6982\u7387\u200b\u4e3a\u200b\\(b\\)\uff0c\\(a+b=1\\)\uff0c\u200b\u6bd4\u200b\u5bf9\u65b9\u200b\u591a\u200b\u8d62\u200b\u4e24\u5c40\u200b\u8005\u200b\u83b7\u80dc\u200b\uff0c\u200b\u6c42\u7532\u200b\u8d62\u200b\u7684\u200b\u6982\u7387\u200b? - Dylaaan\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u5f3a\u5927\u200b\u6570\u5f8b\u200b\uff08SLLN) - \u200b\u4f55\u5bb6\u5fd7\u200b\u7684\u200b\u6587\u7ae0\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u5982\u679c\u200b\u6211\u200b\u6709\u200b \\(2^{-n}\\) \u200b\u6982\u7387\u200b\u83b7\u5f97\u200b \\(2^n\\) \u200b\u5143\u200b\uff0c\u200b\u90a3\u200b\u83b7\u5f97\u200b\u94b1\u200b\u7684\u200b\u6570\u5b66\u200b\u671f\u671b\u503c\u200b\u5e94\u8be5\u200b\u662f\u200b\u65e0\u7a77\u200b\uff0c\u200b\u4f46\u200b\u5b9e\u9645\u200b\u4e0d\u662f\u200b\u8fd9\u6837\u200b\uff0c\u200b\u4e3a\u4ec0\u4e48\u200b\uff1f - ClefRybak\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
"},{"location":"math/#_5","title":"\u7ebf\u6027\u4ee3\u6570","text":" - \u200b\u5982\u4f55\u200b\u5224\u5b9a\u200b\u4e0d\u53ef\u200b\u7ea6\u200b\u591a\u9879\u5f0f\u200b\uff1f - \u200b\u5982\u8564\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u8ba1\u7b97\u673a\u200b\u56fe\u5f62\u5b66\u200b\u4e00\u200b\uff1a\u200b\u57fa\u7840\u200b\u53d8\u6362\u200b\u77e9\u9635\u200b\u603b\u7ed3\u200b(\u200b\u7f29\u653e\u200b\uff0c\u200b\u65cb\u8f6c\u200b\uff0c\u200b\u4f4d\u79fb\u200b)
"},{"location":"math/#_6","title":"\u79bb\u6563\u6570\u5b66\u200b\u4e0e\u200b\u6570\u8bba","text":" - \u200b\u4e00\u822c\u200b\u4e00\u5143\u200b\u4e94\u6b21\u200b\u65b9\u7a0b\u200b\u6ca1\u6709\u200b\u6839\u5f0f\u200b\u89e3\u200b\u7684\u200b\u79d8\u5bc6\u200b\u7a76\u7adf\u200b\u5728\u200b\u54ea\u91cc\u200b\uff1f\u200b\u82b1\u8d39\u200b\u4eba\u7c7b\u200b\u4e09\u767e\u5e74\u200b.? - Geometrie\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u7ec4\u5408\u200b\u6570\u5b66\u200b\u5b66\u4e60\u200b\u7b14\u8bb0\u200b\uff08\u200b\u5341\u200b\uff09 - sola\u200b\u7684\u200b\u6587\u7ae0\u200b - \u200b\u77e5\u4e4e\u200b
- ACM\u2014\u2014\u200b\u5e38\u89c1\u200b\u7684\u200b\u51e0\u79cd\u200b\u5206\u89e3\u200b\u8d28\u200b\u56e0\u5b50\u200b\u7684\u200b\u65b9\u6cd5\u200b - \u200b\u4e25\u683c\u200b\u9e3d\u200b\u7684\u200b\u6587\u7ae0\u200b - \u200b\u77e5\u4e4e\u200b
"},{"location":"math/#_7","title":"\u5176\u4ed6","text":" - \u200b\u4e94\u4e2a\u200b\u56da\u72af\u200b\u5148\u540e\u200b\u4ece\u200b100\u200b\u9897\u200b\u7eff\u8c46\u200b\u4e2d\u200b\u6293\u200b\u7eff\u8c46\u200b\u3002\u200b\u6293\u5f97\u200b\u6700\u200b\u591a\u200b\u548c\u200b\u6700\u5c11\u200b\u7684\u200b\u4eba\u200b\u5c06\u200b\u88ab\u200b\u5904\u6b7b\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u4ea4\u6d41\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6478\u200b\u51fa\u200b\u5269\u4e0b\u200b\u7eff\u8c46\u200b\u7684\u200b\u6570\u91cf\u200b\uff0c\u200b\u8c01\u200b\u7684\u200b\u5b58\u6d3b\u200b\u51e0\u7387\u200b\u6700\u5927\u200b\uff1f - \u200b\u66fe\u52a0\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- 1000\u200b\u6876\u200b\u6c34\u200b\uff0c\u200b\u5176\u4e2d\u200b\u4e00\u6876\u200b\u6709\u6bd2\u200b\uff0c\u200b\u732a\u200b\u559d\u200b\u6bd2\u6c34\u200b\u540e\u4f1a\u200b\u5728\u200b15\u200b\u5206\u949f\u200b\u5185\u200b\u6b7b\u53bb\u200b\uff0c\u200b\u60f3\u200b\u7528\u200b\u4e00\u4e2a\u200b\u5c0f\u65f6\u200b\u627e\u5230\u200b\u8fd9\u6876\u200b\u6bd2\u6c34\u200b\uff0c\u200b\u81f3\u5c11\u200b\u9700\u8981\u200b\u51e0\u5934\u200b\u732a\u200b\uff1f - \u200b\u82d7\u534e\u680b\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u9664\u4e86\u200b 3\uff0c4\uff0c5 \u200b\u4ee5\u5916\u200b\u662f\u5426\u200b\u8fd8\u6709\u200b\u522b\u7684\u200b\u4e09\u89d2\u5f62\u200b\uff0c\u200b\u5b83\u200b\u7684\u200b\u4e09\u6761\u200b\u8fb9\u200b\u662f\u200b\u8fde\u7eed\u200b\u81ea\u7136\u6570\u200b\uff0c\u200b\u5b83\u200b\u7684\u200b\u9762\u79ef\u200b\u4e5f\u200b\u662f\u200b\u81ea\u7136\u6570\u200b\uff1f - Pandora Eartha\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u72b6\u6001\u200b\u7a7a\u95f4\u200b\u8868\u8fbe\u5f0f\u200b\u7684\u200b\u89e3\u200b - Anonymity67\u200b\u7684\u200b\u6587\u7ae0\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u5982\u4f55\u200b\u6c42\u200b\u6570\u5217\u200b\\(a_{n+1} = a_n^2 - 2a_n\\)? - Reuental\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
"},{"location":"math/causal-inference/","title":"\u56e0\u679c\u200b\u63a8\u65ad","text":"According to Causal Inference: What If.
- A definition of causal effect
- Randomized experiments
- Observational studies
- Effect modification
- Interaction
- Graphical representation of causal effects
- Confounding
- Selection bias
- Measurement bias and \"noncausal\" diagrams
"},{"location":"math/causal-inference/causal-inference-stale/","title":"\u56e0\u679c\u200b\u63a8\u65ad","text":"Casual inference is about studying the consequence of doing one thing vs another.
Simpson\u2019s Paradox
\u200b\u67d0\u4e2a\u200b\u7edf\u8ba1\u200b\u5173\u8054\u200b\uff0c\u200b\u53ef\u80fd\u200b\u5728\u200b\u6240\u6709\u200b\u5b50\u200b\u7fa4\u4f53\u200b\u4e0a\u200b\u7684\u200b\u6548\u679c\u200b\u90fd\u200b\u662f\u200b\u76f8\u53cd\u200b\u7684\u200b\u3002
A statistical association that holds for the entire population can be reversed in every subpopulation.
Berkson\u2019s Paradox
Variables that have no relationships can appear to have strong associations in a selected subpopulation.
\u200b\u56e0\u679c\u200b\u63a8\u65ad\u200b\u6709\u200b\u4e24\u4e2a\u200b\u4e3b\u8981\u200b\u7684\u200b\u7814\u7a76\u200b\u6846\u67b6\u200b\uff0c\u200b\u5373\u200b Potential outcome framework \u200b\u548c\u200b Causal graph \u3002
"},{"location":"math/causal-inference/causal-inference-stale/#potential-outcome-framework","title":"Potential Outcome Framework","text":""},{"location":"math/causal-inference/causal-inference-stale/#_2","title":"\u6846\u67b6\u200b\u8bbe\u5b9a","text":" - Unit of analysis\uff1a\u200b\u4e0d\u540c\u200b\u65f6\u95f4\u200b\u4e0b\u200b\u7684\u200b\u540c\u4e00\u4e2a\u200b\u4e2a\u4f53\u200b\u5e94\u5f53\u200b\u770b\u4f5c\u200b\u4e0d\u540c\u200b\u7684\u200b\u4e2a\u4f53\u200b
- Treatment \\(D\\)\uff1a\u200b\u901a\u5e38\u200b\u5212\u5206\u200b\u4e3a\u200b\u5b9e\u9a8c\u7ec4\u200b\uff08\\(D=1\\)\uff09\u200b\u4e0e\u200b\u5bf9\u7167\u7ec4\u200b\uff08\\(D=0\\)\uff09\uff0c\u200b\u4f46\u200b\\(D\\)\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u53d6\u591a\u503c\u200b\u6216\u200b\u8fde\u7eed\u200b
- Potential outcome \\(Y(d)\\)\uff1a\u200b\u5f53\u200b\u5e72\u9884\u200b\u6c34\u5e73\u200b\u4e3a\u200b\\(d\\)\u200b\u65f6\u200b\u5e94\u5f53\u200b\u51fa\u73b0\u200b\u7684\u200b\u7ed3\u679c\u200b\u3002
- Counterfactual outcome\uff1a\u200b\u5f53\u200b\u5e72\u9884\u200b\u6c34\u5e73\u200b\u4e3a\u200b\\(D\\)\u200b\u65f6\u200b\u6240\u6709\u200b\\(d\\not = D\\)\u200b\u7684\u200b\u7ed3\u679c\u200b\u2014\u2014\u200b\u5b58\u5728\u200b\u4f46\u200b\u65e0\u6cd5\u200b\u89c2\u6d4b\u200b\u5230\u200b
- Casual effect\uff1a\u200b\u6bd4\u8f83\u200b\u4e24\u4e2a\u200b\u5e73\u884c\u200b\u7ed3\u679c\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5dee\u5f02\u200b\uff0c\\(Y(1) - Y(0)\\)
\u200b\u5f53\u200b\u4e00\u4e2a\u200b\u4e2a\u4f53\u200b\u63a5\u6536\u200b\u5230\u200b\\(d=D\\)\u200b\u4e4b\u540e\u200b\uff0c\u200b\u5176\u200b\u5e72\u9884\u200b\u72b6\u6001\u200b\u5c31\u200b\u4e0d\u4f1a\u200b\u518d\u200b\u6539\u53d8\u200b\u3002\u200b\u56e0\u6b64\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u89c2\u6d4b\u200b\u5230\u200b\u4e00\u4e2a\u200b\u4e2a\u4f53\u6240\u6709\u200b\u53ef\u80fd\u200b\u51fa\u73b0\u200b\u7684\u200b\u5e72\u9884\u200b\u7ed3\u679c\u200b\u3002
SUTVA assumption
\u200b\u5047\u8bbe\u200b\u4e2a\u4f53\u200b\\(i\\)\u200b\u7684\u200b\u5e72\u9884\u200b\u72b6\u6001\u200b\\(D_i\\)\u3001\u200b\u5e72\u9884\u200b\u548c\u200b\u4e0d\u200b\u5e72\u9884\u200b\u7684\u200b\u6548\u679c\u200b\\(Y_i(0), Y_i(1)\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u5373\u200b
\\[ \\{D_i, Y_i(0), Y_i(1)\\}\\sim\\{D, Y(0), Y(1)\\} \\] \u200b\u540c\u65f6\u200b\u5047\u8bbe\u200b
- \u200b\u6bcf\u4e2a\u200b\u4e2a\u4f53\u200b\u7684\u200b\u7ed3\u679c\u200b\u4e0d\u200b\u53d7\u5230\u200b\u5176\u4ed6\u200b\u4e2a\u4f53\u200b\u5e72\u9884\u200b\u6c34\u5e73\u200b\u7684\u200b\u5f71\u54cd\u200b\uff08\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e2a\u4f53\u200b\u4e4b\u95f4\u200b\u7684\u200b\u76f8\u4e92\u5f71\u54cd\u200b\uff0c\u200b\u4e2a\u4f53\u200b\u7684\u200b\u7ed3\u679c\u200b\u53ea\u53d7\u200b\u5e72\u9884\u200b\u6c34\u5e73\u200b\u7684\u200b\u5f71\u54cd\u200b\uff09
- \u200b\u4e0d\u200b\u5b58\u5728\u200b\u5e72\u9884\u200b\u6c34\u5e73\u200b\u7684\u200b\u9690\u85cf\u200b\u72b6\u6001\u200b\uff08\u200b\u5373\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5e72\u9884\u200b\u72b6\u6001\u200b\u90fd\u200b\u662f\u200b\u539f\u5b50\u200b\u7684\u200b\uff0c\u200b\u4e0d\u200b\u53ef\u4ee5\u200b\u8fdb\u4e00\u6b65\u200b\u5212\u5206\u200b\uff09
\u200b\u8003\u8651\u200b\u603b\u4f53\u200b\u7684\u200b\u671f\u671b\u200b\u5e72\u9884\u200b\u6548\u679c\u200b\uff08 Average Treatment Effect, ATE\uff09
\\[ \\tau = \\mathbb E[Y(1) - Y(0)] \\] \u200b\u7531\u4e8e\u200b\u5bf9\u4e8e\u200b\u4e2a\u4f53\u200b\\(i\\)\uff0c\u200b\u65e0\u6cd5\u200b\u540c\u65f6\u200b\u89c2\u6d4b\u200b\\(Y_i(1), Y_i(0)\\)\uff0c\u200b\u56e0\u6b64\u200b\\(\\tau\\)\u200b\u7684\u200b\u786e\u5207\u200b\u6570\u503c\u200b\u540c\u6837\u200b\u65e0\u6cd5\u200b\u89c2\u6d4b\u200b\u3002
\\[ \\begin{aligned} \\hat\\tau &= \\frac{1}{n_1} \\sum_{i;D_i = 1}Y_i - \\frac{1}{n_0} \\sum_{i;D_i = 0}Y_i \\\\ &= \\mathbb E[Y(1) | D = 1] - \\mathbb E[Y(0) | D = 0] \\end{aligned} \\] \u200b\u9700\u8981\u200b\u8003\u8651\u200b\\(D\\)\u200b\u7684\u200b\u5206\u5e03\u200b\uff0c\u200b\u5373\u200b\u5b9e\u9a8c\u7ec4\u200b\u4e0e\u200b\u5bf9\u7167\u7ec4\u200b\u5982\u4f55\u200b\u4ea7\u751f\u200b\uff0c\u200b\u6216\u200b\\(Y, D\\)\u200b\u7684\u200b\u72ec\u7acb\u6027\u200b\u3002
\u200b\u5f53\u200b\\(Y, D\\)\u200b\u6ee1\u8db3\u200b
\\[ (Y(0), Y(1))\\perp D \\label{1} \\] \u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(\\hat\\tau = \\tau\\)
"},{"location":"math/causal-inference/causal-inference-stale/#_3","title":"\u6df7\u6dc6\u200b\u56e0\u5b50","text":"\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u573a\u666f\u200b\uff1a
- \u200b\u4e00\u7fa4\u200b\u88ab\u8bd5\u200b\u968f\u673a\u200b\u63a5\u53d7\u200b\u836f\u7269\u200b\u8bd5\u9a8c\u200b
- \u200b\u88ab\u200b\u8bd5\u4e2d\u200b\u75c7\u72b6\u200b\u6bd4\u8f83\u4e25\u91cd\u200b\u7684\u200b\u4e2a\u4f53\u200b\u63a5\u53d7\u200b\u836f\u7269\u200b\u5b9e\u9a8c\u200b
- \u200b\u968f\u673a\u200b\u8bd5\u9a8c\u200b\u6307\u200b\u5206\u914d\u673a\u5236\u200b\u7531\u200b\u7814\u7a76\u8005\u200b\u53ef\u63a7\u200b\u3002\u200b\u5982\u200b\u6309\u7167\u200b\\(p = 0.5\\)\u200b\u7684\u200b\u6982\u7387\u200b\u8fdb\u884c\u200b\u4f2f\u52aa\u5229\u200b\u5b9e\u9a8c\u200b\u968f\u673a\u200b\u5206\u914d\u200b\uff0c\u200b\u5219\u200b\\((Y(1)\uff0c Y(0))\\perp D\\)\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b\\(\\hat\\tau = \\tau\\)
- \u200b\u89c2\u6d4b\u200b\u7814\u7a76\u200b\u6307\u200b\u5206\u914d\u673a\u5236\u200b\u4e0d\u7531\u200b\u7814\u7a76\u8005\u200b\u63a7\u5236\u200b\u3002\u200b\u5982\u200b\u88ab\u200b\u8bd5\u200b\u6839\u636e\u200b\u4e2a\u4f53\u200b\u611f\u53d7\u200b\u81ea\u884c\u51b3\u5b9a\u200b\u5403\u836f\u200b\u3002\u200b\u6b64\u65f6\u200b\u5b58\u5728\u200b\uff08\u200b\u53ef\u4ee5\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\uff09\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\\(X\\)
\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b
\u200b\u53d8\u91cf\u200b\\(X\\)\u200b\u662f\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\uff0c\u200b\u5982\u679c\u200b\uff1a
- \\(X\\)\u200b\u4f1a\u200b\u5f71\u54cd\u200b\u5206\u914d\u200b\uff0c\u200b\u5373\u200b\\(X\\not \\perp D\\)\uff0c\u200b\u6216\u200b
- \\(X\\)\u200b\u4f1a\u200b\u5f71\u54cd\u200b\u7ed3\u679c\u200b\uff0c\u200b\u5373\u200b\\(X\\not \\perp (Y(1)\uff0c Y(0))\\)
\u200b\u901a\u5e38\u200b\u5c06\u200b\u53ef\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u8bb0\u200b\u4e3a\u200b\\(X\\)\uff0c\u200b\u4e0d\u80fd\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u8bb0\u200b\u4e3a\u200b\\(U\\)\u3002
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5f53\u200b\u5b58\u5728\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u65f6\u200b\uff0c\\(\\eqref{1}\\)\u200b\u4e0d\u518d\u200b\u6210\u7acb\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\\(D\\)\u200b\u53d8\u4e3a\u200b\\(D|X\\)
\u200b\u5f53\u200b\u6240\u6709\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u90fd\u200b\u88ab\u200b\u89c2\u6d4b\u200b\u5230\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u9002\u7528\u200b unconfoundedness assumption
Unconfoundedness assumption
\u200b\u5047\u8bbe\u200b\u6210\u7acb\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b
\\[ (Y(1), Y(0)) \\perp D|X \\] \u200b\u63a7\u5236\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b
\\[\\begin{aligned} & \\mathbb E [\\mathbb E[Y | D = 1, X] - \\mathbb E[Y | D = 0, X]] \\\\ =& \\mathbb E [\\mathbb E[Y(1) | D = 1, X] - \\mathbb E[Y(0) | D = 0, X]] \\\\ =& \\mathbb E [\\mathbb E[Y(1) | X] - \\mathbb E[Y(0) | X]] \\\\ =& \\mathbb E [\\mathbb E[Y(1) - Y(0) | X]] \\\\ =& \\mathbb E[Y(1) - Y(0)] \\end{aligned} \\] \u200b\u4f46\u200b\u5b9e\u9645\u4e0a\u200b\uff0c\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u89c2\u6d4b\u200b\u5230\u200b\u6240\u6709\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u3002\u200b\u6b64\u65f6\u200b
\\[ \\begin{aligned} & \\bbE [Y | D = 1] - \\bbE [Y| D = 0] \\\\ =& \\bbE[\\bbE[Y | D = 1, X] | D = 1] - \\bbE[\\bbE[Y | D = 0, X] | D = 0] \\end{aligned} \\] \u200b\u4f46\u200b\u5b9e\u9645\u4e0a\u200b\uff0c\\(\\bbP(X|D = 1) \\not = \\bbP(X|D = 0)\\)\uff0c\u200b\u56e0\u6b64\u200b\u9020\u6210\u200b\u504f\u5dee\u200b\u3002
\u200b\u5e72\u9884\u200b\u4e0e\u200b\u6761\u4ef6\u200b
- \\(\\bbE(Y|D = 0)\\)\u200b\u53cd\u6620\u200b\u6761\u4ef6\u200b\uff0c\u200b\u4f5c\u7528\u200b\u5728\u200b\u7fa4\u4f53\u200b\\(D = 0\\)\u200b\u4e0a\u200b\u3002
- \\(\\bbE(Y(0))\\)\u200b\u53cd\u6620\u200b\u5e72\u9884\u200b\uff0c\u200b\u4f5c\u7528\u200b\u5728\u200b\u5168\u4f53\u200b\u4e0a\u200b\u3002
\u200b\u5f53\u200b\\((Y(1), Y(0))\\perp D | X\\)\u200b\u6210\u7acb\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b
\\[ \\bbE(Y(1) | X) = \\bbE(Y | D = 1, X) \\] \u200b\u524d\u63d0\u200b\u662f\u200b\uff0c overlap assumption \u200b\u6210\u7acb\u200b\u3002
Overlap assumption
\u200b\u5bf9\u4e8e\u200b\u6240\u6709\u200b\u7684\u200b\\(X\\)\uff0c\\(Y(0), Y(1)\\)\u200b\u5fc5\u987b\u200b\u90fd\u200b\u5b58\u5728\u200b\uff0c\u200b\u5373\u200b
\\[ \\bbP(D=1|X)\\in (0, 1) \\] \u200b\u5b9a\u4e49\u200b\\(\\bbP(D=1|X)\\in (0, 1)\\)\u200b\u4e3a\u200bpropensity score\u3002
"},{"location":"math/causal-inference/causal-inference-stale/#_4","title":"\u5b9e\u8bc1\u200b\u7814\u7a76","text":"\u200b\u5b9e\u9645\u4e0a\u200b\uff0c unconfoundedness \u200b\u548c\u200b overlap \u200b\u5047\u8bbe\u200b\u5747\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u6210\u7acb\u200b\uff0c\u200b\u56e0\u4e3a\u200b\u6709\u200b\u8bb8\u591a\u200b\u9690\u85cf\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u524d\u200b\u6587\u4e2d\u200b\u7684\u200b Simpson\u2019s Paradox \uff0c\u200b\u51fa\u73b0\u200b\u53cd\u200b\u76f4\u89c9\u200b\u73b0\u8c61\u200b\u7684\u200b\u539f\u56e0\u200b\u5728\u4e8e\u200b\uff0c\u200b\u6027\u522b\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\uff1a
- \u200b\u5973\u6027\u200b\u7684\u200b\u88ab\u200b\u8bd5\u200b\u6bd4\u4f8b\u200b\u66f4\u9ad8\u200b\uff08\\(D\\not\\perp X\\)\uff09
- \u200b\u5973\u6027\u200b\u6574\u4f53\u200b\u7684\u200b\u5eb7\u590d\u200b\u7387\u200b\u66f4\u200b\u4f4e\u200b\uff08\\(Y\\not\\perp X\\)\uff09
\u200b\u5728\u200b\u5b9e\u8bc1\u200b\u7814\u7a76\u200b\u4e2d\u200b\uff0c\u200b\u5f80\u5f80\u200b\u8fd8\u6709\u200b\u7814\u7a76\u8005\u200b\u672a\u80fd\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u3002
\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u65e2\u200b\u662f\u200b\u969c\u788d\u200b\uff0c\u200b\u4e5f\u200b\u662f\u200b\u5de5\u5177\u200b\u3002\u200b\u5728\u200b\u7406\u60f3\u5316\u200b\u7684\u200b\u7edf\u8ba1\u200b\u63a8\u65ad\u200b\u4e2d\u200b\uff0c\u200b\u76f8\u5173\u6027\u200b\u4e0d\u80fd\u200b\u63a8\u51fa\u200b\u56e0\u679c\u6027\u200b\u3002\u200b\u4f46\u200b\u5728\u200b\u5b9e\u8bc1\u200b\u7814\u7a76\u200b\u4e2d\u200b\uff0c\u200b\u7531\u4e8e\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u7684\u200b\u5b58\u5728\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u533a\u5206\u200b\u76f8\u5173\u6027\u200b\u4e2d\u200b\u7684\u200b\u56e0\u679c\u5173\u7cfb\u200b\u3002
\u200b\u4e00\u4e9b\u200b\u8861\u91cf\u200b\u5e72\u9884\u200b\u6548\u679c\u200b\u7684\u200b\u6307\u6807\u200b\uff08\u200b\u53c2\u6570\u200b\uff09
ATE
\\[ \\tau = \\bbE[Y(1) - Y(0)] \\] \u200b\u88ab\u8bd5\u200b\u7684\u200b ATE
\\[ \\tau_1 = \\bbE[Y(1) - Y(0) | D = 1] \\] \u200b\u6761\u4ef6\u200b ATE\uff08 CATE \uff09
\\[ \\tau_C = \\bbE[Y(1) - Y(0) | (D, X)\\in \\text{subgroup}] \\] QTE\uff08 Quantile treatment effect \uff09
\\[ \\begin{gathered} \\text{QTE} = F_1^{-1}(\\gamma) - F_0^{-1}(\\gamma) \\\\ F_d^{-1}(\\gamma) = \\inf\\{y|\\bbP(Y(d)\\leq y)\\geq \\gamma\\} \\end{gathered} \\] Causal risk ratio\uff08\u200b\u53ea\u200b\u9002\u7528\u200b\u4e8e\u200b\u7ed3\u679c\u200b\u4e8c\u5206\u200b\u7684\u200b\u60c5\u51b5\u200b\uff09
\\[ \\text{CRR} = \\bbP(Y(1) = 1) / \\bbP(Y(0) = 1) \\] \u200b\u4ee5\u4e0a\u200b\u8fd9\u4e9b\u200b\u53c2\u6570\u200b\u90fd\u200b\u53d7\u5230\u200b\u6df7\u6dc6\u200b\u53d8\u91cf\u200b\uff08\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u80fd\u200b\u88ab\u200b\u89c2\u6d4b\u200b\u5230\u200b\uff09\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002\u200b\u76f8\u5bf9\u200b\u5e94\u200b\u7684\u200b\uff0c\u200b\u4ece\u200b\u5b9e\u9a8c\u200b\u7ed3\u679c\u200b\u7684\u200b\u7edf\u8ba1\u200b\u6307\u6807\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u8fd9\u4e9b\u200b\u6307\u6807\u200b\u7684\u200b\u4e00\u4e2a\u200b\u4f30\u8ba1\u200b\u3002
\u200b\u5982\u200b\u5bf9\u4e8e\u200b ATE \u200b\u6307\u6807\u200b\\(\\tau = \\bbE[Y(1) - Y(0)]\\)\uff0c\\(\\tilde \\tau = \\bbE[Y | D = 1] - \\bbE[Y | D = 0]\\)\u200b\u5c31\u662f\u200b\\(\\tau\\)\u200b\u7684\u200b\u4e00\u4e2a\u200b\u4f30\u8ba1\u200b\u3002
\\(\\tau\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\u56e0\u679c\u200b\u53c2\u6570\u200b\uff0c\u200b\u53d7\u5230\u200b\\(X, D, Y(0), Y(1)\\)\u200b\u7684\u200b\u5171\u540c\u200b\u5f71\u54cd\u200b\u3002\\(\\tilde\\tau\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\u53ef\u4ee5\u200b\u4ece\u200b\u7edf\u8ba1\u6570\u636e\u200b\u4e2d\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\u6307\u6807\u200b\uff0c\u200b\u53d7\u5230\u200b\\(X, D, Y\\)\u200b\u7684\u200b\u5171\u540c\u200b\u5f71\u54cd\u200b\u3002
\u200b\u5982\u679c\u200b\u67d0\u4e2a\u200b\u53c2\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4ece\u200b\u7edf\u8ba1\u6570\u636e\u200b\u4e2d\u200b\u89c2\u6d4b\u200b\u5230\u200b\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u7684\u200b\u65e0\u504f\u200b\u4f30\u8ba1\u200b\uff0c\u200b\u5219\u200b\u79f0\u4e3a\u200b identifiable \u3002\u200b\u7531\u4e8e\u200b\u53cd\u200b\u4e8b\u5b9e\u200b\u7684\u200b\u5b58\u5728\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ea\u80fd\u200b\u89c2\u6d4b\u200b\u5230\u200b\\(Y = Y(D)\\)\uff0c\u200b\u56e0\u6b64\u200b\u5373\u4f7f\u200b\u6709\u200b\u65e0\u9650\u200b\u591a\u200b\u7684\u200b\u6570\u636e\u200b\u96c6\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u80fd\u200b\u5b9e\u73b0\u200b identification \u3002\u200b\u5728\u200b unconfoundedness \u200b\u5047\u8bbe\u200b\u6210\u7acb\u200b\u7684\u200b\u6761\u4ef6\u200b\u4e0b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b identification \u3002
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u4e3a\u4e86\u200b\u9a8c\u8bc1\u200b\u4e00\u4e2a\u200b\u56e0\u679c\u5173\u7cfb\u200b\u662f\u5426\u200b\u6210\u7acb\u200b\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u4e24\u200b\u65b9\u9762\u200b\u7684\u200b\u4fe1\u606f\u200b
- \u200b\u5145\u8db3\u200b\u7684\u200b\u6570\u636e\u200b\u96c6\u4ee5\u200b\u53cd\u6620\u200b\\(X, D, Y\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u3002
- \u200b\u5173\u4e8e\u200b\\(X, D, Y(0), Y(1)\\)\u200b\u7684\u200b\u4e00\u4e9b\u200b\u5047\u8bbe\u200b\uff0c\u200b\u5982\u200b\u968f\u673a\u200b\u8bd5\u9a8c\u200b\u5047\u8bbe\u200b\u6216\u200b unconfoundedness \u200b\u5047\u8bbe\u200b\u3002
"},{"location":"math/causal-inference/causal-inference-stale/#causal-graph","title":"Causal Graph","text":"\u200b\u4e00\u7cfb\u5217\u200b\u53d8\u91cf\u200b\u7684\u200b\u56e0\u679c\u5173\u7cfb\u200b\u53ef\u4ee5\u200b\u6784\u6210\u200b\u56e0\u679c\u200b\u56fe\u200b\u3002\u200b\u56e0\u679c\u200b\u56fe\u662f\u200b\u4e00\u4e2a\u200b\u6709\u200b\u5411\u200b\u65e0\u200b\u73af\u56fe\u200b\uff08 DAG \uff09\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b\u8868\u793a\u200b\u53d8\u91cf\u200b\uff0c\u200b\u6bcf\u6761\u200b\u8fb9\u200b\u4ece\u7236\u200b\u53d8\u91cf\u200b\uff08\u200b\u8282\u70b9\u200b\uff09\u200b\u51fa\u53d1\u200b\uff0c\u200b\u6307\u5411\u200b\u5b50\u200b\u53d8\u91cf\u200b\uff08\u200b\u8282\u70b9\u200b\uff09\u3002
- \u200b\u76f8\u90bb\u200b\uff1a\u200b\u5982\u679c\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\u4e4b\u95f4\u200b\u6709\u200b\u4e00\u6761\u200b\u8fb9\u200b\uff0c\u200b\u79f0\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\u76f8\u90bb\u200b
- \uff08\u200b\u56e0\u679c\u200b\uff09\u200b\u8def\u5f84\u200b\uff1a\u200b\u4e00\u7cfb\u5217\u200b\u76f8\u90bb\u200b\u7684\u200b\u8282\u70b9\u200b\u7ec4\u6210\u200b\u4e00\u6761\u200b\u8def\u5f84\u200b\uff08\u200b\u65e0\u89c6\u200b\u8fb9\u200b\u7684\u200b\u65b9\u5411\u200b\uff09
- \u200b\u6709\u200b\u5411\u200b\u8def\u5f84\u200b\uff1a\u200b\u65b9\u5411\u200b\u76f8\u540c\u200b\u7684\u200b\u4e00\u7cfb\u5217\u200b\u8def\u5f84\u200b\u6240\u200b\u8fde\u63a5\u200b\u7684\u200b\u8282\u70b9\u200b\u5f62\u6210\u200b\u7684\u200b\u8def\u5f84\u200b
\u200b\u8def\u5f84\u200b\u6709\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\uff1a
- \u200b\u94fe\u200b\uff1a\\(A\\ra B\\ra C\\)
- \u200b\u6c47\u805a\u200b\uff1a\\(A\\ra B\\la C\\)
- \u200b\u5206\u652f\u200b\uff1a\\(A\\la B\\ra C\\)
\u200b\u5728\u200b\u56e0\u679c\u200b\u56fe\u4e2d\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\u90fd\u200b\u662f\u200b\u5176\u5b50\u200b\u8282\u70b9\u200b\uff08\u200b\u540e\u4ee3\u200b\uff09\u200b\u7684\u200b\u76f4\u63a5\u200b\u539f\u56e0\u200b\uff08\u200b\u7956\u5148\u200b\uff09\uff08\u200b\u5373\u200b\uff0c\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e2d\u95f4\u200b\u7684\u200b\u53d8\u91cf\u200b\u5f71\u54cd\u200b\u5b50\u200b\u8282\u70b9\u200b\uff09\u3002
\u200b\u5bf9\u4e8e\u200b\u5982\u4e0b\u200b\u56fe\u200b\u6240\u793a\u200b\u7684\u200b\u56e0\u679c\u200b\u56fe\u200b
- \\(X_1\\)\u200b\u5f71\u54cd\u200b\u53d8\u91cf\u200b\\(X_4\\)\uff0c\u200b\u4f46\u200b\u4e0d\u662f\u200b\u76f4\u63a5\u200b\u5f71\u54cd\u200b\u3002
-
\u200b\u5982\u679c\u200b\u56fa\u5b9a\u200b\\(X_3\\)\uff0c\u200b\u5219\u200b\\(X_1\\)\u200b\u7684\u200b\u53d8\u5316\u200b\u4e0d\u4f1a\u200b\u5f71\u54cd\u200b\\(X_4\\)\uff0c\u200b\u5373\u200b
\\[ X_4\\perp (X_1, X_2) | X_3 \\] -
\u200b\u4f46\u200b\\(X_4\\)\u200b\u4ecd\u7136\u200b\u4e0e\u200b\\(X_5\\)\u200b\u6709\u5173\u200b\u3002
\u200b\u8fdb\u4e00\u6b65\u200b\u5730\u200b\uff0c\u200b\u6211\u4eec\u200b\u4e0d\u59a8\u200b\u5047\u8bbe\u200b\uff0c\u200b\u5982\u679c\u200b\u63a7\u5236\u200b\u4e86\u200b\u67d0\u4e2a\u200b\u53d8\u91cf\u200b\\(X_i\\)\u200b\u5168\u90e8\u200b\u7684\u200b\u76f4\u63a5\u200b\u7956\u5148\u200b\uff0c\u200b\u5219\u200b\\(X_i\\)\u200b\u53ea\u200b\u4e0e\u5176\u200b\u540e\u4ee3\u200b\u6709\u5173\u200b\uff08\u200b\u56e0\u679c\u200bMarkov\u200b\u5047\u8bbe\u200b\uff09\u3002
Markov\u200b\u56e0\u5b50\u200b\u5206\u89e3\u200b
\u200b\u5f53\u200bMarkov\u200b\u5047\u8bbe\u200b\u6210\u7acb\u200b\u65f6\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\\(n\\)\u200b\u4e2a\u200b\u53d8\u91cf\u200b\\(X_1, \\ldots, X_n\\)\uff0c\u200b\u6709\u200b
\\[ \\bbP(X_1, \\ldots, X_n) = \\prod_{i=1}^n \\bbP(X_i | A_i) \\] \u200b\u5f0f\u200b\u4e2d\u200b\uff0c\\(A_i\\)\u200b\u4e3a\u200b\\(X_i\\)\u200b\u5168\u90e8\u200b\u7684\u200b\u7956\u5148\u200b\u3002
"},{"location":"math/causal-inference/causal-inference-stale/#d-","title":"d-\u200b\u5206\u5272","text":"\u200b\u5bf9\u4e8e\u200b\u6709\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\u7684\u200b\u56e0\u679c\u200b\u56fe\u200b\uff0c\\(X_1\\la X_2\\)\u200b\u548c\u200b\\(X_1\\ra X_2\\)\u200b\u662f\u200b\u4e24\u4e2a\u200b\u4e0d\u540c\u200b\u7684\u200b\u56e0\u679c\u5173\u7cfb\u200b\uff0c\u200b\u4f46\u200b\u5728\u200b\u76f8\u5173\u6027\u200b\u4e0a\u200b\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u8868\u73b0\u200b\uff0c\u200b\u65e0\u6cd5\u200b\u533a\u5206\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u6709\u200b\u4e09\u4e2a\u200b\u8282\u70b9\u200b\u7684\u200b\u56e0\u679c\u200b\u56fe\u200b\uff1a
- \\(X_1\\ra X_2\\ra X_3\\)\u200b\u548c\u200b\\(X_1\\la X_2\\ra X_3\\)\u200b\u662f\u200b\u4e24\u4e2a\u200b\u4e0d\u540c\u200b\u7684\u200b\u56e0\u679c\u5173\u7cfb\u200b\uff0c\u200b\u4f46\u200b\u5b83\u4eec\u200b\u90fd\u200b\u6ee1\u8db3\u200b\\(X_1\\perp X_3 | X_2, X_1\\not\\perp X_3\\)\uff0c\u200b\u4ecd\u7136\u200b\u65e0\u6cd5\u200b\u533a\u5206\u200b\u3002\u200b\u5e76\u4e14\u200b\u7531\u4e8e\u200b\u53d8\u91cf\u200b\\(X_2\\)\u200b\u7684\u200b\u5b58\u5728\u200b\uff0c\u200b\u5373\u4f7f\u200b\\(X_1, X_3\\)\u200b\u5b58\u5728\u200b\u76f8\u5173\u200b\u5173\u7cfb\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u80fd\u200b\u8bf4\u660e\u200b\u5176\u200b\u5b58\u5728\u200b\u76f4\u63a5\u200b\u6216\u200b\u95f4\u63a5\u200b\u7684\u200b\u56e0\u679c\u5173\u7cfb\u200b\u3002\u200b\u63a7\u5236\u200b\\(X_2\\)\u200b\u53ef\u4ee5\u200b\u963b\u65ad\u200b\\(X_1, X_3\\)\u200b\u7684\u200b\u56e0\u679c\u200b\u94fe\u200b\u3002
- \u200b\u5bf9\u4e8e\u200b\\(\\X_1\\ra X_2\\la X_3\\)\uff0c\u200b\u5982\u679c\u200b\u63a7\u5236\u200b\\(X_2\\)\uff0c\u200b\u5219\u200b\u6709\u200b\\(X_1\\not \\perp X_3 | X_2\\)\uff0c\u200b\u4f46\u200b\\(X_1\\perp X_3\\)\u3002\\(X_2\\)\u200b\u963b\u65ad\u200b\u4e86\u200b\\(X_1, X_3\\)\u200b\u7684\u200b\u56e0\u679c\u200b\u94fe\u200b\u3002
- \u200b\u5982\u679c\u200b\u6709\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\\(X_4\\)\u200b\u6ee1\u8db3\u200b\\(X_2\\ra X_4\\)\uff0c\u200b\u5219\u200b\u63a7\u5236\u200b\\(X_4\\)\u200b\u4e5f\u200b\u4f1a\u200b\u4f7f\u200b\\(X_1, X_3\\)\u200b\u8868\u73b0\u200b\u51fa\u200b\u76f8\u5173\u200b\uff0c\u200b\u5373\u200b\\(X_1\\not \\perp X_3 | X_4\\)\u3002
\u200b\u963b\u65ad\u200b\u56e0\u679c\u200b\u94fe\u200b
\u200b\u4e24\u4e2a\u200b\u53d8\u91cf\u200b\u4e4b\u95f4\u200b\u7684\u200b\u8def\u5f84\u200b\u5982\u679c\u200b\u6ee1\u8db3\u200b\u4e0b\u5217\u200b\u4e4b\u4e00\u200b\uff0c\u200b\u5219\u200b\u56e0\u679c\u5173\u7cfb\u200b\u4e0d\u80fd\u200b\u901a\u8fc7\u200b\u8fd9\u200b\u6761\u200b\u8def\u5f84\u200b\uff08\u200b\u88ab\u200b\u963b\u65ad\u200b\uff09\u3002
- \u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u6ca1\u6709\u200b\u88ab\u200b\u63a7\u5236\u200b\u7684\u200b\u6c47\u805a\u200b\u8282\u70b9\u200b\uff1b
- \u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u88ab\u200b\u63a7\u5236\u200b\u7684\u200b\u975e\u200b\u6c47\u805a\u200b\u8282\u70b9\u200b\u3002
\u200b\u5982\u679c\u200b\u4e24\u4e2a\u200b\u53d8\u91cf\u200b\u4e4b\u95f4\u200b\u7684\u200b\u6240\u6709\u200b\u8def\u5f84\u200b\u90fd\u200b\u88ab\u200b\u963b\u65ad\u200b\uff0c\u200b\u5219\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u53d8\u91cf\u200b\u88ab\u200b\u5206\u5272\u200b\u3002
\u200b\u4e00\u822c\u200b\u5b9a\u4e49\u200b\u88ab\u200b\u63a7\u5236\u200b\u7684\u200b\u53d8\u91cf\u200b\u96c6\u5408\u200b\u4e3a\u200b\\(Z\\)\u3002\u200b\u5982\u679c\u200b\u56e0\u679c\u200b\u56fe\u200b\\(\\calG\\)\u200b\u4e2d\u200b\uff0c\u200b\u63a7\u5236\u53d8\u91cf\u200b\\(Z\\)\u200b\u5c06\u200b\u56e0\u679c\u200b\u56fe\u200b\u5206\u4e3a\u200b\u4e86\u200b\u4e24\u4e2a\u200b\u90e8\u5206\u200b\uff0c\u200b\u5219\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u90e8\u5206\u200b\\(X, Y\\)\u200b\u6784\u6210\u200b\u4e86\u200b\u56e0\u679c\u200b\u56fe\u200b\u7684\u200b\u4e00\u4e2a\u200bd-\u200b\u5206\u5272\u200b\uff0c\u200b\u5373\u200b\\(X\\perp_\\calG Y | Z\\)\u3002\u200b\u8fdb\u4e00\u6b65\u200b\u5730\u200b\uff0c\u200b\u5982\u679c\u200b\u6ee1\u8db3\u200b Markov \u200b\u5047\u8bbe\u200b\uff0c\u200b\u5219\u200b\\(X\\)\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u53d8\u91cf\u200b\u548c\u200b\\(Y\\)\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u53d8\u91cf\u200b\u72ec\u7acb\u200b\u3002
\u200b\u4f46\u662f\u200b\u53d8\u91cf\u200b\u72ec\u7acb\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u80fd\u200b\u5bfc\u51fa\u200bd-\u200b\u5206\u5272\u200b\uff0c\u200b\u7531\u6b64\u200b\u5f97\u5230\u200b faithfulness assumption
faithfulness assumption
\u200b\u5bf9\u4e8e\u200b\u56e0\u679c\u200b\u56fe\u200b\\(\\calG\\)\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u4e92\u4e0d\u200b\u76f8\u4ea4\u200b\u7684\u200b\\(X, Y, Z\\)\u200b\u4e14\u200b\\(X\\perp Y | Z\\)\uff0c\u200b\u5219\u200b\\(X, Y\\)\u200b\u6784\u6210\u200b\u4e00\u4e2a\u200bd-\u200b\u5206\u5272\u200b\u3002
\u200b\u5728\u200b Markov \u200b\u5047\u8bbe\u200b\u548c\u200b faithfulness \u200b\u5047\u8bbe\u200b\u6210\u7acb\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cd-\u200b\u5206\u5272\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u53d8\u91cf\u200b\u72ec\u7acb\u200b\u3002
"},{"location":"math/causal-inference/causal-inference-stale/#_5","title":"\u76f8\u5173\u6027\u200b\u4e0e\u200b\u56e0\u679c\u6027\u200b\u7684\u200b\u8def\u5f84","text":"\u200b\u5728\u200b\u56e0\u679c\u200b\u56fe\u4e0a\u200b\uff1a
- \u200b\u76f8\u5173\u6027\u200b\u6cbf\u200b\u8def\u5f84\u200b\u6d41\u52a8\u200b
- \u200b\u56e0\u679c\u6027\u200b\u6cbf\u6709\u200b\u5411\u200b\u8def\u5f84\u200b\u6d41\u52a8\u200b
\u200b\u5982\u679c\u200b\u963b\u65ad\u200b\u4e86\u200b\u6240\u6709\u200b\u975e\u200b\u56e0\u679c\u6027\u200b\u7684\u200b\u8def\u5f84\u200b\uff0c\u200b\u5219\u200b\u4e24\u4e2a\u200b\u53d8\u91cf\u200b\u4e4b\u95f4\u200b\u5b58\u5728\u200b\u56e0\u679c\u5173\u7cfb\u200b\u3002
do\u200b\u7b97\u5b50\u200b
\u200b\u5728\u200b\u56e0\u679c\u200b\u56fe\u4e2d\u200b\uff0c\u200b\u5bf9\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\u7684\u200b\u5e72\u9884\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u963b\u65ad\u200b\u6240\u6709\u200b\u6307\u5411\u200b\u8be5\u200b\u53d8\u91cf\u200b\u7684\u200b\u8fb9\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\mathrm {do}(\\cdot)\\)
\u200b\u975e\u200b\u56e0\u679c\u200b\u7684\u200b\u8def\u5f84\u200b\u6709\u200b\u4e24\u4e2a\u200b\u6765\u6e90\u200b\uff1a
- \u200b\u6ca1\u6709\u200b\u63a7\u5236\u200b\u5206\u652f\u200b\u53d8\u91cf\u200b\uff0c\u200b\u5373\u200b confounding bias
- \u200b\u63a7\u5236\u200b\u4e86\u200b\u6c47\u805a\u200b\u53d8\u91cf\u200b\uff0c\u200b\u5373\u200b selection bias
"},{"location":"math/causal-inference/causal-inference-stale/#confounding","title":"Confounding \u200b\u4e0e\u200b\u540e\u95e8\u200b\u8c03\u6574","text":"Confounding \u200b\u6307\u200b\u56e0\u679c\u200b\u8def\u5f84\u200b\u7684\u200b\u8d77\u59cb\u200b\u548c\u200b\u7ec8\u7ed3\u200b\u53d8\u91cf\u200b\u90fd\u200b\u53d7\u5230\u200b\u540c\u4e00\u4e2a\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u540e\u95e8\u200b\u8c03\u6574\u200b\u6d88\u9664\u200b\u5f71\u54cd\u200b\u3002
"},{"location":"math/causal-inference/chapter-1/","title":"A Definition of Causal Effect","text":"Key concepts: treatment, outcome, average causal effect, potential outcome, consistency, causation-association difference, identifiability
"},{"location":"math/causal-inference/chapter-1/#treatment-and-outcome","title":"Treatment and Outcome","text":"We want to compare the result when a specified action is or is not applied to an individual. The action is called a treatment, and the result is called an outcome, which are denoted by \\(A\\) and \\(Y\\) respectively. Usually we take \\(A\\) and \\(Y\\) to be both binary.
The outcome under a specified treatment \\(A = a\\) is denoted by \\(Y^{A = a}\\). In reality, we can only observe one value of \\(Y^{A = 1}\\) or \\(Y^{A = 0}\\) for each individual. Each \\(Y^{A = a}\\) is called a potential outcome. If \\(A = a\\) is observed, \\(Y^{A = a}\\) is factual, and \\(Y^{A = 1 - a}\\) is counterfactual. The probability of potential outcome \\(Y = 1\\) is called risk.
Consistency assumption
If \\(A = a\\) is observed, then \\(Y = Y^{A = a}\\).
"},{"location":"math/causal-inference/chapter-1/#causal-effects","title":"Causal Effects","text":"Identifiability
A quantity is identifiable if it can be expressed (unbiasedly) as a function of the distribution of the observed data.
Before we clarify the definition of causal effect, we need to make some assumptions on individual outcome.
No interference assumption
The potential outcome under \\(A = a\\) does not depend on the treatment of other individuals (i.e. no interference).
"},{"location":"math/causal-inference/chapter-1/#individual-causal-effect","title":"Individual Causal Effect","text":"If for individual \\(i\\), \\(Y_i^{A = 1} \\not = Y_i^{A = 0}\\), then we say that the treatment has a causal effect for individual \\(i\\).
"},{"location":"math/causal-inference/chapter-1/#average-causal-effect","title":"Average Causal Effect","text":"The average causal effect is defined as
\\[ P(Y^{A = 1} = 1) - P(Y^{A = 0} = 1) \\] or
\\[ E(Y^{A = 1}) - E(Y^{A = 0}) \\] The two forms of average causal effect are equivalent. We can test average causal effect by testing the causal null hypothesis \\(H_0: P(Y^{A = 1} = 1) = P(Y^{A = 0} = 1)\\). However, the absence of average causal effect does not imply the absence of individual causal effect. We call the null hypothesis \\(H_0: \\forall i, Y_i^{a = 1} = Y_i^{a = 0}\\) as sharp causal null hypothesis.
"},{"location":"math/causal-inference/chapter-1/#functional-causal-effect","title":"Functional Causal Effect","text":"We can measure the outcome \\(Y\\) over a function \\(f(y)\\). For example \\(V(Y^{a = 1}) - V(Y^{a = 0})\\) as the causal effect on sample variance. Notice that \\(V(Y^{a = 1}) - V(Y^{a = 0})\\) usually does not equal to \\(V(Y^{a = 1} - Y^{a = 0})\\).
"},{"location":"math/causal-inference/chapter-1/#measuring-causal-effects","title":"Measuring Causal Effects","text":"The causal null hypothesis can be written as
- Difference: \\(H_0: P(Y^{a = 1} = 1) - P(Y^{a = 0} = 1) = 0\\)
- Ratio: \\(H_0: \\frac{P(Y^{a = 1} = 1)}{P(Y^{a = 0} = 1)} = 1\\)
- Odds ratio: \\(H_0: \\frac{P(Y^{a = 1} = 1) / P(Y^{a = 1} = 0)}{P(Y^{a = 0} = 1) / P(Y^{a = 0} = 0)} = 1\\)
When \\(H_0\\) is rejected, we can use number needed to treat (NNT) to measure the strength of causal effect. NNT is defined as the number of individuals needed to be treated to prevent one additional bad outcome. NNT is given by:
\\[ \\text{NNT} = \\frac{-1}{P(Y^{a = 1} = 1) - P(Y^{a = 0} = 1)} \\]"},{"location":"math/causal-inference/chapter-1/#random-variability","title":"Random Variability","text":"In reality, we can only collect a sample of individuals in the population, and our estimate on causal effect suffers from random variability.
- Sampling variablility: We use \\(\\hat P(Y^{a = 1} = 1) = N(Y^{a = 1}) / N(Y)\\) as an estimator of \\(P(Y^{a = 1} = 1)\\). The estimator suffers from random variability.
- Potential outcomes are usually not deterministic, which makes another source of random variability.
"},{"location":"math/causal-inference/chapter-1/#causation-and-association","title":"Causation and Association","text":"In the real world, we can only observe one potential outcome for each individual. Therefore, we cannot directly measure the outcome \\(P(Y^{a = 1} = 1)\\) and \\(P(Y^{a = 0} = 1)\\). Instead, we can only use \\(P(Y = 1 | A = 1)\\) and \\(P(Y = 1 | A = 0)\\) as estimators.
Like the causal null hypothesis, we can also define the independent (\\(A\\perp Y\\)) null hypothesis in three forms:
- Risk difference: \\(H_0: P(Y = 1 | A = 1) - P(Y = 1 | A = 0) = 0\\)
- Risk ratio: \\(H_0: \\frac{P(Y = 1 | A = 1)}{P(Y = 1 | A = 0)} = 1\\)
- Odds ratio: \\(H_0: \\frac{P(Y = 1 | A = 1) / P(Y = 0 | A = 1)}{P(Y = 1 | A = 0) / P(Y = 0 | A = 0)} = 1\\)
Notice that any terms in the form of conditional probability or expectation are associations. Only marginal probability or expectation can be causal effects, since the marginal probability takes all other factors into consideration.
"},{"location":"math/causal-inference/chapter-2/","title":"Randomized Experiments","text":"Key concepts: random experiment, exchangeability, effect modification
"},{"location":"math/causal-inference/chapter-2/#randomized-experiments_1","title":"Randomized Experiments","text":"Consider the following treatment assignment:
Assume that the treatment assignment is determined by a random procedure, the experiment is called a random experiment. Then exchanging the individual in treated group with those in control group will not affect the association measure.
If a random experiment satisfies the following conditions, it is called an ideal randomized experiment:
- Full adherence: All individuals follow the treatment assignment.
- No loss to follow-up: All individuals are followed up and their outcomes are observed.
- Single treatment: Each individual is assigned to one treatment only.
- Double-blind assignment: The treatment assignment is unknown to both the individuals and the researchers.
If all the possible values of treatment variable \\(A = a\\) are sequentially assigned to individuals, the experiment is called crossover experiment. Individual causal effects can be estimated using crossover experiments if the following conditions are met:
- No carryover effect: The treatment effect of \\(a\\) does not depend on the previous treatments.
- The individual causal effect \\(\\alpha_i = Y^{a_t = 1}_{it} - Y^{a_t = 0}_{it}\\) does not depend on time.
- The potential outcome under no treatment does not depend on time.
By assigning the treatment value sequence randomly, we can remove the required conditiona 3. In such case:
\\[ (Y_{i1} - Y_{i0})A_{i1} - (Y_{i0} - Y_{i1})A_{i0} \\] estimates the individual causal effect \\(E(\\alpha_i)\\) under condition 2. If condition 2 is not met, the estimator estimates \\(E(\\alpha_{i0} + \\alpha_{i1}) / 2\\).
"},{"location":"math/causal-inference/chapter-2/#exchangeability","title":"Exchangeability","text":"Exchangeability
- (Full) exchangeability indicates that swapping the treatment assignment of two individuals does not affect the association measure, or \\(Y^a \\perp A\\).
- Mean exchangeability indicates that \\(\\forall a', E(Y^a | A = a') = E(Y^a)\\), or the expectation of switched potential outcome is the same as the original one.
When \\(Y\\) and \\(A\\) are binary, full exchangeability is equivalent to mean exchangeability. Mean exchangeability is sufficient for deriving \\(E(Y^a) = E(Y | A = a)\\).
Exchangeability indicates that all the potential outcome and the treatment assignment are independent, i.e. \\(\\forall a, Y^{A = a} \\perp A\\), or the treatment assignment is exogenous. Under exchangeability, \\(P(Y = 1 | A = a)\\) is an unbiased estimator of \\(P(Y^{a} = 1)\\).
\\(Y^a\\perp A\\) and \\(Y\\perp A\\)
Notice that \\(Y^a \\perp A\\) is not equivalent to \\(Y \\perp A\\). The latter indicates that treatment \\(A\\) does not have any causal effect on the outcome \\(Y\\). If \\(\\forall a, E(Y^a) = E(Y)\\), then \\(Y\\perp A\\).
Notice that a randomized experiment could be unexchangeable even if infinite samples are collected.
"},{"location":"math/causal-inference/chapter-2/#conditional-randomization","title":"Conditional Randomization","text":"Consider an additional factor \\(L\\) affects the assignment of treatments, i.e., when \\(L\\) takes different values, the distribution of \\(A\\) is different. Such a randomized experiment is called conditional randomized experiment. In a conditional randomized experiment, the corresponding randomized experiment using the overall distribution of \\(A\\) is called marginally randomized experiment.
Although the marginally randomized experiment is exchangeable, the conditional randomized experiment is not exchangeable in general. Only conditional exchangeability holds in such randomized experiments, i.e. \\(\\forall a, Y^a \\perp A | L\\).
We can measure the causal effects on sub-groups \\(P(Y^{a = 1} = 1 | L = l) - P(Y^{a = 0} = 1 | L = l)\\) using conditional exchangeability (stratification) or directly measure the overall causal effect \\(P(Y^{a = 1} = 1) - P(Y^{a = 0} = 1)\\) on the population using marginal exchangeability. For different sub-groups, the causal effects may be different, which is called effect modification or treatment effect heterogeneity.
Stratification
Stratification is to split the population into mutually exclusive sub-groups in which the treatment assignment is exchangeable. The causal effect can be estimated in each sub-group.
"},{"location":"math/causal-inference/chapter-2/#standardization","title":"Standardization","text":"We can view the marginal risk as a weighted average of the conditional risks:
\\[ P(Y^a = 1) = \\sum_{l\\in \\calL} P(Y^a = 1 | L = l) P(L = l) \\] With conditional exchangeability holds, we can derive that \\(P(Y^a = 1) = \\sum_{l\\in \\calL} P(Y = 1 | A = a, L = l) P(L = l)\\), which is called standardization, making the unobserved potential outcome \\(P(Y^a = 1)\\) to be identifiable.
"},{"location":"math/causal-inference/chapter-2/#inverse-probability-weighting","title":"Inverse Probability Weighting","text":"Notice that
\\[ P(A = a | L = l) = \\frac{P(A = a, L = l)}{P(L = l)} \\] We can assign the weight \\(w_l = \\frac{1}{P(A = a | L = l)}\\) to each individual with \\(L = l\\) to construct a pseudo-population. The pseudo-population satisfies exchangeability, and we can use the pseudo-population to estimate the causal effect. The IP weighted mean of outcome \\(Y\\) is \\(E\\left( I(A = a) Y / P(A = a | L)\\right)\\), where \\(I(A = a)\\) is the indicator function.
Assuming that \\(\\forall l, P(A = a | L = l) > 0\\), we can derive that
\\[ \\begin{aligned} & E\\left( \\frac{I(A = a) Y}{P(A = a | L)}\\right) \\\\ =& \\sum_{l} \\frac{E\\left( I(A = a) Y | L = l\\right) P(L = l)}{P(A = a | L = l)} \\\\ =& \\sum_{l} \\frac{E\\left( Y | A = a, L = l\\right) P(A = a | L = l)P(L = l)}{P(A = a | L = l)} \\\\ =& \\sum_{l} E\\left( Y | A = a, L = l\\right) P(L = l) \\\\ =& \\sum_{l} E(Y^a | L = l) P(L = l) \\\\ =& E(Y^a) \\end{aligned} \\] Therefore, under positivity assumption, IP weighting is equivalent to standardization.
Positivity
For any individual in any sub-group \\(l\\) has a non-zero probability of receiving treatment \\(a\\), i.e. \\(\\forall l, \\forall a, P(A = a | L = l) > 0\\).
"},{"location":"math/causal-inference/chapter-3/","title":"Observational Studies","text":"In an observational study, the variables are neither assigned nor controlled by the researcher. The researcher only observes the values of the variables. Compared with randomized experiments, observational studies are more limited to the researchers.
"},{"location":"math/causal-inference/chapter-3/#identifiability-conditions","title":"Identifiability Conditions","text":"If the following identifiability conditions are met, the observational study can be regarded as a conditionally randomized experiment.
Identifiability condition
- Consistency: The values of treatment under comparison correspond to well-defined interventions that, in turn, correspond to the versions of treatment in the data.
- Exchangeability: The conditional probability of receiving any value of treatment depends only on observed covariates \\(L\\).
- Positivity: The probability of receiving any value of treatment is strictly positive for all combinations of covariates \\(L\\).
If the identifiability conditions are not met, we can use other methods including instrumental variable to establish another group of identifiability condition.
"},{"location":"math/causal-inference/chapter-3/#exchangeability","title":"Exchangeability","text":"In observational studies, the exchangeablitiy condition may or may not hold, as the observed \\(L\\) may not be the only predictor of the treatment. The true predictor may even be unobserved or unobservable.
Exchangeability is given by
\\[ Y^a \\perp A \\mid L \\Longleftrightarrow \\forall a, P(Y^a = 1 \\mid A = a, L = l) = P(Y^a = 1\\mid A \\not = a, L = l) \\] However, in observational studies, \\(P(Y^a = 1\\mid A\\not = a, L = l)\\) is unidentifiable. Thus, the exchangeablitiy cannot be empirically verified.
"},{"location":"math/causal-inference/chapter-3/#positivity","title":"Positivity","text":"To measure causal effects, we need to measure the distribution of outcome under treatment and under no treatment. That is, in the whole sample or any observed subgroup, the probability of receiving any value of treatment should be strictly positive, which is called positivity. Notice that positivity is only required for these observed covariates that requires exchangeability.
Standardization and IP weighting are meaningful only if positivity holds.
IP weighting without positivity
If positivity does not hold, IP weighting is undefined since the denominator in
\\[ E\\left[\\frac{I(A = a)Y}{P(A = a | L)}\\right] \\] is zero. However, the IP weighted mean is still defined.
\\[ E\\left[\\frac{I(A = a)Y}{N(A = a, L) / N(L)}\\right] \\] Notice that \\(N(A = a, L) / N(L)\\) is defined on observed data. Let \\(Q(a) = \\{l | N(A = a, L) / N(L) > 0\\}\\). Now, \\(E\\left[\\frac{I(A = a)Y}{N(a, L) / N(L)}\\right] = E[Y^a | L \\in Q(a)]P(L\\in Q(a))\\) is a biased estimator of \\(E[Y^a]\\).
When positivity does not hold, then \\(Q(0) \\not = Q(1)\\), under this condition, the difference between IP weighted means (\\(E\\left[\\frac{I(A = 1)Y}{N(A = 1, L) / N(L)}\\right] - E\\left[\\frac{I(A = 0)Y}{N(A = 0, L) / N(L)}\\right]\\)) cannot be interpreted causally.
"},{"location":"math/causal-inference/chapter-3/#consistency","title":"Consistency","text":"Consider the following examples in heart transplant studies:
- Two patients received heart transplants performed by different surgeons.
- Two patients received heart transplants performed under different procedures.
Due to the complexity of real-world situations, we always need to aggregate the different treatments into a single treatment value. The map between discrete values of the treatment variable and real-world intervention is called treatment protocol. The first step for investigating the causal effect is to precisely specify the treatment protocol, so that any variation regarded as treatment will lead to the same outcome, or treatment variation irrelevance. Under this condition can we define the potential outcome under the specified treatment value. In addition, the treatment protocol of interest and the treatment protocol of the observed data should be the same.
Under the treatment variation irrelevance, we can define the potential outcome \\(Y^a\\).
Treatment variation irrelevance
Suppose that receiving heart transplant is denoted as \\(a\\), the heart transplant is performed by Alex and Bob. But the treatment protocol is observed as the heart transplant is performed by Alex. Then, the treatment variation irrelevance is violated and consistency assumption \\(Y = Y^{a = 1}\\) does not hold.
"},{"location":"math/causal-inference/chapter-3/#target-trial","title":"Target Trial","text":"Under the identifiability conditions, we can regard the observational study as a conditionally randomized experiment. The equivalent hypothetical, randomized experiment is called target trial.
"},{"location":"math/causal-inference/chapter-4/","title":"Effect Modification","text":"A null average causal effect does not imply a null average causal effect for a subset of the population. A variable \\(V\\) is an effect modifier if the average causal effect of \\(A\\) on \\(Y\\) differs across levels of \\(V\\).
An effect modifier does need to directly have causal relationship with the different causal effect. If the difference in causal effects can be interpreted causally, the variable is a causal effect modifier, otherwise it is a surrogate effect modifier.
Effects in the treated
Notice the treatment variable itself can be regarded as a subgroup. The average causal effect in the treated is measured on subgroup \\(A = 1\\).
\\[ P(Y^{a = 1} = 1 | A = 1) - P(Y^{a = 0} = 1 | A = 1) \\] - If the distribution of individual causal effects varies between the treated and untreated, the average causal effect in the treated is not equal to the average causal effect in the population.
- \\(P(Y^{a = 0} = 1 | A = 1)\\) is unidentifiable. Estimating \\(P(Y^{a = 0} = 1 | A = 1)\\) requires partial exchangeability \\(Y^{a = 0} \\perp A \\mid L\\).
- Following the definition of effects in the treated, we can define effects in the untreated, which is defined on subgroup \\(a = 0\\). Effects in the untreated requires partial exchangeability \\(Y^{a = 1} \\perp A \\mid L\\).
The counterfactual \\(P(Y^{a} = 1 | A = a')\\) can be estimated using standardization or IP weighting.
- Standardization: \\(P(Y^{a} = 1 | A = a') = \\sum_{l} P(Y = 1 | A = a, L = l) P(L = l | A = a')\\)
- IP weighting: \\(P(Y^{a} = 1 | A = a') = E\\left[\\frac{I(A = a)Y}{f(A | L)P(A = a' | L)}\\right]/E\\left[\\frac{I(A = a)}{f(A | L)P(A = a' | L)}\\right]\\)
The extrapolation of computed causal effects across populations are called transportability. Transportability is an unverifiable assumption. If the effect modification measure, version of treatment and the in-group interference are similar, we can assume transportability.
From effect modification, we can identify the subgroup that benefits most from the treatment or intervention. Moreover, effect modification helps us to learn underlying mechanisms of the outcome.
"},{"location":"math/causal-inference/chapter-4/#effect-modification-vs-prognostic-factor","title":"Effect Modification v.s. Prognostic Factor","text":"When marginal randomization does not hold, there exists a prognostic factor \\(L\\) is a variable that affect the treatment assignment, while an effect modifier \\(V\\) affects the effect. To estimate causal effects in such conditions, extra adjustments are required
"},{"location":"math/causal-inference/chapter-4/#stratification","title":"Stratification","text":"Stratification can be used to adjust the marginal causal effect of \\(A\\) on \\(V\\). However, it requires to take all the combinations of \\(V\\) and \\(L\\) into account. And stratification requires positivity condition to be met on \\(L\\).
Using stratification, we can yield the conditional causal effect of \\(A\\) on \\(Y\\) for each stratum. The per-stratum causal effect can be further weighted to get a pooled causal effect.
Notice that stratification will introduce sampling variability when the stratification is getting finer.
"},{"location":"math/causal-inference/chapter-4/#matching","title":"Matching","text":"Matching strategy is similar but inversed approach to IP weighting.
The goal of matching is to construct a subset of the population in which the distribution of \\(L\\) is similar between the treated and untreated by sampling in the treated part or untreated part. Stratas with only treated or untreated individuals are excluded.
Usually, the group with more individuals between the treated and untreated is sampled to match the other group. The subgroup being matched is used to calculate the average effect in the treated or untreated.
However, as matching changes the distribution of \\(L\\), the distribution of causal modifier \\(V\\) will also be changed.
"},{"location":"math/causal-inference/chapter-4/#overview-of-adjustment-methods","title":"Overview of Adjustment Methods","text":"There are 4 methods to adjust the causal effect of \\(A\\) on \\(Y\\), including standardization, IP weighting, matching and stratification.
- Standardization and IP weighting can be used to compute marginal or conditional causal effects.
- Matching and stratification can be used to compute conditional causal effects in subgroups.
- With effect modification, the causal effect of different adjustment methods may be different.
"},{"location":"math/causal-inference/chapter-5/","title":"Interaction","text":"This chapter considers a system that consists multiple treatment variables.
"},{"location":"math/causal-inference/chapter-5/#from-joint-intervention-to-interaction","title":"From Joint Intervention to Interaction","text":"Intervention is to manually set the value of treatment variable ignoring the original distribution of the variable. Intervention on multiple variables are called joint intervention.
Let the treatment variable be \\(A\\) and \\(B\\). If the causal effect (measured in risk difference) of treatment \\(A\\) is different with different values of \\(B\\), then \\(B\\) has an additive interaction on \\(A\\). Notice that \\(B\\) has an interaction on \\(A\\) is equivalent to \\(A\\) has an interaction on \\(B\\).
\\[ P(Y^{a = 1, b = 1} = 1) - P(Y^{a = 0, b = 1} = 1) \\not = P(Y^{a = 1, b = 0} = 1) - P(Y^{a = 0, b = 0} = 1) \\] Superadditive and subadditive
Rewrite the above inequality as
\\[ \\begin{aligned} P(Y^{a = 1, b = 1} = 1) - P(Y^{a = 0, b = 0} = 1) &\\not = [P(Y^{a = 1, b = 1} = 1) - P(Y^{a = 0, b = 1} = 1)] \\\\ &+ [P(Y^{a = 1, b = 0} = 1) - P(Y^{a = 0, b = 0} = 1)] \\end{aligned} \\] If the \\(\\not =\\) can be replaced by \\(>\\) or \\(<\\), then the interaction is called superadditive or subadditive, respectively.
Similarly, if the causal effect (measured in risk ratio) of treatment \\(A\\) is different with different values of \\(B\\), or vice versa, then there is a multiplicative interaction between \\(A\\) and \\(B\\). If the \\(\\not =\\) can be replaced by \\(>\\) or \\(<\\), then the interaction is called supermultiplicative or submultiplicative, respectively.
\\[ \\frac{P(Y^{a = 1, b = 1} = 1)}{P(Y^{a = 0, b = 0} = 1)} \\not = \\frac{P(Y^{a = 1, b = 0} = 1)}{P(Y^{a = 0, b = 0} = 1)} \\times \\frac{P(Y^{a = 1, b = 1} = 1)}{P(Y^{a = 0, b = 1} = 1)} \\]"},{"location":"math/causal-inference/chapter-5/#idenfication-of-interactions","title":"Idenfication of Interactions","text":"To identify the interaction between \\(A\\) and \\(B\\), we need make sure that consistency, exchangeability, positivity for \\(A\\) is satisfied for all values of both \\(A\\) and \\(B\\).
Notice the difference between effect modification and interaction. If \\(B\\) is randomly assigned, then \\(B\\) interacts with \\(A\\) is equivalent to that \\(B\\) serves as an effect modifier for \\(A\\).
Effect modification v.s. interaction
In an interaction, the two variables are of equal status, we can intervene on either or both of them. In effect modification, one variable is the treatment and the other is the modifier, we can only intervene on the treatment variable.
For treatment variables, we need consistency, exchangeability, positivity. But such conditions are not required for modifier variables.
"},{"location":"math/causal-inference/chapter-5/#response-type","title":"Response Type","text":"For each individual, the potential outcome pattern for receiving different levels of treatment is called response type.
For binary outcome and one binary treatment, there are \\(2^{2^1} = 4\\) response types. For binary outcome and two binary treatments, there are \\(2^{2 ^ 2} = 16\\) response types.
Monotonicity
For a response type, when treatment variables except \\(A\\) are fixed, if \\(Y^{a = 1} \\geq Y^{a = 0}\\), then the causal effect of \\(A\\) on \\(Y\\) is monotonic.
"},{"location":"math/causal-inference/chapter-5/#sufficient-cause-interaction","title":"Sufficient Cause Interaction","text":"Consider the mechanism of yielding certain outcome by controlling one binary treatment variable \\(A\\). There are three types of mechanisms to inevitably yield the outcome.
- With treatment \\(A\\).
- Without treatment \\(A\\).
- \\(A\\) is irrelevant to the outcome.
Since the outcome is stochastic, there exists some unknown factors \\(U_1, U_2, U_0\\) that leads to the outcome, respectively. For example, we can say \\(\\{A = 1, U_1 = 1\\}, \\{A = 0, U_2 = 1\\}\\) or \\(\\{U_3 = 1\\}\\) are sufficient-component causes for the outcome.
For models with \\(k\\) binary treatment variables, there are \\(3^k\\) possible mechanisms. If any individual \\(U_i = 1\\) corresponds to multiple variables exists, then there exists sufficient cause interaction among these variables.
Let \\(k = 2\\) and the treatment variables be \\(A, B\\), respectively. The sufficient cause interaction is synergistic if \\(A = 1, B = 1\\) is a sufficient-component cause for the outcome. The sufficient cause interaction is antagonistic if \\(A = 1, B = 0\\) or \\(A = 0, B = 1\\) are sufficient-component causes for the outcome.
When monotonicity holds, some sufficient causes are not possible.
"},{"location":"math/causal-inference/chapter-5/#summary","title":"Summary","text":"Sufficient-component-cause framework and the counterfactual framework focus on different interaction questions:
- Sufficient-component-cause framework focuses on the causal mechanism (reason) of the outcome.
- Counterfactual framework focuses on the causal effect of the treatment.
"},{"location":"math/causal-inference/chapter-6/","title":"Graphical Representation of Causal Effects","text":"A causal graph consists the following elements:
- Nodes in causal graphs represent random variables.
- Edges in causal graphs represent direct causal effects.
- A trail is a sequence of edges that does not meet the same node twice.
- A path is a trail that all the edges are pointing in the same direction.
- Conventionally, time flows from left to right in causal graphs.
- Causal graphs follow the properties of Bayesian networks (acyclic, markov factorization).
Markov Factorization
The joint distribution of a set of random variables can be factorized into a product of conditional distributions of each variable given its parents in the graph.
\\[ P(X_1, \\dots, X_n) = \\prod_{i=1}^n P(X_i \\mid \\text{Pa}(X_i)) \\] where \\(\\text{Pa}(X_i)\\) is the set of parents of \\(X_i\\).
Markov factorization is equivalent to the following local independence property:
\\[ X_i \\perp \\text{ND}(X_i) \\mid \\text{Pa}(X_i) \\] where \\(\\text{ND}(X_i)\\) is the set of non-descendants of \\(X_i\\).
A causal graph contains the following building blocks: fork, chain, collider.
"},{"location":"math/causal-inference/chapter-6/#d-seperation-and-independence","title":"D-seperation and Independence","text":"Conditional independence relations are encoded in the graph structure.
"},{"location":"math/causal-inference/chapter-6/#blocked-trails-and-d-seperation","title":"Blocked Trails and D-seperation","text":"Trails in causal graphs are regarded as blocked or open according to the following rules:
- If there are no nodes being observed, a path is blocked if and only if there exists one or more colliders on the path.
- If the trail contains a non-collider that is observed, the trail is blocked.
- A collider which is observed does not block the trail.
- A collider which any of its descendants is observed does not block the trail.
A trail is blocked if it satisfies any of the following conditions:
- There exists a collider on the trail that itself or all of its descendants are not observed.
- There exists a non-collider on the trail that is observed.
If all possible trails between two nodes \\(X, Y\\) are blocked \\(Z\\), the two nodes are d-separated. D-separated nodes are conditionally independent given the observed nodes, i.e., \\(X \\perp Y \\mid Z\\).
Faithfulness assumption
Faithfulness assumptions states that the observed conditional independence relations are consistent with the graph structure. That is: observed conditional independence \\(X \\perp Y \\mid Z\\) implies that \\(X\\) and \\(Y\\) are d-separated given \\(Z\\) in the graph.
"},{"location":"math/causal-inference/chapter-6/#flows-of-association-and-causation","title":"Flows of Association and Causation","text":"If two nodes are not d-separated, there exists at least one open trail between the nodes.
- Association flows along open trails.
- Causation flows along open paths.
There may be multiple trails and paths between two nodes, each trail provides a flow of association or causation. The overall observed association is affected by all the flows of association and causation. Existence of undesired flows of association may lead to lack of exchangeability and biased estimation of causal effects. If there are no flow of association between two nodes, the association is causal.
There two types of flows of association:
-
Common cause: two nodes are associated because they are both affected by a common cause.
-
Condition on common effect: two nodes are associated because they are both affecting an observed common effect.
Blocking a trail can be regarded as blocking the flow of association or causation on the graph.
"},{"location":"math/causal-inference/chapter-6/#hidden-properties","title":"Hidden Properties","text":"Causal graphs only encode conditional independence relations and flows of causation or association. Some properties or assumptions cannot be represent in causal graphs.
- Positivity: Positivity in causal graphs can be represented that all of the edges in the graph are not deterministic.
- Consistency: Consistency is implicitly assumed in causal graphs.
In a causal graph, the treatment node should lead to well-defined treatment.\\
"},{"location":"math/causal-inference/chapter-7/","title":"Confounding","text":"Confounding is a situation in which the effect of an exposure on an outcome is distorted by the presence of another variable that is associated with both the exposure and the outcome. The confounding effect is a non-causal association that leads to biased estimation of causal effect.
In a causal graph, the confounding effect is caused by an open backdoor path. A backdoor path is a non-path trail from treatment variable \\(A\\) to outcome variable \\(Y\\) that points to \\(A\\). The simplest structure of confounding contains a variable \\(L\\) pointing to treatment \\(A\\) and outcome \\(Y\\).
Suppose the causal graph is the true causal graph and satisfies faithfulness.
"},{"location":"math/causal-inference/chapter-7/#exchangeability","title":"Exchangeability","text":"Following the definition of backdoor path, the definition of confounding can be alternatively expressed as
Alternative definition of confounding
Confounding is any systematic bias that can be removed by randomized assignment of treatment \\(A\\) (eliminating the backdoor path).
When backdoor criterion is satisfied, exchangeability stands. The backdoor criterion requires on of the following:
- No confounding: no common cause of treatment \\(A\\) and outcome \\(Y\\).
- No unmeasured confounding: common cause of \\(A\\) and \\(Y\\) exists but a subset \\(L\\) of measured (observed) non-descendants of \\(A\\) blocks all the backdoor paths. The corresponding set \\(L\\) is called a sufficient set for confounding adjustment. Variable \\(L\\) is also called a confounder.
Unconditional causal effect can be measured when unconditional exchangeability is satisfied. Conditional causal effect can be measured when conditional exchangeability is satisfied. The following table shows causal graph structures holding different exchangeability. The conditioned variable is \\(L\\).
Causal identifiability table Unconditional exchangeable Not unconditional exchangeable Conditional exchangeable Not conditional exchangeable To identify conditional or unconditional causal effect, we can apply standardization on measured variables when conditional or unconditional exchangeability is satisfied. Take the following graph as an example.
When either \\(L_2\\) or \\(L\\) is observed, neither unconditional nor conditional exchangeability is satisfied. However, when both \\(L_2\\) and \\(L\\) are observed, both unconditional and conditional exchangeability is satisfied. We can identify the following causal effect based on observation.
- Conditional causal effect within strata of \\(L\\) and \\(L_2\\): \\(E[Y | A = a, L = l, L_2 = l_2]\\)
- Unconditional causal effect: \\(E[Y | A = a, L = l, L_2 = l_2]P(L_2 = l_2, L = l)\\)
- Conditional causal effect within strata of \\(L_2\\): \\(E[Y | A = a, L_2 = l_2, L = l]P(L = l | L_2 = l_2)\\)
- Conditional causal effect within strata of \\(L\\): \\(E[Y | A = a, L = l, L_2 = l_2]P(L_2 = l_2 | L = l)\\)
"},{"location":"math/causal-inference/chapter-7/#confounders","title":"Confounders","text":"The sufficient set for identifying confounder depends on variables observed or measured. For a causal graph, there may also exist multiple sufficient sets for confounding adjustment.
"},{"location":"math/causal-inference/chapter-7/#traditional-confounder","title":"Traditional Confounder","text":"A confounder satisfies the following conditions, which is the definition of a traditional confounder.
- The variable associates with the treatment.
- Condition on the treatment, the variable associates with the outcome.
- The variable is not on the causal path from the treatment to the outcome.
However, a variable that satisfies the above conditions is not necessarily a confounder. Variable \\(L\\) in the following graph is a traditional confounder. When \\(L\\) is not adjusted, unconditional causal effect can be directly identified, adjusting for \\(L\\) will introduce extra selection bias.
"},{"location":"math/causal-inference/chapter-7/#surrogate-confounder","title":"Surrogate Confounder","text":"A surrogate confounder is a variable that is the result of an unobserved common cause of the treatment and the outcome. The surrogate confounder itself does not lie on a backdoor path. The following graph shows a surrogate confounder \\(L\\).
Although \\(L\\) does not lie on the backdoor path, observing distribution of \\(L\\) may provide information about the unobserved common cause \\(U\\). In this case, adjusting for \\(L\\) can partially reduce the confounding bias.
"},{"location":"math/causal-inference/chapter-7/#single-world-intervention-graph","title":"Single-world Intervention Graph","text":"A single-world intervention graph (SWIG) is a causal graph that explicitly include the conterfactual variables on the graph. Unlike the causal graph that represents the real world, the SWIG represents a counterfactual world created by an intervention.
Causal graph Single-world intervention graph In a SWIG, the original treatment variable \\(A\\) is now regarded as two distinct nodes \\(A\\) and \\(a\\). \\(A\\) encodes the possible value of \\(A\\) under no intervention, \\(a\\) is the value of intervened treatment variable. Any descendant \\(X\\) of \\(A\\) is replaced by \\(X^a\\), which is the value of \\(X\\) under intervention \\(A = a\\). From the SWIG, we can see that after conditioning on \\(L\\), the trail \\(A\\leftarrow L\\leftarrow U\\rightarrow Y^a\\) is blocked, indicating that exchangeability \\(A \\perp Y^a | L\\) holds.
Confounder cannot be descendants of treatment
A confounder cannot be a descendant of the treatment variable. Suppose \\(L\\) is a descendant of \\(A\\), and \\(L\\) connects to \\(Y\\) through some trail. If the trail is a path from \\(L\\) to \\(Y\\), then the whole path through \\(L\\) is a causal path, adjustment on \\(L\\) will block such path. Otherwise, there should be a collider on the path. If the collider is \\(L\\), adjustment on \\(L\\) will open the non-causal trail, introducing extra selection bias. If the collider is not \\(L\\), adjustment on \\(L\\) have no effect.
"},{"location":"math/causal-inference/chapter-7/#confounding-adjustment","title":"Confounding Adjustment","text":"Methods adjust for confounder \\(L\\) can be classified into two categories:
- G-methods: methods that adjust for \\(L\\) by conditioning on \\(L\\) - IP weighting, G-estimation, standardization.
- Stratification methods: methods that adjust for \\(L\\) by stratifying on \\(L\\) - stratification, matching.
- Other methods: difference-in-difference, instrumental variable, front-door adjustment. These methods does not rely on conditional exchangeability.
"},{"location":"math/causal-inference/chapter-7/#difference-in-difference","title":"Difference-in-Difference","text":"Consider the following causal graph. We want to measure causal effect on treated \\(E(Y^1 | A = 1) - E(Y^0 | A = 1)\\). But there exists some unknown factors \\(U\\) that affects both treatment \\(A\\) and outcome \\(Y\\). For example, \\(U\\) can be the severity of disease, which affects both the treatment decision and the outcome.
Notice that
\\[ \\begin{aligned} &&& \\underbrace{E(Y | A = 1) - E(Y | A = 0)}_{\\text{Measured association}} \\\\ &=&& E(Y^1 | A = 1) - E(Y^0 | A = 0) \\\\ &=&& \\underbrace{(E(Y^1 | A = 1) - E(Y^0 | A = 1))}_{\\text{Causal effect on treated}} + \\underbrace{(E(Y^0 | A = 1) - E(Y^0 | A = 0))}_{\\text{Confounding effect}} \\end{aligned} \\] To estimate confounding effect \\(E(Y^0 | A = 1) - E(Y^0 | A = 0)\\) we can measure a pre-treatment outcome \\(C\\) before the treatment is applied. There is no direct causal relationship between pre-treatment outcome \\(C\\) and treatment \\(A\\), but \\(C\\) and \\(A\\) show some association since backdoor \\(C\\leftarrow U\\rightarrow A\\) presents, that is, \\(E(C | A = 1) - E(C | A = 0) \\neq 0\\). The metric \\(E(C | A = 1) - E(C | A = 0) \\neq 0\\) measures the strength of confounding effect of \\(A\\) on \\(C\\). If the confounding effect of \\(A\\) on \\(Y\\) caused by \\(Y\\leftarrow U\\rightarrow A\\) is the same as the confounding effect of \\(A\\) on \\(C\\) (additive equi-confounding assumption), then the confounding effect of \\(A\\) on \\(Y\\) can be removed by difference-in-difference.
\\[ E(Y^0 | A = 1) - E(Y^0 | A = 0) = E(C | A = 1) - E(C | A = 0) \\] The causal effect can be measured in
\\[ \\begin{aligned} &&& E(Y^1 | A = 1) - E(Y^0 | A = 1) \\\\ &=&& (E(Y | A = 1) - E(Y | A = 0)) - (E(C | A = 1) - E(C | A = 0)) \\end{aligned} \\]"},{"location":"math/causal-inference/chapter-7/#front-door-criterion","title":"Front-door Criterion","text":"Consider a causal graph with a treatment \\(A\\), a mediator \\(M\\) and an outcome \\(Y\\). The causal effect of \\(A\\) on \\(Y\\) is confounded by an unobserved variable \\(U\\). The mediator fully mediates the effect of \\(A\\) on \\(Y\\), i.e. all the causal path from \\(A\\) to \\(Y\\) passes through \\(M\\).
First we have
\\[ P(Y^a = 1) = \\sum_{m} P(Y^a = 1 | M^a = m) P(M^a = m) \\] \\(M\\) is not confounded, so
\\[ P(M^a = m) = P(M = m | A = a) \\] Notice that
\\[ P(Y^a = 1 | M^a = m) = P(Y^m = 1) = P(Y = 1 | M = m) \\] and
\\[ P(Y = 1 | M = m) = \\sum_{a'} P(Y^m = 1 | M = m, A = a')P(A = a') \\] by conditional exchangeability \\(Y^m \\perp M \\mid A\\). Under this case, \\(P(Y^a)\\) can be identified by
\\[ P(Y^a = 1) = \\sum_{m} P(M = m | A = a)\\sum_{a'} P(Y = 1 | M = m, A = a')P(A = a') \\]"},{"location":"math/causal-inference/chapter-8/","title":"Selection bias","text":"Selection bias is caused by extra association caused by only part of the population is selected for analysis. Selection bias is caused by conditioning on a common effect of treatment and outcome, even if the treatment actually has no individual causal effect on the outcome.
On the causal graph, selection bias is caused by either condition on a collider or descendant of a collider. In reality, selection bias can both appear in observational studies or randomized experiments since participants may be removed from the study before the outcome is observed. If participants are removed not in random, selection bias is introduced.
\\[ \\frac{P(Y = 1 | A = 1)}{P(Y = 1 | A = 0)} = \\frac{P(Y^{a = 1} = 1)}{P(Y^{a = 0} = 1)} \\not = \\frac{P(Y = 1 | A = 1, L = 0)}{P(Y = 0 | A = 1, L = 0)} \\] Selection bias and hazard ratio
Hazards is defined as the probability of a participant to die at a certain time. Following the definition of risk, the hazard ratio is the same as risk ratio. Consider the following causal graph.
In the graph, treatment \\(A\\) denote the heart transplant. The outcome \\(Y_1\\) and \\(Y_2\\) denote the death of the patient. Unmeasured variable \\(U\\) affect the overall death rate of the patient. For each time, we can define the associational hazard ratio as
\\[ \\begin{aligned} aRR_{AY_1} &= \\frac{P(Y_1 = 1 | A = 1)}{P(Y_1 = 1 | A = 0)} \\\\ aRR_{AY_2} &= \\frac{P(Y_2 = 1 | A = 1)}{P(Y_2 = 1 | A = 0)} \\end{aligned} \\] However, we can only measure the hazard ratio among the patients who are still alive at that time, that is:
\\[ aRR_{AY_2 \\mid Y_1 = 0} = \\frac{P(Y_1 = 1 | A = 1, Y_1 = 0)}{P(Y_1 = 1 | A = 0, Y_1 = 0)} \\] However, condition on \\(Y_1\\) opens a trail \\(A \\ra Y_1 \\la U\\ra Y_2\\). Therefore, unless \\(U\\) is measured, from the data collected we cannot distinguish the existence of the path \\(A \\ra Y_2\\).
"},{"location":"math/causal-inference/chapter-8/#selection-without-bias","title":"Selection without Bias","text":"Selection will cause bias within the study, but in some cases such bias can be restricted to some strata of the study. Consider the following causal graph. \\(Y = 0\\) if and only if \\(Y_A = Y_E = Y_O = 0\\).
- \\(Y = 0\\) is equivalent to \\(Y_A = 0\\) and \\(Y_E = 0\\). In such case, \\(A\\) is independent of \\(E\\).
- Consider the case when \\(Y = 1\\) and \\(Y_O = 0\\), then \\(Y_A = 0\\) indicates \\(Y_E = 1\\) and vice versa. In such case, \\(A\\) is dependent of \\(E\\).
"},{"location":"math/causal-inference/chapter-8/#adjustment-for-selection-bias","title":"Adjustment for Selection Bias","text":"Assume that positivity holds for \\(C = 0\\) and consistency holds for the analysis. Selection bias arises when the participants are not randomly removed from the study, causing the distribution of remaining participants to be different from the original population, i.e. the joint distribution \\(P'(A, L) = P(A, L | C = 0)\\) is no longer identical to \\(P(A, L)\\).
Selection bias is often unavoidable. IP weighting and standardization can be used to adjust for selection bias. The inverse probability weight \\(W^C\\) is defined as
\\[ W^C = \\frac{1}{P(C = 0 | \\cdot)} \\] where \\(\\cdot\\) denote all the variable that directly affects \\(C\\). Since we can only observed variables for uncensored (\\(C = 0\\)) individuals, the IP weight only uses \\(C = 0\\). IP weighting assigns different weight to the probability distribution of each pair of \\((A, L)\\), so that the distribution of the weighted sample is identical to the original population.
\\[ \\begin{aligned} &&& \\frac{P(A = a, L = l, C = 0)}{P(C = 0 | A = a, L = l)} \\\\ &=&& \\frac{P(A = a, L = l, C = 0)}{P(A = a, L = l, C = 0) / P(A = a, L = l)} \\\\ &=&& P(A = a, L = l) \\end{aligned} \\] Difference in confounding bias and selection bias
In confounding bias, IP weighting is applied on the treatment variable \\(A\\), while in selection bias, IP weighting is applied on the censoring variable \\(C\\).
When there are measured variable \\(L\\) on the trail through \\(C\\) that is able to block the trail causing selection bias, we can use stratification to adjust for selection bias by conditioning on \\(L\\).
"},{"location":"math/causal-inference/chapter-9/","title":"Measurement bias and \"noncausal\" diagrams","text":""},{"location":"math/causal-inference/chapter-9/#measurement-bias","title":"Measurement Bias","text":"Measurement bias is caused by errors in measuring values of variables, i.e. \\(A^* \\not = A\\). Measurement error is defined as the difference between the measured value and the true value of a variable, \\(e_A = A^* - A\\). Taken measurement error into consideration, the causal diagram is modified as follows:
Measurement error follow two properties:
- Indepedence: \\(e_A \\perp e_Y\\).
- Nondifferentiality: \\(e_A \\perp Y\\) and \\(e_Y \\perp A\\).
Lack of either property will bring extra association and lead to bias.
- Edge \\(Y\\ra U_A\\) will introduce recall bias.
- Edge \\(A\\ra U_Y\\) will introduce reverse causation bias.
- Edge \\(U_A\\la U_{AY}\\ra U_Y\\) will introduce independent measurement error.
Correcting for measurement error usually requires additional validated non-biased samples.
"},{"location":"math/causal-inference/chapter-9/#noncausal-diagrams","title":"\"Noncausal\" Diagrams","text":"A causal graph requires that all of the edges in the graph can be interpreted causally, together with well-defined intervention. For graphs with non-causal edges, adjustments might fail to remove bias, as the adjusted variable is not on the true causal path.
"},{"location":"math/convex-optimization/","title":"\u51f8\u200b\u4f18\u5316","text":""},{"location":"math/convex-optimization/#_2","title":"\u76ee\u5f55","text":" - \u200b\u51f8\u96c6\u200b
- \u200b\u51f8\u51fd\u6570\u200b
"},{"location":"math/convex-optimization/#notations-and-definitions","title":"Notations and Definitions","text":"\u200b\u672c\u200b\u8282\u200b\u5217\u4e3e\u200b\u51f8\u200b\u4f18\u5316\u200b\u4e2d\u200b\u6240\u7528\u200b\u7b26\u53f7\u200b\u7684\u200b\u8868\u8ff0\u200b\uff0c\u200b\u5e76\u200b\u501f\u6b64\u200b\u56de\u987e\u200b\u76f8\u5173\u200b\u7684\u200b\u6570\u5b66\u200b\u6982\u5ff5\u200b
"},{"location":"math/convex-optimization/#_3","title":"\u6570\u57df","text":" - \\(\\mathbb R, \\mathbb N, \\mathbb Z, \\mathbb C\\)\uff1a\u200b\u5b9e\u6570\u200b\u57df\u200b\u3001\u200b\u81ea\u7136\u6570\u200b\u57df\u200b\u3001\u200b\u6574\u6570\u200b\u57df\u200b\u3001\u200b\u590d\u6570\u200b\u57df\u200b
- \u200b\u4e0b\u6807\u200b \\({}_\\plus, {}_{\\plus\\plus}\\) \u200b\u5728\u200b\u5b9e\u6570\u200b\u57df\u548c\u5b9e\u200b\u5411\u91cf\u200b\u57df\u200b\u4e0a\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u975e\u8d1f\u200b\u3001\u200b\u4e25\u683c\u200b\u6b63\u200b\uff0c\u200b\u5728\u200b\u5b9e\u77e9\u9635\u200b\u57df\u200b\u4e0a\u200b\u8868\u793a\u200b\u534a\u200b\u6b63\u5b9a\u200b\u3001\u200b\u6b63\u5b9a\u200b\u3002
"},{"location":"math/convex-optimization/#_4","title":"\u77e9\u9635\u200b\u4e0e\u200b\u5411\u91cf","text":"\\(A\\in \\mathbb R^{m\\times n}\\)\u200b\u8868\u793a\u200b\\(A\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(m\\)\u200b\u884c\u200b\\(n\\)\u200b\u5217\u200b\u7684\u200b\u5b9e\u77e9\u9635\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u4e3a\u200b\\(a_{ij}\\)\uff0c\u200b\u67d0\u5217\u200b\uff08\u200b\u6216\u200b\u67d0\u884c\u200b\uff09\u200b\u7684\u200b\u5207\u7247\u200b\u4e3a\u200b\\(A_{\\cdot j}\\)
\\(\\boldsymbol x\\in \\mathbb R^m\\)\u200b\u8868\u793a\u200b\\(\\boldsymbol x\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(m\\)\u200b\u7ef4\u7684\u5b9e\u200b\u5411\u91cf\u200b\uff0c\\(\\boldsymbol 1\\)\u200b\u8868\u793a\u200b\u6240\u6709\u200b\u5206\u91cf\u200b\u5747\u200b\u4e3a\u200b\\(1\\)\u200b\u7684\u200b\u5411\u91cf\u200b\u3002
\u200b\u65b9\u9635\u200b\u662f\u200b\u884c\u6570\u200b\u4e0e\u200b\u5217\u6570\u200b\u76f8\u7b49\u200b\u7684\u200b\u77e9\u9635\u200b\uff0c\\(A\\in \\mathbb R^{n\\times n}\\)\u3002\u200b\u5bf9\u79f0\u200b\u77e9\u9635\u200b\u6ee1\u8db3\u200b\\(A^\\top = A\\)\uff0c\u200b\u53cd\u5bf9\u200b\u79f0\u200b\u77e9\u9635\u200b\u6ee1\u8db3\u200b\\(A^\\top = - A\\)\u3002\u200b\u6b63\u5b9a\u200b\u77e9\u9635\u200b\u6ee1\u8db3\u200b\\(\\forall x\\in \\mathbb R^n, x^\\top Ax > 0\\)\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(A\\succ 0\\)\uff1b\u200b\u534a\u200b\u6b63\u5b9a\u200b\u77e9\u9635\u200b\u6ee1\u8db3\u200b\\(\\forall x\\in \\mathbb R^n, x^\\top Ax \\geq 0\\)\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(A\\succeq 0\\)\u3002\u200b\u5bf9\u4e8e\u200b\u590d\u200b\u65b9\u9635\u200b\\(A\\in \\mathbb C^{n\\times n}\\)\uff0c\u200b\u5b9a\u4e49\u200b\u5171\u8f6d\u200b\u8f6c\u7f6e\u200b\uff08Hermitian\uff09\u200b\u77e9\u9635\u200b\u4e3a\u200b\\(A^* = \\overline {A^\\top}\\)\u3002\u200b\u5168\u4f53\u200b\\(k\\)\u200b\u9636\u200b\u5bf9\u79f0\u200b\u77e9\u9635\u200b\u7684\u200b\u96c6\u5408\u200b\u4e3a\u200b\\(\\mathbb S^k\\)\u3002
\u200b\u77e9\u9635\u7684\u8ff9\u200b\u662f\u200b\u5bf9\u89d2\u7ebf\u200b\u4e0a\u200b\u5404\u4e2a\u200b\u5143\u7d20\u200b\u4e4b\u200b\u548c\u200b
\\[ \\mathrm {tr}(A) = \\sum_{i=1}^n a_{ii} \\] \u200b\u8ff9\u200b\u7684\u200b\u6027\u8d28\u200b - \\(\\mathrm {tr}(A) = \\mathrm {tr}(A^\\top)\\)
- \\(\\mathrm {tr}(A+B) = \\mathrm {tr}(A) + \\mathrm {tr}(B)\\)
- \\(\\mathrm {tr}(t\\cdot A) = t\\cdot \\mathrm {tr}(A)\\)
- \\(\\mathrm {tr}(AB) = \\mathrm {tr}(BA)\\)\uff08\u200b\u4e0d\u200b\u8981\u6c42\u200b\\(A, B, \\cdots\\)\u200b\u4e3a\u200b\u65b9\u9635\u200b\uff0c\u200b\u53ea\u200b\u9700\u8981\u200b\u6ee1\u8db3\u200b\u8fd0\u7b97\u200b\u7ed3\u679c\u200b\u4e3a\u200b\u65b9\u9635\u200b\u5373\u53ef\u200b\uff1b\u200b\u5bf9\u4e8e\u200b\u591a\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u4e58\u6cd5\u200b\u987a\u5e8f\u200b\u9700\u8981\u200b\u6ee1\u8db3\u200b\u8f6e\u6362\u200b\u5bf9\u79f0\u6027\u200b\u624d\u80fd\u200b\u4fdd\u8bc1\u200b\u7b49\u5f0f\u200b\u6210\u7acb\u200b\uff09
\u200b\u5b9a\u4e49\u200b\u4e24\u4e2a\u200b\u77e9\u9635\u200b\\(X, Y\\)\u200b\u7684\u200b\u5185\u79ef\u200b\u4e3a\u200b\u5176\u200b\u4e58\u79ef\u200b\u7684\u200b\u8ff9\u200b\\(\\mathrm{tr}(XY)\\)
"},{"location":"math/convex-optimization/#_5","title":"\u8303\u6570","text":"\u200b\u8303\u6570\u200b\u662f\u200b\u6ee1\u8db3\u200b\u4ee5\u4e0b\u200b\u6027\u8d28\u200b\u7684\u200b\u51fd\u6570\u200b\\(f\\)
- \u200b\u975e\u200b\u8d1f\u6027\u200b\uff1a\\(f(\\boldsymbol{x}) \\geq 0\\)
- \u200b\u89c4\u8303\u6027\u200b\uff1a\\(f(\\boldsymbol{x}) = 0 \\Leftrightarrow \\boldsymbol x = 0\\)
- \u200b\u9f50\u6b21\u200b\u6027\u200b\uff1a\\(f(t\\cdot \\boldsymbol{x}) = t\\cdot f(\\boldsymbol{x})\\)
- \u200b\u4e09\u89d2\u200b\u4e0d\u7b49\u5f0f\u200b\uff1a\\(f(\\boldsymbol x + \\boldsymbol y)\\leq f(\\boldsymbol x) + f(\\boldsymbol y)\\)
\u200b\u5e38\u89c1\u200b\u7684\u200b\u8303\u6570\u200b - 1-\u200b\u8303\u6570\u200b\uff1a\\(f(\\boldsymbol{x}) = \\sum_{i=1}^n \\left|x_i\\right|\\)
- 2-\u200b\u8303\u6570\u200b\uff1a\\(f(\\boldsymbol{x}) = \\sqrt{\\sum_{i=1}^n \\left|x_i^2\\right|}\\)
- \\(\\infty\\)-\u200b\u8303\u6570\u200b\uff1a\\(f(\\boldsymbol{x}) = \\sqrt[\\infty]{\\sum_{i=1}^n \\left|x_i^\\infty\\right|}\\)
- 0-\u200b\u8303\u6570\u200b\uff08\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u5b9a\u4e49\u200b3\uff0c\u200b\u56e0\u6b64\u200b\u4e0d\u662f\u200b\u8303\u6570\u200b\uff09\uff1a\\(f(\\boldsymbol{x}) = \\sum_{i=1}^n \\boldsymbol{1}_{\\{x_i \\not = 0\\}}\\)
- \\(l_p\\)-\u200b\u8303\u6570\u200b\uff1a\\(f(\\boldsymbol{x}) = \\sqrt[p]{\\sum_{i=1}^n \\left|x_i^p\\right|}\\)
- Frobenius\u200b\u8303\u6570\u200b\uff1a\\(f(A) = \\sqrt{\\sum_i\\sum_j a_{ij}^2} = \\sqrt{\\mathrm{tr}(A^\\top A)}\\)
\u200b\u8303\u6570\u200b\u7b49\u4ef7\u200b\u5b9a\u7406\u200b\uff1a\u200b\u5bf9\u4e8e\u200b\u4e24\u4e2a\u200b\u8303\u6570\u200b\\(f, g\\)\uff0c\u200b\u5b58\u5728\u200b\u6b63\u5e38\u200b\u6570\u200b\\(c\\)\u200b\u4f7f\u5f97\u200b\\(\\forall \\boldsymbol{x}, f(\\boldsymbol{x}) \\leq cg(\\boldsymbol{x})\\)
\u200b\u8bbe\u200b\\(f\\)\u200b\u4e3a\u200b\\(\\mathbb R^n\\)\u200b\u4e0a\u200b\u7684\u200b\u8303\u6570\u200b\uff0c\u200b\u5bf9\u5076\u200b\u8303\u6570\u200b\\(f_*\\)\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b
\\[ f_*(\\boldsymbol{z}) = \\sup_{\\boldsymbol{x}} \\{\\boldsymbol{z^\\top x} | f(\\boldsymbol{x}) \\leq 1\\} \\] \u200b\u5bf9\u5076\u200b\u8303\u6570\u200b \u200b\u6839\u636e\u200b\u8303\u6570\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u7403\u200b\u7684\u200b\u6982\u5ff5\u200b
\u200b\u7403\u200b \u200b\u7ed9\u5b9a\u200b\\(\\mathbb R^n\\)\u200b\u7a7a\u95f4\u200b\u4e2d\u200b\u7684\u200b\u8303\u6570\u200b\\(\\Vert\\cdot\\Vert\\)\uff0c\\(B(x, r)\\)\u200b\u8868\u793a\u200b\u8303\u6570\u200b\\(\\Vert \\cdot\\Vert\\)\u200b\u4e2d\u200b\u7684\u200b\uff08\u200b\u5f00\u200b\uff09\u200b\u7403\u200b\uff0c\u200b\u5373\u200b
\\[ B(x, r) = \\{y | \\Vert y - x\\Vert < r\\} \\] \\(\\bar B(x, r)\\)\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u95ed\u7403\u200b
\\[ \\bar B(x, r) = \\{y | \\Vert y - x\\Vert \\leq r\\} \\]"},{"location":"math/convex-optimization/#_6","title":"\u96c6\u5408","text":"\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(C\\subseteq \\mathbb R^n, x\\in C\\)\uff0c\u200b\u4f7f\u7528\u200b2-\u200b\u8303\u6570\u200b\u5ea6\u91cf\u200b\u8ddd\u79bb\u200b\u3002
- \u200b\u82e5\u200b\\(\\exists r \\in \\mathbb R_{\\plus\\plus}, B(x, r)\\subseteq C\\)\uff0c\u200b\u79f0\u200b\\(x\\)\u200b\u4e3a\u200b\u5185\u70b9\u200b\u3002\u200b\u5168\u4f53\u200b\u5185\u70b9\u200b\u6784\u6210\u200b\u96c6\u5408\u200b\u7684\u200b\u5185\u90e8\u200b\\(C^\\circ\\)\uff0c\u200b\u663e\u7136\u200b\\(C^\\circ \\subseteq C\\)\u3002
- \u200b\u82e5\u200b\\(\\forall r\\in \\mathbb R_{+}, B(x, r)\\cap C \\not = \\varnothing, B(x, r) \\cap C^C \\not = \\varnothing\\)\uff0c\u200b\u79f0\u200b\\(x\\)\u200b\u4e3a\u200b\u8fb9\u754c\u70b9\u200b\u3002\u200b\u5168\u4f53\u200b\u8fb9\u754c\u70b9\u200b\u6784\u6210\u200b\u96c6\u5408\u200b\u7684\u200b\u8fb9\u754c\u200b\\(\\partial C\\)\u3002
- \u200b\u6839\u636e\u200b\u8fb9\u754c\u70b9\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u6709\u200b\\(\\partial C = \\partial C^C\\)\u3002
- \u200b\u82e5\u200b\\(x\\)\u200b\u4e0d\u662f\u200b\u5185\u70b9\u200b\uff0c\u200b\u5219\u200b\\(x\\)\u200b\u4e3a\u200b\u8fb9\u754c\u70b9\u200b\uff0c\u200b\u5373\u200b\\(\\partial C \\cup C^\\circ = C, \\partial C\\cap C^\\circ = \\varnothing\\)\u3002
\u200b\u82e5\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u70b9\u200b\u90fd\u200b\u662f\u200b\u5185\u70b9\u200b\uff0c\u200b\u5373\u200b\\(C^\\circ = C\\)\uff0c\u200b\u79f0\u200b\\(C\\)\u200b\u4e3a\u200b\u5f00\u96c6\u200b\u3002\u200b\u82e5\u200b\\(C\\)\u200b\u4e0d\u662f\u200b\u5f00\u96c6\u200b\uff0c\u200b\u5219\u200b\\(C\\)\u200b\u4e3a\u200b\u95ed\u96c6\u200b\u3002\u200b\u5f00\u96c6\u200b\u7684\u200b\u8865\u96c6\u200b\u662f\u200b\u95ed\u96c6\u200b\u3002
\u200b\u5b9a\u4e49\u200b\u95ed\u5305\u200b\u4e3a\u200b
\\[ \\mathbf{cl}C = \\{x \\in \\mathbb R^n| \\forall r\\in \\mathbb R_{++}, B(x, r)\\cap C\\not = \\varnothing\\} \\] \u200b\u76f4\u89c2\u200b\u4e0a\u200b\uff0c\u200b\u95ed\u5305\u200b\u53ef\u4ee5\u200b\u7406\u89e3\u200b\u4e3a\u200b\\(C\\cup \\partial C^C\\)\uff0c\u200b\u5373\u200b\u96c6\u5408\u200b\u4e0e\u5176\u200b\u8865\u96c6\u200b\u7684\u200b\u8fb9\u754c\u200b\u7684\u200b\u5e76\u200b\u3002
\\(\\varnothing, \\mathbb R^n\\)\u200b\u65e2\u200b\u662f\u200b\u5f00\u96c6\u200b\u4e5f\u200b\u662f\u200b\u95ed\u96c6\u200b\uff1a
- \\(\\varnothing\\)\u200b\u7684\u200b\u95ed\u5305\u200b\u4ecd\u200b\u4e3a\u200b\\(\\varnothing\\)\uff0c\u200b\u6240\u4ee5\u200b\u662f\u200b\u95ed\u96c6\u200b\uff1b\u200b\u7136\u800c\u200b\\(\\varnothing^\\circ = \\varnothing\\)\uff0c\u200b\u6240\u4ee5\u200b\u662f\u200b\u5f00\u96c6\u200b\u3002
- \\(\\varnothing^C = \\mathbb R^n\\)\uff0c\u200b\u6240\u4ee5\u200b\\(\\mathbb R^n\\)\u200b\u65e2\u200b\u662f\u200b\u5f00\u96c6\u200b\u4e5f\u200b\u662f\u200b\u95ed\u96c6\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/","title":"\u51f8\u51fd\u6570\u200b\u53ca\u5176\u200b\u6027\u8d28","text":"\u200b\u51f8\u51fd\u6570\u200b\u662f\u200b\u4e00\u7c7b\u200b\u51fd\u6570\u200b\u4e0a\u65b9\u200b\uff08\u200b\u4e0a\u5883\u200b\u56fe\u200b\uff0cepigraph\uff09\u200b\u662f\u200b\u51f8\u96c6\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5373\u200b\u51fd\u6570\u200b\u66f2\u7ebf\u200b\u4e0a\u200b\u4efb\u610f\u200b\u4e24\u70b9\u200b\u8fde\u6210\u200b\u7684\u200b\u7ebf\u6bb5\u200b\u90fd\u200b\u5728\u200b\u51fd\u6570\u200b\u66f2\u7ebf\u200b\u7684\u200b\u4e0a\u65b9\u200b\u3002
\u200b\u82e5\u200b\u51fd\u6570\u200b\\(f: \\mathbb R^n\\rightarrow \\mathbb R\\)\u200b\u6ee1\u8db3\u200b\u7434\u751f\u200b\u4e0d\u7b49\u5f0f\u200b\uff1a
\\[ f(\\theta x + (1 - \\theta)y)\\leq \\theta f(x) + (1 - \\theta)f(y), 0\\leq \\theta\\leq 1 \\] \uff0c\u200b\u5219\u200b\u79f0\u200b\\(f\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u7434\u751f\u200b\u4e0d\u7b49\u5f0f\u200b\u7684\u200b\u6269\u5c55\u200b \u200b\u7434\u751f\u200b\u4e0d\u7b49\u5f0f\u200b\u53ef\u4ee5\u200b\u6269\u5c55\u200b\u5230\u200b\u66f4\u200b\u591a\u70b9\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b\u4e0a\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u51f8\u51fd\u6570\u200b\\(f\\)\uff0c\u200b\u8bbe\u200b\\(\\theta_1, \\ldots, \\theta_k\\geq 0, \\theta_1 + \\cdots + \\theta_k = 1\\)\uff0c\u200b\u5219\u200b
\\[ f(\\theta_1 x_1 + \\cdots + \\theta_k x_k)\\leq \\theta_1 f(x_1) + \\cdots + \\theta_k f(x_k) \\] \u200b\u8be5\u5f0f\u200b\u53ef\u4ee5\u200b\u8fdb\u4e00\u6b65\u200b\u62d3\u5c55\u200b\u81f3\u200b\u7ea7\u6570\u200b\u3001\u200b\u79ef\u5206\u200b\u3001\u200b\u671f\u671b\u200b\u7b49\u200b\u5f62\u5f0f\u200b\u3002
\u200b\u82e5\u200b\\(f(\\theta x + (1 - \\theta)y)< \\theta f(x) + (1 - \\theta)f(y), 0\\leq \\theta\\leq 1\\)\uff0c\u200b\u5219\u200b\u4e3a\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\u3002\u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u4e0a\u200b\u5883\u56fe\u200b\uff08\\(\\mathbf{epi}f\\)\uff09\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002
\u200b\u5982\u679c\u200b\\(-f\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u51f9\u200b\u51fd\u6570\u200b\uff0c\u200b\u82e5\u200b\\(-f\\)\u200b\u662f\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u4e25\u683c\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002\u200b\u51f9\u200b\u51fd\u6570\u200b\u7684\u200b\u4e9a\u56fe\u200b\uff08\\(\\mathbf{hypo}f\\)\uff09\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002
\u200b\u6240\u6709\u200b\u7684\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u90fd\u200b\u65e2\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u4e5f\u200b\u662f\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002
\\(f\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u5728\u200b\u5b9a\u4e49\u57df\u200b\u5185\u200b\u4efb\u4f55\u200b\u76f4\u7ebf\u200b\u4e0a\u200b\u90fd\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5373\u200b
\\[ \\forall v,\\forall x, g(t; v, x) = f(x + tv) \\] \u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u8bb0\u200b\\(f\\)\u200b\u7684\u200b\u5ef6\u4f38\u200b\\(\\tilde f\\)\u200b\u4e3a\u200b\u5206\u6bb5\u200b\u51fd\u6570\u200b
\\[ \\tilde f(x) = \\left\\{\\begin{aligned} & f(x) & x\\in \\mathbf{dom}f \\\\ & \\infty & x\\not\\in \\mathbf{dom}f \\end{aligned}\\right. \\] \u200b\u7c7b\u4f3c\u200b\u5730\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u51f9\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5176\u200b\u5b9a\u4e49\u57df\u200b\u5916\u200b\u7684\u200b\u90e8\u5206\u200b\u5ef6\u4f38\u200b\u81f3\u200b\\(-\\infty\\)\u3002 \u200b\u5728\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e2d\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u793a\u6027\u200b\u51fd\u6570\u200b\\(\\tilde I_C(x) = 0, x\\in C\\)\u200b\u6765\u200b\u5c06\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u89e3\u200b\u9650\u5b9a\u200b\u5230\u200b\u51f8\u96c6\u200b\\(C\\)\u200b\u4e0a\u200b\u3002\\(\\tilde I_C(x)\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u5176\u4ed6\u200b\u7684\u200b\u51f8\u51fd\u6570\u200b\u8fd8\u6709\u200b
- \u200b\u6307\u6570\u51fd\u6570\u200b\\(f: \\mathbb R\\rightarrow\\mathbb R = e^{ax}, a\\in \\mathbb R\\)
- \u200b\u5e42\u51fd\u6570\u200b\\(f: \\mathbb R_{ + + }\\rightarrow\\mathbb R = x^a, a\\geq 1\\)\u200b\u6216\u200b\\(a\\leq 0\\)
- \u200b\u7edd\u5bf9\u503c\u200b\u5e42\u51fd\u6570\u200b\\(f: \\mathbb R\\rightarrow\\mathbb R = |x|^p, p\\geq 1\\)
- \u200b\u8d1f\u200b\u5bf9\u6570\u51fd\u6570\u200b\\(f: \\mathbb R_{\\plus\\plus}\\rightarrow \\mathbb R = -\\log x\\)
- \u200b\u8d1f\u71b5\u200b\\(f: \\mathbb R_{\\plus\\plus}\\rightarrow \\mathbb R = x\\log x\\)
- \u200b\u8303\u6570\u200b\uff08\u200b\u4e09\u89d2\u200b\u4e0d\u7b49\u5f0f\u200b\uff09
- \u200b\u6700\u5927\u503c\u200b\u51fd\u6570\u200b\u76f8\u5f53\u4e8e\u200b\u65e0\u7a77\u200b\u9636\u200b\u8303\u6570\u200b\\(\\Vert\\cdot\\Vert_\\infty\\)\uff0c\u200b\u56e0\u6b64\u200b\u4e5f\u200b\u662f\u200b\u51f8\u200b\u7684\u200b\u3002
- \u200b\u6307\u6570\u200b\u548c\u200b\u7684\u200b\u5bf9\u6570\u200b\\(f: \\mathbb R^n\\rightarrow \\mathbb R = \\log \\sum_{i=1}^n e^{x_i}\\)
\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(\\alpha\\)\uff0c\u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\\(\\{x\\in \\mathbf{dom} f | f(x) \\leq \\alpha\\}\\)\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002\u200b\u6216\u8005\u8bf4\u200b\uff0c\u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u7b49\u9ad8\u7ebf\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_2","title":"\u4e00\u9636\u200b\u6761\u4ef6\u200b\u4e0e\u200b\u4e8c\u9636\u200b\u6761\u4ef6","text":""},{"location":"math/convex-optimization/convex-function/#_3","title":"\u4e00\u9636\u200b\u6761\u4ef6","text":"\u200b\u82e5\u200b\\(f\\)\u200b\u7684\u200b\u5b9a\u4e49\u57df\u200b\u4e3a\u200b\u51f8\u200b\u96c6\u4e14\u200b\u53ef\u5fae\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u7b49\u4ef7\u200b\u4e8e\u200b
\\[ f(y) \\geq f(x) + (\\nabla f(x))^\\top (y - x) \\] \u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u4e00\u9636\u200b\u8fd1\u4f3c\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u5168\u5c40\u200b\u4e0b\u200b\u4f30\u8ba1\u200b\u3002
\u200b\u4e00\u9636\u200b\u6761\u4ef6\u200b\u540c\u6837\u200b\u4e5f\u200b\u80fd\u200b\u7528\u6765\u200b\u53cd\u6620\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\u3001\u200b\u51f9\u200b\u51fd\u6570\u200b\u548c\u200b\u4e25\u683c\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_4","title":"\u4e8c\u9636\u200b\u6761\u4ef6","text":"\u200b\u82e5\u200b\\(f\\)\u200b\u7684\u200b\u5b9a\u4e49\u57df\u200b\u4e3a\u200b\u51f8\u200b\u96c6\u4e14\u200b\u4e8c\u9636\u200b\u53ef\u5fae\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u7b49\u4ef7\u200b\u4e8e\u200b
\\[ \\nabla ^2f(x)\\succeq 0 \\] \u200b\u4e8c\u9636\u200b\u6761\u4ef6\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u6765\u200b\u53cd\u6620\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\u3001\u200b\u51f9\u200b\u51fd\u6570\u200b\u548c\u200b\u4e25\u683c\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002\u200b\u6ce8\u610f\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u6ee1\u8db3\u200b\\(\\nabla^2 f(x)\\succ 0\\)\uff0c\u200b\u4e25\u683c\u200b\u51f9\u200b\u51fd\u6570\u200b\u540c\u7406\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_5","title":"\u4fdd\u51f8\u200b\u8fd0\u7b97","text":"\u200b\u5bf9\u4e8e\u200b\u51fd\u6570\u200b\\(f, g, f_1, \\ldots f_k: \\bbR^n\\rightarrow \\bbR\\)\uff08\u200b\u5982\u672a\u200b\u6307\u660e\u200b\uff0c\u200b\u5219\u200b\u5047\u5b9a\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff09\uff0c\u200b\u4ee5\u4e0b\u200b\u51fd\u6570\u200b\u4ecd\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff1a
-
\u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u7ebf\u6027\u7ec4\u5408\u200b\uff1a\\(f'(x) = \\sum_{i=1}^k \\theta_i f_i(x)\\)
\u200b\u6269\u5c55\u200b\u5230\u200b\u79ef\u5206\u200b\u5f62\u5f0f\u200b \u200b\u8bbe\u200b\\(f(x, y)\\)\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(y\\)\uff0c\u200b\u5173\u4e8e\u200b\\(x\\)\u200b\u90fd\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u51fd\u6570\u200b\\(w(y)\\)\u200b\u6ee1\u8db3\u200b\\(w(y)\\geq 0\\)\uff0c\u200b\u5219\u200b
\\[ g(x) = \\int_{\\mathcal A} w(y)f(x, y)\\dd y \\] \u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u3002
-
\u200b\u4eff\u5c04\u53d8\u6362\u200b\uff1a\\(f'(x): \\bbR^m\\rightarrow \\bbR = f(Ax + b)\\)\uff0c\u200b\u5176\u4e2d\u200b\\(A\\in \\bbR^{m\\times n}, b\\in \\bbR^n\\)
-
\u200b\u9010\u70b9\u200b\u6700\u5927\u200b\uff1a\\(f'(x) = \\max\\{f_1(x), \\ldots, f_k(x)\\}\\)
\u200b\u9010\u70b9\u200b\u6700\u5927\u200b\u53ef\u4ee5\u200b\u7406\u89e3\u200b\u4e3a\u200b\u4e00\u7cfb\u5217\u200b\u51fd\u6570\u200b\u4e0a\u5883\u200b\u56fe\u200b\u7684\u200b\u4ea4\u96c6\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\\(f'\\)\uff0c\u200b\u6709\u200b
\\[ \\mathbf{epi} f' = \\bigcap_{i=1}^k \\mathbf{epi} f_k \\] \u200b\u6839\u636e\u200b\u51f8\u96c6\u200b\u7684\u200b\u4fdd\u51f8\u200b\u6027\u8d28\u200b\u53ef\u77e5\u200b\uff0c\\(\\mathbf{epi} f'\\)\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002
\u200b\u6269\u5c55\u200b\u5230\u200b\u65e0\u9650\u200b\u4e2a\u200b\u51fd\u6570\u200b\u7684\u200b\u5f62\u5f0f\u200b \u200b\u8bbe\u200b\\(f(x, y)\\)\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(y\\)\uff0c\u200b\u5173\u4e8e\u200b\\(x\\)\u200b\u90fd\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b
\\[ g(x) = \\sup_{y\\in \\calA} f(x, y) \\] \u200b\u4e5f\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u3002
-
\u200b\u590d\u5408\u200b\u51fd\u6570\u200b\uff1a\\(g\\circ f\\)
- \u200b\u5f53\u200b\\(g: \\bbR\\rightarrow \\bbR\\)\u200b\u65f6\u200b\uff0c\\(f' = g\\circ f = g(f(x))\\)\u200b\u6ee1\u8db3\u200b
- \u200b\u82e5\u200b\\(g\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u4e14\u200b\u975e\u51cf\u200b\uff0c\\(f\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f'\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b
- \u200b\u82e5\u200b\\(g\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u4e14\u200b\u975e\u589e\u200b\uff0c\\(f\\)\u200b\u4e3a\u200b\u51f9\u200b\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f'\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b
- \u200b\u5f53\u200b\\(g: \\bbR^k\\rightarrow \\bbR\\)\u200b\u65f6\u200b\uff0c\\(f' = g\\circ f = g(f_1(x), \\ldots, f_k(x))\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
- \u200b\u82e5\u200b\\(g\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u4e14\u200b\u5728\u200b\u5404\u4e2a\u200b\u5206\u91cf\u200b\u4e0a\u200b\u975e\u51cf\u200b\uff0c\\(f_i\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f'\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b
- \u200b\u82e5\u200b\\(g\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u4e14\u200b\u5728\u200b\u5404\u4e2a\u200b\u5206\u91cf\u200b\u4e0a\u200b\u975e\u589e\u200b\uff0c\\(f_i\\)\u200b\u4e3a\u200b\u51f9\u200b\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f'\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b
-
\u200b\u6700\u5c0f\u5316\u200b\uff1a\u200b\u82e5\u200b\\(f(x, y): \\bbR^m\\times \\bbR^n\\rightarrow \\bbR\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\u5bf9\u4e8e\u200b\u975e\u7a7a\u200b\u51f8\u96c6\u200b\\(C\\)\uff0c\\(\\inf_{y\\in C}f(x, y)\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u3002
- \u200b\u900f\u89c6\u200b\u51fd\u6570\u200b\uff1a\\(g(x, t) = tf(x / t)\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_6","title":"\u5171\u8f6d\u200b\u51fd\u6570","text":"\u200b\u51fd\u6570\u200b\\(f: \\bbR^n\\rightarrow \\bbR\\)\u200b\u7684\u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\\(f^*: \\bbR^n\\rightarrow\\bbR\\)\u200b\u4e3a\u200b
\\[ f^*(y)\\triangleq \\sup_{x\\in \\mathbf{dom}f} (y^\\top x - f(x)) \\] \u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002\\(f^{**}\\)\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u548c\u200b\\(f\\)\u200b\u76f8\u7b49\u200b\uff0c\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u65f6\u200b\uff0c\\(f^{**} = f\\)\u3002
\u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\u7684\u200b\u51f8\u6027\u200b \u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u51fd\u6570\u200b\\(f: \\bbR^n\\rightarrow \\bbR\\)\u200b\u548c\u200b\\(x\\in \\bbR^n\\)\uff0c\\(g(y, x) = y^\\top x - f(x)\\)\u200b\u4e3a\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\uff08\u200b\u4e5f\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff09
\\(f^*(y)\\)\u200b\u4e3a\u200b\\(g(y, x)\\)\u200b\u5173\u4e8e\u200b\\(x\\)\u200b\u7684\u200b\u9010\u70b9\u200b\u4e0a\u200b\u786e\u754c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u6839\u636e\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u51fd\u6570\u200b\\(f\\)\u200b\u53ca\u5176\u200b\u5171\u8f6d\u200b\u6ee1\u8db3\u200b
\\[ f(x) + f^*(y)\\geq x^\\top y \\] \u200b\u4e8c\u6b21\u200b\u51fd\u6570\u200b\u7684\u200b\u5171\u8f6d\u200b \u200b\u5bf9\u4e8e\u200b\u4e8c\u6b21\u200b\u51fd\u6570\u200b\\(f(x) = \\frac{1}{2} x^\\top Qx, Q\\in \\bbS_{\\plus\\plus}^n\\)\uff0c\u200b\u5176\u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ f^*(y) = \\frac{1}{2} y^\\top Q^{-1}y \\] \u200b\u8303\u6570\u200b\u7684\u200b\u5171\u8f6d\u200b \u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u8303\u6570\u200b\\(\\Vert\\cdot\\Vert\\)\uff0c\u200b\u5176\u200b\u5bf9\u5076\u200b\u8303\u6570\u200b\u4e3a\u200b\\(\\Vert\\cdot\\Vert_*\\)\uff0c\u200b\u5219\u200b\\(f(x) = \\Vert x\\Vert\\)\u200b\u7684\u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ f^*(y) = \\left\\{ \\begin{aligned} & 0 & \\Vert y\\Vert_* \\leq 1 \\\\ & \\infty & \\text{otherwise} \\end{aligned} \\right. \\] \u200b\u51fd\u6570\u200b\u548c\u200b\u7684\u200b\u5171\u8f6d\u200b\u7b49\u4e8e\u200b\u5176\u200b\u5171\u8f6d\u200b\u7684\u200b\u548c\u200b
\\[ (f + g)^* = f^* + g^* \\] \u200b\u5bf9\u4e8e\u200b\u53ef\u5fae\u200b\u51fd\u6570\u200b\\(f\\)\uff0c\u200b\u6709\u200b
\\[ \\begin{gather*} f(y) = z^\\top \\nabla f(z) - f(z) \\\\ \\nabla f(z) = y \\end{gather*} \\] \u200b\u7ebf\u6027\u53d8\u6362\u200b\u7684\u200b\u5171\u8f6d\u200b \u200b\u8bbe\u200b\\(g(x) = f(Ax + b)\\)\uff0c\u200b\u5176\u4e2d\u200b\\(A\\in \\bbR^{n\\times n}\\)\u200b\u4e14\u200b\u6ee1\u200b\u79e9\u200b\uff0c\u200b\u5219\u200b
\\[ \\begin{aligned} g^*(y) &= \\sup_{x} (x^\\top y - f(Ax + b)) \\\\ &= \\sup_{x} [A^{-1}[(Ax + b) - b]]^\\top y - f(Ax + b) \\\\ &= \\sup_x [(A^{-1}(Ax + b))^\\top y - f(Ax + b)] - b^\\top A^{-\\top}y \\\\ &= \\sup_x [(Ax+b)^\\top (A^{-\\top}y) - f(Ax + b)] - b^\\top A^{-\\top}y \\\\ &= f^*(A^{-\\top}y) - b^\\top A^{-\\top}y \\end{aligned} \\] \u200b\u8bbe\u200b\\(h(x) = af(x) + b\\)\uff0c\u200b\u5219\u200b\uff1a
\\[ \\begin{aligned} h^*(y) &= \\sup_x y^\\top x - af(x) - b \\\\ &= \\sup_{x} a(a^{-1}y^\\top x - f(x)) - b \\\\ &= af^*(a^{-1}y) - b \\end{aligned} \\]"},{"location":"math/convex-optimization/convex-function/#_7","title":"\u62df\u51f8\u51fd\u6570","text":"\u200b\u82e5\u200b\u51fd\u6570\u200b\\(f\\)\u200b\u7684\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\\(\\{x|f(x)\\leq \\alpha\\}\\)\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(\\alpha\\)\u200b\u90fd\u200b\u4e3a\u200b\u51f8\u96c6\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u62df\u51f8\u51fd\u6570\u200b\u3002\u200b\u82e5\u200b\\(-f\\)\u200b\u4e3a\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u62df\u51f9\u51fd\u6570\u200b\u3002\u200b\u82e5\u200b\\(f\\)\u200b\u65e2\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u53c8\u200b\u662f\u200b\u62df\u51f9\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u62df\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u3002
\u200b\u6240\u6709\u200b\u7684\u200b\u51f8\u51fd\u6570\u200b\u90fd\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u3002\u200b\u4f46\u200b\u62df\u51f8\u51fd\u6570\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff0c\\(\\nabla f(x_0) = 0\\not \\Rightarrow f(x)\\geq f(x_0)\\)
"},{"location":"math/convex-optimization/convex-function/#_8","title":"\u6027\u8d28","text":"\u200b\u62df\u51f8\u51fd\u6570\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
-
\u200b\u51fd\u6570\u200b\\(f\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\mathbf{dom} f\\)\u200b\u662f\u200b\u51f8\u96c6\u200b\uff0c\u200b\u4e14\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b
\\[ f(\\theta x + (1 - \\theta)y)\\leq \\max\\{f(x), f(y)\\} \\] -
\u200b\u5bf9\u4e8e\u200b\u5b9a\u4e49\u200b\u5728\u200b\\(\\bbR\\)\u200b\u4e0a\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\\(f\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u5176\u4e2d\u200b\u4e4b\u4e00\u200b
- \\(f\\)\u200b\u662f\u200b\u5355\u8c03\u200b\u51fd\u6570\u200b
- \\(\\exists x_0\\)\uff0c\u200b\u5bf9\u4e8e\u200b\\(x\\geq x_0, f\\)\u200b\u975e\u51cf\u200b\uff0c\\(x\\leq x_0, f\\)\u200b\u975e\u589e\u200b
- \u200b\u5bf9\u4e8e\u200b\\(\\bbR\\rightarrow \\bbR\\)\u200b\u4e0a\u200b\u7684\u200b\u4efb\u610f\u200b\u5355\u8c03\u200b\u51fd\u6570\u200b\\(f\\)\uff0c\\(-f\\)\u200b\u4e5f\u200b\u662f\u200b\u5355\u8c03\u200b\u51fd\u6570\u200b\uff0c\u200b\u56e0\u6b64\u200b\\(f\\)\u200b\u662f\u200b\u62df\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_9","title":"\u4e00\u9636\u200b\u6761\u4ef6\u200b\u4e0e\u200b\u4e8c\u9636\u200b\u6761\u4ef6","text":"\uff08\u200b\u4e00\u9636\u200b\u6761\u4ef6\u200b\uff09\u200b\u5bf9\u4e8e\u200b\u5b9a\u4e49\u200b\u5728\u200b\u51f8\u96c6\u200b\u4e0a\u200b\u7684\u200b\u53ef\u5fae\u200b\u51fd\u6570\u200b\\(f: \\bbR^n\\rightarrow \\bbR, f\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b
\\[ \\forall x, y\\in \\mathbf{dom}f, f(y) \\leq f(x)\\Longrightarrow \\nabla f(x)^\\top (y - x)\\leq 0 \\] \u200b\u4e00\u9636\u200b\u6761\u4ef6\u200b\u7684\u200b\u51e0\u4f55\u200b\u89e3\u91ca\u200b \u200b\u6839\u636e\u200b\u62df\u51f8\u51fd\u6570\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(x\\)\uff0c\u200b\u5176\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\\(S_x = \\{y | f(y)\\leq f(x)\\}\\)\u200b\u5747\u200b\u4e3a\u200b\u51f8\u96c6\u200b\u3002
\u200b\u6839\u636e\u200b\u51f8\u96c6\u200b\u7684\u200b\u6027\u8d28\u200b\uff0c\u200b\u4efb\u4f55\u200b\u51f8\u96c6\u200b\u90fd\u200b\u80fd\u200b\u8868\u793a\u200b\u6210\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u5bf9\u5e94\u200b\u534a\u200b\u7a7a\u95f4\u200b\u7684\u200b\u4ea4\u96c6\u200b\u3002\u200b\u96c6\u5408\u200b\\(\\{y | \\nabla f(x)^\\top (y - x)\\leq 0\\}\\)\u200b\u662f\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\\(S_x\\)\u200b\u5728\u200b\\(x\\)\u200b\u5904\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u5bf9\u5e94\u200b\u7684\u200b\u534a\u200b\u7a7a\u95f4\u200b\u3002
\uff08\u200b\u4e8c\u9636\u200b\u6761\u4ef6\u200b\uff09\u200b\u5bf9\u4e8e\u200b\u5b9a\u4e49\u200b\u5728\u200b\u51f8\u96c6\u200b\u4e0a\u200b\u7684\u200b\u4e8c\u6b21\u200b\u53ef\u5fae\u200b\u51fd\u6570\u200b\\(f: \\bbR^n\\rightarrow \\bbR, f\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b
\\[ \\forall x\\in \\mathbf{dom} f, \\nabla f(x) = 0\\Longrightarrow \\nabla^2 f(x)\\succeq 0 \\] \u200b\u5373\u200b\\(f\\)\u200b\u5728\u200b\u68af\u5ea6\u200b\u4e3a\u200b\\(0\\)\u200b\u7684\u200b\u5730\u65b9\u200b\uff0c\u200b\u4e8c\u9636\u200b\u68af\u5ea6\u200b\u6b63\u5b9a\u200b\uff08\u200b\u975e\u8d1f\u200b\uff09\u3002
\u200b\u62df\u51f8\u51fd\u6570\u200b\u7684\u200b\u4e8c\u9636\u200b\u68af\u5ea6\u200b\u6700\u200b\u591a\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u8d1f\u200b\u7279\u5f81\u503c\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_10","title":"\u4fdd\u62df\u200b\u51f8\u200b\u8fd0\u7b97","text":"\u200b\u8bbe\u200b\\(f, g, f_1,\\ldots, f_k\\)\u200b\u4e3a\u200b\u62df\u51f8\u51fd\u6570\u200b\u3002\u200b\u5982\u672a\u200b\u6307\u660e\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u51fd\u6570\u200b\u5b9a\u4e49\u200b\u5728\u200b\\(\\bbR^n \\rightarrow \\bbR\\)\u200b\u4e0a\u200b\u3002\u200b\u4ee5\u4e0b\u200b\u51fd\u6570\u200b\u4e3a\u200b\u62df\u51f8\u51fd\u6570\u200b\uff1a
- \u200b\u975e\u8d1f\u200b\u52a0\u6743\u200b\u6700\u5927\u503c\u200b\uff1a\u200b\u8bbe\u200b\\(w_1, \\ldots, w_k\\geq 0, f' = \\max\\{w_1f_1(x), \\ldots, w_kf_k(x)\\}\\)\u200b\u4e3a\u200b\u62df\u51f8\u51fd\u6570\u200b\u3002
- \u200b\u590d\u5408\u200b\u51fd\u6570\u200b\uff1a\\(f' = g\\circ f\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5176\u4e2d\u200b\\(g: \\bbR\\rightarrow \\bbR\\)\u200b\u5355\u8c03\u200b\u975e\u51cf\u200b\u3002
- \u200b\u6700\u5c0f\u503c\u200b\uff1a\\(f(x, y): \\bbR^m\\times \\bbR^n\\rightarrow \\bbR\\)\u200b\u5173\u4e8e\u200b\\(x, y\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u51f8\u96c6\u200b\\(C, g(x) = \\inf_{y\\in C}f(x, y)\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#-","title":"\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570","text":"\u200b\u5b9a\u4e49\u200b\\(\\log 0 = -\\infty\\)\u3002\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u51fd\u6570\u200b\\(f: \\bbR^n\\rightarrow \\bbR_{\\plus}\\)\uff0c\u200b\u6709\u200b\\(\\log f\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\u79f0\u200b\\(f\\)\u200b\u4e3a\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\u3002\u200b\u82e5\u200b\\(1 / f\\)\u200b\u4e3a\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002
\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff08\u200b\u6307\u6570\u51fd\u6570\u200b\\(e^x\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff09\uff0c\u200b\u975e\u8d1f\u200b\u7684\u200b\u51f9\u200b\u51fd\u6570\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\uff0c\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\u662f\u200b\u62df\u51f9\u51fd\u6570\u200b\u3002
\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\u7684\u200b\u5145\u8981\u6761\u4ef6\u200b \\(f: \\bbR^n \\rightarrow \\bbR\\)\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b
\\[ f(\\theta x + (1 - \\theta)y)\\geq f^\\theta(x)f^{1 - \\theta}(y) \\] \u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(x, y\\in \\mathbf{dom} f, 0\\leq\\theta\\leq 1\\)\u200b\u6210\u7acb\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u4e8c\u6b21\u200b\u53ef\u5fae\u200b\u7684\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\\(f\\)\uff0c\u200b\u6709\u200b
\\[ f(x)\\nabla^2 f(x)\\preceq \\nabla f(x)^\\top \\nabla f(x) \\] \u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(x\\in \\mathbf{dom} f\\)\u200b\u6210\u7acb\u200b\uff0c\u200b\u53cd\u4e4b\u4ea6\u7136\u200b\u3002
\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\u4e4b\u200b\u548c\u200b\u4ecd\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\uff08\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\u4e4b\u200b\u548c\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\uff09\uff0c\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u200b\uff08\u200b\u51f9\u200b\uff09\u200b\u51fd\u6570\u200b\u7684\u200b\u4e58\u79ef\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u200b\uff08\u200b\u51f9\u200b\uff09\u200b\u51fd\u6570\u200b\u3002
\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\u4e4b\u200b\u548c\u200b\u6027\u8d28\u200b\u7684\u200b\u62d3\u5c55\u200b \u200b\u8bbe\u200b\\(f(x, y): \\bbR^n\\times \\bbR^m\\rightarrow \\bbR\\)\u200b\u6ee1\u8db3\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(y\\)\uff0c\\(f(x, y)\\)\u200b\u5173\u4e8e\u200b\\(x\\)\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b
\\[ \\int_{y} f(x, y)\\dd y \\] \u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_11","title":"\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u5b9a\u4e49\u200b\u7684\u200b\u51f8\u6027","text":"\u200b\u8bbe\u200b\\(K\\)\u200b\u4e3a\u200b\u6b63\u5e38\u200b\u9525\u200b\uff0c\u200b\u5b9a\u4e49\u200b\\(f(x)\\)\u200b\u7684\u200b\u589e\u51cf\u200b\u6027\u200b\u5982\u4e0b\u200b\u3002
- \\(f\\)\u200b\u4e3a\u200b\\(K\\)-\u200b\u589e\u200b\uff0c\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b\\(x\\succeq_K y, x\\not = y\\Longrightarrow f(x)\\succ_K f(y)\\)\uff0c\u200b\u82e5\u200b\\(-f\\)\u200b\u4e3a\u200b\\(K\\)-\u200b\u589e\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\\(K\\)-\u200b\u975e\u200b\u589e\u51fd\u6570\u200b\u3002
- \\(f\\)\u200b\u4e3a\u200b\\(K\\)-\u200b\u975e\u51cf\u200b\uff0c\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b\\(x\\succeq_K y\\Longrightarrow f(x)\\succeq_K f(y)\\)
\\(f\\)\u200b\u662f\u200b\\(K\\)-\u200b\u975e\u51cf\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\nabla f\\succeq_{K^*} 0\\)\uff0c\\(f\\)\u200b\u662f\u200b\\(K\\)-\u200b\u589e\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\nabla f\\succ_{K^*} 0\\)\u3002
\\(f\\)\u200b\u662f\u200b\\(K\\)-\u200b\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\forall x, y, \\theta f(x) + (1 - \\theta) f(y)\\succeq_K f(\\theta x + (1 - \\theta) y)\\)
\\(f\\)\u200b\u662f\u200b\u4e25\u683c\u200b\\(K\\)-\u200b\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\forall x\\not = y, \\theta f(x) + (1 - \\theta) f(y)\\succ_K f(\\theta x + (1 - \\theta) y)\\)
\\(f\\)\u200b\u662f\u200b\\(K\\)-\u200b\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\forall w\\succeq_{K^*} 0, w^\\top f(x)\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff1b\\(f\\)\u200b\u662f\u200b\u4e25\u683c\u200b\\(K\\)-\u200b\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\forall w\\succeq_{K^*} 0, w\\not = 0, w^\\top f\\)\u200b\u662f\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/","title":"\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898","text":"\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u662f\u200b\u6307\u200b\u5728\u200b\u4e00\u5b9a\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff08\u200b\u7b49\u5f0f\u200b\u6216\u200b\u4e0d\u7b49\u5f0f\u200b\uff09\u200b\u4e0b\u200b\u4f7f\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u53d6\u5f97\u200b\u6700\u5927\u200b\uff08\u200b\u6700\u5c0f\u200b\uff09\u200b\u503c\u200b\u7684\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_2","title":"\u4e00\u822c\u200b\u4f18\u5316\u200b\u95ee\u9898","text":"\\(\\eqref{1}\\)\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
\\[ \\label{1} \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & f_i(x)\\leq 0 & i = \\oneto m\\\\ & h_i(x) = 0 & i = \\oneto p \\end{aligned} }} \\] \u200b\u5f0f\u200b\\(\\eqref{1}\\)\u200b\u4e2d\u200b\uff0c\\(x\\in \\bbR^n\\)\u200b\u4e3a\u200b\u4f18\u5316\u200b\u53d8\u91cf\u200b\uff0c\\(f_0(x): \\bbR^n \\ra \\bbR\\)\u200b\u4e3a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\uff0c\u200b\u4e0d\u7b49\u5f0f\u200b\\(f_i(x)\\leq 0\\)\u200b\u79f0\u4e3a\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\uff0c\\(h_0(x) = 0\\)\u200b\u79f0\u4e3a\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u3002\\(m = p = 0\\)\u200b\u7684\u200b\u95ee\u9898\u200b\u79f0\u4e3a\u200b\u65e0\u7ea6\u675f\u200b\u95ee\u9898\u200b\u3002
\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u548c\u200b\u5168\u4f53\u200b\u7ea6\u675f\u200b\u51fd\u6570\u200b\u7684\u200b\u5b9a\u4e49\u57df\u200b\u4ea4\u96c6\u200b\u662f\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u5b9a\u4e49\u57df\u200b\\(\\calD\\)\uff0c\u200b\u5f53\u200b\u5b58\u5728\u200b\\(x\\)\u200b\u6ee1\u8db3\u200b\u6240\u6709\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u65f6\u200b\uff0c\u200b\u79f0\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u662f\u200b\u53ef\u884c\u200b\u7684\u200b\uff0c\u200b\u5426\u5219\u200b\u662f\u200b\u4e0d\u200b\u53ef\u884c\u200b\u7684\u200b\u3002\u200b\u5b9a\u4e49\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u53ef\u884c\u200b\u57df\u200b\u4e3a\u200b\u5168\u4f53\u200b\u53ef\u884c\u200b\u70b9\u200b\u7684\u200b\u96c6\u5408\u200b\u3002
\\[ X = \\{x | f_i(x)\\leq 0, h_j(x) = 0, i = \\oneto m, j = \\oneto p\\} \\] \u200b\u5bf9\u4e8e\u200b\u6700\u5c0f\u5316\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u5176\u200b\u6700\u4f18\u200b\u503c\u4e3a\u200b
\\[ p^\\ast = \\inf\\{f_0(x) | x\\in X\\} \\] \u200b\u53ef\u884c\u200b\u57df\u200b\u4e3a\u200b\u7a7a\u96c6\u200b\u7684\u200b\u60c5\u51b5\u200b
\u200b\u6211\u4eec\u200b\u5141\u8bb8\u200b\\(p^*\\)\u200b\u53d6\u200b\\(\\pm\\infty\\)\uff0c\u200b\u5e76\u4e14\u200b\u5b9a\u4e49\u200b
\\[ \\begin{aligned} \\inf\\varnothing &= \\infty \\\\ \\sup\\varnothing &= -\\infty \\end{aligned} \\] \u200b\u5982\u679c\u200b\u5b58\u5728\u200b\u4e00\u7ec4\u200b\u53ef\u884c\u200b\u89e3\u200b\\(x_1, \\ldots, x_k\\)\u200b\u6ee1\u8db3\u200b\\(k\\ra\\infty\\)\u200b\u65f6\u200b\\(f_0(x_k)\\ra -\\infty\\)\uff0c\u200b\u79f0\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u65e0\u200b\u4e0b\u754c\u200b\u3002
\u200b\u5982\u679c\u200b\u5b58\u5728\u200b\\(x^*\\in X, f_0(x^*) = p^*\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\\(x^*\\)\u200b\u4e3a\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u5168\u4f53\u200b\u6700\u4f18\u200b\u89e3\u200b\u7684\u200b\u96c6\u5408\u200b\u4e3a\u200b\u6700\u4f18\u200b\u96c6\u200b\u3002\u200b\u82e5\u200b\u6700\u4f18\u200b\u96c6\u975e\u7a7a\u200b\uff0c\u200b\u79f0\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u53ef\u89e3\u200b\u3002\u200b\u5f53\u200b\u95ee\u9898\u200b\u4e0d\u53ef\u200b\u89e3\u65f6\u200b\uff0c\u200b\u96c6\u5408\u200b\\(\\{x | x\\in X, f_0(x) \\leq p^* + \\varepsilon\\}\\)\u200b\u79f0\u4e3a\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\\(\\varepsilon\\)-\u200b\u6b21\u4f18\u200b\u96c6\u200b\u3002
\u200b\u6700\u4f18\u200b\u503c\u200b\u4e0d\u53ef\u200b\u8fbe\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b
\u200b\u8bbe\u200b\u7ea6\u675f\u200b\u95ee\u9898\u200b\u4e3a\u200b\\(\\eqref{2}\\)\uff0c\u200b\u4ee5\u4e0b\u200b\u95ee\u9898\u200b\u90fd\u200b\u662f\u200b\u6700\u4f18\u200b\u503c\u200b\u4e0d\u53ef\u200b\u8fbe\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff1a
\\[ \\optim{\\min}{f_0(x)}{x > 0} \\label{2} \\] - \u200b\u5f53\u200b\\(f_0(x) = 1/x\\)\u200b\u65f6\u200b\uff0c\\(p^* = 0\\)\uff0c\u200b\u4f46\u200b\u6700\u4f18\u200b\u96c6\u4e3a\u200b\u7a7a\u200b\u3002
- \u200b\u5f53\u200b\\(f_0(x) = -\\log x\\)\u200b\u65f6\u200b\uff0c\\(p^* = -\\infty\\)\uff0c\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u65e0\u200b\u4e0b\u754c\u200b\u3002
\u200b\u5982\u679c\u200b\\(x_0\\)\u200b\u6ee1\u8db3\u200b\\(\\eqref{3}\\)\uff0c\u200b\u79f0\u4e3a\u200b\u5c40\u90e8\u200b\u6700\u4f18\u200b\u3002
\\[ \\begin{gathered} & x_0\\in X \\\\ & \\forall z\\in X, \\Vert z - x_0\\Vert_2\\leq R, f_0(z)\\geq f_0(x_0) \\end{gathered} \\label{3} \\] \u200b\u82e5\u200b\\(f_i(x^*) = 0\\)\uff0c\u200b\u79f0\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\\(f_i\\)\u200b\u5728\u200b\u6700\u4f18\u200b\u503c\u5904\u200b\u8d77\u200b\u4f5c\u7528\u200b\uff0c\u200b\u5426\u5219\u200b\u4e0d\u8d77\u4f5c\u7528\u200b\u3002\u200b\u5982\u679c\u200b\u4ece\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e2d\u200b\u5220\u9664\u200b\u67d0\u4e2a\u200b\u7ea6\u675f\u200b\u4e0d\u4f1a\u200b\u5f71\u54cd\u200b\u53ef\u884c\u200b\u57df\u200b\uff0c\u200b\u79f0\u200b\u7ea6\u675f\u200b\u5197\u4f59\u200b\u3002
\u200b\u53ef\u884c\u6027\u200b\u95ee\u9898\u200b
\u200b\u5f53\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\\(f_0(x) = 0\\)\u200b\u65f6\u200b\uff0c\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u662f\u200b\u4e00\u4e2a\u200b\u53ef\u884c\u6027\u200b\u95ee\u9898\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b
\\[ \\begin{gathered} p^* = -\\infty \\Lolra X = \\varnothing \\\\ p^* = 0 \\Lolra X \\not = \\varnothing \\end{gathered} \\] \u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\uff1a
- \u200b\u7ea6\u675f\u200b\u7684\u200b\u53f3\u7aef\u200b\u9879\u4e3a\u200b\u96f6\u200b
- \u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\u4e3a\u200b\u6781\u5c0f\u200b\u5316\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b
- \u200b\u9664\u4e86\u200b\u975e\u8d1f\u200b\u7ea6\u675f\u200b\u4ee5\u5916\u200b\uff0c\u200b\u4e0d\u200b\u5305\u542b\u200b\\(\\geq\\)\u200b\u7ea6\u675f\u200b
"},{"location":"math/convex-optimization/convex-optimization/#_3","title":"\u95ee\u9898\u200b\u7684\u200b\u7b49\u4ef7\u200b\u53d8\u6362","text":"\u200b\u4e00\u4e9b\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u6027\u8d28\u200b\u53ef\u80fd\u200b\u4e0d\u591f\u200b\u5f3a\u200b\u5bfc\u81f4\u200b\u96be\u4ee5\u200b\u8fdb\u884c\u200b\u4f18\u5316\u200b\uff0c\u200b\u6b64\u65f6\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e00\u4e9b\u200b\u7b49\u4ef7\u200b\u53d8\u6362\u200b\uff0c\u200b\u5c06\u200b\u539f\u672c\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u8f6c\u53d8\u200b\u4e3a\u200b\u6027\u8d28\u200b\u8f83\u5f3a\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_4","title":"\u53d8\u91cf\u200b\u4ee3\u6362","text":"\u200b\u8bbe\u200b\u51fd\u6570\u200b\\(\\phi: \\bbR^n\\ra\\bbR^n\\)\u200b\u662f\u200b\u53cc\u5c04\u200b\uff0c\u200b\u4e14\u200b\u51fd\u6570\u200b\u7684\u200b\u503c\u57df\u200b\u5305\u542b\u200b\u95ee\u9898\u200b\u7684\u200b\u5b9a\u4e49\u57df\u200b\uff0c\u200b\u5219\u200b\u5982\u4e0b\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e0e\u200b\u539f\u200b\u95ee\u9898\u200b\\(\\eqref{1}\\)\u200b\u7b49\u4ef7\u200b\uff1a
\\[ \\optim{\\min}{f_0(\\phi(z))}{\\cases{ \\begin{aligned} & f_i(\\phi(z))\\leq 0 & i = \\oneto m \\\\ & h_i(\\phi(z)) = 0 & i = \\oneto p \\end{aligned} }} \\]"},{"location":"math/convex-optimization/convex-optimization/#_5","title":"\u51fd\u6570\u200b\u4ee3\u6362","text":"\u200b\u8bbe\u200b\u51fd\u6570\u200b\\(\\psi_0: \\bbR\\ra\\bbR\\)\u200b\u5355\u8c03\u200b\u9012\u589e\u200b\uff0c\\(\\psi_{1}, \\ldots, \\psi_{m}\\)\u200b\u6ee1\u8db3\u200b\\(u\\leq 0\\Lora \\psi_{i}(u) = 0\\)\uff0c\\(\\phi_{1}, \\ldots, \\psi_{p}\\)\u200b\u6ee1\u8db3\u200b\\(u = 0\\Lora \\phi_i(u) = 0\\)\uff0c\u200b\u5219\u200b\u5982\u4e0b\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e0e\u200b\u539f\u200b\u95ee\u9898\u200b\\(\\eqref{1}\\)\u200b\u7b49\u4ef7\u200b\uff1a
\\[ \\optim{\\min}{\\psi_0(f_0(x))}{\\cases{ \\begin{aligned} & \\psi_i(f_i(z))\\leq 0 & i = \\oneto m \\\\ & \\phi_i(h_i(z)) = 0 & i = \\oneto p \\end{aligned} }} \\]"},{"location":"math/convex-optimization/convex-optimization/#_6","title":"\u6d88\u9664\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f","text":"\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u52a0\u5165\u200b\u975e\u8d1f\u200b\u53d8\u91cf\u200b\u7684\u200b\u65b9\u5f0f\u200b\u5c06\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u548c\u200b\u975e\u8d1f\u200b\u7ea6\u675f\u200b\u3002
\\[ \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & s_i\\geq 0 & i = \\oneto m \\\\ & f_i(x) + s_i 0 & i = \\oneto m \\\\ & h_i(x) = 0 & i = \\oneto p \\end{aligned} }} \\] \u200b\u79f0\u200b\\(s_i\\)\u200b\u4e3a\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u5171\u6709\u200b\\(n + m\\)\u200b\u4e2a\u200b\u4f18\u5316\u200b\u53d8\u91cf\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_7","title":"\u6d88\u9664\u200b\u7b49\u5f0f\u200b\u7ea6\u675f","text":"\u200b\u8bbe\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u7684\u200b\u89e3\u96c6\u200b\u53ef\u4ee5\u200b\u7528\u200b\u53cc\u5c04\u200b\\(\\phi: \\bbR^k\\ra\\bbR^n\\)\u200b\u8868\u793a\u200b\uff0c\u200b\u5219\u200b\u539f\u200b\u95ee\u9898\u200b\\(\\eqref{1}\\)\u200b\u4e0e\u200b\u5982\u4e0b\u200b\u95ee\u9898\u200b\u7b49\u4ef7\u200b\uff1a
\\[ \\optim{\\min}{f_0(\\phi(z))}{f_i(\\phi(z))\\leq 0} \\] \u200b\u5bf9\u4e8e\u200b\u7ebf\u6027\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\\(Ax - b = 0\\)\uff0c\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\\(\\phi(z) = Fz + x_0\\)\uff0c\u200b\u5176\u4e2d\u200b\\(x_0\\)\u200b\u4e3a\u200b\\(Ax - b = 0\\)\u200b\u7684\u200b\u4e00\u4e2a\u200b\u7279\u89e3\u200b\uff0c\\(F\\)\u200b\u4e3a\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u7684\u200b\u96f6\u7a7a\u95f4\u200b\u7684\u200b\u4e00\u7ec4\u200b\u57fa\u200b\u6784\u6210\u200b\u7684\u200b\u77e9\u9635\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_8","title":"\u4f18\u5316\u200b\u90e8\u5206\u200b\u53d8\u91cf","text":"\u200b\u6ce8\u610f\u200b\u5230\u200b\\(\\inf_{x}\\inf{y} f(x, y) = \\inf_{(x, y)}f(x, y) = \\inf_{y}\\inf_x f(x, y)\\)\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5148\u200b\u4f18\u5316\u200b\u4e00\u90e8\u5206\u200b\u53d8\u91cf\u200b\uff0c\u200b\u518d\u200b\u4f18\u5316\u200b\u53e6\u200b\u4e00\u90e8\u5206\u200b\u53d8\u91cf\u200b\uff0c\u200b\u7531\u6b64\u200b\u5f97\u5230\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e0e\u200b\u539f\u200b\u95ee\u9898\u200b\\(\\eqref{1}\\)\u200b\u7b49\u4ef7\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_9","title":"\u4e0a\u5883\u200b\u56fe\u200b\u95ee\u9898","text":"\u200b\u5982\u4e0b\u200b\u95ee\u9898\u200b\u4e0e\u200b\u539f\u200b\u95ee\u9898\u200b\\(\\eqref{1}\\)\u200b\u7b49\u4ef7\u200b\uff1a
\\[ \\optim{\\min}{t}{\\cases{ \\begin{aligned} & f_0(x) - t\\leq 0 \\\\ & f_i(x)\\leq 0 & i = \\oneto m \\\\ & h_i(x) = 0 & i= \\oneto p \\end{aligned} }} \\]"},{"location":"math/convex-optimization/convex-optimization/#_10","title":"\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u53ca\u5176\u200b\u6027\u8d28","text":"\\(\\eqref{4}\\)\u200b\u662f\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff1a
\\[ \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & f_i(x)\\leq 0 & i = \\oneto m \\\\ & A^\\top x = b \\end{aligned} }} \\label{4} \\] \u200b\u5e76\u4e14\u200b\uff0c\u200b\u6709\u200b
- \\(A\\in \\bbR^{p\\times n}, b\\in \\bbR^p\\)
- \\(f_i, i\\in 0, \\ldots, m\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u5982\u679c\u200b\\(f_0(x)\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\u4e3a\u200b\u62df\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_11","title":"\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u6027\u8d28","text":"\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \u200b\u53ef\u884c\u200b\u57df\u200b\u662f\u200b\u51f8\u96c6\u200b
- \u200b\u4efb\u610f\u200b\u5c40\u90e8\u200b\u6700\u4f18\u200b\u89e3\u90fd\u200b\u662f\u200b\u5168\u5c40\u200b\u6700\u4f18\u200b\u89e3\u200b
- \u200b\u5982\u679c\u200b\\(f_0\\)\u200b\u53ef\u5fae\u200b\uff0c\u200b\u5219\u200b\\(\\forall x\\in X, \\nabla f_0(x)^\\top (x - x^*)\\geq 0\\)
- \u200b\u5bf9\u4e8e\u200b\u65e0\u7ea6\u675f\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u65b9\u7a0b\u200b\\(\\nabla f_0(x) = 0\\)\u200b\u7684\u200b\u89e3\u5373\u200b\u4e3a\u200b\u6700\u4f18\u200b
- \u200b\u5bf9\u4e8e\u200b\u4ec5\u200b\u5305\u542b\u200b\u7ebf\u6027\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\\(Ax - b = 0\\)\u200b\u7684\u200b\u95ee\u9898\u200b\uff0c\u200b\u65b9\u7a0b\u200b\\(\\nabla f_0(x)^\\top v = 0, v\\in \\ker A\\)\u200b\u7684\u200b\u89e3\u4e3a\u200b\u6700\u4f18\u200b
- \u200b\u5bf9\u4e8e\u200b\u4ec5\u200b\u5305\u542b\u200b\u7b26\u53f7\u200b\u7ea6\u675f\u200b\\(x\\succeq 0\\)\u200b\u7684\u200b\u95ee\u9898\u200b\uff0c\\(\\nabla f_0(x)\\succeq 0, \\nabla f_0(x)^\\top x = 0\\)\u200b\u7684\u200b\u89e3\u5373\u200b\u4e3a\u200b\u6700\u4f18\u200b\uff08\u200b\u89e3\u200b\u548c\u200b\u6b64\u5904\u200b\u7684\u200b\u68af\u5ea6\u200b\u81f3\u5c11\u200b\u6709\u200b\u4e00\u4e2a\u200b\u5206\u91cf\u200b\u4e3a\u200b\u96f6\u200b\uff09\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_12","title":"\u4fdd\u51f8\u200b\u8fd0\u7b97","text":"\u200b\u5bf9\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u8fdb\u884c\u200b\u5982\u4e0b\u200b\u53d8\u6362\u200b\uff0c\u200b\u5f97\u5230\u200b\u7684\u200b\u95ee\u9898\u200b\u4ecd\u7136\u200b\u662f\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b
- \u200b\u6d88\u9664\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b
- \u200b\u5f15\u5165\u200b\uff08\u200b\u7ebf\u6027\u200b\uff09\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b
- \u200b\u5f15\u5165\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b
- \u200b\u8f6c\u5316\u200b\u4e3a\u200b\u4e0a\u200b\u5883\u56fe\u200b\u95ee\u9898\u200b
- \u200b\u5206\u6b65\u200b\u4f18\u5316\u200b\u53d8\u91cf\u200b
"},{"location":"math/convex-optimization/convex-optimization/#_13","title":"\u62df\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u6027\u8d28","text":"\u200b\u62df\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u5b58\u5728\u200b\uff08\u200b\u4e0d\u662f\u200b\u5168\u5c40\u200b\u6700\u4f18\u200b\u7684\u200b\uff09\u200b\u5c40\u90e8\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u53ef\u5fae\u200b\u7684\u200b\u62df\u51f8\u51fd\u6570\u200b\\(f_0\\)\uff0c\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\u4ecd\u7136\u200b\u6210\u7acb\u200b\uff1a
\\[ \\forall x\\in X, \\nabla f_0(x)^\\top (x - x^*)\\geq 0 \\] \u200b\u4f46\u200b\u4f7f\u5f97\u200b\\(\\forall x\\in X, \\nabla f_0(x)^\\top (x - y)\\geq 0\\)\u200b\u6210\u7acb\u200b\u7684\u200b\\(y\\)\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u5168\u5c40\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002\u200b\u62df\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u200b\u7684\u200b\u5145\u8981\u6761\u4ef6\u200b\u4e3a\u200b
\\[ \\nabla f_0(x)^\\top (y - x) > 0, y\\in X - \\{x\\} \\] \u200b\u62df\u51f8\u51fd\u6570\u200b\u7684\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u662f\u200b\u51f8\u96c6\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e00\u7ec4\u200b\u51f8\u51fd\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u4e0d\u7b49\u5f0f\u200b\u6761\u4ef6\u200b\u8868\u793a\u200b\u5176\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\u3002\u200b\u7531\u6b64\u200b\uff0c\u200b\u62df\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u53ef\u4ee5\u200b\u5bf9\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u8fdb\u884c\u200b\u4e8c\u5206\u200b\u4ee5\u200b\u6784\u9020\u200b\u76f8\u5e94\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u6c42\u89e3\u200b\u6700\u4f18\u200b\u503c\u200b\\(p^*\\)\u3002\u200b\u5bf9\u4e8e\u200b\u5f62\u200b\u5982\u200b\\(\\eqref{4}\\)\u200b\u7684\u200b\u62df\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u6784\u9020\u200b\u53ef\u884c\u6027\u200b\u95ee\u9898\u200b\\(\\eqref{5}\\)\uff1a
\\[ \\optim{\\min}{0}{\\cases{ \\begin{aligned} & \\phi(x; t)\\leq 0 \\\\ & f_i(x)\\leq 0 & i = \\oneto m \\\\ & Ax=b \\end{aligned} }} \\label{5} \\] \u200b\u5176\u4e2d\u200b\\(\\phi(x, t): \\bbR^n\\times \\bbR\\ra\\bbR\\)\u200b\u662f\u200b\u6ee1\u8db3\u200b\\(f_0(x) \\leq t\\Lolra \\phi(x, t)\\leq 0\\)\u200b\u7684\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u5982\u679c\u200b\u5bf9\u4e8e\u200b\u67d0\u4e2a\u200b\\(t\\)\uff0c\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\\(\\eqref{5}\\)\u200b\u53ef\u884c\u200b\uff0c\u200b\u5219\u200b\u5728\u200b\\(f_0(x) \\geq t\\)\u200b\u7684\u200b\u533a\u95f4\u200b\u5185\u200b\u5bfb\u627e\u200b\u6700\u4f18\u200b\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u5728\u200b\\(f_0(x) < t\\)\u200b\u7684\u200b\u533a\u95f4\u200b\u5185\u200b\u5bfb\u627e\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#-","title":"\u51e0\u4f55\u200b\u89c4\u5212\u200b - \u200b\u8f6c\u5316\u200b\u4e3a\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898","text":"\u200b\u5f62\u200b\u5982\u200b\\(\\eqref{5}\\)\u200b\u7684\u200b\u51fd\u6570\u200b\u79f0\u4e3a\u200b\u5355\u9879\u5f0f\u200b\uff0c\u200b\u5355\u9879\u5f0f\u200b\u7684\u200b\u548c\u200b\u79f0\u4e3a\u200b\u6b63\u9879\u200b\u5f0f\u200b\u3002
\\[ f(x) = c\\prod_{i=1}^n x_i^{a_i} \\label{5} \\] \u200b\u5f0f\u200b\u4e2d\u200b\uff0c\\(x\\in \\bbR^n_{\\plus\\plus}, c > 0\\)\u3002
\u200b\u5f62\u200b\u5982\u200b\\(\\eqref{6}\\)\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e3a\u200b\u51e0\u4f55\u200b\u89c4\u5212\u200b\uff08GP\uff09
\\[ \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & f_i(x)\\leq 1 & i = \\oneto m \\\\ & h_i(x) = 1 & i = \\oneto p \\end{aligned} }} \\label{6} \\] \u200b\u5176\u4e2d\u200b\\(f_i\\)\u200b\u4e3a\u200b\u6b63\u200b\u9879\u5f0f\u200b\uff0c\\(h_i\\)\u200b\u4e3a\u200b\u5355\u9879\u5f0f\u200b\u3002
\u200b\u51e0\u4f55\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u4e0d\u662f\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u4f46\u662f\u200b\u53ef\u4ee5\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u7b49\u4ef7\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_14","title":"\u4e00\u4e9b\u200b\u5e38\u89c1\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898","text":""},{"location":"math/convex-optimization/convex-optimization/#_15","title":"\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898","text":"\u200b\u5982\u679c\u200b\\(\\eqref{4}\\)\u200b\u4e2d\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u548c\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u90fd\u200b\u662f\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u65f6\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e3a\u200b\u7ebf\u6027\u89c4\u5212\u200b\uff08LP\uff09\u3002
\\[ \\optim{\\min}{c^\\top x + d}{\\cases{ \\begin{aligned} & Gx\\preceq h \\\\ & Ax = b \\end{aligned} }} \\] \u200b\u6d88\u9664\u200b\u7ebf\u6027\u89c4\u5212\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e2d\u200b\u7684\u200b\u5e38\u6570\u200b\u9879\u200b\u3001\u200b\u5f15\u5165\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\u4ee5\u200b\u6d88\u9664\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u3001\u200b\u4f7f\u7528\u200b\u975e\u8d1f\u200b\u53d8\u91cf\u200b\u8868\u793a\u200b\u65e0\u7ea6\u675f\u200b\u53d8\u91cf\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\uff1a
\\[ \\optim{\\min}{c^\\top x}{\\cases{ \\begin{aligned} & A^\\top x = b \\\\ & x\\succeq 0 \\end{aligned} }} \\label{7} \\] \u200b\u5982\u679c\u200b\\(\\eqref{4}\\)\u200b\u4e2d\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u662f\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u4e4b\u200b\u6bd4\u200b\uff0c\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u65f6\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\uff0c\u200b\u6b64\u65f6\u200b\u5f97\u5230\u200b\u7ebf\u6027\u200b\u5206\u5f0f\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u3002
\\[ \\optim{\\min}{\\frac{c^\\top x + d}{e^\\top x + f}}{\\cases{ \\begin{aligned} & Gx\\preceq h \\\\ & Ax = b \\end{aligned} }} \\] \u200b\u7ebf\u6027\u200b\u5206\u5f0f\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u662f\u200b\u62df\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8f6c\u5316\u200b\u5982\u4e0b\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b
\\[ \\optim{\\min}{c^\\top y + dz}{\\cases{ \\begin{aligned} & Gy - hz\\preceq 0 \\\\ & Ay - bz = 0 \\\\ & e^\\top y + fz = 1 \\\\ & z\\geq 0 \\end{aligned} }} \\] \u200b\u7531\u4e8e\u200b\u4e00\u7ec4\u200b\u62df\u51f8\u51fd\u6570\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u4ecd\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u7ebf\u6027\u200b\u5206\u5f0f\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u66ff\u6362\u200b\u4e3a\u200b\u4e00\u200b\u7ec4\u5206\u200b\u5f0f\u200b\u51fd\u6570\u200b\u7684\u200b\u6700\u5927\u503c\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4ecd\u7136\u200b\u662f\u200b\u62df\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_16","title":"\u4e8c\u6b21\u200b\u4f18\u5316\u200b\u95ee\u9898","text":"\u200b\u5982\u679c\u200b\\(\\eqref{4}\\)\u200b\u4e2d\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u548c\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u90fd\u200b\u662f\u200b\u51f8\u200b\u4e8c\u6b21\u200b\u578b\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e3a\u200b\u4e8c\u6b21\u200b\u7ea6\u675f\u200b\u4e8c\u6b21\u200b\u89c4\u5212\u200b\uff08QCQP\uff09\u200b\u95ee\u9898\u200b\u3002
\\[ \\optim{\\min}{\\frac 12x^\\top P_0x + q_0^\\top x + r}{\\cases{ \\begin{aligned} & \\frac 12x^\\top P_ix + q_i^\\top x + r_i\\leq 0 & i = \\oneto m \\\\ & Ax = b \\end{aligned} }} \\label{8} \\] \u200b\u5f0f\u200b\u4e2d\u200b\\(P_i\\in \\bbS^n_\\plus, q_i\\in \\bbR^n, A\\in \\bbR^{p\\times n}\\)\u3002
\u200b\u5982\u679c\u200b\\(\\eqref{8}\\)\u200b\u4e2d\u200b\u7684\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u662f\u200b\u7ebf\u6027\u200b\u7684\u200b\uff0c\u200b\u5219\u200b\u79f0\u4e3a\u200b\u4e8c\u6b21\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\uff08QP\uff09\u3002
\\[ \\optim{\\min}{\\frac 12x^\\top Px + q^\\top x + r}{\\cases{ \\begin{aligned} & Gx\\preceq h \\\\ & Ax = b \\end{aligned} }} \\label{9} \\] \u200b\u5f0f\u200b\u4e2d\u200b\\(G\\in \\bbR^{m\\times n}\\)
"},{"location":"math/convex-optimization/convex-optimization/#_17","title":"\u4e8c\u9636\u200b\u9525\u200b\u89c4\u5212","text":"\u200b\u5f53\u200b\\(\\eqref{4}\\)\u200b\u4e2d\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e3a\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\uff0c\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u6784\u6210\u200b\u4e8c\u9636\u200b\u51f8\u9525\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u662f\u200b\u4e8c\u9636\u200b\u9525\u200b\u89c4\u5212\u200b\uff08SOCP\uff09\u3002
\\[ \\optim{\\min}{f^\\top x}{\\cases{ \\begin{aligned} & \\Vert A_ix + b\\Vert_2\\leq c_i^\\top x + d_i & i = \\oneto m \\\\ & Fx = g \\end{aligned} }} \\label{10} \\] \u200b\u79f0\u200b\\(\\Vert A_ix + b\\Vert_2\\leq c_i^\\top x + d_i\\)\u200b\u4e3a\u200b\u4e8c\u9636\u200b\u9525\u200b\u7ea6\u675f\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_18","title":"\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u4e0b\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898","text":"\u200b\u672c\u200b\u8282\u200b\u8ba8\u8bba\u200b\\(f_i: \\bbR^n\\ra\\bbR^{k_i}\\)\u200b\u5728\u200b\\(\\preceq_{K_i}\\)\u200b\u60c5\u5f62\u200b\u4e0b\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_19","title":"\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f","text":"\u200b\u5f62\u200b\u5982\u4e0b\u200b\u5f0f\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u79f0\u4e3a\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
\\[ \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & f_i\\preceq_{K_i} 0 & i = \\oneto m \\\\ & Ax = b \\end{aligned} }} \\] \u200b\u5f0f\u200b\u4e2d\u200b\\(f_0: \\bbR^n\\ra\\bbR\\)\uff0c\\(K_i\\subseteq \\bbR^{k_i}\\)\u200b\u4e3a\u200b\u6b63\u5e38\u200b\u9525\u200b\uff0c\\(f_i: \\bbR^n\\ra\\bbR^{k_i}\\)\u200b\u4e3a\u200b\\(K_i\\)-\u200b\u51f8\u51fd\u6570\u200b\u3002\u200b\u5927\u591a\u6570\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u7ed3\u8bba\u200b\u5728\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u4e0b\u200b\u4ecd\u7136\u200b\u6210\u7acb\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_20","title":"\u9525\u200b\u89c4\u5212","text":"\u200b\u9525\u200b\u89c4\u5212\u200b\u662f\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b
\\[ \\optim{\\min}{c^\\top x}{\\cases{ \\begin{aligned} & Fx + g\\preceq_K 0 \\\\ & Ax = b \\end{aligned} }} \\] \u200b\u5f53\u200b\\(K = \\bbR^n_{\\plus\\plus}\\)\u200b\u65f6\u200b\uff0c\u200b\u9525\u200b\u89c4\u5212\u200b\u9000\u5316\u200b\u4e3a\u200bLP\u3002\u200b\u4eff\u7167\u200bLP\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u7684\u200b\u9525\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u3002
\\[ \\optim{\\min}{c^\\top x}{\\cases{ \\begin{aligned} & x\\succeq_K 0 \\\\ & Ax = b \\end{aligned} }} \\]"},{"location":"math/convex-optimization/convex-optimization/#_21","title":"\u534a\u5b9a\u200b\u89c4\u5212","text":"\u200b\u5f53\u200b\\(K\\in \\bbS^k_{\\plus}\\)\u200b\u65f6\u200b\uff0c\u200b\u76f8\u5e94\u200b\u7684\u200b\u9525\u200b\u89c4\u5212\u200b\u4e3a\u200b\u534a\u5b9a\u200b\u89c4\u5212\u200b\uff08SDP\uff09\u3002
\\[ \\optim{\\min}{c^\\top x}{\\cases{ \\begin{aligned} & \\sum_{i=1}^n x_iF_i + G\\preceq 0 \\\\ & Ax = b \\end{aligned} }} \\] \u200b\u5f0f\u200b\u4e2d\u200b\\(G, F_i\\in \\bbS^k\\)\u3002\u200b\u82e5\u200b\u8fd9\u4e9b\u200b\u77e9\u9635\u200b\u90fd\u200b\u662f\u200b\u5bf9\u89d2\u200b\u77e9\u9635\u200b\uff0cSDP\u200b\u9000\u5316\u200b\u4e3a\u200bLP\u3002\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\\(\\sum_{i=1}^n x_iF_i\\preceq G\\)\u200b\u79f0\u4e3a\u200b\u7ebf\u6027\u200b\u77e9\u9635\u200b\u4e0d\u7b49\u5f0f\u200b\uff08LMI\uff09\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u5206\u5757\u200b\u5bf9\u89d2\u200b\u77e9\u9635\u200b\u5c06\u200b\u591a\u4e2a\u200bLMI\u200b\u7ec4\u5408\u200b\u5728\u200b\u4e00\u8d77\u200b\u3002
\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u7684\u200b\u534a\u5b9a\u200b\u89c4\u5212\u200b\u4e3a\u200b
\\[ \\optim{\\min}{\\mathbf{tr}(CX)}{\\cases{ \\begin{aligned} & \\mathbf{tr(A_iX)} = b_i & i = \\oneto p \\\\ & X\\succeq 0 \\end{aligned} }} \\]"},{"location":"math/convex-optimization/convex-optimization/#_22","title":"\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u5305\u542b\u200b\u5173\u7cfb","text":" - \u200b\u5f53\u200bQP\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e2d\u200b\u7684\u200b\\(P = 0\\)\u200b\u65f6\u200b\uff0cQP\u200b\u9000\u5316\u200b\u4e3a\u200bLP\u200b\u95ee\u9898\u200b
- \u200b\u5f53\u200bQCQP\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4e2d\u200b\u7684\u200b\\(P_i = 0\\)\u200b\u65f6\u200b\uff0cQCQP\u200b\u9000\u5316\u200b\u4e3a\u200bQP\u200b\u95ee\u9898\u200b
- \u200b\u5f53\u200bSOCP\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4e2d\u200b\u7684\u200b\\(c_i = 0\\)\u200b\u65f6\u200b\uff0cSOCP\u200b\u9000\u5316\u200b\u4e3a\u200bQCQP
- \u200b\u5f62\u200b\u5982\u200b\\(\\eqref{10}\\)\u200b\u7684\u200bSOCP\u200b\u4e0e\u200b\u5982\u4e0b\u200bSDP\u200b\u95ee\u9898\u200b\u7b49\u4ef7\u200b
\\[ \\optim{\\min}{f^\\top x}{\\cases{ \\begin{bmatrix} (c_i^\\top x + d_i)I & A_ix + b_i \\\\ (A_ix + b_i)I & (c_i^\\top + d_i) \\end{bmatrix}\\succeq_{\\bbS_\\plus^n} 0 }} \\] \u200b\u56e0\u6b64\u200b\uff0c\u200b\u6709\u200b
\\[ \\text{LP}\\subseteq \\text{QP}\\subseteq \\text{QCQP}\\subseteq \\text{SOCP}\\subseteq \\text{SDP} \\]"},{"location":"math/convex-optimization/convex-set/","title":"\u51f8\u96c6\u200b\u53ca\u5176\u200b\u6027\u8d28","text":"\u200b\u4ece\u200b\u76f4\u89c2\u200b\u610f\u4e49\u200b\u4e0a\u200b\u8bb2\u200b\uff0c\u200b\u51f8\u96c6\u200b\u5c31\u662f\u200b\u6ca1\u6709\u200b\u51f9\u200b\u8fdb\u53bb\u200b\u7684\u200b\u90e8\u5206\u200b\u7684\u200b\u96c6\u5408\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_2","title":"\u5b9a\u4e49","text":""},{"location":"math/convex-optimization/convex-set/#_3","title":"\u76f4\u7ebf","text":"\u200b\u8bbe\u200b\\(x_1 \\not = x_2\\)\u200b\u4e3a\u200b\\(\\mathbb R^n\\)\u200b\u4e0a\u200b\u7684\u200b\u4e24\u4e2a\u200b\u70b9\u200b\uff0c\u200b\u5219\u200b
- \\(y = \\theta x_1 + (1 - \\theta) x_2\\) \u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u6761\u200b\u76f4\u7ebf\u200b\u3002
- \\(y = \\theta x_1 + (1 - \\theta) x_2, 0\\leq\\theta\\leq 1\\) \u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u6761\u200b\u7ebf\u6bb5\u200b\u3002
\u200b\u76f4\u7ebf\u200b\\(y = \\theta x_1 + (1 - \\theta) x_2\\)\u200b\u662f\u200b\u4e00\u6761\u200b\u4ece\u200b\\(x_2\\)\u200b\u51fa\u53d1\u200b\uff0c\u200b\u6cbf\u200b\u5411\u91cf\u200b\\(x_1 - x_2\\)\u200b\u65b9\u5411\u200b\u5ef6\u4f38\u200b\u7684\u200b\u76f4\u7ebf\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_4","title":"\u4eff\u5c04\u200b\u96c6\u5408","text":"\u200b\u5bf9\u4e8e\u200b\\(\\mathbb R^n\\)\u200b\u4e2d\u200b\u7684\u200b\\(m\\)\u200b\u4e2a\u70b9\u200b\\(x_1, \\ldots, x_m\\)\uff0c\u200b\u82e5\u200b\\(\\sum_{i = 1}^m \\theta_i = 1\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\\(\\sum_{i=1}^m \\theta_ix_i\\)\u200b\u4e3a\u200b\\(x_1, \\ldots, x_m\\)\u200b\u7684\u200b\u4eff\u5c04\u200b\u7ec4\u5408\u200b\u3002
\u200b\u5982\u679c\u200b\u4e00\u7ec4\u200b\u5411\u91cf\u200b\\(x_1, \\ldots, x_m\\)\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u5411\u91cf\u200b\u90fd\u200b\u4e0d\u80fd\u200b\u7531\u200b\u5176\u4ed6\u200b\u5411\u91cf\u200b\u7ecf\u200b\u4eff\u5c04\u200b\u7ec4\u5408\u200b\u5f97\u5230\u200b\uff0c\u200b\u79f0\u200b\u8fd9\u7ec4\u200b\u5411\u91cf\u200b\u4eff\u5c04\u200b\u65e0\u5173\u200b\u3002
\u200b\u4eff\u5c04\u200b\u65e0\u5173\u200b\u4e0e\u200b\u7ebf\u6027\u200b\u65e0\u5173\u200b \u200b\u4e00\u7ec4\u200b\u5411\u91cf\u200b\\(x_0, x_1, \\ldots, x_m\\)\u200b\u4eff\u5c04\u200b\u65e0\u200b\uff08\u200b\u76f8\u200b\uff09\u200b\u5173\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u5411\u91cf\u200b\\(x_1 - x_0, \\ldots, x_m - x_0\\)\u200b\u7ebf\u6027\u200b\u65e0\u200b\uff08\u200b\u76f8\u200b\uff09\u200b\u5173\u200b\u3002
\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(C \\subseteq \\mathbb R^n\\)\uff0c\u200b\u82e5\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u4e2d\u200b\u7684\u200b\u4efb\u610f\u200b\u4e24\u4e2a\u200b\u4e0d\u540c\u70b9\u200b\u6784\u6210\u200b\u7684\u200b\u76f4\u7ebf\u200b\uff08\u200b\u5373\u200b\u5b83\u4eec\u200b\u7684\u200b\u4eff\u5c04\u200b\u7ec4\u5408\u200b\uff09\u200b\u4ecd\u7136\u200b\u4f4d\u4e8e\u200b\u96c6\u5408\u200b\u4e2d\u200b\uff0c\u200b\u5219\u200b\\(C\\)\u200b\u4e3a\u200b\u4eff\u5c04\u200b\u96c6\u5408\u200b\u3002
\\[ \\forall x_1, x_2 \\in C, x_1 \\not = x_2, \\forall \\theta\\in \\mathbb R, y = \\theta x_1 + (1 - \\theta) x_2\\in C \\] \u200b\u4eff\u5c04\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \\(C\\)\u200b\u4e2d\u200b\u5305\u542b\u200b\u5176\u4e2d\u200b\u4efb\u610f\u200b\u4e2a\u70b9\u200b\u7684\u200b\u4eff\u5c04\u200b\u7ec4\u5408\u200b\u3002
- \u200b\u96c6\u5408\u200b\\(V = \\{x - x_0 | x \\in C\\}\\)\u200b\u4e3a\u200b\\(\\mathbb R^n\\)\u200b\u7684\u200b\u5b50\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4e14\u200b\u5176\u7ef4\u6570\u200b\u4e0e\u200b\u504f\u79fb\u200b\\(x_0\\)\u200b\u65e0\u5173\u200b\u3002\u200b\u5b9a\u4e49\u200b\u4eff\u5c04\u200b\u96c6\u5408\u200b\u7684\u200b\u7ef4\u6570\u200b\u4e3a\u200b\\(V\\)\u200b\u7684\u200b\u7ef4\u6570\u200b\u3002
\u200b\u8bbe\u200b\\(C\\)\u200b\u4e3a\u200b\u4efb\u610f\u200b\u96c6\u5408\u200b\uff0c\u200b\u5219\u200b\\(C\\)\u200b\u4e2d\u200b\u6240\u6709\u200b\u70b9\u200b\u7684\u200b\u4eff\u5c04\u200b\u7ec4\u5408\u200b\u79f0\u4e3a\u200b\\(C\\)\u200b\u7684\u200b\u4eff\u5c04\u200b\u5305\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\mathbf{aff} C\\)\uff0c\u200b\u4eff\u5c04\u200b\u5305\u662f\u200b\u5305\u542b\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u7684\u200b\u6700\u5c0f\u200b\uff08\u200b\u5373\u7ef4\u6570\u200b\u6700\u4f4e\u200b\u7684\u200b\uff09\u200b\u4eff\u5c04\u200b\u96c6\u5408\u200b\uff0c\u200b\u5176\u7ef4\u6570\u200b\u79f0\u4e3a\u200b\u4eff\u5c04\u200b\u7ef4\u6570\u200b\u3002
\u200b\u5f53\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u7684\u200b\u4eff\u5c04\u200b\u7ef4\u6570\u200b\\(\\dim \\mathbf{aff} C < n\\)\u200b\u65f6\u200b\uff0c\\(C^\\circ = \\varnothing\\)\u3002\u200b\u6b64\u65f6\u200b\u9700\u8981\u200b\u5b9a\u4e49\u200b\u76f8\u5bf9\u200b\u5185\u90e8\u200b\u4e0e\u200b\u76f8\u5bf9\u200b\u8fb9\u754c\u200b\u3002
- \u200b\u96c6\u5408\u200b\\(C\\)\u200b\u7684\u200b\u76f8\u5bf9\u200b\u5185\u90e8\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\\(\\mathbf{relint}C = \\{x\\in C | \\exists r\\in \\mathbb R_{ + + }, B(x, r)\\cap \\mathbf{aff} C \\subseteq C\\}\\)
- \u200b\u96c6\u5408\u200b\\(C\\)\u200b\u7684\u200b\u76f8\u5bf9\u200b\u8fb9\u754c\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\\(\\mathbf{cl} C - \\mathbf{relint}C\\)\u3002
"},{"location":"math/convex-optimization/convex-set/#_5","title":"\u51f8\u96c6","text":"\u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\\(C\\subseteq \\mathbb R^n\\)\u200b\u4e2d\u200b\u7684\u200b\\(m\\)\u200b\u4e2a\u70b9\u200b\\(x_1, \\ldots, x_m\\)\uff0c\u200b\u82e5\u200b\\(\\sum_{i=1}^m \\theta_i = 1, \\theta_i \\geq 0\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\\(\\sum_{i=1}^m \\theta_i x_i\\)\u200b\u4e3a\u200b\\(x_1, \\ldots, x_m\\)\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b\u3002
\u200b\u82e5\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\u5185\u200b\u4efb\u610f\u200b\u4e24\u70b9\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b\u90fd\u200b\u5728\u200b\u8be5\u200b\u96c6\u5408\u200b\u4e2d\u200b\uff0c\u200b\u79f0\u8be5\u200b\u96c6\u5408\u200b\u4e3a\u200b\u51f8\u96c6\u200b\u3002
\\[ \\forall x_1, x_2\\in C, \\forall 0\\leq \\theta\\leq 1, \\theta x_1 + (1 - \\theta) x_2\\in C \\] \u200b\u96c6\u5408\u200b\\(C\\)\u200b\u7684\u200b\u6240\u6709\u200b\u70b9\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b\u79f0\u4e3a\u200b\u51f8\u5305\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\mathbf{conv}C\\)\uff0c\\(C\\)\u200b\u7684\u200b\u51f8\u200b\u5305\u662f\u200b\u5305\u542b\u200b\\(C\\)\u200b\u7684\u200b\u6700\u5c0f\u200b\u51f8\u96c6\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_6","title":"\u9525","text":"\u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\\(C\\)\uff0c\u200b\u82e5\u200b\\(\\forall x\\in C, \\forall \\theta\\geq 0, \\theta x\\in C\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\\(C\\)\u200b\u4e3a\u200b\u9525\u200b\u3002\u200b\u82e5\u200b\\(C\\)\u200b\u8fd8\u662f\u200b\u51f8\u96c6\u200b\uff0c\u200b\u5219\u200b\u79f0\u4e3a\u200b\u51f8\u9525\u200b\u3002\u200b\u51f8\u9525\u200b\u6ee1\u8db3\u200b
\\[ \\forall x_1, x_2\\in C, \\forall \\theta_1, \\theta_2 \\geq 0, \\theta_1x_1 + \\theta_2x_2 \\in C \\] \u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\\(C\\subseteq \\mathbb R^n\\)\u200b\u4e2d\u200b\u7684\u200b\\(m\\)\u200b\u4e2a\u70b9\u200b\\(x_1, \\ldots, x_m\\)\uff0c\u200b\u82e5\u200b\\(\\theta_i \\geq 0\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\\(\\sum_{i=1}^m \\theta_i x_i\\)\u200b\u4e3a\u200b\\(x_1, \\ldots, x_m\\)\u200b\u7684\u200b\u9525\u200b\u7ec4\u5408\u200b\u3002
\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u4e2d\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u7ec4\u6210\u200b\u7684\u200b\u6240\u6709\u200b\u9525\u200b\u7ec4\u5408\u200b\u79f0\u4e3a\u200b\u9525\u5305\u200b\uff0c\\(C\\)\u200b\u7684\u200b\u9525\u200b\u5305\u662f\u200b\u5305\u542b\u200b\\(C\\)\u200b\u7684\u200b\u6700\u5c0f\u200b\u51f8\u9525\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_7","title":"\u5e38\u89c1\u200b\u7684\u200b\u51f8\u96c6","text":"\u200b\u4ee5\u4e0b\u200b\u662f\u200b\u4e00\u4e9b\u200b\u5e73\u51e1\u200b\u51f8\u96c6\u200b\uff1a
- \u200b\u7a7a\u96c6\u200b\\(\\varnothing\\)\u3001\u200b\u5355\u70b9\u200b\u96c6\u200b\\(\\{x_0\\}\\)\u3001\u200b\u5168\u7a7a\u95f4\u200b\\(\\mathbb R^n\\)\u200b\u53ca\u5176\u200b\u5b50\u200b\u7a7a\u95f4\u200b\u90fd\u200b\u662f\u200b\u4eff\u5c04\u200b\u96c6\u200b\uff08\u200b\u4e5f\u200b\u662f\u200b\u51f8\u96c6\u200b\uff09\u3002
- \u200b\u4efb\u610f\u200b\u76f4\u7ebf\u200b\u90fd\u200b\u662f\u200b\u51f8\u96c6\u200b\uff1b\u200b\u8fc7\u200b\u539f\u70b9\u200b\u7684\u200b\u76f4\u7ebf\u200b\u662f\u200b\u4eff\u5c04\u200b\u96c6\u200b\uff1b\u200b\u7ebf\u6bb5\u200b\u662f\u200b\u51f8\u96c6\u200b\uff1b\u200b\u5c04\u7ebf\u200b\u662f\u200b\u51f8\u96c6\u200b\uff1b\u200b\u8d77\u70b9\u200b\u5728\u200b\u539f\u70b9\u200b\u7684\u200b\u5c04\u7ebf\u200b\u662f\u200b\u51f8\u200b\u9525\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_8","title":"\u8d85\u5e73\u9762\u200b\u4e0e\u200b\u534a\u200b\u7a7a\u95f4","text":"\u200b\u8bbe\u200b\\(a\\in \\mathbb R^n, a \\not = 0, b\\in \\mathbb R\\)\uff0c\u200b\u65b9\u7a0b\u200b\\(a^\\top x = b\\)\u200b\u786e\u5b9a\u200b\u4e86\u200b\u7ebf\u6027\u200b\u7a7a\u95f4\u200b\\(\\mathbb R^n\\)\u200b\u5185\u200b\u7684\u200b\u4e00\u4e2a\u200b\u8d85\u5e73\u9762\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u8d85\u5e73\u9762\u200b\u5c06\u200b\u7a7a\u95f4\u200b\u5206\u4e3a\u200b\u4e24\u200b\u90e8\u5206\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u5f00\u534a\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u6bcf\u200b\u4e00\u90e8\u5206\u200b\u52a0\u4e0a\u200b\u8d85\u5e73\u9762\u200b\u79f0\u4e3a\u200b\u534a\u200b\u7a7a\u95f4\u200b\u3002
- \u200b\u8d85\u5e73\u9762\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\\(\\{x | a^\\top x = b\\}\\)
- \u200b\u534a\u200b\u7a7a\u95f4\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\\(\\{x | a^\\top x\\leq b\\}\\)
\u200b\u5411\u91cf\u200b\\(a\\)\u200b\u4e3a\u200b\u8d85\u5e73\u9762\u200b\u7684\u200b\u6cd5\u7ebf\u200b\u65b9\u5411\u200b\uff0c\u200b\u8d85\u5e73\u9762\u200b\u4e0a\u200b\u7684\u200b\u6240\u6709\u200b\u70b9\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u7531\u200b\u4e00\u4e2a\u200b\u8d77\u70b9\u200b\\(x_0\\)\u200b\u52a0\u4e0a\u200b\u4e0e\u200b\\(a\\)\u200b\u6b63\u4ea4\u200b\u7684\u200b\u6240\u6709\u200b\u5411\u91cf\u200b\u5f97\u5230\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_9","title":"\u7403","text":"\\(\\mathbb R^n\\)\u200b\u4e2d\u200b\u7684\u200b\u6b27\u6c0f\u200b\u7403\u4e3a\u200b2-\u200b\u8303\u6570\u200b\u4e0b\u200b\u7684\u200b\u7403\u200b\uff0c\u200b\u5373\u200b
\\[ B(x, r) = \\{y | \\Vert y - x\\Vert_2\\leq r\\} \\] \u200b\u5176\u4e2d\u200b\\(x\\in \\mathbb R^n\\)\u200b\u4e3a\u200b\u6b27\u6c0f\u200b\u7403\u200b\u7684\u200b\u7403\u5fc3\u200b\uff0c\\(r\\in \\mathbb R_}\\)\u200b\u4e3a\u200b\u5176\u200b\u534a\u5f84\u200b\u3002
\u200b\u692d\u7403\u200b\u662f\u200b\u5404\u4e2a\u200b\u65b9\u5411\u200b\u5ef6\u4f38\u200b\u7a0b\u5ea6\u200b\u4e0d\u540c\u200b\u7684\u200b\u6b27\u6c0f\u200b\u7403\u200b\uff0c\u200b\u5ef6\u4f38\u200b\u7a0b\u5ea6\u200b\u7531\u200b\u77e9\u9635\u200b\\(P\\in \\mathbb S_{\\)\u200b\u786e\u5b9a\u200b\uff0c\u200b\u534a\u8f74\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(\\sqrt{\\lambda_i}\\)\u3002
\\[ \\mathcal E = \\{y | (x - y)^\\top P^{-1}(x - y)\\leq 1\\} \\] \u200b\u5f53\u200b\\(P = r^2I\\)\u200b\u65f6\u200b\uff0c\\(\\mathcal E = B(x, r)\\)\u3002
\u200b\u5c06\u200b\u6b27\u6c0f\u200b\u7403\u4e2d\u200b\u7684\u200b2-\u200b\u8303\u6570\u200b\u6362\u6210\u200b\u5176\u4ed6\u200b\u7684\u200b\u8303\u6570\u200b\uff0c\u200b\u5c31\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u8303\u6570\u200b\u7403\u200b\uff1a
\\[ B_*(x, r) = \\{y | \\Vert y - x\\Vert_* \\leq r\\} \\]"},{"location":"math/convex-optimization/convex-set/#_10","title":"\u9525","text":"\u200b\u65b9\u7a0b\u200b\\(\\Vert x\\Vert_2 \\leq t\\)\u200b\u5728\u200b\\(R^{n+1}\\)\u200b\u4e0a\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u9525\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u4e8c\u9636\u200b\u9525\u200b\u3002\u200b\u9525\u200b\u53ef\u4ee5\u200b\u89c6\u4e3a\u200b\u7531\u200b\u4f4e\u200b\u4e00\u7ef4\u200b\u7684\u200b\u7403\u200b\u5806\u79ef\u200b\u5f97\u5230\u200b\u3002
\u200b\u5c06\u200b2-\u200b\u8303\u6570\u200b\u66ff\u6362\u200b\u4e3a\u200b\u5176\u4ed6\u200b\u8303\u6570\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u8303\u6570\u200b\u9525\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_11","title":"\u591a\u9762\u4f53","text":"\u200b\u6709\u9650\u200b\u4e2a\u200b\u7ebf\u6027\u200b\u7b49\u5f0f\u200b\u548c\u200b\u4e0d\u7b49\u5f0f\u200b\u7684\u200b\u89e3\u96c6\u200b\u6784\u6210\u200b\u591a\u9762\u4f53\u200b\u3002
\\[ \\begin{aligned} \\mathcal P &= \\{x | a_i^\\top x\\leq b_i, i = 1, \\ldots, m, c_j^\\top x = d_j, j = 1, \\ldots, p\\} \\\\ &= \\{x | Ax\\preceq b, Cx = d\\} \\end{aligned} \\] \u200b\u591a\u9762\u4f53\u200b\u53ef\u4ee5\u200b\u662f\u200b\u9525\u200b\uff0c\u200b\u5982\u975e\u200b\u8d1f\u200b\u8c61\u9650\u200b\u3002
\u200b\u5355\u7eaf\u5f62\u200b\u662f\u200b\u4e00\u79cd\u200b\u7279\u6b8a\u200b\u7684\u200b\u591a\u9762\u4f53\u200b\uff0c\u200b\u4e00\u7ec4\u200b\u4eff\u5c04\u200b\u65e0\u5173\u200b\u7684\u200b\u70b9\u200b\\(x_0, x_1, \\ldots, x_m\\)\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b\u786e\u5b9a\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u5355\u7eaf\u5f62\u200b\uff0c\u200b\u7528\u200b\\(\\mathbf{conv}\\{x_0, \\ldots, x_m\\}\\)\u200b\u8868\u793a\u200b\uff0c\u200b\u5176\u200b\u4eff\u5c04\u200b\u7ef4\u5ea6\u200b\u4e3a\u200b\\(m\\)\u3002
\\[ \\mathbf{conv}\\{x_0, \\ldots, x_m\\} = \\left\\{\\theta_0x_0 + \\theta_1x_1 + \\cdots + \\theta_mx_m \\middle| \\theta_i \\geq 0, \\sum_{i=1}^m \\theta_i = 1\\right\\} \\] - \u200b\u5355\u4f4d\u200b\u5355\u7eaf\u5f62\u200b\u662f\u200b\u96f6\u200b\u5411\u91cf\u200b\u548c\u200b\u5355\u4f4d\u5411\u91cf\u200b\u786e\u5b9a\u200b\u7684\u200b\\(n\\)\u200b\u7ef4\u200b\u5355\u7eaf\u5f62\u200b\uff0c\u200b\u5373\u200b\\(\\{x | x\\geq 0, \\mathbf{1}^\\top x \\leq 1\\}\\)\u3002
- \u200b\u6982\u7387\u200b\u5355\u7eaf\u5f62\u200b\u662f\u200b\u5355\u4f4d\u5411\u91cf\u200b\u786e\u5b9a\u200b\u7684\u200b\\(n-1\\)\u200b\u7ef4\u200b\u5355\u7eaf\u5f62\u200b\uff0c\u200b\u5373\u200b\\(\\{x | \\mathbf 1^\\top x = 1\\}\\)\u3002
\u200b\u5355\u7eaf\u5f62\u200b\u4e0e\u200b\u591a\u9762\u4f53\u200b \u200b\u5355\u7eaf\u5f62\u200b\u662f\u200b\u4e00\u79cd\u200b\u7279\u6b8a\u200b\u7684\u200b\u591a\u9762\u4f53\u200b\u3002\u200b\u8bbe\u200b\u5355\u7eaf\u5f62\u200b\\(C\\)\u200b\u7531\u200b\u4eff\u5c04\u200b\u65e0\u5173\u200b\u7684\u200b\u5411\u91cf\u200b\\(x_0, \\ldots, x_m\\)\u200b\u786e\u5b9a\u200b\uff0c\u200b\u5219\u200b
\\[ B = \\begin{bmatrix} x_1 - x_0 & \\cdots & x_m - x_0 \\end{bmatrix} \\] \\(B\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(n\\times m\\)\u200b\u7ef4\u200b\u7684\u200b\u6ee1\u200b\u79e9\u200b\u77e9\u9635\u200b\u3002\u200b\u4ee4\u200b\\(\\theta = \\begin{pmatrix}\\theta_0 & \\theta_1 & \\cdots & \\theta_m\\end{pmatrix}, \\theta' = \\begin{pmatrix}\\theta_1 & \\cdots & \\theta_m\\end{pmatrix}\\)\u3002\u200b\u5f53\u200b\u7a7a\u95f4\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u70b9\u200b\\(x\\)\u200b\u6ee1\u8db3\u200b\\(x\\in C\\)\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b
\\[ \\exists \\theta\\succeq 0, \\mathbf 1^\\top \\theta = 1, x = \\sum_{i=0}^m \\theta_i x_i \\Longleftrightarrow \\exists \\theta'\\succeq 0, \\mathbf 1^\\top \\theta' \\leq 1, x = x_0 + B\\theta' \\] \u200b\u800c\u200b\\(B\\)\u200b\u662f\u200b\u6ee1\u200b\u79e9\u200b\u77e9\u9635\u200b\uff0c\u200b\u5219\u200b\u5b58\u5728\u200b\u6ee1\u200b\u79e9\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u4f7f\u5f97\u200b
\\[ AB = \\begin{bmatrix} A_1 \\\\ A_2 \\end{bmatrix}B = \\begin{bmatrix} I \\\\ 0 \\end{bmatrix} \\] \u200b\u5219\u200b
\\[ Ax = \\begin{bmatrix} A_1 \\\\ A_2 \\end{bmatrix}x = \\begin{bmatrix} A_1x \\\\ A_2x \\end{bmatrix} = \\begin{bmatrix} A_1x_0 + \\theta' \\\\ A_2x_0 \\end{bmatrix} \\] \u200b\u8be5\u200b\u5355\u7eaf\u5f62\u200b\u7684\u200b\u591a\u9762\u4f53\u200b\u8868\u793a\u200b\u4e3a\u200b\uff1a
\\[ C = \\{x | A_1x\\succeq A_1x_0, A_2x = A_2x_0, \\mathbf 1^\\top A_1x - \\mathbf 1^\\top A_1x_0\\leq 1\\} \\]"},{"location":"math/convex-optimization/convex-set/#_12","title":"\u534a\u200b\u6b63\u5b9a\u200b\u9525","text":"\u200b\u8bbe\u200b\\(\\mathbb S^n_{+}\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\\(n\\)\u200b\u9636\u200b\u5bf9\u79f0\u200b\u534a\u200b\u6b63\u5b9a\u200b\u77e9\u9635\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u5219\u200b\\(\\mathbb S^n_+\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\u51f8\u9525\u200b\u3002\uff08\u200b\u6ce8\u610f\u200b\u6b64\u5904\u200b\u5bf9\u200b\u9525\u200b\u7684\u200b\u7406\u89e3\u200b\u548c\u200b\u8303\u6570\u200b\u9525\u200b\u4e0d\u540c\u200b\uff09\u3002
\\[ A\\succeq 0, B\\succeq 0\\Longrightarrow x^\\top (\\theta_1 A + \\theta_2 B)x \\geq 0\\Longrightarrow (\\theta_1A + \\theta_2B)\\succeq 0 \\]"},{"location":"math/convex-optimization/convex-set/#_13","title":"\u4fdd\u51f8\u200b\u8fd0\u7b97","text":"\u200b\u4fdd\u51f8\u200b\u8fd0\u7b97\u200b\u662f\u200b\u5728\u200b\u8fd0\u7b97\u200b\u524d\u540e\u200b\u4fdd\u6301\u200b\u96c6\u5408\u200b\u51f8\u6027\u200b\u7684\u200b\u8fd0\u7b97\u200b\u3002
- \u200b\u90e8\u5206\u200b\u548c\u200b\\(\\{(x, y_1 + y_2) | (x, y_1) \\in A, (x, y_2)\\in B\\}\\)\uff0c\u200b\u6709\u200b\u4e24\u79cd\u200b\u6781\u7aef\u200b\u60c5\u51b5\u200b
- \\(\\dim y_1 = \\dim y_2 = 0\\)\u200b\u65f6\u200b\u9000\u5316\u200b\u4e3a\u4ea4\u200b\u8fd0\u7b97\u200b\\(\\cap\\)\uff1a\u200b\u4e00\u4e2a\u200b\u51f8\u96c6\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\u4e00\u7cfb\u5217\u200b\u534a\u200b\u7a7a\u95f4\u200b\u7684\u200b\u4ea4\u96c6\u200b\u3002
- \\(\\dim x = 0\\)\u200b\u65f6\u200b\u9000\u5316\u200b\u4e3a\u200b\u548c\u200b\\(+: A + B = \\{x + y | x\\in A, y\\in B\\}\\)\u3002
- \u200b\u7ebf\u6027\u53d8\u6362\u200b\\(f: \\mathbb R^n\\rightarrow \\mathbb R^m = Ax + b\\)\u3002
- \u200b\u76f4\u79ef\u200b\\(\\times, A\\times B = \\{(x, y) | x\\in A, y\\in B\\}\\)\u3002
- \u200b\u6295\u5f71\u200b\u51fd\u6570\u200b\\(P: \\mathbb R^n\\times \\mathbb R_}\\rightarrow \\mathbb R^n\\)\uff0c\\(P(z, t) = z / t\\)\u3002\u200b\u6295\u5f71\u200b\u51fd\u6570\u200b\u5c06\u200b\\(\\mathbb R^{n}\\times \\mathbb R_{\\)\u200b\u7a7a\u95f4\u200b\u4e2d\u200b\u7684\u200b\u70b9\u200b\u6295\u5f71\u200b\u5230\u200b\u5e73\u9762\u200b\\(x_{n+1} = 1\\)\u200b\u4e0a\u200b\u3002
- \u200b\u7ebf\u6027\u53d8\u6362\u200b\u548c\u200b\u6295\u5f71\u200b\u51fd\u6570\u200b\u7684\u200b\u7ec4\u5408\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u7ebf\u6027\u200b\u5206\u5f0f\u200b\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_14","title":"\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f","text":"\u200b\u5b9a\u4e49\u200b\u6b63\u5e38\u200b\u9525\u4e3a\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u9525\u200b\uff1a
- \u200b\u662f\u200b\u51f8\u200b\u9525\u200b\u3002
- \u200b\u662f\u200b\u95ed\u96c6\u200b\uff08\u200b\u5b58\u5728\u200b\u8fb9\u754c\u200b\uff09
- \u200b\u5b58\u5728\u200b\u5185\u90e8\u200b\u3002
- \u200b\u4e0d\u200b\u5305\u542b\u200b\u76f4\u7ebf\u200b\uff08\\(x\\in K, -x\\in K\\Longleftrightarrow x = 0\\)\uff09
\u200b\u6b63\u5e38\u200b\u9525\u200b\\(K\\)\u200b\u53ef\u4ee5\u200b\u5728\u200b\u7a7a\u95f4\u200b\\(\\mathbb R^n\\)\u200b\u4e0a\u200b\u5b9a\u4e49\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\uff1a
\\[ \\begin{gathered} x \\preceq_K y \\triangleq y - x\\in K \\\\ x \\prec_K y \\triangleq y - x\\in K^\\circ \\end{gathered} \\] - \u200b\u82e5\u200b\\(K = \\mathbb R_+\\)\uff0c\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u5b9e\u6570\u200b\u57df\u200b\u4e0a\u200b\u7684\u200b\u4e0d\u7b49\u5f0f\u200b\u3002
- \u200b\u82e5\u200b\\(K = \\mathbb R^n_+\\)\uff0c\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\\(\\mathbb R^n\\)\u200b\u7a7a\u95f4\u200b\u4e2d\u200b\u5411\u91cf\u200b\u7684\u200b\u5206\u91cf\u200b\u4e0d\u7b49\u5f0f\u200b\u3002
- \u200b\u82e5\u200b\\(K = \\mathbb S^n_+\\)\uff0c\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u77e9\u9635\u200b\u4e0d\u7b49\u5f0f\u200b\u3002
\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \\(x\\preceq_K y, u\\preceq_K v\\Longrightarrow x + u\\preceq_K y + v\\)\uff0c\u200b\u5bf9\u200b\\(\\prec_K\\)\u200b\u4e5f\u200b\u6210\u7acb\u200b\u3002
- \\(x\\preceq_K y, y\\preceq_K z\\Longrightarrow x\\preceq_K z\\)\uff0c\u200b\u5bf9\u200b\\(\\prec_K\\)\u200b\u4e5f\u200b\u6210\u7acb\u200b\u3002
- \\(x\\preceq_K y, \\alpha\\geq 0\\Longrightarrow \\alpha x\\preceq_K \\alpha y\\)\uff0c\u200b\u5f53\u200b\\(\\alpha > 0\\)\u200b\u65f6\u200b\u5bf9\u200b\\(\\prec_K\\)\u200b\u4e5f\u200b\u6210\u7acb\u200b\u3002
- \\(x\\prec_K y\\Longrightarrow x\\preceq_K y\\)
- \\(x\\preceq_K x, x\\not\\prec_K x\\)
- \\(x\\preceq_K y, y\\preceq_K x\\Longrightarrow x = y\\)
- \\(\\forall i\\in \\mathbb N, x_i\\preceq_K y_i, \\lim_{i\\rightarrow\\infty} x_i = x, \\lim_{i\\rightarrow\\infty} y_i = y\\Longrightarrow x\\preceq_K y\\)
- \\(x\\preceq_K y\\Longrightarrow \\exists u, \\exists v, x + u\\prec_K y+ v\\)
\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u4e0d\u662f\u200b\u7ebf\u6027\u200b\u7684\u200b\uff0c\u200b\u5373\u200b\\(\\exists x, \\exists y, x\\not \\preceq_K y, y\\not \\preceq_K x\\)\uff0c\u200b\u6b64\u65f6\u200b\u79f0\u200b\\(x, y\\)\u200b\u4e0d\u53ef\u200b\u6bd4\u200b\u3002
\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u504f\u5e8f\u200b\u5173\u7cfb\u200b\u540e\u200b\u5c31\u200b\u53ef\u4ee5\u200b\u5728\u200b\u6b64\u57fa\u7840\u200b\u4e0a\u200b\u5b9a\u4e49\u200b\u6781\u5c0f\u503c\u200b\u4e0e\u200b\u6700\u5c0f\u503c\u200b\u3002
- \\(x\\in S\\)\u200b\u662f\u200b\u6700\u5c0f\u200b\u5143\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(S\\subseteq \\{y | y\\succeq_K x\\}\\)\uff0c\u200b\u5373\u200b\\(S\\)\u200b\u4e2d\u200b\u5143\u7d20\u200b\u5168\u90e8\u200b\u4e0e\u200b\\(x\\)\u200b\u53ef\u6bd4\u200b\u4e14\u200b\u5927\u4e8e\u200b\u7b49\u4e8e\u200b\\(x\\)\u3002
- \\(x\\in S\\)\u200b\u662f\u200b\u6781\u5c0f\u200b\u5143\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(S\\cap \\{y | y\\preceq_K x\\} = \\{x\\}\\)\uff0c\u200b\u5373\u200b\\(S\\)\u200b\u4e2d\u200b\u4e0d\u200b\u5b58\u5728\u200b\u548c\u200b\\(x\\)\u200b\u53ef\u6bd4\u200b\u4e14\u200b\u6bd4\u200b\\(x\\)\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5143\u7d20\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_15","title":"\u8d85\u5e73\u9762\u200b\u4e0e\u200b\u51f8\u96c6","text":""},{"location":"math/convex-optimization/convex-set/#_16","title":"\u5206\u79bb\u200b\u8d85\u5e73\u9762","text":"\u200b\u7ed9\u5b9a\u200b\u51f8\u96c6\u200b\\(A, B\\)\u200b\u6ee1\u8db3\u200b\\(A\\cap B = \\varnothing\\)\uff0c\u200b\u5219\u200b\u5b58\u5728\u200b\\(a\\in \\mathbb R^n, b\\in \\mathbb R, a\\not = 0\\)\u200b\u4f7f\u5f97\u200b
\\[ \\forall x\\in A, \\forall y\\in B, a^\\top x - b\\leq 0, a^\\top y - b\\geq 0 \\] \u200b\u79f0\u200b\\(\\{x | a^\\top x = b\\}\\)\u200b\u4e3a\u200b\u96c6\u5408\u200b\\(A, B\\)\u200b\u7684\u200b\u5206\u79bb\u200b\u8d85\u5e73\u9762\u200b\u3002
\u200b\u82e5\u200b\u8d85\u5e73\u9762\u200b\\(\\{x | a^\\top x = b\\}\\)\u200b\u6ee1\u8db3\u200b
\\[ \\forall x\\in A, \\forall y\\in B, a^\\top x - b < 0, a^\\top y - b > 0 \\] \u200b\u79f0\u200b\\(\\{x | a^\\top x = b\\}\\)\u200b\u4e25\u683c\u200b\u5206\u79bb\u200b\\(A, B\\)\uff0c\u200b\u4e25\u683c\u200b\u5206\u79bb\u200b\u7684\u200b\u8d85\u5e73\u9762\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u5b58\u5728\u200b\u3002
\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e25\u683c\u200b\u5206\u79bb\u200b\u7684\u200b\u4f8b\u5b50\u200b \u200b\u8bbe\u200b\u96c6\u5408\u200b\\(A = \\{(x, y) | xy\\geq 1\\}, B = \\{(x, y) | x\\leq 0, y\\geq 0\\}\\)\uff0c\u200b\u5219\u200b\u96c6\u5408\u200b\\(A, B\\)\u200b\u88ab\u200b\u8d85\u5e73\u9762\u200b\\(\\{(x, y) | x = 0\\}\\)\u200b\u548c\u200b\\(\\{(x, y) | y = 0\\}\\)\u200b\u5206\u79bb\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e25\u683c\u200b\u5206\u79bb\u200b\u4e24\u4e2a\u200b\u96c6\u5408\u200b\u7684\u200b\u8d85\u5e73\u9762\u200b\u3002
\u200b\u540c\u7406\u200b\uff0c\\(\\{(x, y) | y\\leq \\ln x\\}\\)\u200b\u548c\u200b\\(\\{(x, y) | x\\leq 0\\}\\)\u200b\u4e4b\u95f4\u200b\u4e5f\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e25\u683c\u200b\u5206\u79bb\u200b\u7684\u200b\u8d85\u5e73\u9762\u200b
\u200b\u8d85\u5e73\u9762\u200b\u5206\u79bb\u200b\u7684\u200b\u9006\u5b9a\u7406\u200b\u4e0d\u200b\u6210\u7acb\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_17","title":"\u652f\u6491\u200b\u8d85\u5e73\u9762","text":"\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(C\\subseteq \\mathbb R^n\\)\uff0c\u200b\u5bf9\u4e8e\u200b\\(x_0\\in \\partial C\\)\uff0c\u200b\u82e5\u200b\u5b58\u5728\u200b\\(a\\not = 0\\)\u200b\u6ee1\u8db3\u200b
\\[ \\forall x\\in C, a^\\top x\\leq a^\\top x_0 \\] \u200b\u79f0\u200b\\(\\{x| a^\\top x = a^\\top x_0\\}\\)\u200b\u4e3a\u200b\\(C\\)\u200b\u5728\u200b\\(x_0\\)\u200b\u5904\u200b\u7684\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u8fb9\u754c\u200b\u4e0a\u200b\u7684\u200b\u67d0\u4e2a\u200b\u70b9\u200b\uff0c\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u552f\u4e00\u200b\u3002
\u200b\u82e5\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u662f\u200b\u51f8\u96c6\u200b\uff0c\u200b\u5219\u200b\u5176\u200b\u8fb9\u754c\u200b\u4e0a\u200b\u6240\u6709\u200b\u70b9\u200b\u90fd\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u3002\u200b\u7ed9\u5b9a\u200b\\(C\\)\u200b\u662f\u200b\u95ed\u96c6\u4e14\u200b\\(C^\\circ\\not =\\varnothing\\)\uff0c\u200b\u5219\u200b\u9006\u5b9a\u7406\u200b\u4e5f\u200b\u6210\u7acb\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_18","title":"\u5bf9\u5076\u200b\u9525","text":"\u200b\u7ed9\u5b9a\u200b\u9525\u200b\\(K\\)\uff0c\u200b\u82e5\u200b\\(K^*\\)\u200b\u6ee1\u8db3\u200b
\\[ y\\in K^* \\Longleftrightarrow \\forall x\\in K, x^\\top y\\geq 0 \\] \u200b\u79f0\u200b\\(K^*\\)\u200b\u4e3a\u200b\\(K\\)\u200b\u7684\u200b\u5bf9\u5076\u200b\u9525\u200b\u3002\u200b\u5bf9\u5076\u200b\u9525\u200b\u5fc5\u5b9a\u200b\u662f\u200b\u51f8\u200b\u9525\u200b\u3002
\u200b\u5bf9\u5076\u200b\u9525\u200b\u7684\u200b\u51f8\u6027\u200b \u200b\u7ed9\u5b9a\u200b\u9525\u200b\\(K\\)\uff0c\u200b\u6709\u200b\\(\\forall x\\in K, \\forall \\theta\\geq 0, \\theta x \\in K\\)\uff0c\u200b\u5219\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(y\\in K^*\\)
\\[ \\theta x^\\top y = x^\\top (\\theta y)\\geq 0\\Longrightarrow \\theta y\\in K^* \\] \u200b\u56e0\u6b64\u200b\\(K^*\\)\u200b\u662f\u200b\u9525\u200b\u3002\u200b\u8bbe\u200b\\(y_1, y_2\\in K^*, x\\in K, 0\\leq \\theta\\leq 1\\)\uff0c\u200b\u5219\u200b
\\[ x^\\top (\\theta y_1)\\geq 0, x^\\top(1 - \\theta)y_2\\geq 0\\Longrightarrow x^\\top (\\theta y_1 + (1 - \\theta)y_2)\\geq 0 \\] \u200b\u56e0\u6b64\u200b\\(K^*\\)\u200b\u662f\u200b\u51f8\u200b\u7684\u200b\u3002
\u200b\u5bf9\u5076\u200b\u9525\u200b\u53ef\u80fd\u200b\u548c\u200b\u539f\u9525\u200b\u76f8\u7b49\u200b\uff0c\u200b\u5982\u200b\\(\\mathbb R^n_{+}, \\mathbb S^n_{+}\\)\u200b\u7684\u200b\u5bf9\u5076\u200b\u5206\u522b\u200b\u662f\u200b\u5176\u200b\u672c\u8eab\u200b\u3002
- \\(K^*\\)\u200b\u662f\u200b\u95ed\u51f8\u200b\u9525\u200b\u3002
- \\(K_1\\subseteq K_2\\Longrightarrow K_2^*\\subseteq K_1^*\\)
- \u200b\u82e5\u200b\\(K^\\circ\\not = \\varnothing\\)\uff0c\u200b\u5219\u200b\\(K^*\\)\u200b\u662f\u200b\u5c16\u200b\u7684\u200b\u3002
- \u200b\u82e5\u200b\\(\\mathbf{cl}K\\)\u200b\u662f\u200b\u5c16\u200b\u7684\u200b\uff0c\u200b\u5219\u200b\\((K^*)^\\circ\\not = \\varnothing\\)
- \\(K^{**} = \\mathbf{cl}K\\)
\u200b\u5bf9\u4e8e\u200b\u6b63\u5e38\u200b\u9525\u200b\\(K\\)\uff0c\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u5bf9\u5076\u200b\u9525\u200b\\(K^*\\)\uff0c\u200b\u4e24\u8005\u200b\u90fd\u200b\u80fd\u200b\u7528\u4e8e\u200b\u5b9a\u4e49\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\\(\\preceq_K\\)\uff0c\u200b\u79f0\u200b\\(\\preceq_{K^*}\\)\u200b\u4e3a\u200b\\(\\preceq_K\\)\u200b\u7684\u200b\u5bf9\u5076\u200b\u3002
\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7684\u200b\u5bf9\u5076\u200b\\(\\preceq_{K^*}\\)\u200b\u6ee1\u8db3\u200b
- \\(x\\preceq_K y\\Longleftrightarrow \\forall \\lambda\\succeq_{K^*}0, \\lambda^\\top x\\leq \\lambda^\\top y\\)
- \\(x\\prec_K y\\Longleftrightarrow \\forall \\lambda\\succeq_{K^*}0, \\lambda\\not = 0, \\lambda^\\top x < \\lambda^\\top y\\)
\u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\\(S\\)\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\\(x\\in S\\)\uff1a
- \\(x\\)\u200b\u5173\u4e8e\u200b\\(\\preceq_K\\)\u200b\u662f\u200b\u6700\u5c0f\u200b\u5143\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\\(\\forall \\lambda \\succeq_{K^\\ast}0\\)\uff0c\\(x\\)\u200b\u662f\u200b\u6781\u5c0f\u200b\u5316\u200b\\(\\lambda^\\top z, z\\in S\\)\u200b\u7684\u200b\u552f\u4e00\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u5373\u200b\\(\\forall \\lambda \\succeq_{K^\\ast}0, \\{z | \\lambda^\\top x = \\lambda^\\top z\\}\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\u4e25\u683c\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u3002
- \u200b\u82e5\u200b\\(x\\)\u200b\u5173\u4e8e\u200b\\(\\preceq_K\\)\u200b\u662f\u200b\u6781\u5c0f\u200b\u5143\u200b\uff0c\u200b\u5219\u200b\u5b58\u5728\u200b\\(\\lambda\\succ_{K^*} 0\\)\uff0c\\(\\forall z\\in S, \\lambda^\\top z\\geq \\lambda^\\top x\\)\uff0c\u200b\u4e5f\u200b\u5373\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u4e25\u683c\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u3002\u200b\u5f53\u200b\\(S\\)\u200b\u4e3a\u200b\u51f8\u200b\u96c6\u65f6\u200b\uff0c\u200b\u9006\u5b9a\u7406\u200b\u5bf9\u4e8e\u200b\u5b58\u5728\u200b\\(\\lambda\\succeq_{K^*}0\\)\u200b\u6210\u7acb\u200b\u3002
"},{"location":"math/convex-optimization/duality/","title":"\u5bf9\u5076","text":""},{"location":"math/convex-optimization/duality/#_2","title":"\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570","text":"\\[ \\optim{\\min}{f_0(x)}{\\cases{\\begin{aligned} & f_i(x)\\leq 0 & i = \\oneto m \\\\ & h_i(x) = 0 & i = \\oneto p \\end{aligned}}} \\label{1} \\] \u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u5f62\u200b\u5982\u200b\\(\\eqref{1}\\)\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff08\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff09\uff0c\u200b\u5176\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(L: \\bbR^n\\times \\bbR^m\\times \\bbR^p\\)\uff0c\u200b\u5176\u4e2d\u200b\\(\\lambda, \\nu\\)\u200b\u4e3a\u200b\u5411\u91cf\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u4e58\u5b50\u200b\u5411\u91cf\u200b\u3002
\\[ L(x, \\lambda, \\nu) = f_0(x) + \\sum_{i=1}^m \\lambda_if_i(x) + \\sum_{i=1}^p\\nu_i h_i(x) \\label{2} \\] \\(\\eqref{2}\\)\u200b\u5173\u4e8e\u200b\\(x\\)\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\\(g(\\lambda, \\nu)\\)\u200b\u79f0\u4e3a\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u3002
\\[ g(\\lambda, \\nu) = \\inf_{x\\in \\calD}\\left(f_0(x) + \\sum_{i=1}^m \\lambda_if_i(x) + \\sum_{i=1}^p\\nu_i h_i(x)\\right) \\label{3} \\] \u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u503c\u200b\u7684\u200b\u4e0b\u754c\u200b\uff1a\\(\\forall \\lambda \\succeq 0, \\forall \\nu, g(\\lambda, \\nu)\\leq p^*\\)\uff0c\u200b\u5e76\u4e14\u200b\u662f\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u7531\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\\(f_0\\)\u200b\u7684\u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\u8868\u793a\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_3","title":"\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u5076\u200b\u95ee\u9898","text":"\u200b\u8bb0\u200b\\(\\eqref{1}\\)\u200b\u7684\u200b\uff08\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\uff09\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e3a\u200b\uff1a
\\[ \\optim{\\max}{g(\\lambda, \\nu)}{\\lambda \\succeq 0} \\] \u200b\u5176\u200b\u6700\u4f18\u200b\u89e3\u200b\\((\\lambda^*, \\nu^*)\\)\u200b\u79f0\u4e3a\u200b\u5176\u200b\u5bf9\u5076\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u662f\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
\u200b\u6807\u51c6\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b
\u200b\u8003\u8651\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b
\\[ \\optim{\\min}{c^\\top x}{\\cases{\\begin{aligned} & Ax = b \\\\ & x\\succeq 0 \\end{aligned}}} \\] \u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u4e3a\u200b
\\[ \\begin{aligned} g(\\lambda, \\nu) &= \\inf_{x}(c^\\top x - \\lambda^\\top x + \\nu^\\top (Ax - b)) \\\\ &= \\inf_{x}(-\\nu^\\top b + (c - \\lambda + A^\\top \\nu)^\\top x) \\\\ &= \\cases{\\begin{aligned} & -\\nu^\\top b & c - \\lambda + A^\\top\\nu = 0 \\\\ & -\\infty & \\otherwise \\end{aligned}} \\end{aligned} \\] \u200b\u56e0\u6b64\u200b\uff0c\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e3a\u200b
\\[ \\optim{\\max}{\\nu^\\top b}{\\cases{\\begin{aligned} & c - \\lambda + A^\\top \\nu = 0 \\\\ & \\lambda \\succeq 0 \\end{aligned}}} \\] \u200b\u5373\u200b
\\[ \\optim{\\max}{\\nu^\\top b}{ c + A^\\top \\nu \\succeq 0 } \\] \u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u5bf9\u5076\u200b\u7b49\u4ef7\u200b\u4e8e\u539f\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_4","title":"\u5f31\u200b\u5bf9\u5076\u6027","text":"\u200b\u8bb0\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u4e3a\u200b\\(d^*\\)\u3002\u200b\u6839\u636e\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u7684\u200b\u6027\u8d28\u200b\uff0c\u200b\u6709\u200b\\(d^*\\leq p^*\\)\uff0c\u200b\u6b64\u4e3a\u200b\u5f31\u200b\u5bf9\u5076\u6027\u200b\u3002
- \u200b\u82e5\u539f\u200b\u95ee\u9898\u200b\u65e0\u200b\u4e0b\u754c\u200b\uff0c\u200b\u5219\u200b\\(p^* = -\\infty\\)\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b\\(d^* = -\\infty\\)\uff0c\u200b\u5373\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e0d\u200b\u53ef\u884c\u200b\u3002
- \u200b\u82e5\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u65e0\u4e0a\u754c\u200b\uff0c\u200b\u5219\u200b\\(d^* = \\infty\\)\uff0c\u200b\u6b64\u65f6\u200b\\(p^* = \\infty\\)\uff0c\u200b\u5373\u539f\u200b\u95ee\u9898\u200b\u4e0d\u200b\u53ef\u884c\u200b\u3002
\u200b\u8bb0\u200b\\(p^* - d^*\\geq 0\\)\u200b\u4e3a\u200b\u5bf9\u5076\u200b\u6700\u4f18\u200b\u95f4\u9699\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_5","title":"\u5f3a\u200b\u5bf9\u5076\u6027","text":"\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u5373\u200b\\(p^* - d^* = 0\\)\u3002\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u5e76\u200b\u4e0d\u662f\u200b\u603b\u200b\u6210\u7acb\u200b\uff0c\u200b\u9700\u8981\u200b\u5bf9\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u65bd\u52a0\u200b\u7ea6\u675f\u200b\u51c6\u5219\u200b\u3002
\u200b\u82e5\u200b\uff08\u200b\u4efb\u610f\u200b\uff09\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u6ee1\u8db3\u200bSlater\u200b\u6761\u4ef6\u200b\uff0c\u200b\u5373\u200b\\(\\exists x\\in \\mathbf{relint} \\calD\\)\u200b\u4f7f\u5f97\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4e25\u683c\u200b\u6210\u7acb\u200b\uff0c\u200b\u5373\u200b
\\[ \\cases{\\begin{aligned} & f_i(x)\\leq 0 & i = \\oneto m \\\\ & Ax = b \\end{aligned}} \\] \u200b\u65f6\u200b\uff0c\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\u3002
\u200b\u5982\u679c\u200b\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u662f\u200b\u7ebf\u6027\u200b\u7684\u200b\uff0c\u200b\u5219\u200b\u8fd9\u4e2a\u200b\u7ea6\u675f\u200b\u4e0d\u200b\u9700\u8981\u200b\u6ee1\u8db3\u200b\u4e25\u683c\u200b\u6210\u7acb\u200b\u7684\u200b\u6761\u4ef6\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_6","title":"\u51e0\u4f55\u200b\u89e3\u91ca","text":"\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(\\calG = \\{(f_1(x), \\ldots, f_m(x), h_1(x), \\ldots, h_p(x), f_0(x))\\in \\bbR^m\\times \\bbR^p\\times\\bbR | x\\in \\calD\\}\\)\uff0c\u200b\u5219\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u4e3a\u200b
\\[ p^* = \\inf_t\\{(u, v, t)\\in \\calG | u\\preceq 0, v = 0\\} \\] \u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\\(g(\\lambda, \\nu) = \\inf\\{ (\\lambda, \\nu, 1)^\\top (u, v, t) | (u, v, t)\\in \\calG\\}\\leq (\\lambda, \\nu, 1)^\\top (u, v, t)\\)\uff0c\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u8d85\u5e73\u9762\u200b\uff0c\u200b\u5176\u6cd5\u200b\u5411\u91cf\u200b\u4e3a\u200b\\((\\lambda, \\nu, 1)\\)\uff0c\u200b\u4e0e\u200b\u76f4\u7ebf\u200b\\(u=v=0\\)\u200b\u76f8\u4ea4\u200b\u4e8e\u200b\\((0, 0, g(\\lambda, \\nu))\\)\u3002\u200b\u4e5f\u200b\u5373\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u89e3\u200b\u90fd\u200b\u662f\u200b\u96c6\u5408\u200b\\(\\calG\\)\u200b\u7684\u200b\u4e00\u4e2a\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u3002
\u200b\u5b9a\u4e49\u200b\\(\\calG\\)\u200b\u7684\u200b\u4e0a\u200b\u5883\u56fe\u200b\\(\\calA = \\calG + \\bbR_\\plus^m\\times\\{0\\}^p\\times \\bbR_\\plus\\)\uff0c\u200b\u5373\u200b
\\[ \\calA = \\{(u_0 + x, v_0, t_0 + z) | (u_0, v_0, t_0)\\in \\calG, x\\in \\bbR_\\plus^m, z\\in \\bbR_\\plus\\} \\] \u200b\u5219\u200b\u5bf9\u5e94\u200b\u7684\u200b\u539f\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u503c\u4e3a\u200b
\\[ p^* = \\inf\\{t | (0, 0, t)\\in \\calA\\} \\] \u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\calA\\)\u200b\u4e2d\u200b\u5b58\u5728\u200b\u4e00\u7ec4\u200b\\((u, v, t)\\in \\mathbf{bd}\\calA\\)\u200b\u4f7f\u5f97\u200b\u5728\u200b\u8be5\u5904\u200b\u7684\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u4e0e\u200b\u5750\u6807\u8f74\u200b\\(u=v=0\\)\u200b\u76f8\u4ea4\u200b\u4e8e\u200b\\((0, 0, p^*)\\)\uff0c\u200b\u4e5f\u200b\u5373\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\calA\\)\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_7","title":"\u6700\u5927\u200b\u6700\u5c0f\u200b\u89e3\u91ca","text":"\u200b\u8bbe\u200b\\(p = 0\\)\u3002\u200b\u5219\u200b\u539f\u200b\u95ee\u9898\u200b\u53ef\u4ee5\u200b\u5199\u4f5c\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u65e0\u7ea6\u675f\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff1a
\\[ \\optim{\\min}{\\sup_{\\lambda\\succeq 0}L(x, \\lambda)}{x\\in \\bbR^n} \\] \u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u53ef\u4ee5\u200b\u5199\u4f5c\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff1a
\\[ \\optim{\\max}{\\inf_{x} L(x, \\lambda)}{\\lambda\\succeq 0} \\] \u200b\u56e0\u6b64\u200b\u5f31\u200b\u5bf9\u5076\u6027\u200b\u53ef\u4ee5\u200b\u5199\u4f5c\u200b
\\[ \\sup_{\\lambda\\succeq 0}\\inf_{x}L(x, \\lambda) \\leq \\inf_{x}\\sup_{\\lambda\\succeq 0}L(x, \\lambda) \\] \u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u53ef\u4ee5\u200b\u5199\u4f5c\u200b
\\[ \\sup_{\\lambda\\succeq 0}\\inf_{x}L(x, \\lambda) = \\inf_{x}\\sup_{\\lambda\\succeq 0}L(x, \\lambda) \\] \u200b\u5373\u200b\\(L(x, \\lambda)\\)\u200b\u6ee1\u8db3\u200b\u978d\u70b9\u200b\u6027\u8d28\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_8","title":"\u6700\u4f18\u6027\u200b\u6761\u4ef6","text":"\u200b\u5982\u679c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u53ef\u884c\u200b\u89e3\u200b\\((\\lambda, \\nu)\\)\uff0c\u200b\u5219\u200b\u8bf4\u660e\u200b\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u200b\u6ee1\u8db3\u200b\\(p^*\\geq g(\\lambda, \\nu)\\)\u3002\u200b\u6b64\u65f6\u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u53ef\u884c\u200b\u89e3\u200b\\(x\\)\uff0c\\(x\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(\\varepsilon = f_0(x) - g(\\lambda, \\nu)\\)-\u200b\u6b21\u4f18\u200b\u89e3\u200b\u3002\u200b\u79f0\u200b\u6b64\u5904\u200b\u7684\u200b\\(f_0(x) - g(\\lambda, \\nu)\\)\u200b\u4e3a\u200b\u5bf9\u5076\u200b\u95f4\u9699\u200b\u3002
\u200b\u539f\u200b\u95ee\u9898\u200b\u548c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u200b\u6ee1\u8db3\u200b
\\[ p^*\\in [g(\\lambda, \\nu), f_0(x)]\\qquad d^*\\in [g(\\lambda, \\nu), f_0(x)] \\] \u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u5f97\u51fa\u200b\u63a8\u8bba\u200b\uff1a\u200b\u82e5\u200b\\(f_0(x) = g(\\lambda, \\nu)\\)\uff0c\u200b\u5219\u200b\u6709\u200b\\(p^*=d^*=f_0(x)\\)
"},{"location":"math/convex-optimization/duality/#_9","title":"\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027","text":"\u200b\u5f53\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\u65f6\u200b\uff0c\u200b\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027\u6307\u200b\u5bf9\u4e8e\u200b\u539f\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u200b\\(x^*\\)\u200b\u53ca\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u200b\\(\\lambda^* = (\\lambda_1^*, \\ldots, \\lambda_m^*)\\)\uff0c\u200b\u6ee1\u8db3\u200b
\\[ \\lambda_i^* > 0 \\Lora f_i(x^*) = 0 \\] \u200b\u5373\u200b\u5bf9\u5076\u200b\u6700\u4f18\u200b\u89e3\u4e2d\u200b\u7684\u200b\u975e\u200b\u96f6\u200b\u5206\u91cf\u200b\u5bf9\u5e94\u200b\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\u7684\u200b\u7d27\u200b\u7ea6\u675f\u200b\u3002
"},{"location":"math/convex-optimization/duality/#kkt","title":"KKT\u200b\u6700\u4f18\u200b\u6761\u4ef6","text":"\u200b\u8bbe\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u548c\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u5747\u200b\u53ef\u5fae\u200b\uff0c\\(x^*\\)\u200b\u4e3a\u539f\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\\(\\lambda^*, \\nu^*\\)\u200b\u4e3a\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u4e14\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\uff0c\u200b\u5219\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u51fd\u6570\u200b\\(L(x, \\lambda^*, \\nu^*)\\)\u200b\u5728\u200b\\(x^*\\)\u200b\u5904\u200b\u53d6\u5f97\u200b\u6700\u5c0f\u503c\u200b\uff0c\u200b\u5219\u200b
\\[ \\nabla L(x^*, \\lambda^*, \\nu^*) = 0 \\] \u200b\u7efc\u5408\u200b\u5176\u5b83\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200bKKT\u200b\u6700\u4f18\u200b\u6761\u4ef6\u200b\u3002
\\[ \\cases{ \\begin{aligned} f_i(x^*) & \\leq 0 & \\text{\uff08\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\uff09} \\\\ h_i(x^*) & = 0 & \\text{\uff08\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\uff09} \\\\ \\lambda_i^* & \\geq 0 & \\text{\uff08\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7ea6\u675f\u200b\uff09} \\\\ \\lambda_i^* f_i(x^*) &= 0 & \\text{\uff08\u200b\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027\u200b\uff09} \\\\ \\nabla L(x^*, \\lambda^*, \\nu^*) &= 0 & \\text{\uff08\u200b\u6700\u4f18\u200b\u6761\u4ef6\u200b\uff09}\\\\ \\end{aligned} } \\] \u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u82e5\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\uff0c\u200b\u5219\u200b\u6700\u4f18\u200b\u89e3\u200b\u5fc5\u987b\u200b\u6ee1\u8db3\u200bKKT\u200b\u6761\u4ef6\u200b\uff08\u200b\u53cd\u8fc7\u6765\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u6210\u7acb\u200b\uff09\u3002\u200b\u5bf9\u4e8e\u200b\u6ee1\u8db3\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u6ee1\u8db3\u200bKKT\u200b\u6761\u4ef6\u200b\u7684\u200b\u70b9\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u548c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_10","title":"\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u7684\u200b\u5bf9\u5076\u200b\u95ee\u9898","text":"\u200b\u8bbe\u539f\u200b\u95ee\u9898\u200b\u4e3a\u200b
\\[ \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & f_i(x)\\preceq_{K_i} 0 \\\\ & h_i(x) = 0 \\end{aligned} }} \\] \u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ L(x, \\lambda, \\nu) = f_0(x) + \\sum_{i=1}^m \\lambda_i^\\top f_i(x) + \\sum_{j=1}^p \\nu_j^\\top h_j(x) \\] \u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e3a\u200b
\\[ \\optim{\\max}{g(\\lambda, \\nu) = \\inf_{x}L(x, \\lambda, \\nu)}{\\lambda_i\\succeq_{K_i^*}0} \\] \u200b\u5728\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u4e0b\u200b\uff0c\u200b\u5f31\u200b\u5bf9\u5076\u6027\u200b\u603b\u662f\u200b\u6210\u7acb\u200b\u3002\u200b\u6ee1\u8db3\u200b\uff08\u200b\u5e7f\u4e49\u200b\uff09Slater\u200b\u6761\u4ef6\u200b\\(\\eqnref{4}\\)\u200b\u65f6\u200b\uff0c\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\u3002
\\[ \\forall i=1,\\ldots, m,\\exists x\\in \\mathbf{relint}\\calD, Ax=b, f_i(x)\\prec_{K_i}0 \\label{4} \\] \u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\u65f6\u200b\uff0c\u200b\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027\u200b\u548c\u200bKKT\u200b\u6761\u4ef6\u200b\u6210\u7acb\u200b\u3002
"},{"location":"math/convex-optimization/unconstrained-optimization/","title":"\u65e0\u7ea6\u675f\u200b\u4f18\u5316","text":"\u200b\u65e0\u7ea6\u675f\u200b\u4f18\u5316\u200b\u662f\u200b\u6307\u200b\u5728\u200b\\(\\bbR^n\\)\u200b\u4e0a\u200b\u6700\u5c0f\u5316\u200b\\(f(x)\\)\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002\u200b\u4e00\u822c\u6765\u8bf4\u200b\uff0c\\(f: \\bbR^n\\ra \\bbR\\)\u200b\u662f\u200b\u4e8c\u6b21\u200b\u53ef\u5fae\u200b\u7684\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u4e14\u200b\u5728\u200b\\(\\mathbf{dom} f\\)\u200b\u4e0a\u200b\u5b58\u5728\u200b\u6700\u5c0f\u503c\u200b\\(p^*\\)\uff0c\u200b\u4e14\u200b\u552f\u4e00\u200b\u5bf9\u5e94\u200b\u4e00\u4e2a\u200b\u89e3\u4e3a\u200b\\(x^*\\)\u3002\u200b\u6839\u636e\u200b\u6700\u4f18\u6027\u200b\u6761\u4ef6\u200b\uff0c\u200b\u6709\u200b
\\[ \\nabla f(x^*) = 0 \\label{1} \\] \\(\\eqref{1}\\)\u200b\u6709\u200b\u4e24\u79cd\u200b\u6c42\u89e3\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5373\u200b\u8fed\u4ee3\u6cd5\u200b\u6c42\u200b\u6570\u503c\u200b\u89e3\u200b\u6216\u200b\u76f4\u63a5\u200b\u6c42\u89e3\u200b\u65b9\u7a0b\u200b\u7684\u200b\u89e3\u6790\u200b\u89e3\u200b\u3002\u200b\u5728\u200b\u90e8\u5206\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\\(\\nabla f\\)\u200b\u53ef\u80fd\u200b\u96be\u4ee5\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u6b64\u65f6\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u8fed\u4ee3\u6cd5\u200b\\(\\eqref{2}\\)\u3002\\(x^{(0)}, x^{(1)}, \\ldots\\)\u200b\u79f0\u4e3a\u200b\\(\\eqref{1}\\)\u200b\u7684\u200b\u6781\u5c0f\u200b\u5316\u70b9\u5217\u200b\u3002
\\[ x^{(0)}, x^{(1)}, \\ldots \\qquad \\lim_{k\\ra \\infty} f\\left(x^{(k)}\\right) = p^* \\label{2} \\] \u200b\u5bf9\u4e8e\u200b\u8fed\u4ee3\u6cd5\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u4e0d\u4f1a\u200b\u5728\u200b\u6709\u9650\u200b\u65f6\u95f4\u200b\u5185\u200b\u7ed3\u675f\u200b\u3002\u200b\u4f46\u200b\u5f53\u200b\\(f\\left(x^{(k)}\\right) - p^*\\leq \\varepsilon\\)\u200b\u65f6\u200b\uff0c\u200b\u5373\u53ef\u200b\u8ba4\u4e3a\u200b\u8fbe\u5230\u200b\u6700\u4f18\u200b\u503c\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u7ec8\u6b62\u200b\u3002\u200b\u8fed\u4ee3\u200b\u7b97\u6cd5\u200b\u5bf9\u200b\u521d\u59cb\u200b\u70b9\u200b\\(x_0\\)\u200b\u6709\u200b\u4e00\u5b9a\u200b\u8981\u6c42\u200b\uff0c\u200b\u5373\u200b\\(f\\)\u200b\u5728\u200b\\(x_0\\)\u200b\u5904\u200b\u7684\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u662f\u200b\u95ed\u96c6\u200b\u3002
"},{"location":"math/convex-optimization/unconstrained-optimization/#_2","title":"\u5f3a\u51f8\u6027","text":"\u200b\u51fd\u6570\u200b\\(f\\)\u200b\u5982\u679c\u200b\u6ee1\u8db3\u200b\u4e00\u9636\u200b\u6761\u4ef6\u200b
\\[ f(y)\\geq f(x) + \\nabla f(x)^\\top (y - x) + \\frac{\\gamma}{2} \\Vert y - x\\Vert^2 \\label{3} \\] \u200b\u6216\u200b\u4e8c\u9636\u200b\u6761\u4ef6\u200b
\\[ \\nabla^2 f(x)\\succeq \\gamma I \\label{4} \\] \u200b\u5219\u200b\u79f0\u200b\\(f\\)\u200b\u4e3a\u200b\\(\\gamma\\)-\u200b\u5f3a\u200b\u51f8\u51fd\u6570\u200b\u3002\u200b\u5f3a\u200b\u51f8\u51fd\u6570\u200b\u76f8\u8f83\u200b\u4e8e\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5728\u200b\u6700\u4f18\u200b\u503c\u5904\u200b\u6709\u200b\u66f4\u597d\u200b\u7684\u200b\u6027\u8d28\u200b\u3002
\u200b\u6b21\u4f18\u200b\u6027\u200b\u6761\u4ef6\u200b \u200b\u5bf9\u4e8e\u200b\u7ed9\u5b9a\u200b\\(x\\)\uff0c\\(\\eqref{3}\\)\u200b\u662f\u200b\\(y\\)\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5bf9\u200b\u5176\u6c42\u200b\u68af\u5ea6\u200b\u5f97\u5230\u200b
\\[ \\nabla f(y) = \\nabla f(x) + \\gamma(y - x) \\] \u200b\u4ee4\u200b\\(\\nabla f(\\tilde y) = 0\\)\uff0c\u200b\u5219\u200b\\(\\tilde y = x - \\nabla f(x) / \\gamma\\)\u3002\u200b\u6b64\u65f6\u200b\uff0c\u200b\u6709\u200b
\\[ f(y)\\geq f(\\tilde y)\\geq f(x) + \\nabla f(x)^\\top (\\tilde y - x) + \\frac{\\gamma}{2} \\Vert\\tilde y - x\\Vert^2 = f(x) - \\frac{1}{2\\gamma}\\Vert \\nabla f(x)\\Vert^2 \\] \u200b\u56e0\u6b64\u200b\uff0c\\(f(x) - p^*\\leq \\frac{1}{2\\gamma}\\Vert \\nabla f(x)\\Vert^2\\)\u3002\u200b\u5373\u200b\u4efb\u4f55\u200b\u68af\u5ea6\u200b\u8db3\u591f\u200b\u5c0f\u200b\u7684\u200b\u70b9\u200b\u90fd\u200b\u662f\u200b\u8fd1\u4f3c\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
\\[ \\Vert\\nabla f(x)\\Vert\\leq \\sqrt{2\\gamma\\varepsilon}\\Lora f(x) - p^*\\leq \\varepsilon \\] \u200b\u6216\u200b
\\[ \\Vert x - x^*\\Vert\\leq \\frac{2}{m}\\Vert\\nabla f(x)\\Vert \\] \u200b\u663e\u7136\u200b\uff0c\\(x^*\\)\u200b\u662f\u200b\u552f\u4e00\u200b\u7684\u200b\u3002
\u200b\u5728\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\\(S\\)\u200b\u4e0a\u200b\uff0c\u200b\u4e8c\u9636\u200b\u68af\u5ea6\u200b\\(\\nabla^2 f\\)\u200b\u5b58\u5728\u200b\u4e0a\u200b\u754c\u200b\\(\\Gamma I\\)\uff0c\u200b\u5b9a\u4e49\u200b\\(\\kappa = \\Gamma / \\gamma\\)\u200b\u4e3a\u200b\\(\\nabla^2 f(x)\\)\u200b\u7684\u200b\u6761\u4ef6\u200b\u6570\u200b\u3002
"},{"location":"math/convex-optimization/unconstrained-optimization/#_3","title":"\u4e0b\u964d\u200b\u65b9\u6cd5","text":"\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\\(\\eqref{5}\\)\u200b\u7684\u200b\u65b9\u6cd5\u200b\u6784\u9020\u200b\u70b9\u5217\u200b\uff1a
\\[ x^{(k+1)} = x^{(k)} + t^{(k)}\\Delta x^{(k)} \\label{5} \\] \u200b\u5176\u4e2d\u200b\u6b65\u957f\u200b\\(t^{(k)} > 0\\)\uff0c\\(\\Delta x\\)\u200b\u4e3a\u200b\u524d\u8fdb\u65b9\u5411\u200b\u3002\u200b\u82e5\u200b\u6ee1\u8db3\u200b\\(f{(k+1)} < f{(k)}\\)\uff0c\u200b\u5219\u200b\u70b9\u5217\u200b\u6784\u6210\u200b\u4e00\u79cd\u200b\u4e0b\u964d\u200b\u65b9\u6cd5\u200b\u3002\u200b\u6839\u636e\u200b\uff08\u200b\u5f3a\u200b\uff09\u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u6027\u8d28\u200b\uff0c\\(\\Delta x^{(k)}\\)\u200b\u5fc5\u987b\u200b\u6ee1\u8db3\u200b
\\[ \\nabla f(x^{(k)})^\\top \\Delta x^{(k)} < 0 \\] \u200b\u5373\u200b\u524d\u8fdb\u65b9\u5411\u200b\u5fc5\u987b\u200b\u80cc\u5bf9\u200b\u68af\u5ea6\u65b9\u5411\u200b\u3002
"},{"location":"math/convex-optimization/unconstrained-optimization/#_4","title":"\u7b97\u6cd5\u200b\u8868\u8ff0","text":""},{"location":"math/discrete-mathematics/","title":"\u79bb\u6563\u6570\u5b66","text":"\u200b\u6839\u636e\u200b\u300a\u200b\u6570\u7406\u903b\u8f91\u200b\u4e0e\u200b\u96c6\u5408\u8bba\u200b\u300b\uff0c\u200b\u77f3\u200b\u7eaf\u4e00\u200b\u7b49\u200b\uff0c\u200b\u6e05\u534e\u5927\u5b66\u51fa\u7248\u793e\u200b\u4e0e\u200b\u6e05\u534e\u5927\u5b66\u200b\u8ba1\u7b97\u673a\u7cfb\u200b\u201c\u200b\u79bb\u6563\u6570\u5b66\u200b\u201d\u200b\u8bfe\u7a0b\u200b\u6574\u7406\u200b\u3002
- \u200b\u7b2c\u4e00\u7ae0\u200b \u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u57fa\u672c\u6982\u5ff5\u200b
- \u200b\u7b2c\u4e8c\u7ae0\u200b \u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u7b49\u503c\u200b\u548c\u200b\u63a8\u7406\u200b\u6f14\u7b97\u200b
- \u200b\u7b2c\u4e09\u7ae0\u200b \u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u5316\u200b
- \u200b\u7b2c\u56db\u7ae0\u200b \u200b\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u7684\u200b\u57fa\u672c\u6982\u5ff5\u200b
- \u200b\u7b2c\u4e94\u7ae0\u200b \u200b\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u7684\u200b\u7b49\u503c\u200b\u548c\u200b\u63a8\u7406\u200b\u6f14\u7b97\u200b
- \u200b\u7b2c\u4e5d\u7ae0\u200b \u200b\u96c6\u5408\u200b
"},{"location":"math/discrete-mathematics/chapter-1/","title":"\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u57fa\u672c\u6982\u5ff5","text":"\u200b\u547d\u9898\u200b\u662f\u200b\u4e00\u4e2a\u200b\u975e\u771f\u200b\u5373\u200b\u5047\u200b\u7684\u200b\u9648\u8ff0\u53e5\u200b\u3002
- \u200b\u547d\u9898\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u975e\u771f\u200b\u975e\u5047\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u65e2\u200b\u771f\u200b\u53c8\u200b\u5047\u200b
- \u200b\u547d\u9898\u200b\u7684\u200b\u771f\u5047\u200b\u6027\u200b\u53ef\u4ee5\u200b\u5f85\u5b9a\u200b
\u200b\u547d\u9898\u200b\u7684\u200b\u771f\u5047\u200b\u53ef\u4ee5\u200b\u7528\u200bTrue\u200b\u6216\u200bFalse\u200b\u8868\u793a\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200b1\u200b\u6216\u200b0\u200b\u8868\u793a\u200b
\u200b\u547d\u9898\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e0e\u200b\u3001\u200b\u6216\u200b\u3001\u200b\u975e\u200b\u7b49\u200b\u903b\u8f91\u200b\u8054\u7ed3\u8bcd\u200b\u8fde\u63a5\u200b\uff0c\u200b\u5f97\u5230\u200b\u590d\u5408\u200b\u547d\u9898\u200b
\u200b\u5f53\u200b\u4e0d\u200b\u6307\u5b9a\u200b\u547d\u9898\u200b\u7684\u200b\u5177\u4f53\u5185\u5bb9\u200b\u65f6\u200b\uff0c\u200b\u79f0\u8be5\u200b\u547d\u9898\u200b\u4e3a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5177\u4f53\u200b\u547d\u9898\u200b\u79f0\u4e3a\u200b\u8be5\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u7684\u200b\u4e00\u4e2a\u200b\u89e3\u91ca\u200b\u3002\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u7684\u200b\u89e3\u91ca\u200b\u53ef\u4ee5\u200b\u662f\u200b\u4efb\u610f\u200b\u547d\u9898\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-1/#_2","title":"\u903b\u8f91\u200b\u8054\u7ed3\u8bcd","text":"\u200b\u547d\u9898\u903b\u8f91\u200b\u4e2d\u200b\u5e38\u7528\u200b\u7684\u200b\u903b\u8f91\u200b\u8054\u7ed3\u8bcd\u200b\u4e3a\u200b\u4e0e\u200b\uff08\\(\\land\\)\uff0c\u200b\u5408\u53d6\u200b\uff09\u3001\u200b\u6216\u200b\uff08\\(\\lor\\)\uff0c\u200b\u6790\u53d6\u200b\uff09\u3001\u200b\u975e\u200b\uff08\\(\\lnot\\)\uff0c\u200b\u5426\u5b9a\u200b\uff09\u3001\u200b\u8574\u542b\u200b\uff08\\(\\rightarrow\\)\uff09\u3001\u200b\u53cc\u200b\u8574\u542b\u200b\uff08\\(\\leftrightarrow\\)\uff09\u200b\u7b49\u200b\u3002\u200b\u9664\u200b\\(\\lnot\\)\u200b\u4e3a\u200b\u4e00\u5143\u200b\u8fd0\u7b97\u7b26\u200b\u4ee5\u5916\u200b\uff0c\u200b\u5176\u4f59\u200b\u903b\u8f91\u200b\u8fd0\u7b97\u7b26\u200b\u5747\u200b\u4e3a\u200b\u4e8c\u5143\u200b\u8fd0\u7b97\u7b26\u200b\u3002\u200b\u8fd9\u4e9b\u200b\u8fd0\u7b97\u7b26\u200b\u7684\u200b\u771f\u503c\u8868\u200b\u5982\u4e0b\u200b\u6240\u200b\u5217\u200b\uff1a
\\(P\\) \\(Q\\) \\(P\\land Q\\) 0 0 0 0 1 0 1 0 0 1 1 1 \\(P\\) \\(Q\\) \\(P\\lor Q\\) 0 0 0 0 1 1 1 0 1 1 1 1 \\(P\\) \\(\\lnot P\\) 0 1 1 0 \\(P\\) \\(Q\\) \\(P\\rightarrow Q\\) 0 0 1 0 1 1 1 0 0 1 1 1 - \u200b\u53cc\u200b\u8574\u542b\u200b
\\(P\\) \\(Q\\) \\(P\\leftrightarrow Q\\) 0 0 1 0 1 0 1 0 0 1 1 1 \u200b\u6b64\u5916\u200b\uff0c\u200b\u5982\u4e0b\u200b\u903b\u8f91\u200b\u8054\u7ed3\u8bcd\u200b\u4e5f\u200b\u8f83\u4e3a\u200b\u5e38\u7528\u200b\uff1a
- \u200b\u4e0e\u975e\u200b\uff1a\\(A\\uparrow B = \\lnot (A\\land B)\\)
- \u200b\u6216\u975e\u200b\uff1a\\(A\\downarrow B = \\lnot (A\\lor B)\\)
- \u200b\u5f02\u6216\u200b\uff1a\\(A\\overline \\lor B = (A\\lor B)\\land (\\lnot A\\lor \\lnot B)\\)
"},{"location":"math/discrete-mathematics/chapter-1/#_3","title":"\u5408\u5f0f\u516c\u5f0f","text":"\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff08\u200b\u7b80\u79f0\u200b\u516c\u5f0f\u200b\uff09\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u89c4\u5219\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u7b80\u5355\u200b\u547d\u9898\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\\(\\lnot A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A, B\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\\(A\\land B, A\\lor B, A\\rightarrow B, A\\leftrightarrow B\\)\u200b\u5747\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\u7ecf\u8fc7\u200b\u6709\u9650\u200b\u6b21\u200b\u5e94\u7528\u200b\u524d\u200b\u4e09\u6761\u200b\u89c4\u5219\u200b\u6240\u200b\u5f97\u5230\u200b\u7684\u200b\u516c\u5f0f\u200b\u79f0\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4e2d\u200b\u8fd0\u7b97\u7b26\u200b\u7684\u200b\u4f18\u5148\u7ea7\u200b\u6392\u5217\u200b\u5982\u4e0b\u200b\uff1a
\\[ \\lnot > \\land > \\lor > \\rightarrow > \\leftrightarrow \\] \u200b\u5982\u679c\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u5728\u200b\u4efb\u610f\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u90fd\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u79f0\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u6216\u6c38\u771f\u5f0f\u200b\u3002\u200b\u5982\u679c\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u5728\u200b\u67d0\u4e2a\u200b\u89e3\u91ca\u200b\u4e0b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u79f0\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u53ef\u200b\u6ee1\u8db3\u200b\u3002\u200b\u5982\u679c\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u5728\u200b\u4efb\u610f\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u90fd\u200b\u4e3a\u200b\u5047\u200b\uff0c\u200b\u79f0\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4e3a\u200b\u77db\u76fe\u200b\u5f0f\u200b\u6216\u200b\u6c38\u5047\u5f0f\u200b\u3002\u200b\u4e24\u4e2a\u200b\u91cd\u8a00\u5f0f\u200b\u4f7f\u7528\u200b\\(\\land, \\lor, \\rightarrow, \\leftrightarrow\\)\u200b\u8fde\u63a5\u200b\u540e\u200b\u5f97\u5230\u200b\u7684\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4ecd\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-1/#_4","title":"\u91cd\u8a00\u5f0f\u200b\u7684\u200b\u4ee3\u5165\u200b\u89c4\u5219","text":"\u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\uff0c\u200b\u5c06\u200b\\(A\\)\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\\(C\\)\u200b\u66ff\u6362\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\\(D\\)\uff0c\u200b\u5219\u200b\u66ff\u6362\u200b\u540e\u200b\u7684\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4ecd\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u3002\u200b\u8bb0\u200b\u4f5c\u200b\\(\\frac CD\\)
- \u200b\u4ee3\u5165\u200b\u89c4\u5219\u200b\u53ea\u80fd\u200b\u5bf9\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u8fdb\u884c\u200b\u66ff\u4ee3\u200b\uff0c\u200b\u800c\u200b\u4e0d\u80fd\u200b\u66ff\u4ee3\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u590d\u5408\u200b\u547d\u9898\u200b
- \u200b\u5bf9\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u8fdb\u884c\u200b\u4ee3\u5165\u200b\u65f6\u200b\uff0c\u200b\u5fc5\u987b\u200b\u4ee3\u5165\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u7684\u200b\u6240\u6709\u200b\u547d\u9898\u200b\u53d8\u9879\u200b
"},{"location":"math/discrete-mathematics/chapter-2/","title":"\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u7b49\u503c\u200b\u548c\u200b\u63a8\u7406\u200b\u6f14\u7b97","text":"\u200b\u7b49\u503c\u200b\uff1a\u200b\u8bbe\u200b\\(A, B\\)\u200b\u4e3a\u200b\u516c\u5f0f\u200b\uff0c\\(P_1, \\dots, P_n\\)\u200b\u662f\u200b\u51fa\u73b0\u200b\u5728\u200b\\(A, B\\)\u200b\u4e2d\u200b\u6240\u6709\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u7684\u200b\u4e00\u7ec4\u200b\\(\\left\\langle P_1, \\dots, P_n\\right\\rangle\\)\uff0c\u200b\u90fd\u200b\u6709\u200b\\(A=B\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u4e0e\u200b\u516c\u5f0f\u200b\\(B\\)\u200b\u7b49\u503c\u200b\uff08\u200b\u7b49\u4ef7\u200b\uff09\uff0c\u200b\u8bb0\u200b\u4e3a\u200b\\(A\\Leftrightarrow B\\)\u200b\u6216\u200b\\(A=B\\)\u3002
\u200b\u7b49\u503c\u200b\u5173\u7cfb\u200b\u6ee1\u8db3\u200b\u81ea\u53cd\u6027\u200b\u3001\u200b\u5bf9\u79f0\u6027\u200b\u4e0e\u200b\u4f20\u9012\u6027\u200b\uff1a
- \\(A=A\\)
- \u200b\u82e5\u200b\\(A=B\\)\uff0c\u200b\u5219\u200b\\(B=A\\)
- \u200b\u82e5\u200b\\(A=B, B=C\\)\uff0c\u200b\u5219\u200b\\(A=C\\)
\\(A=B\\)\u200b\u7684\u200b\u5145\u5206\u200b\u5fc5\u8981\u6761\u4ef6\u200b\u662f\u200b\\(A\\leftrightarrow B\\)\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-2/#_2","title":"\u7b49\u503c\u200b\u516c\u5f0f","text":"\u200b\u57fa\u672c\u200b\u7684\u200b\u7b49\u503c\u200b\u516c\u5f0f\u200b\u5217\u4e3e\u5982\u4e0b\u200b\uff1a
- \u200b\u53cc\u91cd\u200b\u5426\u5b9a\u200b\u5f8b\u200b
- \\(P = \\lnot \\lnot P\\)
- \u200b\u7ed3\u5408\u5f8b\u200b
- \\((P\\lor Q)\\lor R = P \\lor (Q\\lor R)\\)
- \\((P\\land Q)\\land R = P \\land (Q\\land R)\\)
- \\((P\\leftrightarrow Q)\\leftrightarrow R = P \\leftrightarrow (Q\\leftrightarrow R)\\)
- \u200b\u8fd0\u7b97\u7b26\u200b\\(\\rightarrow\\)\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u7ed3\u5408\u5f8b\u200b
- \u200b\u4ea4\u6362\u5f8b\u200b
- \\(P\\lor Q = Q\\lor P\\)
- \\(P\\land Q = Q\\land P\\)
- \\(P\\leftrightarrow Q = Q\\leftrightarrow P\\)
- \u200b\u8fd0\u7b97\u7b26\u200b\\(\\rightarrow\\)\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u4ea4\u6362\u5f8b\u200b
- \u200b\u5206\u914d\u5f8b\u200b
- \\(P\\lor (Q\\land R) = (P\\lor Q)\\land (P\\lor R)\\)
- \\(P\\land (Q\\lor R) = (P\\land Q)\\lor (P\\land R)\\)
- \\(P\\rightarrow (Q\\rightarrow R) = (P\\rightarrow Q)\\rightarrow (P\\rightarrow R)\\)
- \u200b\u8fd0\u7b97\u7b26\u200b\\(\\leftrightarrow\\)\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u5206\u914d\u5f8b\u200b
- \u200b\u6052\u7b49\u200b\u5f8b\u200b
- \\(P\\lor P = P\\)
- \\(P\\land P = P\\)
- \\(P\\rightarrow P = T\\)
- \\(P\\leftrightarrow P = T\\)
- \u200b\u5438\u6536\u7387\u200b
- \\(P\\lor (P\\land Q) = P\\)
- \\(P\\land (P\\lor Q) = P\\)
- \u200b\u6469\u6839\u200b\u5f8b\u200b
- \\(\\lnot (P\\lor Q) = \\lnot P\\land \\lnot Q\\)
- \\(\\lnot (P\\land Q) = \\lnot P\\lor \\lnot Q\\)
- \\(\\lnot (P\\rightarrow Q) = P\\land \\lnot Q\\)
- \\(\\lnot (P\\leftrightarrow Q) = (P\\land \\lnot Q) \\lor (\\lnot P\\land Q)\\)
- \u200b\u540c\u4e00\u5f8b\u200b
- \\(P\\lor F = P\\)
- \\(P\\land P = T\\)
- \\(T\\rightarrow P = P\\)
- \\(T\\leftrightarrow P = P\\)
- \\(P\\rightarrow F = \\lnot P\\)
- \\(P\\leftrightarrow F = \\lnot P\\)
- \u200b\u96f6\u5f8b\u200b
- \\(P\\lor T = T\\)
- \\(P\\land F = F\\)
- \\(P\\rightarrow T = T\\)
- \\(F\\rightarrow P = T\\)
- \u200b\u8865\u4f59\u5f8b\u200b
- \\(P\\lor \\lnot P = T\\)
- \\(P\\land \\lnot P = F\\)
- \\(P\\rightarrow \\lnot P = \\lnot P\\)
- \\(P\\leftrightarrow \\lnot P = F\\)
- \u200b\u5176\u4ed6\u200b\u5e38\u7528\u200b\u7684\u200b\u7b49\u503c\u200b\u516c\u5f0f\u200b
- \\(P\\rightarrow Q = \\lnot Q\\rightarrow \\lnot P\\)\uff08\u200b\u9006\u5426\u547d\u9898\u200b\uff09
- \\(P\\rightarrow (Q\\rightarrow R) = (P\\land Q)\\rightarrow R\\)
- \\((P\\rightarrow R)\\land (Q\\rightarrow R) = (P\\lor Q) \\rightarrow R\\)
\u200b\u7531\u200b\u516c\u5f0f\u200b2\u200b\u7684\u200b\u76f4\u63a5\u200b\u63a8\u8bba\u200b\uff1a\\(P\\rightarrow (Q\\rightarrow R) = Q\\rightarrow (P\\rightarrow R)\\)
\u200b\u7f6e\u6362\u200b\uff1a\u200b\u5bf9\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u7684\u200b\u5b50\u200b\u516c\u5f0f\u200b\\(B\\)\uff0c\u200b\u4f7f\u7528\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\u7684\u200b\u516c\u5f0f\u200b\u8fdb\u884c\u200b\u4ee3\u6362\u200b\u79f0\u4e3a\u200b\u7f6e\u6362\u200b
\u200b\u8bbe\u7f6e\u200b\u6362\u540e\u200b\u7684\u200b\u516c\u5f0f\u200b\u4e3a\u200b\\(C\\)\uff0c\u200b\u5219\u200b\u5fc5\u6709\u200b\\(A=C\\)
"},{"location":"math/discrete-mathematics/chapter-2/#_3","title":"\u4ece\u200b\u771f\u503c\u8868\u200b\u8ba1\u7b97\u200b\u751f\u6210\u200b\u547d\u9898\u200b\u516c\u5f0f","text":"\u200b\u4ece\u200b\u771f\u503c\u8868\u200b\u751f\u6210\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u6709\u200b\u4e24\u79cd\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u65e2\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u503c\u4e3a\u200b\\(T\\)\u200b\u7684\u200b\u884c\u200b\u751f\u6210\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u503c\u4e3a\u200b\\(F\\)\u200b\u7684\u200b\u884c\u200b\u751f\u6210\u200b
"},{"location":"math/discrete-mathematics/chapter-2/#t","title":"\u4ece\u503c\u200b\u4e3a\u200bT\u200b\u7684\u200b\u884c\u200b\u751f\u6210","text":"\u200b\u5bf9\u4e8e\u200b\u5305\u542b\u200b\\(n\\)\u200b\u4e2a\u200b\u547d\u9898\u200b\u53d8\u5143\u200b\\(P_1, \\dots, P_n\\)\u200b\u7684\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5199\u51fa\u200b\u5982\u4e0b\u200b\u5408\u53d6\u200b\u5f0f\u200b\uff1a
\\[ P_1\\land P_2\\land \\dots \\land P_n \\] \u200b\u5bf9\u4e8e\u200b\u771f\u503c\u8868\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u53d6\u503c\u200b\u4e3a\u200b\\(T\\)\u200b\u7684\u200b\u884c\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u5e94\u200b\u7684\u200b\\(P_i\\)\u200b\u4e3a\u200b\\(F\\)\uff0c\u200b\u5219\u200b\u5c06\u200b\u5408\u53d6\u200b\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u5bf9\u5e94\u200b\\(P_i\\)\u200b\u66ff\u6362\u200b\u4e3a\u200b\\(\\lnot P_i\\)\u3002\u200b\u5c06\u200b\u6240\u5f97\u200b\u7684\u200b\u516c\u5f0f\u200b\u4f7f\u7528\u200b\u6790\u53d6\u200b\u8fd0\u7b97\u7b26\u200b\u8fde\u63a5\u200b\u5373\u5f97\u200b\u7b26\u5408\u200b\u771f\u503c\u8868\u200b\u7684\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-2/#f","title":"\u4ece\u503c\u200b\u4e3a\u200bF\u200b\u7684\u200b\u884c\u200b\u751f\u6210","text":"\u200b\u5bf9\u4e8e\u200b\u5305\u542b\u200b\\(n\\)\u200b\u4e2a\u200b\u547d\u9898\u200b\u53d8\u5143\u200b\\(P_1, \\dots, P_n\\)\u200b\u7684\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5199\u51fa\u200b\u5982\u4e0b\u200b\u6790\u53d6\u200b\u5f0f\u200b\uff1a
\\[ P_1\\lor P_2\\lor \\dots \\lor P_n \\] \u200b\u5bf9\u4e8e\u200b\u771f\u503c\u8868\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u53d6\u503c\u200b\u4e3a\u200b\\(F\\)\u200b\u7684\u200b\u884c\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u5e94\u200b\u7684\u200b\\(P_i\\)\u200b\u4e3a\u200b\\(T\\)\uff0c\u200b\u5219\u200b\u5c06\u200b\u6790\u53d6\u200b\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u5bf9\u5e94\u200b\\(P_i\\)\u200b\u66ff\u6362\u200b\u4e3a\u200b\\(\\lnot P_i\\)\u3002\u200b\u5c06\u200b\u6240\u5f97\u200b\u7684\u200b\u516c\u5f0f\u200b\u4f7f\u7528\u200b\u5408\u53d6\u200b\u8fd0\u7b97\u7b26\u200b\u8fde\u63a5\u200b\u5373\u5f97\u200b\u7b26\u5408\u200b\u771f\u503c\u8868\u200b\u7684\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-2/#_4","title":"\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6","text":"\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u4e3a\u200b\u7531\u200b\u8054\u7ed3\u8bcd\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u82e5\u200b\u4efb\u610f\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u90fd\u200b\u6709\u200b\u901a\u8fc7\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u4f7f\u7528\u200b\\(A\\)\u200b\u4e2d\u200b\u7684\u200b\u8054\u7ed3\u8bcd\u200b\u7ec4\u5408\u800c\u6210\u200b\u7684\u200b\u516c\u5f0f\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\uff0c\u200b\u5219\u200b\\(A\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b
\u200b\u901a\u8fc7\u200b\u5982\u4e0a\u200b\u5bf9\u200b\u771f\u503c\u8868\u200b\u7684\u200b\u5206\u6790\u200b\uff0c\u200b\u4efb\u4f55\u200b\u771f\u503c\u8868\u200b\u90fd\u200b\u80fd\u200b\u4f7f\u7528\u200b\\(\\{\\land, \\lor, \\lnot\\}\\)\u200b\u4e09\u4e2a\u200b\u8fd0\u7b97\u7b26\u200b\u8868\u793a\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u3002\u200b\u5047\u8bbe\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u516c\u5f0f\u200b\\(P\\)\uff0c\u200b\u4e0d\u200b\u5b58\u5728\u200b\\(\\{\\land, \\lor, \\lnot\\}\\)\u200b\u7ec4\u6210\u200b\u7684\u200b\u516c\u5f0f\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\u3002\u200b\u4f46\u200b\u901a\u8fc7\u200b\\(P\\)\u200b\u7684\u200b\u771f\u503c\u8868\u200b\u53ef\u4ee5\u200b\u6784\u9020\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\\(Q\\)\uff0c\u200b\u5219\u200b\\(Q\\)\u200b\u4e0e\u200b\\(P\\)\u200b\u7684\u200b\u771f\u503c\u8868\u200b\u76f8\u540c\u200b\uff0c\\(P=Q\\)\uff0c\u200b\u77db\u76fe\u200b\u3002\u200b\u56e0\u6b64\u200b\\(\\{\\land, \\lor, \\lnot\\}\\)\u200b\u662f\u200b\u5b8c\u5907\u200b\u7684\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u5217\u51fa\u200b\u4e86\u200b\u4e00\u90e8\u5206\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u6700\u5c0f\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
- \\(\\{\\lor, \\lnot\\}\\)
- \\(\\{\\land, \\lnot\\}\\)
- \\(\\{\\uparrow\\}\\)
- \\(\\{\\downarrow\\}\\)
- \\(\\{\\lnot, \\rightarrow\\}\\)
\u200b\u5982\u679c\u200b\\(A\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff0c\u200b\u96c6\u5408\u200b\\(B\\)\u200b\u4e2d\u200b\u7684\u200b\u8054\u7ed3\u8bcd\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u7ec4\u5408\u200b\u5f97\u5230\u200b\u4e0e\u200b\\(A\\)\u200b\u4e2d\u200b\u8054\u7ed3\u8bcd\u200b\u7b49\u4ef7\u200b\u7684\u200b\u8054\u7ed3\u8bcd\u200b\uff0c\u200b\u5219\u200b\\(B\\)\u200b\u4e5f\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\u3002
\u200b\u8bc1\u660e\u200b\uff1a\\(\\{\\lor, \\lnot\\}\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
\\[ P\\land Q = \\lnot (\\lnot P\\lor \\lnot Q) \\] \u200b\u8bc1\u660e\u200b\uff1a\\(\\{\\land, \\lnot\\}\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
\\[ P\\lor Q = \\lnot (\\lnot P\\land \\lnot Q) \\] \u200b\u8bc1\u660e\u200b\uff1a\\(\\{\\uparrow\\}\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
- \u200b\u8bc1\u660e\u200b\\(\\lnot P\\)\u200b\u53ef\u4ee5\u200b\u4ec5\u200b\u4f7f\u7528\u200b\\(\\uparrow\\)\u200b\u8fd0\u7b97\u7b26\u200b\u8868\u793a\u200b\uff1a
$$ \\begin{aligned} \\lnot P &= \\lnot (P\\land P) \\ &= P\\uparrow P \\end{aligned} $$
- \u200b\u8bc1\u660e\u200b\\(P\\land Q\\)\u200b\u53ef\u4ee5\u200b\u4ec5\u200b\u4f7f\u7528\u200b\\(\\uparrow\\)\u200b\u8fd0\u7b97\u7b26\u200b\u8868\u793a\u200b\uff1a
$$ \\begin{aligned} P\\land Q&= \\lnot \\lnot (P\\land Q) \\ &= \\lnot (P\\uparrow Q) \\ &= (P\\uparrow Q) \\uparrow (P\\uparrow Q) \\end{aligned} $$
\u200b\u8bc1\u660e\u200b\uff1a\\(\\{\\downarrow\\}\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
- \u200b\u8bc1\u660e\u200b\\(\\lnot P\\)\u200b\u53ef\u4ee5\u200b\u4ec5\u200b\u4f7f\u7528\u200b\\(\\downarrow\\)\u200b\u8fd0\u7b97\u7b26\u200b\u8868\u793a\u200b\uff1a
$$ \\begin{aligned} \\lnot P &= \\lnot (P\\lor P) \\ &= P\\downarrow P \\end{aligned} $$
- \u200b\u8bc1\u660e\u200b\\(P\\lor Q\\)\u200b\u53ef\u4ee5\u200b\u4ec5\u200b\u4f7f\u7528\u200b\\(\\downarrow\\)\u200b\u8fd0\u7b97\u7b26\u200b\u8868\u793a\u200b\uff1a
$$ \\begin{aligned} P\\lor Q&= \\lnot \\lnot (P\\lor Q) \\ &= \\lnot (P\\downarrow Q) \\ &= (P\\downarrow Q) \\downarrow (P\\downarrow Q) \\end{aligned} $$
\u200b\u8bc1\u660e\u200b\uff1a\\(\\{\\rightarrow, \\lnot\\}\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
\\(P\\lor Q = \\lnot \\lnot P\\lor Q = \\lnot P\\rightarrow Q\\)
"},{"location":"math/discrete-mathematics/chapter-2/#_5","title":"\u5bf9\u5076\u200b\u5f0f","text":"\u200b\u8bbe\u200b\\(A\\)\u200b\u4e3a\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5c06\u200b\\(A\\)\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u7684\u200b\\(\\lor, \\land, T, F\\)\u200b\u5206\u522b\u200b\u4f7f\u7528\u200b\\(\\land, \\lor, F, T\\)\u200b\u8fdb\u884c\u200b\u66ff\u6362\u200b\uff0c\u200b\u6240\u200b\u5f97\u5230\u200b\u7684\u200b\u516c\u5f0f\u200b\u79f0\u4e3a\u200b\\(A\\)\u200b\u7684\u200b\u5bf9\u5076\u200b\u5f0f\u200b\uff0c\u200b\u8bb0\u200b\u4e3a\u200b\\(A^*\\)
\u200b\u8bbe\u200b\\(A\\)\u200b\u4e3a\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5c06\u200b\\(A\\)\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u7684\u200b\u6240\u6709\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\\(P_1,\\dots, P_n\\)\u200b\u66ff\u6362\u200b\u4e3a\u200b\\(\\lnot P_1, \\dots, \\lnot P_n\\)\uff0c\u200b\u6240\u200b\u5f97\u5230\u200b\u7684\u200b\u516c\u5f0f\u200b\u79f0\u4e3a\u200b\\(A\\)\u200b\u7684\u200b\u5426\u200b\u547d\u9898\u200b\uff0c\u200b\u8bb0\u200b\u4e3a\u200b\\(A^-\\)
\u200b\u5219\u200b\u53d6\u200b\u5bf9\u5076\u200b\u5f0f\u200b\u8fd0\u7b97\u200b\u3001\u200b\u53d6\u5426\u200b\u547d\u9898\u200b\u8fd0\u7b97\u200b\u6709\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \\(\\lnot (A^*) = (\\lnot A)^*, \\lnot (A^-) = (\\lnot A)^-\\)
- \\((A^*)^*=A, (A^-)^- =A\\)
- \\(A^{*-}=\\lnot A\\)
- \\(A=B\\Rightarrow A^*=B^*\\)
- \u200b\u5bf9\u200b\\(A\\rightarrow B\\)\u200b\u53d6\u200b\u5bf9\u5076\u200b\u5f0f\u200b\u53ef\u5f97\u200b\\(A\\rightarrow B=T\\Rightarrow B^*\\rightarrow A^*=T\\)
\u200b\u6839\u636e\u200b\u5bf9\u5076\u200b\u5f0f\u200b\u548c\u200b\u5426\u200b\u547d\u9898\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c2\u200b\u5f0f\u200b\u81ea\u7136\u200b\u6210\u7acb\u200b\u30021\u200b\u5f0f\u200b\u548c\u200b3\u200b\u5f0f\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u6570\u5b66\u200b\u5f52\u7eb3\u6cd5\u200b\u8fdb\u884c\u200b\u8bc1\u660e\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-2/#_6","title":"\u8303\u5f0f","text":"\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\u6982\u5ff5\u200b\uff1a
- \u200b\u6587\u5b57\u200b\uff1a\u200b\u7b80\u5355\u200b\u547d\u9898\u200b\\(P\\)\u200b\u53ca\u5176\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b
- \u200b\u5408\u53d6\u200b\u5f0f\u200b\uff1a\u200b\u4e00\u4e9b\u200b\u6587\u5b57\u200b\u7684\u200b\u5408\u53d6\u200b\uff0c\u200b\u5f62\u200b\u5982\u200b\\(P_1\\land \\dots \\land P_n\\)
- \u200b\u6790\u53d6\u200b\u5f0f\u200b\uff08\u200b\u5b50\u53e5\u200b\uff09\uff1a\u200b\u4e00\u4e9b\u200b\u6587\u5b57\u200b\u7684\u200b\u6790\u53d6\u200b\uff0c\u200b\u5f62\u200b\u5982\u200b\\(P_1\\lor \\dots\\lor P_n\\)
- \u200b\u4e92\u8865\u200b\u5bf9\u200b\uff1a\u200b\u6587\u5b57\u200b\u4e0e\u5176\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b
- \u200b\u6790\u53d6\u8303\u5f0f\u200b\uff1a\u200b\u5408\u53d6\u200b\u5f0f\u200b\u901a\u8fc7\u200b\u6790\u53d6\u200b\u8054\u7ed3\u8bcd\u200b\u8fde\u63a5\u200b\u7684\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5f62\u200b\u5982\u200b\\(A_1\\lor \\dots\\lor A_n\\)\uff0c\u200b\u5176\u4e2d\u200b\\(A_i\\)\u200b\u4e3a\u200b\u5408\u53d6\u200b\u5f0f\u200b
- \u200b\u5408\u53d6\u8303\u5f0f\u200b\uff1a\u200b\u6790\u53d6\u200b\u5f0f\u200b\u901a\u8fc7\u200b\u5408\u53d6\u200b\u8054\u7ed3\u8bcd\u200b\u8fde\u63a5\u200b\u7684\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5f62\u200b\u5982\u200b\\(A_1\\land \\dots \\land A_n\\)\uff0c\u200b\u5176\u4e2d\u200b\\(A_i\\)\u200b\u4e3a\u200b\u6790\u53d6\u200b\u5f0f\u200b
\u200b\u7531\u6b64\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5bfc\u51fa\u200b\u8303\u5f0f\u200b\u5b9a\u7406\u200b\uff0c\u200b\u5373\u200b\u4efb\u4e00\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u90fd\u200b\u5b58\u5728\u200b\u6709\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\u7684\u200b\u5408\u53d6\u8303\u5f0f\u200b\u4e0e\u200b\u6790\u53d6\u8303\u5f0f\u200b\u3002\u200b\u8303\u5f0f\u200b\u5b9a\u7406\u200b\u7684\u200b\u6b63\u786e\u6027\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u5217\u5199\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u7684\u200b\u771f\u503c\u8868\u200b\u4e0e\u200b\u4ece\u200b\u771f\u503c\u8868\u200b\u5217\u5199\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u8bc1\u660e\u200b\u3002
\u200b\u8ba1\u7b97\u200b\u5408\u53d6\u8303\u5f0f\u200b\u4e0e\u200b\u6790\u53d6\u8303\u5f0f\u200b\uff1a
- \u200b\u6d88\u200b\u53bb\u200b\u903b\u8f91\u200b\u8054\u7ed3\u8bcd\u200b\\(A\\rightarrow B\\)\u200b\u4e0e\u200b\\(A\\leftrightarrow B\\)\uff0c\u200b\u66ff\u6362\u200b\u4e3a\u200b\\(\\lnot A\\lor B\\)\u200b\u4e0e\u200b\\((\\lnot A\\lor B)\\land (A\\lor \\lnot B)\\)
- \u200b\u4f7f\u7528\u200b\u6469\u6839\u200b\u5f8b\u200b\u4e0e\u200b\u53cc\u91cd\u200b\u5426\u5b9a\u200b\u5f8b\u200b\u6d88\u9664\u200b\\(\\lor\\)\u200b\u6216\u200b\\(\\land\\)\uff0c\u200b\u5e76\u200b\u6d88\u9664\u200b\u591a\u4f59\u200b\u7684\u200b\\(\\lnot\\)
- \u200b\u5c06\u200b\u6240\u6709\u200b\u7684\u200b\\(\\lnot\\)\u200b\u79fb\u52a8\u200b\u5230\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\\(P_i\\)\u200b\u524d\u200b
- \u200b\u4f7f\u7528\u200b\u5206\u914d\u5f8b\u200b\u5c06\u200b\u516c\u5f0f\u5316\u200b\u4e3a\u200b\u8303\u5f0f\u200b
"},{"location":"math/discrete-mathematics/chapter-2/#_7","title":"\u4e3b\u200b\u8303\u5f0f","text":"\u200b\u5bf9\u4e8e\u200b\u516c\u5f0f\u200b\\(Q = Q_1\\land \\dots \\land Q_n\\)\uff0c\u200b\u5f0f\u200b\u4e2d\u200b\\(Q_i=P_i\\)\u200b\u6216\u200b\\(Q_i=\\lnot P_i\\)\u3002\u200b\u5219\u200b\\(Q\\)\u200b\u4e3a\u200b\u6781\u5c0f\u200b\u9879\u200b\uff0c\u200b\u8bb0\u200b\u4e3a\u200b\\(m_i\\)\u3002
- \u200b\u6781\u5c0f\u200b\u9879\u4e2d\u200b\u5fc5\u987b\u200b\u51fa\u73b0\u200b\u6240\u6709\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b
- \\(n\\)\u200b\u4e2a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u53ef\u4ee5\u200b\u7ec4\u6210\u200b\\(2^n\\)\u200b\u4e2a\u200b\u6781\u5c0f\u200b\u9879\u200b\uff0c\u200b\u4f9d\u6b21\u200b\u8868\u793a\u200b\u4e3a\u200b\\(m_1, \\dots m_{2^n}\\)
\u200b\u5bf9\u4e8e\u200b\u516c\u5f0f\u200b\\(R = R_1\\lor \\dots \\lor R_n\\)\uff0c\u200b\u5f0f\u200b\u4e2d\u200b\\(R_i = P_i\\)\u200b\u6216\u200b\\(R_i = \\lnot P_i\\)\u3002\u200b\u5219\u200b\\(R\\)\u200b\u4e3a\u200b\u6781\u5927\u200b\u9879\u200b\uff0c\u200b\u8bb0\u200b\u4e3a\u200b\\(M_i\\)
\u200b\u4e0e\u200b\u6781\u5c0f\u200b\u9879\u200b\u76f8\u540c\u200b\uff0c\u200b\u6240\u6709\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u5fc5\u987b\u200b\u90fd\u200b\u51fa\u73b0\u200b\u5728\u200b\u6781\u5927\u200b\u9879\u4e2d\u200b\uff0c\u200b\u4e14\u200b\\(n\\)\u200b\u4e2a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u53ef\u4ee5\u200b\u7ec4\u6210\u200b\\(2^n\\)\u200b\u4e2a\u200b\u6781\u5927\u200b\u9879\u200b\u3002
\u200b\u4efb\u610f\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u7684\u200b\u8303\u5f0f\u200b\u4e2d\u200b\uff0c\u200b\u4ec5\u200b\u7531\u200b\u6781\u5c0f\u200b\u9879\u200b\u6784\u6210\u200b\u7684\u200b\u6790\u53d6\u8303\u5f0f\u200b\u4e3a\u4e3b\u200b\u6790\u53d6\u8303\u5f0f\u200b\uff0c\u200b\u4ec5\u200b\u7531\u200b\u6781\u5927\u200b\u9879\u200b\u6784\u6210\u200b\u7684\u200b\u5408\u53d6\u8303\u5f0f\u200b\u4e3a\u4e3b\u200b\u5408\u53d6\u8303\u5f0f\u200b\u3002\u200b\u4e3b\u200b\u6790\u53d6\u8303\u5f0f\u200b\u4e0e\u200b\u4e3b\u200b\u5408\u53d6\u8303\u5f0f\u200b\u90fd\u200b\u662f\u200b\u552f\u4e00\u200b\u7684\u200b\u3002
\u200b\u6781\u5927\u200b\u9879\u200b\u3001\u200b\u6781\u5c0f\u200b\u9879\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \u200b\u6781\u5927\u200b\u9879\u200b\u3001\u200b\u6781\u5c0f\u200b\u9879\u200b\u7684\u200b\u6570\u91cf\u200b\u7b49\u4e8e\u200b\u516c\u5f0f\u200b\u53ef\u80fd\u200b\u7684\u200b\u89e3\u91ca\u200b\u6570\u91cf\u200b\uff0c\u200b\u5373\u200b\\(2^n\\)
- \u200b\u6bcf\u4e2a\u200b\u6781\u5c0f\u200b\u9879\u4ec5\u200b\u5728\u200b\u516c\u5f0f\u200b\u7684\u200b\u4e00\u4e2a\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u4e3a\u200b\\(T\\)\uff0c\u200b\u6bcf\u4e2a\u200b\u6781\u5927\u200b\u9879\u4ec5\u200b\u5728\u200b\u516c\u5f0f\u200b\u7684\u200b\u4e00\u4e2a\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u4e3a\u200b\\(F\\)
- \u200b\u6781\u5c0f\u200b\u9879\u200b\u3001\u200b\u6781\u5927\u200b\u9879\u200b\u4e24\u200b\u4e24\u200b\u4e0d\u200b\u7b49\u503c\u200b\uff0c\u200b\u6709\u200b\\(m_i\\land m_j\\leftrightarrow i=j, M_i\\lor M_j\\leftrightarrow i\\not= j\\)\u3002
- \u200b\u4efb\u4e00\u200b\u542b\u6709\u200b\\(n\\)\u200b\u4e2a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u7684\u200b\u516c\u5f0f\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u7528\u200b\\(k\\leq n\\)\u200b\u4e2a\u200b\u6781\u5c0f\u200b\u9879\u200b\u6216\u200b\\(k\\leq n\\)\u200b\u4e2a\u200b\u6781\u5927\u200b\u9879\u200b\u8868\u793a\u200b\u3002
- \\(\\bigwedge _{i=0} ^{2^n-1} M_i=F, \\bigvee _{i=0}^{2^n-1} m_i = T\\)
"},{"location":"math/discrete-mathematics/chapter-2/#_8","title":"\u63a8\u7406\u200b\u5f62\u5f0f","text":"\u200b\u5c06\u200b\u81ea\u7136\u200b\u8bed\u53e5\u200b\u63cf\u8ff0\u200b\u7684\u200b\u63a8\u7406\u200b\u5173\u7cfb\u200b\u7ecf\u200b\u62bd\u8c61\u5316\u200b\u540e\u200b\u4f7f\u7528\u200b\u6761\u4ef6\u200b\u5f0f\u200b\u7684\u200b\u8868\u793a\u200b
\u200b\u82e5\u200b\\(A\\rightarrow B=T\\)\uff0c\u200b\u79f0\u200b\\(A\\)\u200b\u91cd\u8a00\u200b\u8574\u542b\u200b\\(B\\)\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(A\\Rightarrow B\\)\u3002\u200b\u91cd\u8a00\u200b\u8574\u542b\u200b\u5173\u7cfb\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \u200b\u82e5\u200b\\(A=T\\)\uff0c\u200b\u4e14\u200b\\(A\\Rightarrow B\\)\uff0c\u200b\u5219\u200b\\(B=T\\)
- \u200b\u82e5\u200b\\(A\\Rightarrow B\\land B\\Rightarrow A\\)\uff0c\u200b\u5219\u200b\\(A=B\\)
- \u200b\u82e5\u200b\\(A\\Rightarrow B\\land B\\Rightarrow C\\)\uff0c\u200b\u5219\u200b\\(A\\Rightarrow C\\)
- \u200b\u82e5\u200b\\(A\\Rightarrow B\\land A\\Rightarrow C\\)\uff0c\u200b\u5219\u200b\\(A\\Rightarrow (B\\land C)\\)
- \u200b\u82e5\u200b\\(A\\Rightarrow C\\land B\\Rightarrow C\\)\uff0c\u200b\u5219\u200b\\((A\\lor B)\\Rightarrow C\\)
\u200b\u8981\u200b\u8bc1\u660e\u200b\u4e00\u4e2a\u200b\u5f0f\u5b50\u200b\u4e3a\u91cd\u200b\u8a00\u200b\u8574\u542b\u200b\u5f0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8bc1\u660e\u200b\\(A\\rightarrow B\\)\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u6216\u200b\\(\\lnot A\\land B\\)\u200b\u4e3a\u200b\u77db\u76fe\u200b\u5f0f\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-2/#_9","title":"\u57fa\u672c\u200b\u7684\u200b\u63a8\u7406\u200b\u516c\u5f0f","text":"\u200b\u5982\u4e0b\u200b\u5217\u51fa\u200b\u4e00\u4e9b\u200b\u57fa\u672c\u200b\u7684\u200b\u63a8\u7406\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5f0f\u200b\u4e2d\u200b\\(P,Q,R,S\\)\u200b\u5747\u200b\u4e3a\u200b\u4efb\u610f\u200b\u547d\u9898\u200b\u53d8\u9879\u200b
- \\(P\\land Q\\Rightarrow P\\)
- \\(\\lnot(P\\rightarrow Q)\\Rightarrow P\\)
- \\(\\lnot(P\\rightarrow Q)\\Rightarrow \\lnot Q\\)
- \\(P\\Rightarrow P\\lor Q\\)
- \\(\\lnot P\\Rightarrow P\\rightarrow Q\\)
- \\(Q\\Rightarrow P\\rightarrow Q\\)
- \\(\\lnot P \\land(P\\lor Q)\\Rightarrow Q\\)
- \\(P\\land (P\\rightarrow Q) \\Rightarrow Q\\)\uff0c\u200b\u5206\u79bb\u200b\u89c4\u5219\u200b
- \\(\\lnot Q\\land (P\\rightarrow Q)\\Rightarrow \\lnot P\\)
- \\((P\\rightarrow Q)\\land (Q\\rightarrow R)\\Rightarrow P\\rightarrow R\\)\uff0c\u200b\u4e09\u6bb5\u8bba\u200b
- \\((P\\leftrightarrow Q)\\land (Q\\leftrightarrow R)\\Rightarrow P\\leftrightarrow R\\)
- \\((P\\rightarrow R)\\land (Q\\rightarrow R)\\land (P\\lor Q)\\Rightarrow R\\)
- \\((R\\rightarrow Q)\\land (R\\rightarrow S)\\land (P\\lor R)\\Rightarrow Q\\lor S\\)
- \\((P\\rightarrow Q)\\land (R\\rightarrow S)\\land (\\lnot Q\\lor \\lnot S)\\Rightarrow (\\lnot P\\lor \\lnot R)\\)
- \\(Q\\rightarrow R\\Rightarrow ((P\\lor Q)\\rightarrow (P\\lor R))\\)
- \\(Q\\rightarrow R\\Rightarrow ((P\\rightarrow Q)\\rightarrow (P\\rightarrow R))\\)
"},{"location":"math/discrete-mathematics/chapter-2/#_10","title":"\u63a8\u7406\u200b\u6f14\u7b97","text":"\u200b\u63a8\u7406\u200b\u6f14\u7b97\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u89c4\u5219\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\uff1a
- \u200b\u524d\u63d0\u200b\u5f15\u5165\u200b\u89c4\u5219\u200b\uff1a\u200b\u63a8\u7406\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u968f\u65f6\u200b\u5f15\u5165\u200b\u524d\u63d0\u200b
- \u200b\u7ed3\u8bba\u200b\u5f15\u7528\u200b\u89c4\u5219\u200b\uff1a\u200b\u63a8\u7406\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u7684\u200b\u4e2d\u95f4\u200b\u7ed3\u8bba\u200b\u53ef\u4ee5\u200b\u4f5c\u4e3a\u200b\u540e\u7eed\u200b\u63a8\u7406\u200b\u7684\u200b\u524d\u63d0\u200b
- \u200b\u4ee3\u5165\u200b\u89c4\u5219\u200b\uff1a\u200b\u63a8\u7406\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u5bf9\u200b\u91cd\u8a00\u5f0f\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4ee3\u5165\u200b\u89c4\u5219\u200b
- \u200b\u7f6e\u6362\u200b\u89c4\u5219\u200b\uff1a\u200b\u63a8\u7406\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u4efb\u4f55\u200b\u90e8\u5206\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u7528\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\u7684\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u8fdb\u884c\u200b\u66ff\u6362\u200b
- \u200b\u5206\u79bb\u200b\u89c4\u5219\u200b\uff1a\u200b\u82e5\u200b\\(A\\)\u200b\u4e14\u200b\\(A\\rightarrow B\\)\u200b\u5219\u200b\\(B\\)
- \u200b\u6761\u4ef6\u200b\u8bc1\u660e\u200b\u89c4\u5219\u200b\uff1a\\(A_1\\land A_2\\Rightarrow B \\Leftrightarrow A_1\\Rightarrow A_2\\rightarrow B\\)
"},{"location":"math/discrete-mathematics/chapter-2/#_11","title":"\u5f52\u7ed3\u200b\u63a8\u7406","text":"\u200b\u601d\u8def\u200b\uff1a\u200b\u8981\u200b\u8bc1\u660e\u200b\\(A\\Rightarrow B\\)\uff0c\u200b\u53ef\u200b\u8bc1\u660e\u200b\\(A\\land \\lnot B=F\\)\u3002
- \u200b\u5c06\u200b\\(C = A\\land \\lnot B\\)\u200b\u5316\u4e3a\u200b\u5408\u53d6\u8303\u5f0f\u200b\\(Q_1\\land \\dots \\land Q_n\\)\uff0c\u200b\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u6790\u53d6\u200b\u5f0f\u200b\u6784\u6210\u200b\u5b50\u53e5\u200b\u96c6\u5408\u200b\\(\\{Q_1,\\dots, Q_n\\}\\)
- \u200b\u6d88\u200b\u53bb\u200b\u5b50\u53e5\u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u4e92\u8865\u200b\u5bf9\u200b\uff0c\u200b\u5982\u200b\\(P\\lor R\\)\u200b\u4e0e\u200b\\(\\lnot P\\lor \\lnot Q\\)\u200b\u5f52\u7ed3\u200b\u5f97\u5230\u200b\\(R\\lor \\lnot Q\\)\u3002\u200b\u4e0d\u65ad\u200b\u91cd\u590d\u200b\u6d88\u200b\u53bb\u200b\u8fc7\u7a0b\u200b\u3002
- \u200b\u76f4\u5230\u200b\u5b50\u53e5\u200b\u96c6\u5408\u200b\u4e3a\u7a7a\u200b\uff0c\u200b\u5f97\u5230\u200b\u7a7a\u5b50\u200b\u53e5\u200b\\(\\square\\)\uff0c\u200b\u8bc1\u660e\u200b\\(A\\land \\lnot B\\)\u200b\u662f\u200b\u77db\u76fe\u200b\u5f0f\u200b
"},{"location":"math/discrete-mathematics/chapter-3/","title":"\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u5316","text":"\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u7ed3\u6784\u200b\uff1a
- \u200b\u521d\u59cb\u200b\u7b26\u53f7\u200b\uff1a\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u5141\u8bb8\u200b\u51fa\u73b0\u200b\u7684\u200b\u7b26\u53f7\u200b\u96c6\u5408\u200b
- \u200b\u5f62\u6210\u200b\u89c4\u5219\u200b\uff1a\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u7b26\u53f7\u200b\u5e8f\u5217\u200b\u7684\u200b\u5408\u6cd5\u6027\u200b
- \u200b\u516c\u7406\u200b\uff1a\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u6700\u200b\u57fa\u672c\u200b\u7684\u200b\u91cd\u8a00\u5f0f\u200b\uff0c\u200b\u662f\u200b\u63a8\u6f14\u200b\u5176\u4ed6\u200b\u6240\u6709\u200b\u91cd\u8a00\u5f0f\u200b\u7684\u200b\u4f9d\u636e\u200b
- \u200b\u53d8\u5f62\u200b\u89c4\u5219\u200b\uff1a\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u6240\u200b\u89c4\u5b9a\u200b\u7684\u200b\u63a8\u6f14\u200b\u89c4\u5219\u200b\uff0c\u200b\u516c\u7406\u200b\u901a\u8fc7\u200b\u53d8\u5f62\u200b\u89c4\u5219\u200b\u5f97\u5230\u200b\u7684\u200b\u516c\u5f0f\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u5b9a\u7406\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_2","title":"\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf","text":"\u200b\u4f9d\u636e\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u7684\u200b\u7ed3\u6784\u200b\u5efa\u7acb\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u3002\u200b\u5e94\u5f53\u200b\u6ce8\u610f\u200b\u5230\u200b\uff0c\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u4e0d\u662f\u200b\u552f\u4e00\u200b\u7684\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-3/#_3","title":"\u521d\u59cb\u200b\u7b26\u53f7","text":"\u200b\u5927\u5199\u200b\u82f1\u6587\u5b57\u6bcd\u200b\\(A,\\dots ,Z\\)\u200b\u8868\u793a\u200b\u547d\u9898\u200b \\(\\lnot, \\lor\\)\u200b\u8868\u793a\u200b\u8054\u7ed3\u8bcd\u200b \\((, )\\)\u200b\u4e00\u5bf9\u200b\u62ec\u53f7\u200b\u89c4\u5b9a\u200b\u4e86\u200b\u8054\u7ed3\u8bcd\u200b\u8fd0\u7b97\u200b\u7684\u200b\u4f18\u5148\u200b\u987a\u5e8f\u200b \\(\\vdash\\)\u200b\u8868\u660e\u200b\u4e00\u4e2a\u200b\u516c\u5f0f\u200b\u662f\u200b\u6c38\u771f\u5f0f\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_4","title":"\u5f62\u6210\u200b\u89c4\u5219","text":"\u200b\u79f0\u200b\u521d\u59cb\u200b\u7b26\u53f7\u200b\u6784\u6210\u200b\u7684\u200b\u7b26\u53f7\u200b\u5e8f\u5217\u200b\u4e3a\u200b\u516c\u5f0f\u200b\uff0c\u200b\u53ea\u6709\u200b\u7b26\u5408\u200b\u4ee5\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u7b26\u53f7\u200b\u5e8f\u5217\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff1a
- \u200b\u5355\u4e2a\u200b\u7b26\u53f7\u200b\\(\\pi\\)\uff0c\\(\\pi\\)\u200b\u662f\u200b\u5927\u5199\u200b\u82f1\u6587\u5b57\u6bcd\u200b
- \u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\\(\\lnot A\\)\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A, B\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\\((A\\lor B)\\)\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b
\u200b\u4e3a\u200b\u7b80\u5316\u200b\u5176\u4ed6\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u7684\u200b\u8868\u8fbe\u200b\uff0c\u200b\u5f15\u5165\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\u7684\u200b\u516c\u5f0f\u200b\uff1a
- \\((A\\rightarrow B):= (\\lnot A\\lor B)\\)
- \\((A\\land B):= \\lnot (\\lnot A\\lor \\lnot B)\\)
- \\((A\\leftrightarrow B):= ((A\\rightarrow B)\\land (B\\rightarrow A))\\)
"},{"location":"math/discrete-mathematics/chapter-3/#_5","title":"\u516c\u7406","text":"\u200b\u5728\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u5f15\u5165\u200b\u5982\u4e0b\u200b\u516c\u7406\u200b\uff1a
- \\(\\vdash ((P\\lor P)\\rightarrow P)\\)
- \\(\\vdash (P\\rightarrow (P\\lor Q))\\)
- \\(\\vdash ((P\\lor Q) \\rightarrow (Q\\lor P))\\)
- \\(\\vdash ((Q\\rightarrow R)\\rightarrow ((P\\lor Q)\\rightarrow (P\\lor R)))\\)
"},{"location":"math/discrete-mathematics/chapter-3/#_6","title":"\u63a8\u7406\u200b\u89c4\u5219","text":"\u200b\u4ee3\u5165\u200b\u89c4\u5219\u200b\u3001\u200b\u5206\u79bb\u200b\u89c4\u5219\u200b\u3001\u200b\u7f6e\u6362\u200b\u89c4\u5219\u200b\u662f\u200b\u547d\u9898\u903b\u8f91\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u63a8\u7406\u200b\u89c4\u5219\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_7","title":"\u738b\u6d69\u200b\u7b97\u6cd5","text":""},{"location":"math/discrete-mathematics/chapter-3/#_8","title":"\u521d\u59cb\u200b\u7b26\u53f7","text":"\u200b\u5927\u5199\u5b57\u6bcd\u200b\\(A, \\dots, Z\\)\u200b\u8868\u793a\u200b\u547d\u9898\u200b \\(\\lnot, \\land, \\lor, \\rightarrow, \\leftrightarrow\\)\u200b\u8868\u793a\u200b\u8054\u7ed3\u8bcd\u200b \\((, ), ,\\)\u200b\u8868\u793a\u200b\u5706\u62ec\u53f7\u200b\u4e0e\u200b\u9017\u53f7\u200b \\(\\alpha, \\beta, \\dots, \\omega\\)\u200b\u8868\u793a\u200b\u516c\u5f0f\u200b\u4e32\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_9","title":"\u5f62\u6210\u200b\u89c4\u5219","text":"\u200b\u7b26\u5408\u200b\u4ee5\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u7b26\u53f7\u200b\u5e8f\u5217\u200b\u79f0\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff1a
- \u200b\u5355\u4e2a\u200b\u7b26\u53f7\u200b\\(\\pi\\)\uff0c\\(\\pi\\)\u200b\u662f\u200b\u5927\u5199\u200b\u82f1\u6587\u5b57\u6bcd\u200b
- \u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\u200b\u5219\u200b\\(\\lnot A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A, B\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\u200b\u5219\u200b\\((A\\lnot B), (A\\lor B), (A\\rightarrow B), (A\\leftrightarrow B)\\)\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b
\u200b\u6ee1\u8db3\u200b\u4ee5\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u79f0\u4e3a\u200b\u516c\u5f0f\u200b\u4e32\u200b\uff1a
- \u200b\u7a7a\u200b\u7b26\u53f7\u4e32\u200b\u662f\u200b\u516c\u5f0f\u200b\u4e32\u200b
- \u200b\u5408\u5f0f\u516c\u5f0f\u200b\u662f\u200b\u516c\u5f0f\u200b\u4e32\u200b
- \u200b\u5982\u679c\u200b\\(\\alpha\\)\u200b\u548c\u200b\\(\\beta\\)\u200b\u662f\u200b\u516c\u5f0f\u200b\u4e32\u200b\uff0c\u200b\u5219\u200b\\(\\alpha, \\beta\\)\u200b\u662f\u200b\u516c\u5f0f\u200b\u4e32\u200b
\u200b\u516c\u5f0f\u200b\u4e32\u200b\u4e0e\u200b\u7ec4\u6210\u200b\u516c\u5f0f\u200b\u4e32\u200b\u7684\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u7684\u200b\u987a\u5e8f\u200b\u65e0\u5173\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-3/#_10","title":"\u5b9a\u4e49","text":" - \u200b\u5b9a\u4e49\u200b\u76f8\u7ee7\u200b\u5f0f\u200b\u4e3a\u200b\\(\\alpha\\stackrel s\\rightarrow\\beta\\)\uff0c\u200b\u5176\u4e2d\u200b\\(\\alpha, \\beta\\)\u200b\u90fd\u200b\u662f\u200b\u516c\u5f0f\u200b\u4e32\u200b
- \u200b\u524d\u4ef6\u200b\u4e2d\u200b\u7684\u200b\\(,\\)\u200b\u89e3\u91ca\u200b\u4e3a\u200b\\(\\land\\)\uff0c\u200b\u540e\u4ef6\u200b\u4e2d\u200b\u7684\u200b\\(,\\)\u200b\u89e3\u91ca\u200b\u4e3a\u200b\\(\\lor\\)
- \u200b\u82e5\u200b\\(\\alpha\\stackrel s\\rightarrow \\beta\\)\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8bb0\u200b\u4f5c\u200b\\(\\alpha\\stackrel s\\Rightarrow \\beta\\)
"},{"location":"math/discrete-mathematics/chapter-3/#_11","title":"\u516c\u7406","text":"\u200b\u82e5\u200b\\(\\alpha\\)\u200b\u548c\u200b\\(\\beta\\)\u200b\u7684\u200b\u516c\u5f0f\u200b\u4ec5\u4e3a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\uff0c\u200b\u4e0d\u200b\u5305\u542b\u200b\u8054\u7ed3\u8bcd\u200b\uff0c\u200b\u5219\u200b\\(\\alpha\\stackrel s\\rightarrow \\beta\\)\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\\(\\alpha\\)\u200b\u4e0e\u200b\\(\\beta\\)\u200b\u4e2d\u200b\u81f3\u5c11\u200b\u542b\u6709\u200b\u4e00\u4e2a\u200b\u76f8\u540c\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_12","title":"\u63a8\u7406\u200b\u89c4\u5219","text":"\u200b\u5bf9\u4e8e\u200b\u5b58\u5728\u200b\u4e8e\u200b\u524d\u4ef6\u200b\u4e2d\u200b\u7684\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u63a8\u7406\u200b\u89c4\u5219\u200b\u5982\u4e0b\u200b\uff1a
- \\(\\lnot\\)\uff1a\u200b\u82e5\u200b\\(\\alpha, \\beta \\stackrel s\\Rightarrow X, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha, \\lnot X, \\beta \\stackrel x\\Rightarrow \\gamma\\)
- \\(\\land\\)\uff1a\u200b\u82e5\u200b\\(X, Y, \\alpha, \\beta\\stackrel s\\Rightarrow \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha, X\\land Y, \\beta\\stackrel s\\Rightarrow Y\\)
- \\(\\lor\\)\uff1a\u200b\u82e5\u200b\\(X, \\alpha, \\beta \\stackrel s\\Rightarrow \\gamma\\)\u200b\u4e14\u200b\\(Y, \\alpha, \\beta \\stackrel s\\Rightarrow X, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha, X\\lor Y, \\beta\\stackrel s\\Rightarrow \\gamma\\)
- \\(\\rightarrow\\)\uff1a\u200b\u82e5\u200b\\(Y, \\alpha, \\beta\\stackrel s\\Rightarrow \\gamma\\)\u200b\u4e14\u200b\\(\\alpha, \\beta\\stackrel s\\Rightarrow X, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha, X\\rightarrow Y, \\beta\\stackrel s\\Rightarrow \\gamma\\)
- \\(\\leftrightarrow\\)\uff1a\u200b\u82e5\u200b\\(X, Y, \\alpha, \\beta\\stackrel s\\Rightarrow \\gamma\\)\u200b\u4e14\u200b\\(\\alpha, \\beta\\stackrel s\\Rightarrow X, Y, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha, X\\leftrightarrow Y, \\beta\\stackrel s\\Rightarrow \\gamma\\)
\u200b\u5bf9\u4e8e\u200b\u5b58\u5728\u200b\u4e8e\u200b\u540e\u4ef6\u200b\u4e2d\u200b\u7684\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u63a8\u7406\u200b\u89c4\u5219\u200b\u5982\u4e0b\u200b\uff1a
- \\(\\lnot\\)\uff1a\u200b\u82e5\u200b\\(X, \\alpha\\stackrel s\\Rightarrow \\beta, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha\\stackrel s\\Rightarrow\\beta, \\lnot X, \\gamma\\)
- \\(\\land\\)\uff1a\u200b\u82e5\u200b\\(\\alpha\\stackrel s\\Rightarrow X, \\beta, \\gamma\\)\u200b\u4e14\u200b\\(\\alpha\\stackrel s\\Rightarrow\\)
- \\(\\land\\)\uff1a\u200b\u82e5\u200b\\(\\alpha\\stackrel s\\Rightarrow X, \\beta, \\gamma\\)\u200b\u4e14\u200b\\(\\alpha\\stackrel s\\Rightarrow Y, \\beta, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha \\stackrel s\\Rightarrow\\beta, X\\land Y, \\gamma\\)
- \\(\\lor\\)\uff1a\u200b\u82e5\u200b\\(\\alpha\\stackrel s\\Rightarrow X, Y, \\beta, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha\\stackrel s\\Rightarrow \\beta, X\\lor Y, \\gamma\\)
- \\(\\rightarrow\\)\uff1a\u200b\u82e5\u200b\\(X, \\alpha\\stackrel s\\Rightarrow Y, \\beta, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha\\stackrel s\\Rightarrow \\beta, X\\rightarrow Y, \\gamma\\)
- \\(\\leftrightarrow\\)\uff1a\u200b\u82e5\u200b\\(X, \\alpha\\stackrel s\\Rightarrow Y, \\beta, \\gamma\\)\u200b\u4e14\u200b\\(Y, \\alpha\\stackrel s\\Rightarrow X, \\beta, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha \\stackrel s\\Rightarrow \\beta, X\\leftrightarrow Y, \\gamma\\)
\u200b\u5b9a\u7406\u200b\u7684\u200b\u63a8\u6f14\u200b\u8fc7\u7a0b\u200b\uff1a
- \u200b\u5c06\u8981\u200b\u8bc1\u660e\u200b\u7684\u200b\u5b9a\u7406\u200b\u5199\u6210\u200b\u76f8\u7ee7\u200b\u5f0f\u200b\u5f62\u5f0f\u200b
- \u200b\u4ece\u200b\u76f8\u7ee7\u200b\u5f0f\u200b\u51fa\u53d1\u200b\u4f7f\u7528\u200b\u53d8\u5f62\u200b\u89c4\u5219\u200b\u6d88\u200b\u53bb\u200b\u76f8\u7ee7\u200b\u5f0f\u200b\u4e24\u4fa7\u200b\u7684\u200b\u6240\u6709\u200b\u903b\u8f91\u200b\u8054\u7ed3\u8bcd\u200b
- \u200b\u82e5\u200b\u5f97\u5230\u200b\u7684\u200b\u6240\u6709\u200b\u76f8\u7ee7\u200b\u5f0f\u200b\u90fd\u200b\u662f\u200b\u516c\u7406\u200b\uff0c\u200b\u5219\u200b\u5b9a\u7406\u200b\u6210\u7acb\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_13","title":"\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf","text":""},{"location":"math/discrete-mathematics/chapter-3/#_14","title":"\u521d\u59cb\u200b\u7b26\u53f7","text":"\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf\u200b\u7684\u200b\u4e00\u90e8\u5206\u200b\u521d\u59cb\u200b\u7b26\u53f7\u200b\u7ee7\u627f\u200b\u81ea\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u3002\u200b\u6b64\u5916\u200b\uff0c\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf\u200b\u8fd8\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u521d\u59cb\u200b\u7b26\u53f7\u200b\uff1a
\\[ \\varGamma = \\{A_1, \\dots, A_n\\}=A_1, \\dots, A_n \\] \u200b\u8868\u793a\u200b\u6709\u9650\u200b\u4e2a\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u96c6\u5408\u200b\uff0c\u200b\u5b9a\u4e49\u200b\\(\\varGamma \\vdash A\\)\u200b\u8868\u793a\u200b\\(\\varGamma, A\\)\u200b\u4e4b\u95f4\u200b\u6709\u200b\u5f62\u5f0f\u200b\u63a8\u7406\u200b\u5173\u7cfb\u200b\uff0c\\(\\varGamma\\)\u200b\u4e3a\u200b\u5f62\u5f0f\u200b\u524d\u63d0\u200b\uff0c\\(A\\)\u200b\u4e3a\u200b\u5f62\u5f0f\u200b\u7ed3\u8bba\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-3/#_15","title":"\u5f62\u6210\u200b\u89c4\u5219","text":"\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf\u200b\u7684\u200b\u5f62\u6210\u200b\u89c4\u5219\u200b\u4e0e\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u7684\u200b\u5f62\u6210\u200b\u89c4\u5219\u200b\u76f8\u540c\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_16","title":"\u53d8\u5f62\u200b\u89c4\u5219","text":"\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf\u200b\u6709\u200b\u5982\u4e0b\u200b\u53d8\u5f62\u200b\u89c4\u5219\u200b\uff1a
- \\(A_1, \\dots, A_n\\vdash A_i(i=1, \\dots, n)\\)\uff0c\u200b\u5373\u200b\u524d\u63d0\u200b\u4e2d\u200b\u7684\u200b\u4efb\u4f55\u200b\u547d\u9898\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u4f5c\u4e3a\u200b\u7ed3\u8bba\u200b\u51fa\u73b0\u200b
- \u200b\u4f20\u9012\u200b\u5f8b\u200b\uff1a\u200b\u82e5\u200b\\(\\varGamma \\vdash A\\)\u200b\u4e14\u200b\\(A\\vdash B\\)\uff0c\u200b\u5219\u200b\\(\\varGamma\\vdash B\\)
- \u200b\u53cd\u8bc1\u200b\u5f8b\u200b\uff1a\u200b\u82e5\u200b\\(\\varGamma, \\lnot A\\vdash B\\)\u200b\u4e14\u200b\\(\\varGamma, \\lnot A\\vdash \\lnot B\\)\uff0c\u200b\u5219\u200b\\(\\varGamma \\vdash A\\)\uff08\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u8bc1\u660e\u200b\\(\\varGamma \\land \\lnot A=F\\)\uff09
- \u200b\u5206\u79bb\u200b\u89c4\u5219\u200b\uff1a\\(A, A\\rightarrow B\\vdash B\\)
- \u200b\u8574\u542b\u200b\u8bcd\u200b\u5f15\u5165\u200b\uff1a\u200b\u82e5\u200b\\(\\varGamma, A\\vdash B\\)\uff0c\u200b\u5219\u200b\\(\\varGamma\\vdash A\\rightarrow B\\)
"},{"location":"math/discrete-mathematics/chapter-3/#_17","title":"\u5b9a\u7406","text":"\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf\u200b\u5305\u542b\u200b\u7684\u200b\u5b9a\u7406\u200b\u4e0e\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u5305\u542b\u200b\u7684\u200b\u5b9a\u7406\u200b\u76f8\u540c\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_18","title":"\u975e\u6807\u51c6\u200b\u903b\u8f91","text":" - \u200b\u591a\u503c\u903b\u8f91\u200b\uff0c\u200b\u82e5\u200b\\(P\\)\u200b\u53d6\u503c\u200b\u4e8e\u200b\\([0,1]\\)\uff0c\u200b\u53ef\u4ee5\u200b\u89e3\u91ca\u200b\u4e3a\u200b
- \\(P=0\\)\u200b\u8868\u793a\u200b\\(P\\)\u200b\u771f\u200b
- \\(P=1\\)\u200b\u8868\u793a\u200b\\(P\\)\u200b\u5047\u200b
- \\(0<P<1\\)\u200b\u8868\u793a\u200b\\(P\\)\u200b\u4e3a\u200b\u771f\u7684\u200b\u6982\u7387\u200b\u4e3a\u200b\\(1-P\\)
- \u200b\u4e09\u503c\u200b\u903b\u8f91\u200b
- Kleene\u200b\u903b\u8f91\u200b\uff1a\\(T, F, U\\)\uff0c\\(U\\)\u200b\u8868\u793a\u200b\u672a\u77e5\u200b
- Lukasiewicz\u200b\u903b\u8f91\u200b\uff1a\\(T, F, I\\)\uff0c\\(I\\)\u200b\u8868\u793a\u200b\u5c06\u6765\u200b\u53ef\u80fd\u200b\uff0c\u200b\u76ee\u524d\u200b\u4e0d\u200b\u5177\u5907\u200b\u771f\u503c\u200b
- Bochvar\u200b\u903b\u8f91\u200b\uff1a\\(T, F, M\\)\uff0c\\(M\\)\u200b\u8868\u793a\u200b\u6096\u8bba\u200b
"},{"location":"math/discrete-mathematics/chapter-4/","title":"\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u7684\u200b\u57fa\u672c\u6982\u5ff5","text":"\u200b\u8c13\u8bcd\u200b\u8868\u793a\u200b\u4e86\u200b\u591a\u4e2a\u200b\u4e2a\u4f53\u200b\u8bcd\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5173\u7cfb\u200b\u3002\u200b\u8fdb\u4e00\u6b65\u200b\u5730\u200b\u8bb2\u200b\u662f\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u4e2a\u4f53\u200b\u8bcd\u5230\u200b\u96c6\u5408\u200b\\(\\{T, F\\}\\)\u200b\u4e0a\u200b\u7684\u200b\u4e00\u4e2a\u200b\u6620\u5c04\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5176\u200b\u5199\u200b\u4e3a\u200b\u51fd\u6570\u200b\u7684\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u5982\u200b\\(P(x, y)\\)
\u200b\u51fd\u6570\u200b\u8868\u793a\u200b\u4ece\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\u5230\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\u7684\u200b\u6620\u5c04\u200b\uff0c\u200b\u901a\u5e38\u200b\u4f7f\u7528\u200b\u5c0f\u5199\u5b57\u6bcd\u200b\u8fdb\u884c\u200b\u8868\u793a\u200b\u3002
\u200b\u6709\u200b\u4e24\u79cd\u200b\u91cf\u8bcd\u200b\uff0c\u200b\u5373\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u4e0e\u200b\u5b58\u5728\u200b\u91cf\u8bcd\u200b\u3002\u200b\u53d7\u5230\u200b\u91cf\u8bcd\u200b\u7ea6\u675f\u200b\u7684\u200b\u53d8\u5143\u200b\u79f0\u4e3a\u200b\u7ea6\u675f\u200b\u53d8\u5143\u200b\uff0c\u200b\u5426\u5219\u200b\u79f0\u4e3a\u200b\u81ea\u7531\u200b\u53d8\u5143\u200b\u3002\u200b\u91cf\u8bcd\u200b\u53ea\u80fd\u200b\u4f5c\u7528\u200b\u4e8e\u200b\u53d8\u5143\u200b\u800c\u200b\u4e0d\u80fd\u200b\u4f5c\u7528\u200b\u4e8e\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u4e0e\u200b\u8c13\u8bcd\u200b\u53d8\u9879\u200b\u3002\u200b\u53d8\u5143\u200b\u4f7f\u7528\u200b\u5c0f\u5199\u5b57\u6bcd\u200b\u8868\u793a\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-4/#_2","title":"\u5408\u5f0f\u516c\u5f0f","text":"\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u547d\u9898\u200b\u5e38\u9879\u200b\u3001\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u548c\u200b\u539f\u5b50\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u90fd\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\u200b\u5219\u200b\\(\\lnot A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A, B\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\u200b\u4e14\u200b\\(A, B\\)\u200b\u4e2d\u65e0\u53d8\u200b\u5143\u200b\u5728\u200b\u4e00\u4e2a\u200b\u4e2d\u200b\u7ea6\u675f\u200b\u800c\u200b\u5728\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u4e2d\u200b\u81ea\u7531\u200b\uff0c\u200b\u5219\u200b\\((A\\land B), (A\\lor B), (A\\rightarrow B), (A\\leftrightarrow B)\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u3002
- \u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\\(x\\)\u200b\u5728\u200b\\(A\\)\u200b\u4e2d\u4e3a\u200b\u81ea\u7531\u200b\u53d8\u5143\u200b\uff0c\u200b\u5219\u200b\\((\\forall x)A, (\\exists x)A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
\u200b\u5728\u200b\u6709\u9650\u200b\u8bba\u57df\u200b\u4e0b\u200b\uff0c\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u4e0e\u200b\u7279\u79f0\u200b\u91cf\u8bcd\u200b\u53ef\u200b\u4e0e\u200bi\u200b\u8868\u793a\u200b\u4e3a\u200b\u547d\u9898\u903b\u8f91\u200b\u4e0b\u200b\u7684\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff1a
- \\((\\forall x)P(x) = P(1)\\land P(2)\\land \\dots \\land P(k)\\)
- \\((\\exists x)P(x) = P(1)\\lor P(2)\\lor \\dots \\lor P(k)\\)\\
\u200b\u5bf9\u4e8e\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\uff0c\u200b\u82e5\u200b\u5728\u200b\u4efb\u4f55\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u771f\u503c\u200b\u90fd\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u79f0\u8c13\u200b\u8bcd\u200b\u516c\u5f0f\u200b\u4e3a\u200b\u666e\u904d\u200b\u6709\u6548\u200b\u7684\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\uff1b\u200b\u82e5\u200b\u5728\u200b\u67d0\u4e2a\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u771f\u503c\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u79f0\u8c13\u200b\u8bcd\u200b\u516c\u5f0f\u200b\u4e3a\u200b\u53ef\u200b\u6ee1\u8db3\u200b\u7684\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5426\u5219\u200b\u79f0\u4e3a\u200b\u4e0d\u53ef\u200b\u6ee1\u8db3\u200b\u7684\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u3002
- \u200b\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u662f\u200b\u4e0d\u53ef\u5224\u5b9a\u200b\u7684\u200b
- \u200b\u53ea\u200b\u542b\u6709\u200b\u4e00\u5143\u200b\u8c13\u8bcd\u200b\u53d8\u9879\u200b\u7684\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u662f\u200b\u53ef\u200b\u5224\u5b9a\u200b\u7684\u200b
- \u200b\u4e2a\u4f53\u200b\u57df\u200b\u6709\u9650\u200b\u7684\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u662f\u200b\u53ef\u200b\u5224\u5b9a\u200b\u7684\u200b
"},{"location":"math/discrete-mathematics/chapter-5/","title":"\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u7684\u200b\u7b49\u503c\u200b\u548c\u200b\u63a8\u7406\u200b\u6f14\u7b97","text":"\u200b\u5bf9\u4e8e\u200b\u4e24\u4e2a\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\\(A, B\\)\uff0c\u200b\u82e5\u200b\u5728\u200b\\(A, B\\)\u200b\u7684\u200b\u4efb\u4e00\u200b\u89e3\u91ca\u200b\u4e0b\u200b\uff0c\\(A, B\\)\u200b\u90fd\u200b\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5373\u200b\\(A\\leftrightarrow B\\)\uff0c\u200b\u79f0\u200b\\(A, B\\)\u200b\u7b49\u503c\u200b\u3002\u200b\u8bb0\u200b\u4e3a\u200b\\(A=B\\)\u200b\u6216\u200b\\(A\\Leftrightarrow B\\)\u3002
"},{"location":"math/discrete-mathematics/chapter-5/#_2","title":"\u7b49\u503c\u200b\u5f0f","text":" - \u200b\u5c06\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4ee3\u5165\u200b\u547d\u9898\u903b\u8f91\u200b\u4e0b\u200b\u7684\u200b\u7b49\u503c\u200b\u516c\u5f0f\u200b\u5373\u53ef\u200b\u5f97\u5230\u200b\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u7684\u200b\u7b49\u503c\u200b\u516c\u5f0f\u200b
- \u200b\u5426\u5b9a\u200b\u578b\u200b\u7b49\u503c\u200b\u5f0f\u200b
- \\(\\lnot (\\forall x)P(x) = (\\exists x)\\lnot P(x)\\)
- \\(\\lnot (\\exists x)P(x) = (\\forall x)\\lnot P(x)\\)
- \u200b\u91cf\u8bcd\u200b\u5206\u914d\u200b\u7b49\u503c\u200b\u5f0f\u200b\uff08\\(q\\)\u200b\u4e3a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\uff0c\\(x\\)\u200b\u4e3a\u200b\u53d8\u5143\u200b\uff09
- \\((\\forall x)(P(x)\\lor q) = (\\forall x)P(x)\\lor q\\)
- \\((\\exists x)(P(x)\\lor q) = (\\exists x)P(x)\\lor q\\)
- \\((\\forall x)(P(x)\\land q) = (\\forall x)P(x)\\land q\\)
- \\((\\exists x)(P(x)\\land q) = (\\forall x)P(x)\\land q\\)
- \u200b\u5bf9\u200b\\(\\rightarrow\\)\u200b\u7684\u200b\u5206\u914d\u5f8b\u200b
- \\((\\forall x)(P(x)\\rightarrow q) = (\\exists x)P(x)\\rightarrow q\\)
- \\((\\exists x)(P(x)\\rightarrow q) = (\\forall x)P(x)\\rightarrow q\\)
- \\((\\forall x)(p\\rightarrow Q(x)) = p\\rightarrow (\\forall x)Q(x)\\)
- \\((\\exists x)(p\\rightarrow Q(x)) = p\\rightarrow (\\exists x)Q(x)\\)
- \u200b\u91cf\u8bcd\u200b\\(\\forall\\)\u200b\u5bf9\u200b\\(\\land\\)\u3001\u200b\u91cf\u8bcd\u200b\\(\\exists\\)\u200b\u5bf9\u200b\\(\\lor\\)\u200b\u7684\u200b\u5206\u914d\u5f8b\u200b
- \\((\\forall x)(P(x)\\land Q(x)) = (\\forall x)P(x) \\land (\\forall x)Q(x)\\)
- \\((\\exists x)(P(x)\\lor Q(x)) = (\\exists x)P(x) \\lor (\\exists x)Q(x)\\)
- \u200b\u53d8\u5143\u200b\u6613\u540d\u200b\u7684\u200b\u5206\u914d\u5f8b\u200b
- \\((\\forall x)(\\forall y)(P(x)\\lor Q(y)) = (\\forall x)P(x) \\lor (\\forall x)Q(x)\\)
- \\((\\exists x)(\\exists y)(P(x)\\land Q(y)) = (\\forall x)P(x) \\land (\\forall x)Q(x)\\)
"},{"location":"math/discrete-mathematics/chapter-5/#_3","title":"\u8303\u5f0f","text":"\u200b\u82e5\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u4e2d\u200b\u7684\u200b\u4e00\u5207\u200b\u91cf\u8bcd\u200b\u90fd\u200b\u4f4d\u4e8e\u200b\u516c\u5f0f\u200b\u7684\u200b\u6700\u200b\u5de6\u4fa7\u200b\uff0c\u200b\u4e14\u200b\u91cf\u8bcd\u200b\u7684\u200b\u4f5c\u7528\u57df\u200b\u5ef6\u4f38\u200b\u5230\u200b\u516c\u5f0f\u200b\u7684\u200b\u672b\u7aef\u200b\uff0c\u200b\u5219\u200b\u79f0\u8c13\u200b\u8bcd\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u4e3a\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\u3002\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\u7684\u200b\u4e00\u822c\u200b\u5f62\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
\\[ (Q_1x_1)\\dots (Q_nx_n)M(x_1, \\dots, x_n) \\] \u200b\u5176\u4e2d\u200b\\(Q_i\\)\u200b\u4e3a\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\\(\\forall\\)\u200b\u6216\u200b\u7279\u79f0\u200b\u91cf\u8bcd\u200b\\(\\exists\\)\uff0c\\(M\\)\u200b\u79f0\u4e3a\u200b\u6bcd\u5f0f\u200b\uff0c\u200b\u4e0d\u200b\u542b\u6709\u200b\u91cf\u8bcd\u200b\u3002
\u200b\u4efb\u4f55\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u90fd\u200b\u6709\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\u7684\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\uff0c\u200b\u4f46\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\u4e0d\u200b\u552f\u4e00\u200b\u3002\u200b\u901a\u8fc7\u200b\u5982\u4e0b\u200b\u6d41\u7a0b\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u5316\u200b\u4e3a\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\uff1a
- \u200b\u5c06\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\\(\\rightarrow\\)\u200b\u8054\u7ed3\u8bcd\u200b\u4e0e\u200b\\(\\leftrightarrow\\)\u200b\u8054\u7ed3\u8bcd\u200b\u6d88\u200b\u53bb\u200b
- \u200b\u4f7f\u7528\u200b\u6469\u6839\u200b\u5f8b\u200b\uff0c\u200b\u5c06\u200b\\(\\lnot\\)\u200b\u5185\u79fb\u200b\u5230\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u6216\u200b\u8c13\u8bcd\u200b\u4e4b\u524d\u200b
- \u200b\u4f7f\u7528\u200b\u91cf\u8bcd\u200b\u5206\u914d\u200b\u7b49\u503c\u200b\u5f0f\u200b\u5c06\u200b\u91cf\u8bcd\u200b\u79fb\u52a8\u200b\u5230\u200b\u5de6\u4fa7\u200b
- \u200b\u4f7f\u7528\u200b\u53d8\u5143\u200b\u6613\u540d\u200b\u5206\u914d\u200b\u7b49\u503c\u200b\u5f0f\u200b\u5408\u5e76\u200b\u8c13\u8bcd\u200b
"},{"location":"math/discrete-mathematics/chapter-5/#skolem","title":"Skolem\u200b\u6807\u51c6\u578b","text":"\u200b\u79f0\u200b\u4e00\u4e2a\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4e3a\u200b\\(\\exists\\)\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u5b58\u5728\u200b\u91cf\u8bcd\u200b\u90fd\u200b\u5728\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u7684\u200b\u5de6\u8fb9\u200b\uff0c\u200b\u5e76\u4e14\u200b\u53ef\u4ee5\u200b\u4fdd\u6301\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u81f3\u5c11\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u5b58\u5728\u200b\u91cf\u8bcd\u200b\u3002\u200b\u6bcd\u5f0f\u200b\u4e2d\u200b\u4e0d\u200b\u542b\u6709\u200b\u4efb\u4f55\u200b\u91cf\u8bcd\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u200b\u542b\u200b\u81ea\u7531\u200b\u4e2a\u4f53\u200b\u53d8\u9879\u200b\u3002 \u200b\u79f0\u200b\u4e00\u4e2a\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4e3a\u200b\u4ec5\u200b\u4fdd\u7559\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u7684\u200b\u524d\u675f\u200b\u578b\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u53ea\u200b\u5305\u542b\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u800c\u200b\u4e0d\u200b\u5305\u542b\u200b\u5b58\u5728\u200b\u91cf\u8bcd\u200b\u3002\u200b\u6bcd\u5f0f\u200b\u4e2d\u200b\u4e0d\u200b\u542b\u6709\u200b\u4efb\u4f55\u200b\u91cf\u8bcd\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u200b\u542b\u200b\u81ea\u7531\u200b\u4e2a\u4f53\u200b\u53d8\u9879\u200b\u3002
- \u200b\u4e00\u4e2a\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u53ef\u4ee5\u200b\u5316\u6210\u200b\u76f8\u5e94\u200b\u7684\u200b\\(\\exists\\)\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\uff0c\\(A\\)\u200b\u666e\u904d\u200b\u6709\u6548\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\exists\\)\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\u666e\u904d\u200b\u6709\u6548\u200b
- \u200b\u4e00\u4e2a\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u53ef\u4ee5\u200b\u5316\u6210\u200b\u76f8\u5e94\u200b\u7684\u200b\u4ec5\u200b\u4fdd\u7559\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u7684\u200b\u524d\u675f\u200b\u578b\u200b\uff0c\\(A\\)\u200b\u4e0d\u53ef\u200b\u6ee1\u8db3\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u4ec5\u200b\u4fdd\u7559\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u7684\u200b\u524d\u675f\u200b\u578b\u200b\u4e0d\u53ef\u200b\u6ee1\u8db3\u200b
"},{"location":"math/discrete-mathematics/chapter-9/","title":"\u96c6\u5408","text":"\u200b\u96c6\u5408\u200b\u662f\u200b\u4e00\u4e9b\u200b\u786e\u5b9a\u200b\u7684\u200b\u3001\u200b\u53ef\u4ee5\u200b\u533a\u5206\u200b\u7684\u200b\u4e8b\u7269\u200b\u6c47\u805a\u200b\u5728\u200b\u4e00\u8d77\u200b\u7ec4\u6210\u200b\u7684\u200b\u4e00\u4e2a\u200b\u6574\u4f53\u200b\uff0c\u200b\u7ec4\u6210\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u4e8b\u7269\u200b\u79f0\u4e3a\u200b\u8be5\u200b\u96c6\u5408\u200b\u7684\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u3002
- \u200b\u96c6\u5408\u200b\u7684\u200b\u5143\u7d20\u200b\u53ef\u4ee5\u200b\u662f\u200b\u4efb\u4f55\u4e8b\u7269\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u80fd\u200b\u662f\u200b\u81ea\u8eab\u200b
- \u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u6ee1\u8db3\u200b\u552f\u4e00\u6027\u200b\uff0c\u200b\u4e0d\u4f1a\u200b\u51fa\u73b0\u200b\u76f8\u540c\u200b\u7684\u200b\u5143\u7d20\u200b
- \u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u6ca1\u6709\u200b\u987a\u5e8f\u200b\u5173\u7cfb\u200b
- \u200b\u5143\u7d20\u200b\u4e0e\u200b\u96c6\u5408\u200b\u7684\u200b\u5173\u7cfb\u200b\u662f\u200b\u786e\u5b9a\u200b\u7684\u200b\uff0c\u200b\u5373\u200b\u5c5e\u4e8e\u200b\uff08\\(\\in\\)\uff09\u200b\u4e0e\u200b\u4e0d\u200b\u5c5e\u4e8e\u200b\uff08\\(\\not\\in\\)\uff09
"},{"location":"math/discrete-mathematics/chapter-9/#_2","title":"\u96c6\u5408\u200b\u7684\u200b\u8868\u793a","text":"\u200b\u4ee5\u4e0b\u200b\u5217\u4e3e\u200b\u51fa\u200b\u5e38\u89c1\u200b\u7684\u200b\u96c6\u5408\u200b\uff1a
- \\(\\mathbf N\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\u81ea\u7136\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b
- \\(\\mathbf Z\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\u6574\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b
- \\(\\mathbf Q\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\u6709\u7406\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b
- \\(\\mathbf R\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\u5b9e\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b
- \\(\\mathbf C\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\u590d\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b
\u200b\u53ef\u4ee5\u200b\u7528\u200b\u5916\u5ef6\u200b\u8868\u793a\u6cd5\u200b\u6216\u200b\u5185\u6db5\u200b\u8868\u793a\u6cd5\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\uff1a
- \u200b\u5916\u5ef6\u200b\u8868\u793a\u6cd5\u200b\uff1a\u200b\u4e00\u4e00\u5217\u4e3e\u200b\u51fa\u200b\u96c6\u5408\u200b\u7684\u200b\u5168\u4f53\u200b\u5143\u7d20\u200b
- \u200b\u5185\u6db5\u200b\u8868\u793a\u6cd5\u200b\uff1a\u200b\u4f7f\u7528\u200b\u8c13\u8bcd\u200b\u8868\u8ff0\u200b\u96c6\u5408\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u6027\u8d28\u200b
"},{"location":"math/discrete-mathematics/chapter-9/#_3","title":"\u96c6\u5408\u200b\u7684\u200b\u8fd0\u7b97","text":""},{"location":"math/discrete-mathematics/chapter-9/#_4","title":"\u96c6\u5408\u200b\u7684\u200b\u5173\u7cfb\u200b\u8fd0\u7b97","text":"\u200b\u96c6\u5408\u200b\u4e0e\u200b\u5143\u7d20\u200b\u5b58\u5728\u200b\u5c5e\u4e8e\u200b\u4e0e\u200b\u4e0d\u200b\u5c5e\u4e8e\u200b\u5173\u7cfb\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\in, \\not\\in\\)
\u200b\u96c6\u5408\u200b\u4e4b\u95f4\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u5173\u7cfb\u200b\\(=, \\subseteq, \\subset, \\supseteq, \\supset\\)\u3002
- \\(A=B\\Leftrightarrow (\\forall x)(x\\in A\\leftrightarrow x\\in B)\\)
- \\(A\\subseteq B\\Leftrightarrow (\\forall x)(x\\in A\\rightarrow x\\in B)\\)
- \\(A\\subset B\\Leftrightarrow (\\forall x)(x\\in A\\rightarrow x\\in B)\\land A\\not =B\\)
- \\(A\\supseteq B\\Leftrightarrow B\\subseteq A\\)
- \\(A\\supset B\\Leftrightarrow B\\subset A\\)
\\(\\subseteq, \\supseteq, =\\)\u200b\u5173\u7cfb\u200b\u6ee1\u8db3\u200b\u81ea\u53cd\u6027\u200b\u3001\u200b\u4f20\u9012\u6027\u200b\uff0c\\(=\\)\u200b\u5173\u7cfb\u200b\u6ee1\u8db3\u200b\u5bf9\u79f0\u6027\u200b\u3002
\\(A\\subseteq B\\land B\\subseteq A\\Leftrightarrow A=B\\)
\u200b\u5b9a\u4e49\u200b\u7a7a\u96c6\u200b\u4e3a\u200b\u4e0d\u200b\u542b\u200b\u4efb\u4f55\u200b\u5143\u7d20\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\varnothing\\)\uff0c\u200b\u5176\u200b\u5185\u6db5\u200b\u8868\u793a\u200b\u4e3a\u200b\\(\\varnothing = \\{x|x\\not= x\\}\\)\uff0c\u200b\u7a7a\u96c6\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \u200b\u7a7a\u96c6\u200b\u662f\u200b\u4efb\u4f55\u200b\u96c6\u5408\u200b\u7684\u200b\u5b50\u96c6\u200b
- \u200b\u7a7a\u96c6\u200b\u662f\u200b\u552f\u4e00\u200b\u7684\u200b
\u200b\u5b9a\u4e49\u200b\u5168\u96c6\u200b\u4e3a\u200b\u6240\u6709\u200b\u4e8b\u7269\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(E\\)\uff0c\u200b\u5176\u200b\u5185\u6db5\u200b\u8868\u793a\u200b\u4e3a\u200b\\(E=\\{x|x=x\\}\\)
"},{"location":"math/discrete-mathematics/chapter-9/#_5","title":"\u96c6\u5408\u200b\u7684\u200b\u57fa\u672c\u200b\u8fd0\u7b97","text":"\u200b\u96c6\u5408\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u57fa\u672c\u200b\u8fd0\u7b97\u200b\uff1a
- \u200b\u5e76\u96c6\u200b\uff1a\\(A\\cup B = \\{x\\in A\\lor x\\in B\\}\\)
- \u200b\u4ea4\u96c6\u200b\uff1a\\(A\\cap B = \\{x\\in A\\land x\\in B\\}\\)
- \u200b\u5dee\u96c6\u200b\uff1a\\(A-B = \\{x\\in A\\land x\\not \\in B\\}\\)
- \u200b\u8865\u96c6\u200b\uff1a\\(-A=E-A=\\{x|x\\not\\in A\\}\\)
- \u200b\u5bf9\u79f0\u200b\u5dee\u200b\uff1a\\(A\\oplus B=(A-B)\\cup (B-A) = \\{x| x\\in A\\overline\\lor x\\in B\\}\\)
\u200b\u57fa\u4e8e\u200b\u5e76\u96c6\u200b\u4e0e\u200b\u4ea4\u96c6\u200b\u8fd0\u7b97\u200b\u53ef\u4ee5\u200b\u62d3\u5c55\u200b\u51fa\u200b\u5e7f\u4e49\u200b\u5e76\u200b\u548c\u200b\u5e7f\u4e49\u200b\u4ea4\u200b\u7684\u200b\u6982\u5ff5\u200b\uff0c\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u90fd\u200b\u662f\u200b\u96c6\u5408\u200b\uff0c\u200b\u5b9a\u4e49\u200b$A\u200b\u7684\u200b\u5e7f\u4e49\u200b\u5e76\u200b\u3001\u200b\u5e7f\u4e49\u200b\u4ea4\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u5e7f\u4e49\u200b\u5e76\u200b\uff1a\\(\\cup A=\\{x| (\\exists z)(z\\in A\\land x\\in z)\\}\\)
- \u200b\u5e7f\u4e49\u200b\u4ea4\u200b\uff1a\\(\\cap A=\\{x| (\\forall z)(z\\in A\\rightarrow x\\in z)\\}\\)
\u200b\u5373\u200b\uff1a\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u7684\u200b\u5e7f\u4e49\u200b\u5e76\u200b\u662f\u200b\u96c6\u5408\u200b\u4e2d\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u7684\u200b\u5e76\u200b\u96c6\u200b\uff0c\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u7684\u200b\u5e7f\u4e49\u200b\u4ea4\u662f\u200b\u96c6\u5408\u200b\u4e2d\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u7684\u200b\u4ea4\u96c6\u200b\u3002
\u200b\u5b9a\u4e49\u200b\u5e42\u96c6\u200b\u4e3a\u200b\u96c6\u5408\u200b\u6240\u6709\u200b\u5b50\u96c6\u200b\uff08\u200b\u5305\u62ec\u200b\u81ea\u8eab\u200b\uff09\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(P(A)\\)
\u200b\u5b9a\u4e49\u200b\u7b1b\u5361\u5c14\u200b\u79ef\u200b\\(A\\times B\\)\u200b\u4e3a\u200b\u4e8c\u5143\u200b\u7ec4\u200b\uff08\u200b\u6709\u5e8f\u200b\u5bf9\u200b\uff09\\(\\langle x, y\\rangle\\)\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u5176\u4e2d\u200b\\(x\\in A, y\\in B\\)\u3002\u200b\u6709\u5e8f\u200b\u5bf9\u200b\u7684\u200b\u5b9a\u4e49\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u552f\u4e00\u200b\uff0c\u200b\u5982\u200b\u96c6\u5408\u200b\\(\\{x, \\{x, y\\}\\}\\)\u200b\u5373\u53ef\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u6709\u5e8f\u200b\u5bf9\u200b\u3002\u200b\u6709\u5e8f\u200b\u5bf9\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \\(x\\not = y\\Rightarrow \\langle x,y\\rangle \\not =\\langle y,x\\rangle\\)
- \\(\\langle x,y\\rangle = \\langle u,v\\rangle\\Leftrightarrow x=u\\land y=v\\)
\u200b\u53ef\u4ee5\u200b\u5728\u200b\u4e8c\u5143\u200b\u7ec4\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\u62d3\u5c55\u200b\\(n\\)\u200b\u5143\u7ec4\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff1a\\(\\langle x_1, \\dots, x_n\\rangle =\\langle\\dots\\langle x_1, x_2\\rangle, \\dots, x_n\\rangle\\)\u3002\u200b\u7531\u6b64\u200b\\(n\\)\u200b\u9636\u200b\u7b1b\u5361\u5c14\u200b\u79ef\u200b\\(A_1\\times A_2\\times\\dots\\times A_n\\)\u200b\u5373\u200b\u4e3a\u200b\\(\\{\\langle x_1, \\dots, x_n\\rangle|x_1\\in A_1\\land \\dots\\land x_n\\in A_n\\}\\)
"},{"location":"math/discrete-mathematics/chapter-9/#_6","title":"\u96c6\u5408\u200b\u8fd0\u7b97\u200b\u7684\u200b\u4f18\u5148\u7ea7","text":"\u200b\u96c6\u5408\u200b\u8fd0\u7b97\u200b\u7684\u200b\u4f18\u5148\u7ea7\u200b\u5217\u4e3e\u5982\u4e0b\u200b\uff1a
\\[ \\begin{aligned} &-A, P(A), \\cap A, \\cup A \\\\ &-, \\cap, \\cup, \\oplus, \\times \\\\ &=, \\subseteq , \\subset, \\in \\\\ &\\lnot \\\\ &\\land, \\lor, \\rightarrow, \\leftrightarrow \\\\ &\\Leftrightarrow, \\Rightarrow \\end{aligned} \\]"},{"location":"math/discrete-mathematics/chapter-9/#_7","title":"\u96c6\u5408\u200b\u8fd0\u7b97\u200b\u7684\u200b\u6027\u8d28","text":"\u200b\u96c6\u5408\u200b\u7684\u200b\u57fa\u672c\u200b\u8fd0\u7b97\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \u200b\u4ea4\u6362\u5f8b\u200b
- \\(A\\cap B=B\\cap A\\)
- \\(A\\cup B=B\\cup A\\)
- \u200b\u7ed3\u5408\u5f8b\u200b
- \\((A\\cup B)\\cup C = A\\cup (B\\cup C)\\)
- \\((A\\cap B)\\cap C = A\\cap (B\\cap C)\\)
"},{"location":"math/discrete-mathematics/chapter-9/#_8","title":"\u96c6\u5408\u200b\u7684\u200b\u56fe\u793a\u200b\u6cd5","text":" - \u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\u7684\u200b\u57fa\u672c\u200b\u8fd0\u7b97\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6587\u6c0f\u56fe\u200b\u8868\u793a\u200b
- \u200b\u5bf9\u4e8e\u200b\u5e42\u96c6\u200b\u8fd0\u7b97\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u7f51\u7edc\u56fe\u200b\u8868\u793a\u200b
- \u200b\u5bf9\u4e8e\u200b\u7b1b\u5361\u5c14\u200b\u79ef\u200b\u8fd0\u7b97\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e8c\u7ef4\u200b\u5750\u6807\u7cfb\u200b\u8868\u793a\u200b
"},{"location":"math/operating-research/","title":"\u8fd0\u7b79\u5b66","text":" - \u200b\u7ebf\u6027\u89c4\u5212\u200b
- \u200b\u8fd0\u8f93\u200b\u95ee\u9898\u200b
- \u200b\u76ee\u6807\u200b\u89c4\u5212\u200b
"},{"location":"math/operating-research/chapter-1/","title":"\u7ebf\u6027\u89c4\u5212","text":"\u200b\u5b9a\u4e49\u200b
\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\uff1a\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\\(f(x_1, \\dots, x_n)\\)\u200b\u548c\u200b\u4e00\u7cfb\u5217\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u6c42\u200b\u6ee1\u8db3\u200b\u6240\u6709\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u6539\u53d8\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\\(x_1, x_2, \\cdots, x_n\\)\u200b\u4f7f\u5f97\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u6240\u200b\u80fd\u200b\u8fbe\u5230\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u6216\u200b\u6700\u5c0f\u503c\u200b\u3002\u200b\u5f53\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u53d6\u200b\u6700\u5927\u200b\uff08\u200b\u6700\u5c0f\u200b\uff09\u200b\u503c\u65f6\u200b\uff0c\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u7684\u200b\u503c\u79f0\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u7684\u200b\u89e3\u200b\u3002
\u200b\u7ebf\u6027\u89c4\u5212\u200b\uff1a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u548c\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u5747\u200b\u4e3a\u200b \u200b\u7ebf\u6027\u200b \u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b
\u200b\u7ebf\u6027\u89c4\u5212\u200b\u6a21\u578b\u200b\u7684\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} &\\max z = c_1x_1 + c_2x_2 + \\cdots + c_nx_n \\\\ s.t. & \\left\\{ \\begin{aligned} & a_{11}x_1 + a_{12}x_2 + \\cdots + a_{1n}x_n = b_1 \\\\ & a_{21}x_1 + a_{22}x_2 + \\cdots + a_{2n}x_n = b_2 \\\\ & \\vdots \\\\ & a_{m1}x_1 + a_{m2}x_2 + \\cdots + a_{mn}x_n = b_m \\\\ & x_j \\in \\mathbb R \\land x_j \\geq 0, j = 1, \\cdots, n \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5176\u4e2d\u200b\\(a_{ij}, b_i, c_i\\)\u200b\u4e3a\u200b\u5e38\u6570\u200b\uff0c\u200b\u5206\u522b\u200b\u4f7f\u7528\u200b\u77e9\u9635\u200b\\(A, b, c^T\\)\u200b\u8fdb\u884c\u200b\u8868\u793a\u200b\u3002\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\\((x_1, x_2, \\cdots, x_n)^T\\)\u200b\u4f7f\u7528\u200b\u5411\u91cf\u200b\\(x\\)\u200b\u8fdb\u884c\u200b\u8868\u793a\u200b\uff0c\u200b\u5219\u200b\u6807\u51c6\u578b\u200b\u53ef\u4ee5\u200b\u5199\u4f5c\u200b\uff1a
\\[ \\begin{aligned} & \\max z = CX \\\\ & s.t. \\left\\{ \\begin{aligned} & Ax = b \\\\ & x \\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5982\u679c\u200b\\(\\mathrm r(A) < m\\)\uff0c\u200b\u5219\u200b\u90e8\u5206\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u53ef\u4ee5\u200b\u76f8\u4e92\u200b\u62b5\u6d88\u200b\uff0c\u200b\u4ee5\u4e0a\u200b\u53ea\u200b\u8ba8\u8bba\u200b\\(\\mathrm r(A) = m\\)\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002
\u200b\u5982\u679c\u200b\u7ea6\u675f\u200b\u4e2d\u200b\u542b\u6709\u200b\u4e0d\u7b49\u5f0f\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u6dfb\u52a0\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\u4e0e\u200b\u5269\u4f59\u200b\u53d8\u91cf\u200b\u8f6c\u53d8\u200b\u4e3a\u200b\u7b49\u5f0f\u200b
- \u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\uff1a\\(a_{i1}x_1 + a_{i2}x_2 + \\cdots + a_{in}x_n \\leq b_i\\)\u200b\u52a0\u5165\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\\(x_{n+1}\\)\u200b\u540e\u200b\u8f6c\u4e3a\u200b\\(a_{i1}x_1 + a_{i2}x_2 + \\cdots + a_{in}x_n + x_{n+1}= b_i\\)
- \u200b\u5269\u4f59\u200b\u53d8\u91cf\u200b\uff1a\\(a_{j1}x_1 + a_{j2}x_2 + \\cdots + a_{jn}x_n \\geq b_j\\)\u200b\u52a0\u5165\u200b\u5269\u4f59\u200b\u53d8\u91cf\u200b\\(x_{n+1}\\)\u200b\u540e\u200b\u8f6c\u4e3a\u200b\\(a_{j1}x_1 + a_{j2}x_2 + \\cdots + a_{jn}x_n - x_{n+1}= b_j\\)
\u200b\u82e5\u200b\u67d0\u4e2a\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\\(x_i\\)\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\(\\leq\\)\uff0c\u200b\u5219\u200b\u5c06\u200b\\(x_i\\)\u200b\u66ff\u6362\u200b\u4e3a\u200b\\(x_i' = -x_i\\)\u3002
\u200b\u5bf9\u4e8e\u200b\u7ebf\u6027\u89c4\u5212\u200b\u4e2d\u200b\u7684\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\uff0c\u200b\u82e5\u200b\u5728\u200b\u6700\u4f18\u200b\u65f6\u8be5\u200b\u7ea6\u675f\u200b\u4e3a\u200b\u7b49\u5f0f\u200b\uff0c\u200b\u5219\u200b\u79f0\u4e3a\u200b\u7d27\u200b\u7ea6\u675f\u200b\uff0c\u200b\u5426\u5219\u200b\u79f0\u4e3a\u200b\u975e\u7d27\u200b\u7ea6\u675f\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_2","title":"\u6c42\u89e3\u200b\u7ebf\u6027\u89c4\u5212","text":"\u200b\u7ebf\u6027\u89c4\u5212\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u56fe\u5f62\u200b\u6cd5\u200b\u3001\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u7b49\u200b\u65b9\u6cd5\u200b\u6c42\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_3","title":"\u56fe\u5f62\u200b\u6cd5","text":"\u200b\u56fe\u5f62\u200b\u6cd5\u200b\u53ea\u80fd\u200b\u7528\u4e8e\u200b\u6c42\u89e3\u200b\u5305\u542b\u200b\u4e24\u4e2a\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\u3002\u200b\u6b65\u9aa4\u200b\u53ef\u4ee5\u200b\u5217\u4e3e\u5982\u4e0b\u200b\uff1a
- \u200b\u5728\u200b\u5750\u6807\u8f74\u200b\u4e0a\u200b\u7ed8\u5236\u200b\u51fa\u200b\u6240\u6709\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u786e\u5b9a\u200b\u53ef\u884c\u200b\u57df\u200b
- \u200b\u5c06\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\\(z = c_1x_1 + c_2x_2\\)\u200b\u6539\u5199\u200b\u4e3a\u200b\\(x_2 = \\frac{z - c_1x_1}{c_2}\\)\uff0c\u200b\u5176\u200b\u659c\u7387\u200b\u4e3a\u200b\\(-\\frac{c_1}{c_2}\\)
- \u200b\u5728\u200b\u53ef\u884c\u200b\u57df\u200b\u4e2d\u200b\u5bfb\u627e\u200b\u4f7f\u5f97\u200b\u622a\u8ddd\u200b\u6700\u5927\u200b\uff08\u200b\u6700\u5c0f\u200b\uff09\u200b\u4e14\u200b\u659c\u7387\u200b\u4e3a\u200b\\(-\\frac{c_1}{c_2}\\)\u200b\u7684\u200b\u76f4\u7ebf\u200b\u3002\u200b\u8be5\u200b\u622a\u8ddd\u200b\u4e3a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7684\u200b\\(1/c_2\\)
- \u200b\u82e5\u200b\u53ef\u884c\u200b\u57df\u200b\u4e3a\u200b\u7a7a\u200b\uff0c\u200b\u5219\u200b\u7ebf\u6027\u89c4\u5212\u200b\u65e0\u200b\u89e3\u200b
- \u200b\u82e5\u200b\u76f4\u7ebf\u200b\u53ef\u4ee5\u200b\u65e0\u9650\u200b\u5411\u200b\u4f18\u5316\u200b\u65b9\u5411\u200b\u5e73\u79fb\u200b\uff0c\u200b\u5219\u200b\u7ebf\u6027\u89c4\u5212\u200b\u65e0\u200b\u754c\u200b
- \u200b\u82e5\u200b\u6700\u4f18\u200b\u65f6\u200b\u76f4\u7ebf\u200b\u4e0e\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u7684\u200b\u659c\u7387\u200b\u76f8\u540c\u200b\uff0c\u200b\u5219\u200b\u7ebf\u6027\u89c4\u5212\u200b\u6709\u200b\u65e0\u6570\u200b\u89e3\u200b
- \u200b\u5426\u5219\u200b\u7ebf\u6027\u89c4\u5212\u200b\u6709\u200b\u552f\u4e00\u200b\u6700\u4f18\u200b\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_4","title":"\u5355\u7eaf\u5f62\u6cd5","text":"\u200b\u5df2\u77e5\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u6ee1\u200b\u79e9\u200b\uff0c\u200b\u6784\u6210\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u7684\u200b\u5217\u200b\u5411\u91cf\u200b\u7684\u200b\u6781\u5927\u200b\u7ebf\u6027\u200b\u65e0\u5173\u200b\u7ec4\u200b\u5305\u542b\u200b\\(m\\)\u200b\u4e2a\u5217\u200b\u5411\u91cf\u200b\u3002\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u4f5c\u200b\u5982\u4e0b\u200b\u5212\u5206\u200b\uff1a
\\[ A = [B, N] \\] \u200b\u76f8\u4f3c\u200b\u5730\u200b\uff0c\u200b\u5411\u91cf\u200b\\(x\\)\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4f5c\u200b\u5982\u4e0b\u200b\u5212\u5206\u200b\uff1a
\\[ x = \\begin{bmatrix} x_B \\\\ x_N \\end{bmatrix} \\] \u200b\u5176\u4e2d\u200b\\(B\\)\u200b\u4e3a\u200b\u53ef\u9006\u200b\u77e9\u9635\u200b\u3002\u200b\u82e5\u200b\u4e0d\u200b\u5b58\u5728\u200b\u8fd9\u6837\u200b\u7684\u200b\u77e9\u9635\u200b\uff0c\u200b\u5c06\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u7684\u200b\u5404\u5217\u200b\u8fdb\u884c\u200b\u4ea4\u6362\u200b\u5373\u53ef\u200b\u3002
\u200b\u57fa\u200b\u3001\u200b\u57fa\u200b\u5411\u91cf\u200b\u4e0e\u200b\u57fa\u200b\u53d8\u91cf\u200b
\u200b\u77e9\u9635\u200b\\(B\\)\u200b\u79f0\u4e3a\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b \u200b\u57fa\u200b \u3002 \u200b\u57fa\u200b \u200b\u4e2d\u200b\u7684\u200b\u5404\u4e2a\u200b\u5217\u200b\u5411\u91cf\u200b\\(P_j\\)\u200b\u4e3a\u200b \u200b\u57fa\u200b\u5411\u91cf\u200b \uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u79f0\u4e3a\u200b \u200b\u57fa\u200b\u53d8\u91cf\u200b \u3002\u200b\u5206\u5272\u200b\u540e\u975e\u200b\u9f50\u6b21\u200b\u7ebf\u6027\u65b9\u7a0b\u7ec4\u200b\\(Ax=b\\)\u200b\u8f6c\u5316\u200b\u4e3a\u200b\uff1a
\\[ \\begin{bmatrix} B & N \\end{bmatrix}\\begin{bmatrix} x_B \\\\ x_N \\end{bmatrix} = Bx_B + Nx_N = b \\] \u200b\u7531\u4e8e\u200b\u65b9\u9635\u200b\\(B\\)\u200b\u6ee1\u200b\u79e9\u200b\uff0c\u200b\u6709\u200b\\(x_B = B^{-1}(b - Nx_N)\\)\u3002\u200b\u5176\u4e2d\u200b\\(x_N\\)\u200b\u4e3a\u200b\u81ea\u7531\u200b\u53d8\u91cf\u200b\u3002\\(-B^{-1}N\\)\u200b\u4e2d\u200b\u7684\u200b\u5217\u200b\u5411\u91cf\u200b\u4e3a\u200b\u65b9\u7a0b\u200b\\(Ax=b\\)\u200b\u7684\u200b\u57fa\u7840\u200b\u89e3\u7cfb\u200b\u3002\u200b\u4e0d\u59a8\u200b\u8bbe\u200b\\(x_N = 0\\)\uff0c\u200b\u5219\u200b\\(x_B = B^{-1}b\\)\u200b\u4e3a\u200b\u7ebf\u6027\u65b9\u7a0b\u7ec4\u200b\u7684\u200b\u4e00\u4e2a\u200b\u89e3\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u57fa\u89e3\u200b\u3002
\u200b\u53ef\u884c\u200b\u89e3\u4e0e\u200b\u53ef\u884c\u200b\u57fa\u200b
\u200b\u82e5\u200b\\(x_B\\geq 0\\)\uff0c\u200b\u5219\u200b\u89e3\u200b\\(x = \\begin{bmatrix} x_B \\\\ x_N \\end{bmatrix}\\)\u200b\u6ee1\u8db3\u200b\u975e\u8d1f\u200b\u7ea6\u675f\u200b\uff0c\u200b\u4e3a\u200b \u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b \uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u57fa\u200b\u79f0\u4e3a\u200b \u200b\u53ef\u884c\u200b\u57fa\u200b \u3002
\u200b\u57fa\u89e3\u200b\u4e0e\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \u200b\u7531\u4e8e\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u5171\u200b\\(n\\)\u200b\u5217\u200b\uff0c\u200b\u4ece\u200b\u5176\u4e2d\u200b\u9009\u53d6\u200b\\(m\\)\u200b\u5217\u200b\uff0c\u200b\u6709\u200b\\(\\binom{n}{m}\\)\u200b\u79cd\u200b\u9009\u53d6\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u800c\u200b\u53ea\u6709\u200b\u7ec4\u6210\u200b\u7ebf\u6027\u200b\u65e0\u5173\u200b\u7684\u200b\\(m\\)\u200b\u4e2a\u200b\u5411\u91cf\u200b\u624d\u80fd\u200b\u6784\u6210\u200b\u4e00\u7ec4\u200b\u57fa\u200b\uff0c\u200b\u56e0\u6b64\u200b\u57fa\u89e3\u200b\u7684\u200b\u6570\u76ee\u200b\u4e0d\u4f1a\u200b\u8d85\u8fc7\u200b\\(\\binom nm\\)\u3002
- \\(X\\)\u200b\u4e3a\u57fa\u200b\u53ef\u884c\u200b\u89e3\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(X\\)\u200b\u7684\u200b\u975e\u200b\u96f6\u200b\u5206\u91cf\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5217\u200b\u5411\u91cf\u200b\u7ebf\u6027\u200b\u65e0\u5173\u200b\u3002\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u662f\u200b\u53ef\u884c\u200b\u57df\u200b\u7684\u200b\u9876\u70b9\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_5","title":"\u539f\u7406","text":"\u200b\u5982\u4e0b\u200b\u9488\u5bf9\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u6781\u5927\u200b\u5316\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u6781\u5c0f\u200b\u5316\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u53d6\u8d1f\u200b\uff0c\u200b\u5373\u200b\u5f97\u5230\u200b\u9700\u8981\u200b\u6781\u5927\u200b\u5316\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u3002
\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u7684\u200b\u601d\u8def\u200b\uff1a
- \u200b\u5148\u200b\u627e\u51fa\u200b\u4e00\u4e2a\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b
- \u200b\u5224\u65ad\u200b\u5f53\u524d\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\u662f\u5426\u200b\u6700\u4f18\u200b
- \u200b\u82e5\u200b\u6700\u4f18\u200b\uff0c\u200b\u7ed3\u675f\u200b
- \u200b\u82e5\u200b\u4e0d\u662f\u200b\u6700\u4f18\u200b\uff0c\u200b\u5219\u200b\u8f6c\u5411\u200b\u76f8\u90bb\u200b\u7684\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_6","title":"\u72b6\u6001\u200b\u8f6c\u79fb","text":"\u200b\u8bbe\u200b\u521d\u59cb\u200b\u57fa\u4e3a\u200b\\(B\\)\u3002\u200b\u5c06\u200b\u65b9\u7a0b\u200b\\(Ax=b\\)\u200b\u5de6\u53f3\u200b\u4e24\u8fb9\u200b\u540c\u65f6\u200b\u5de6\u4e58\u200b\\(B^{-1}\\)\uff0c\u200b\u6709\u200b\\((B^{-1}A)x = B^{-1}b\\)\uff0c\u200b\u5373\u200b\uff1a
\\[ \\begin{bmatrix} I & B^{-1}N \\end{bmatrix}\\begin{bmatrix} x_B \\\\ x_N \\end{bmatrix} = B^{-1}b \\] \u200b\u8bbe\u200b\\(B^{-1}N = \\{d_{ij}\\}_{m\\times(n-m)}\\)\u3002\u200b\u6839\u636e\u200b\\(x_B = B^{-1}b - B^{-1}Nx_N\\)\uff0c\u200b\u5bf9\u4e8e\u200b\u7b2c\u200b\\(i\\)\u200b\u4e2a\u200b\u5206\u91cf\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ x_i = b_i - \\sum_{j = 1}^{(n - m)}d_{ij}x_j, 1\\leq j\\leq (n-m) \\]"},{"location":"math/operating-research/chapter-1/#_7","title":"\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c","text":"\u200b\u5bf9\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u8fdb\u884c\u200b\u53ef\u9006\u200b\u7ebf\u6027\u53d8\u6362\u200b\uff08\u200b\u53f3\u4e58\u200b\u53ef\u9006\u200b\u77e9\u9635\u200b\uff09\u200b\u4e0d\u4f1a\u200b\u6539\u53d8\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u89e3\u200b\u3002\u200b\u4e3a\u200b\u7b80\u5316\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u4e0d\u59a8\u200b\u5047\u8bbe\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u7684\u200b\u4e00\u4e2a\u200b\u57fa\u200b\u77e9\u9635\u200b\u4e3a\u200b\u5355\u4f4d\u77e9\u9635\u200b\uff0c\u200b\u5373\u200b\uff1a
\\[ A = \\begin{bmatrix} 1 & 0 & \\cdots & 0 & a_{1(m + 1)} & a_{1(m + 2)} & \\cdots & a_{1n} \\\\ 0 & 1 & \\cdots & 0 & a_{2(m + 1)} & a_{2(m + 2)} & \\cdots & a_{2n} \\\\ \\vdots & \\vdots & \\ddots & \\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\ 0 & 0 & \\cdots & 1 & a_{m(m + 1)} & a_{m(m + 2)} & \\cdots & a_{mn} \\\\ \\end{bmatrix} \\] \u200b\u663e\u7136\u200b\uff0c\u200b\u5355\u4f4d\u77e9\u9635\u200b\\(I\\)\u200b\u662f\u200b\\(A\\)\u200b\u7684\u200b\u57fa\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u57fa\u89e3\u200b\\(x_B=b - Nx_N\\)\u3002\u200b\u5c06\u200b\u5411\u91cf\u200b\\(c\\)\u200b\u5206\u4e3a\u200b\\(c_B\\)\u200b\u4e0e\u200b\\(c_N\\)\uff0c\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\\(x_B\\)\u200b\u4e0e\u200b\\(x_N\\)\uff0c\u200b\u6b64\u65f6\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u8ba1\u7b97\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} z &= c^Tx \\\\ &= c_B^Tx_B + c_N^T x_N \\\\ &= c_B^Tb + c_N^Tx_N - c_B^TNx_N \\\\ &= c_B^Tb + (c_N - c_B^TN)x_N \\end{aligned} \\] \u200b\u8bbe\u200b\u5411\u91cf\u200b\\(\\lambda = c_N - c_B^TN\\)\uff0c\u200b\u5219\u200b\\(\\frac{\\partial z}{\\partial x_N} = \\lambda\\)\u3002
\u200b\u5b9a\u7406\u200b
- \u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u67d0\u4e2a\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\\(x\\)\uff0c\u200b\u6709\u200b\\(\\lambda < 0\\)\uff0c\u200b\u8bf4\u660e\u200b\\(x\\)\u200b\u4e3a\u200b\u6700\u4f18\u200b\u89e3\u200b
- \u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u67d0\u4e2a\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\\(x\\)\uff0c\u200b\u6709\u200b\\(\\lambda \\leq 0\\)\u200b\u4e14\u200b\\(\\lambda\\)\u200b\u5b58\u5728\u200b\u4e3a\u200b\u96f6\u200b\u7684\u200b\u5206\u91cf\u200b\uff0c\u200b\u8bf4\u660e\u200b\u539f\u200b\u95ee\u9898\u200b\u6709\u200b\u65e0\u6570\u4e2a\u200b\u6700\u4f18\u200b\u89e3\u200b
- \u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u67d0\u4e2a\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\\(x\\)\uff0c\u200b\u5411\u91cf\u200b\\(\\lambda\\)\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\\(\\lambda_{m + i} > 0\\)\uff0c\u200b\u4e14\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5217\u200b\u5411\u91cf\u200b\\(P_{m + i}\\leq 0\\)\uff0c\u200b\u5219\u200b\u539f\u200b\u95ee\u9898\u200b\u65e0\u200b\u754c\u200b
"},{"location":"math/operating-research/chapter-1/#_8","title":"\u57fa\u7684\u200b\u8fed\u4ee3","text":"\u200b\u5728\u200b\u8fed\u4ee3\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u9700\u8981\u200b\u51b3\u5b9a\u200b\u6362\u5165\u200b\u7684\u200b\u57fa\u200b\u4e0e\u200b\u6362\u200b\u51fa\u200b\u7684\u200b\u57fa\u200b\uff1a
- \u200b\u4f7f\u7528\u200b\u8d2a\u5fc3\u200b\u7b97\u6cd5\u200b\u9009\u62e9\u200b\u6362\u5165\u200b\u7684\u200b\u57fa\u200b\uff0c\u200b\u9009\u62e9\u200b\u68af\u5ea6\u200b\u6700\u5927\u200b\uff08\u200b\u4e0e\u200b\\(\\lambda\\)\u200b\u6700\u5927\u200b\u6b63\u200b\u5206\u91cf\u200b\u5bf9\u5e94\u200b\uff09\u200b\u7684\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u6362\u5165\u200b\uff0c\\(i = \\arg\\max \\lambda\\)
- \u200b\u5bf9\u4e8e\u200b\u6362\u5165\u200b\u53d8\u91cf\u200b\\(x_i\\)\uff0c\u200b\u6362\u51fa\u200b\u7684\u200b\u57fa\u200b\\(x_j\\)\u200b\u5e94\u5f53\u200b\u5c3d\u53ef\u80fd\u200b\u4fdd\u8bc1\u200b\u662f\u200b\u53ef\u884c\u200b\u89e3\u200b\u3002\u200b\u6839\u636e\u200b\\(x_B = b - Nx_N\\geq 0\\)\uff0c\u200b\u5f97\u200b\\(Nx_N \\leq b - x_B\\)\uff0c\u200b\u6709\u200b\\(j = \\arg\\min _{j} \\frac{b_j}{a_{ij}}\\)
\u200b\u4e3e\u4f8b\u200b
\u200b\u5bf9\u4e8e\u200b\u5982\u4e0b\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\uff1a
\\[ \\begin{aligned} & \\max z = 3x_1 - 3x_2 + 5x_4 - x_5 \\\\ &s.t. \\left\\{ \\begin{aligned} &x_1 & & -2x_3 & +2x_4 & &=12 \\\\ && x_2 &-2x_3 & & &=1 \\\\ &&& -4x_3 &+3x_4 &+x_5 &=27 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5217\u51fa\u200b\u5355\u7eaf\u5f62\u200b\u8868\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
\u200b\u5c06\u200b\u53d8\u91cf\u200b\\(x_4\\)\u200b\u8f6c\u5165\u200b\u57fa\u200b\u53d8\u91cf\u200b\uff0c\\(x_1\\)\u200b\u8f6c\u51fa\u200b\u57fa\u200b\u53d8\u91cf\u200b\uff0c\u200b\u5f97\u5230\u200b\u5982\u4e0b\u200b\u5355\u7eaf\u5f62\u200b\u8868\u200b\uff1a
"},{"location":"math/operating-research/chapter-1/#_9","title":"\u4e24\u200b\u9636\u6bb5\u200b\u6cd5","text":"\u200b\u5f53\u200b\\(A\\)\u200b\u4e0d\u200b\u4fbf\u4e8e\u200b\u8ba1\u7b97\u200b\u51fa\u57fa\u200b\\(B\\)\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5728\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4e2d\u200b\u5f15\u5165\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u3002\u200b\u7b2c\u4e00\u9636\u6bb5\u200b\u7684\u200b\u5f00\u59cb\u200b\u72b6\u6001\u200b\uff0c\u200b\u6240\u6709\u200b\u7684\u200b\u57fa\u200b\u53d8\u91cf\u200b\u90fd\u200b\u662f\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\uff0c\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e3a\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u4e4b\u200b\u548c\u200b\uff0c\u200b\u5411\u200b\u6700\u5c0f\u503c\u200b\u65b9\u5411\u200b\u4f18\u5316\u200b\u3002\u200b\u901a\u8fc7\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u9010\u6b65\u200b\u5c06\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u6362\u200b\u51fa\u57fa\u200b\u53d8\u91cf\u200b\u3002
\u200b\u6ce8\u610f\u200b
\u200b\u5982\u679c\u200b\u67d0\u4e2a\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u5728\u200b\u57fa\u200b\u53d8\u91cf\u200b\u4e2d\u200b\uff0c\u200b\u4f46\u200b\\(\\lambda \\leq 0\\)\uff0c\u200b\u5219\u200b\u7ebf\u6027\u89c4\u5212\u200b\u65e0\u200b\u53ef\u884c\u200b\u89e3\u200b\u3002
\u200b\u5c06\u200b\u6240\u6709\u200b\u7684\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u6362\u200b\u51fa\u57fa\u200b\u53d8\u91cf\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6240\u6709\u200b\u7684\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u53d6\u200b\\(0\\)\u3002\u200b\u5220\u53bb\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u5e76\u200b\u5c06\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u66ff\u6362\u200b\u4e3a\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\uff0c\u200b\u5f97\u5230\u200b\u7b2c\u4e8c\u9636\u6bb5\u200b\u5f00\u59cb\u200b\u72b6\u6001\u200b\u7684\u200b\u5355\u7eaf\u5f62\u200b\u8868\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_10","title":"\u7ebf\u6027\u89c4\u5212\u200b\u89e3\u200b\u7684\u200b\u6027\u8d28","text":"\u200b\u6839\u636e\u200b\u56fe\u89e3\u6cd5\u200b\uff0c\u200b\u6709\u5982\u200b\u4e0b\u7ed3\u8bba\u200b\uff1a
- \u200b\u53ef\u884c\u200b\u57df\u200b\u662f\u200b\u4e00\u4e2a\u200b\u51f8\u96c6\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u53ef\u884c\u200b\u57df\u200b\\(X\\)\u200b\u4e2d\u200b\u7684\u200b\u4efb\u610f\u200b\u4e24\u70b9\u200b\\(x = (x_1, x_2, \\cdots, x_n)\\in S\\)\u200b\u4e0e\u200b\\(y = (y_1, y_2, \\cdots, y_n)\\in S\\)\uff0c\u200b\u6709\u200b\\(\\alpha x + (1 - \\alpha) y \\in S, 0\\leq \\alpha \\leq 1\\)
- \u200b\u51f8\u200b\u96c6\u4e2d\u200b\u7684\u200b\u4efb\u4f55\u200b\u4e00\u4e2a\u70b9\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\u51f8\u96c6\u200b\u5404\u4e2a\u200b\u9876\u70b9\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b
- \u200b\u6700\u4f18\u200b\u89e3\u200b\uff08\u200b\u5982\u679c\u200b\u5b58\u5728\u200b\uff09\u200b\u5728\u200b\u53ef\u884c\u200b\u57df\u200b\u7684\u200b\u8fb9\u754c\u200b\u4e0a\u200b\uff0c\u200b\u4e14\u200b\u53ef\u884c\u200b\u57df\u200b\u7684\u200b\u81f3\u5c11\u200b\u4e00\u4e2a\u200b\u9876\u70b9\u200b\u662f\u200b\u6700\u4f18\u200b\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_11","title":"\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u5bf9\u5076\u200b\u95ee\u9898","text":"\u200b\u6bcf\u4e2a\u200b\u539f\u200b\u95ee\u9898\u200b\u5bf9\u5e94\u200b\u4e14\u200b\u4ec5\u200b\u5bf9\u5e94\u200b\u4e00\u4e2a\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\uff0c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u539f\u200b\u95ee\u9898\u200b\uff1a
\\[ \\begin{aligned} & \\max z = c_1x_1 + c_2x_2 + c_3x_3 \\\\ & s.t. \\left\\{ \\begin{aligned} & a_{11}x_1 + a_{12}x_2 + a_{13}x_3 \\leq b_1 \\\\ & a_{21}x_1 + a_{22}x_2 + a_{23}x_3 = b_2 \\\\ & a_{31}x_1 + a_{32}x_2 + a_{33}x_3 \\geq b_3 \\\\ & x_1 \\leq 0 \\\\ & x_3 \\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5176\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} & \\min w = b_1y_1 + b_2y_2 + b_3y_3 \\\\ & s.t. \\left\\{ \\begin{aligned} & a_{11}y_1 + a_{21}y_2 + a_{31}y_3 \\leq c_1 \\\\ & a_{12}y_1 + a_{22}y_2 + a_{32}y_3 = c_2 \\\\ & a_{13}y_1 + a_{23}y_2 + a_{33}y_3 \\geq c_3 \\\\ & y_1 \\geq 0 \\\\ & y_3 \\leq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5047\u8bbe\u200b\u539f\u200b\u95ee\u9898\u200b\u5411\u200b\u6781\u5927\u503c\u200b\u4f18\u5316\u200b\uff0c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u6709\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u5411\u200b\u6781\u5c0f\u503c\u200b\u4f18\u5316\u200b
- \u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7684\u200b\u7cfb\u6570\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u7cfb\u6570\u200b
- \u200b\u7ea6\u675f\u6761\u4ef6\u200b\u7cfb\u6570\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7684\u200b\u7cfb\u6570\u200b
- \u200b\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\\(\\geq 0\\)\u3001\\(\\leq 0\\)\u200b\u7684\u200b\u53d8\u91cf\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e2d\u200b\\(\\geq\\)\u3001\\(\\leq\\)\u200b\u7c7b\u578b\u200b\u7684\u200b\u7ea6\u675f\u200b
- \u200b\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\\(\\geq\\)\u3001\\(\\leq\\)\u200b\u7c7b\u578b\u200b\u7684\u200b\u7ea6\u675f\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e2d\u200b\\(\\leq 0\\)\u3001\\(\\geq 0\\)\u200b\u7684\u200b\u53d8\u91cf\u200b
- \u200b\u4efb\u4f55\u200b\\(=\\)\u200b\u7c7b\u578b\u200b\u7684\u200b\u7ea6\u675f\u200b\u5bf9\u5e94\u200b\u81ea\u7531\u200b\u53d8\u91cf\u200b\uff0c\u200b\u53cd\u4e4b\u4ea6\u7136\u200b\u3002
\u200b\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7b49\u4e8e\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u3002\u200b\u4e14\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u4f1a\u200b\u4ee5\u200b\u8d1f\u503c\u200b\u7684\u200b\u5f62\u5f0f\u200b\u51fa\u73b0\u200b\u5728\u200b\u539f\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u5355\u7eaf\u5f62\u200b\u8868\u200b\u7684\u200b\\(\\lambda\\)\u200b\u90e8\u5206\u200b\u3002\u200b\u5373\u200b\uff0c\\(\\lambda = -Y^*\\)
"},{"location":"math/operating-research/chapter-1/#_12","title":"\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u5bf9\u5076\u6027","text":"\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u539f\u200b\u95ee\u9898\u200b\\((P)\\)\u200b\u4e0e\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\\((D)\\)
\\[ \\begin{aligned} & (P) & \\begin{aligned} & \\max z=c^Tx \\\\ & s.t. \\left\\{ \\begin{aligned} & AX \\leq b \\\\ & X\\geq 0 \\end{aligned} \\right . \\end{aligned} \\\\ & (D) & \\begin{aligned} & \\min w=b^Ty \\\\ & s.t. \\left\\{ \\begin{aligned} & A^Ty \\geq c \\\\ & y\\geq 0 \\end{aligned} \\right . \\end{aligned} \\end{aligned} \\]"},{"location":"math/operating-research/chapter-1/#_13","title":"\u5bf9\u5076\u200b\u5b9a\u7406","text":""},{"location":"math/operating-research/chapter-1/#_14","title":"\u5f31\u200b\u5bf9\u5076\u200b\u5b9a\u7406","text":"\u200b\u8bbe\u200b\\((P), (D)\\)\u200b\u7684\u200b\u4e00\u7ec4\u200b\u53ef\u884c\u200b\u89e3\u200b\u5206\u522b\u200b\u4e3a\u200b\\(x, y\\)\uff0c\u200b\u5219\u200b\u6709\u200b\\(c^Tx \\leq b^Ty\\)
\u200b\u8bc1\u660e\u200b
\u200b\u8003\u8651\u200b\\(y^TAx\\)\uff0c\u200b\u6709\u200b\uff1a
- \\(y^TAx = (A^Ty)^TX \\geq c^TX\\)
- \\(y^TAx \\leq y^Tb = b^T y\\)
\u200b\u6839\u636e\u200b\u5f31\u200b\u5bf9\u5076\u200b\u5b9a\u7406\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5f97\u51fa\u200b\u5982\u4e0b\u200b\u7ed3\u8bba\u200b\uff1a
- \u200b\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u662f\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u4e0b\u754c\u200b\uff0c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u4e0a\u754c\u200b
- \u200b\u82e5\u539f\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u65e0\u200b\u4e0a\u754c\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u65e0\u200b\u89e3\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u65e0\u200b\u4e0b\u754c\u200b\u7b49\u4ef7\u200b\u4e8e\u539f\u200b\u95ee\u9898\u200b\u65e0\u200b\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_15","title":"\u6700\u4f18\u6027\u200b\u5b9a\u7406","text":"\u200b\u8bbe\u200b\\((P), (D)\\)\u200b\u7684\u200b\u4e00\u7ec4\u200b\u53ef\u884c\u200b\u89e3\u200b\u5206\u522b\u200b\u4e3a\u200b\\(x^*, y^*\\)\uff0c\u200b\u82e5\u200b\\(c^Tx^* = b^Ty^*\\)\uff0c\u200b\u5219\u200b\\(x^*, y^*\\)\u200b\u5206\u522b\u200b\u4e3a\u200b\u5404\u81ea\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
\u200b\u8bc1\u660e\u200b
\u200b\u6839\u636e\u200b\u5f31\u200b\u5bf9\u5076\u200b\u5b9a\u7406\u200b\uff0c\u200b\u6709\u200b\\(c^Tx\\leq b^Ty^* = c^Tx^*\\leq b^Ty\\)
"},{"location":"math/operating-research/chapter-1/#_16","title":"\u6700\u4f18\u200b\u89e3\u200b\u7684\u200b\u5bf9\u5076\u6027","text":"\u200b\u82e5\u200b\\(B\\)\u200b\u4e3a\u200b\\((P)\\)\u200b\u7684\u200b\u6700\u4f18\u200b\u57fa\u200b\uff0c\u200b\u5219\u200b\\((D)\\)\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u4e3a\u200b\\(y^* = c_BB^{-1}\\)\u3002\u200b\u82e5\u200b\\((P)\\)\u200b\u548c\u200b\\((D)\\)\u200b\u5747\u200b\u6709\u200b\u53ef\u884c\u200b\u89e3\u200b\uff0c\u200b\u5219\u200b\u4e24\u8005\u200b\u5747\u200b\u6709\u200b\u6709\u754c\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u5e76\u4e14\u200b\u4e24\u8005\u200b\u7684\u200b\u6700\u4f18\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u76f8\u7b49\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_17","title":"\u4e92\u8865\u200b\u677e\u5f1b\u200b\u5b9a\u7406","text":"\u200b\u5982\u679c\u200b\u539f\u200b\u95ee\u9898\u200b\\((P)\\)\u200b\u4e2d\u200b\u67d0\u200b\u4e00\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5bf9\u5076\u200b\u53d8\u91cf\u503c\u200b\u5927\u4e8e\u200b\\(0\\)\uff0c\u200b\u5219\u200b\u4e0e\u200b\u8be5\u200b\u5bf9\u5076\u200b\u53d8\u91cf\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u53d6\u200b\u7b49\u5f0f\u200b\u3002\u200b\u76f8\u53cd\u200b\uff0c\u200b\u5982\u679c\u200b\u67d0\u4e00\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u53d6\u200b\u4e0d\u7b49\u5f0f\u200b\uff0c\u200b\u5219\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5bf9\u5076\u200b\u53d8\u91cf\u503c\u200b\u4e3a\u200b\\(0\\)\u3002
\u200b\u6ce8\u610f\u200b
\u200b\u8be5\u200b\u5b9a\u7406\u200b\u7684\u200b\u9006\u547d\u9898\u200b\u4e0d\u200b\u6210\u7acb\u200b\uff0c\u200b\u5373\u200b\u5f53\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\u67d0\u200b\u4e00\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u53d6\u200b\u7b49\u5f0f\u200b\u65f6\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5bf9\u5076\u200b\u53d8\u91cf\u503c\u200b\u65e0\u6cd5\u200b\u786e\u5b9a\u200b\u662f\u5426\u200b\u4e3a\u200b\\(0\\)
\u200b\u5229\u7528\u200b\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u6c42\u89e3\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u4ece\u800c\u200b\u7b80\u5316\u200b\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u6c42\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_18","title":"\u5f71\u5b50\u200b\u4ef7\u683c","text":"\u200b\u8003\u8651\u200b\u5f62\u200b\u5982\u200b\\((P)\\)\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\uff0c\u200b\u5f53\u200b\u67d0\u4e2a\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u7684\u200b\u6570\u503c\u200b\u53d8\u52a8\u200b\u4e00\u4e2a\u200b\u5355\u4f4d\u200b\u800c\u200b\u5176\u4ed6\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4fdd\u6301\u200b\u4e0d\u53d8\u200b\u65f6\u200b\uff0c\u200b\u8be5\u200b\u53d8\u52a8\u200b\u5bf9\u200b\u6700\u4f18\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u9020\u6210\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002\u200b\u5bf9\u5e94\u200b\u7ecf\u6d4e\u5b66\u200b\u4e2d\u200b\u8fb9\u9645\u200b\u6210\u672c\u200b\u7684\u200b\u6982\u5ff5\u200b\u3002
- \u200b\u6bcf\u4e2a\u200b\u7ea6\u675f\u200b\u5bf9\u5e94\u200b\u4e00\u4e2a\u200b\u5f71\u5b50\u200b\u4ef7\u683c\u200b
- \\(y = \\frac{\\partial z}{\\partial b}\\)
\u200b\u5f71\u5b50\u200b\u4ef7\u683c\u200b\u53cd\u6620\u200b\u8d44\u6e90\u200b\u5728\u200b\u7cfb\u7edf\u200b\u5185\u200b\u7684\u200b\u7a00\u7f3a\u200b\u7a0b\u5ea6\u200b\uff0c\u200b\u5f53\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4e3a\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u65f6\u200b\uff0c\u200b\u8be5\u200b\u8d44\u6e90\u200b\u7684\u200b\u91cf\u200b\u5728\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u5b9e\u9645\u4e0a\u200b\u4e0d\u200b\u53d7\u7ea6\u675f\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5f71\u5b50\u200b\u4ef7\u683c\u200b\u4e3a\u200b\\(0\\)\u3002
"},{"location":"math/operating-research/chapter-1/#_19","title":"\u5bf9\u5076\u200b\u5355\u7eaf\u5f62\u6cd5","text":"\u200b\u6c42\u89e3\u200b\u5f62\u200b\u5982\u200b\\((P)\\)\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\u7684\u200b\u601d\u8def\u200b\u4e3a\u200b\u63a7\u5236\u200b\\(B^{-1}b \\geq 0\\)\u200b\u5bfb\u627e\u200b\u4f7f\u5f97\u200b\\(C-C_{B}B^{-1}A\\leq 0\\)\u200b\u7684\u200b\u57fa\u200b\u3002\u200b\u5bf9\u5076\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u4e0e\u200b\u4e4b\u200b\u76f8\u53cd\u200b\uff0c\u200b\u4fdd\u6301\u200b\\(C-C_{B}B^{-1}A\\leq 0\\)\uff0c\u200b\u5bfb\u627e\u200b\u4f7f\u5f97\u200b\\(B^{-1}b \\geq 0\\)\u200b\u7684\u200b\u4e00\u7ec4\u200b\u57fa\u200b\u3002
\u200b\u6362\u5165\u200b\u53d8\u91cf\u200b\u7684\u200b\u786e\u5b9a\u200b\u4e0e\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u76f8\u540c\u200b
"},{"location":"math/operating-research/chapter-1/#_20","title":"\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u7075\u654f\u5ea6","text":"\u200b\u7075\u654f\u5ea6\u200b\u8ba8\u8bba\u200b\u7ebf\u6027\u89c4\u5212\u200b\u4e2d\u200b\u53c2\u6570\u200b\u53d8\u5316\u200b\u5bf9\u200b\u7ebf\u6027\u89c4\u5212\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u5f71\u54cd\u200b\uff0c\u200b\u5e94\u5f53\u200b\u6ce8\u610f\u200b\uff0c\u200b\u5982\u679c\u200b\u53c2\u6570\u200b\u53d8\u52a8\u200b\u8fc7\u5927\u200b\uff0c\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u7ebf\u6027\u89c4\u5212\u200b\u89e3\u200b\u53d1\u751f\u53d8\u5316\u200b\u3002
\u200b\u8003\u8651\u200b\u5f62\u200b\u5982\u4e0b\u200b\u5f0f\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\uff1a
\\[ \\begin{aligned} & \\max Z = 5x_1 + 8x_2 + 6x_3 \\\\ s.t. & \\left\\{ \\begin{aligned} x_1 & + & x_2 + & x_3 + & x_4 & &= & 12 \\\\ x_1 & + & 2x_2 + & 2x_3 + & & x_5 &= & 20 \\\\ x_i &\\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5176\u200b\u6700\u4f18\u200b\u5355\u7eaf\u5f62\u200b\u8868\u4e3a\u200b\uff1a
\u200b\u4efb\u4f55\u200b\u7cfb\u6570\u200b\u7684\u200b\u53d8\u5316\u200b\u90fd\u200b\u4f1a\u200b\u9020\u6210\u200b\u4e24\u79cd\u200b\u60c5\u51b5\u200b\uff1a
- \u200b\u6700\u4f18\u200b\u89e3\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b
- \u200b\u6700\u4f18\u200b\u89e3\u200b\u53d1\u751f\u53d8\u5316\u200b
"},{"location":"math/operating-research/chapter-1/#_21","title":"\u76ee\u6807\u200b\u51fd\u6570\u200b\u7cfb\u6570\u200b\u7684\u200b\u7075\u654f\u5ea6","text":"\u200b\u5f53\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7cfb\u6570\u200b\u53d1\u751f\u53d8\u5316\u200b\u65f6\u200b\uff0c\u200b\u5982\u679c\u200b\u6700\u4f18\u200b\u89e3\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u5219\u200b\\(\\frac{\\partial Z}{\\partial C} = X\\)\u3002
- \u200b\u4e00\u4e2a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7cfb\u6570\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\u7684\u200b\u5145\u8981\u6761\u4ef6\u200b\u662f\u200b\u53d8\u5316\u200b\u540e\u200b\u7684\u200b\u68c0\u9a8c\u200b\u6570\u200b\u4ecd\u200b\u4e0d\u200b\u8d85\u8fc7\u200b\\(0\\)\u3002
- \u200b\u591a\u4e2a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7cfb\u6570\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\u7684\u200b\u5145\u5206\u6761\u4ef6\u200b\u662f\u200b\u5404\u4e2a\u200b\u7cfb\u6570\u200b\u53d8\u5316\u200b\u7684\u200b\u5e45\u5ea6\u200b\u6ee1\u8db3\u200b\\(100\\%\\)\u200b\u6cd5\u5219\u200b\u3002
100%\u200b\u6cd5\u5219\u200b
\u200b\u5b9a\u4e49\u200b\\(r_i = |\\frac{\\Delta c_i}{u_i}|\\)\uff0c\u200b\u5176\u4e2d\u200b\\(u_i\\)\u200b\u4e3a\u200b\u7cfb\u6570\u200b\\(c_i\\)\u200b\u5141\u8bb8\u200b\u53d8\u5316\u200b\u7684\u200b\u6700\u200b\u5927\u5e45\u5ea6\u200b\u3002\u200b\u82e5\u200b\\(\\sum r_i < 1\\)\uff0c\u200b\u5219\u200b\u6700\u4f18\u200b\u89e3\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_22","title":"\u7ea6\u675f\u6761\u4ef6\u200b\u7684\u200b\u7075\u654f\u5ea6","text":"\u200b\u5f53\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u53d1\u751f\u53d8\u5316\u200b\u65f6\u200b\uff0c\u200b\u5982\u679c\u200b\u5355\u7eaf\u5f62\u200b\u8868\u4e2d\u200b\u7684\u200b\\(b' = B^{-1}b\\)\u200b\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u5219\u200b\u6700\u4f18\u200b\u57fa\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u5426\u5219\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5bf9\u5076\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u6c42\u200b\u51fa\u65b0\u200b\u7684\u200b\u6700\u4f18\u200b\u57fa\u200b\u3002
\u200b\u6ce8\u610f\u200b
\u200b\u5728\u200b\u67d0\u4e9b\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u5373\u4f7f\u200b\u6700\u4f18\u200b\u57fa\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u200b\u4e5f\u200b\u4f1a\u200b\u53d1\u751f\u53d8\u5316\u200b\u3002
\u200b\u8bbe\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\\(b_1\\)\u200b\u5141\u8bb8\u200b\u53d8\u5316\u200b\u7684\u200b\u8303\u56f4\u200b\u4e3a\u200b\\(\\lambda\\)\uff0c\u200b\u5219\u200b\uff1a
\\[ b' = B^{-1}b = \\begin{bmatrix} 1 & 1 \\\\ 1 & 2 \\end{bmatrix} ^{-1} \\begin{bmatrix} \\lambda \\\\ 0 \\end{bmatrix} = \\begin{bmatrix} 4 + 2\\lambda \\\\ 8 - \\lambda \\end{bmatrix} \\] \u200b\u5982\u679c\u200b\u6700\u4f18\u200b\u57fa\u200b\u4e0d\u53d8\u200b\uff0c\u200b\u5219\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u4e0d\u53d8\u200b\uff0c\u200b\u5373\u200b\u5f71\u5b50\u200b\u4ef7\u683c\u200b\u4e0d\u53d8\u200b\u3002\u200b\u5f71\u5b50\u200b\u4ef7\u683c\u200b\u7684\u200b\u53d8\u5316\u89c4\u5f8b\u200b\u4ecd\u200b\u6ee1\u8db3\u200b\\(100\\%\\)\u200b\u6cd5\u5219\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_23","title":"\u6dfb\u52a0\u200b\u65b0\u200b\u53d8\u91cf\u200b\u6216\u200b\u65b0\u200b\u7ea6\u675f\u200b\u7684\u200b\u7075\u654f\u5ea6","text":"\u200b\u6dfb\u52a0\u200b\u65b0\u200b\u53d8\u91cf\u200b\u65f6\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u65b0\u200b\u53d8\u91cf\u200b\u7684\u200b\u68c0\u9a8c\u200b\u6570\u200b\uff0c\u200b\u5982\u679c\u200b\u68c0\u9a8c\u200b\u6570\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b\\(0\\)\uff0c\u200b\u5219\u200b\u65b0\u200b\u52a0\u5165\u200b\u7684\u200b\u53d8\u91cf\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u4e3a\u200b\\(0\\)\uff0c\u200b\u4e0d\u4f1a\u200b\u5bf9\u539f\u200b\u6700\u4f18\u200b\u89e3\u200b\u4ea7\u751f\u200b\u5f71\u54cd\u200b\u3002
\u200b\u6dfb\u52a0\u200b\u65b0\u200b\u7ea6\u675f\u200b\u65f6\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u7ea6\u675f\u200b\u5728\u200b\u5f53\u524d\u200b\u7ed3\u679c\u200b\u4e0b\u200b\u662f\u5426\u200b\u6ee1\u8db3\u200b\uff0c\u200b\u5982\u679c\u200b\u7ea6\u675f\u200b\u6ee1\u8db3\u200b\u5219\u200b\u6700\u4f18\u200b\u89e3\u200b\u4e0d\u53d8\u200b\uff0c\u200b\u5426\u5219\u200b\u6700\u4f18\u200b\u89e3\u200b\u6539\u53d8\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5bf9\u5076\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u8fdb\u884c\u200b\u6c42\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_24","title":"\u6539\u53d8\u200b\u7cfb\u6570\u200b\u77e9\u9635\u200b\u7684\u200b\u7075\u654f\u5ea6","text":"\u200b\u8ba1\u7b97\u200b\\(A' = B^{-1}A\\)\uff0c\u200b\u7136\u540e\u200b\u4f7f\u7528\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u6216\u200b\u5bf9\u5076\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u8fdb\u884c\u200b\u6c42\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-2/","title":"\u8fd0\u8f93\u200b\u95ee\u9898","text":"\u200b\u8fd0\u8f93\u200b\u95ee\u9898\u200b\u662f\u200b\u4e00\u79cd\u200b\u7279\u6b8a\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\uff0c\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u7684\u200b\u6570\u5b66\u200b\u5f62\u5f0f\u200b\uff1a
- \u200b\u7269\u8d44\u200b\u7684\u200b\u4ea7\u5730\u200b\u4e3a\u200b\\(A_i,\\; i=1, 2, \\dots m\\)\uff0c\u200b\u4ea7\u91cf\u200b\u4e3a\u200b\\(a_i\\)
- \u200b\u7269\u8d44\u200b\u7684\u200b\u9500\u5730\u200b\u4e3a\u200b\\(B_j,\\; j=1, 2, \\dots n\\)\uff0c\u200b\u9500\u91cf\u200b\u4e3a\u200b\\(b_j\\)
- \u200b\u4ece\u200b\\(i\\)\u200b\u5230\u200b\\(j\\)\u200b\u7684\u200b\u5355\u4f4d\u200b\u8fd0\u4ef7\u200b\\(c_{ij}\\)
- \u200b\u4f18\u5316\u200b\u8fd0\u8f93\u200b\u5b89\u6392\u200b\u4f7f\u5f97\u200b\u603b\u200b\u8fd0\u4ef7\u200b\u6700\u5c0f\u200b
\u200b\u5176\u200b\u7ebf\u6027\u89c4\u5212\u200b\u5f62\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
\\[ \\begin{aligned} & \\min Z = \\sum_{i=1}^m \\sum_{i=1}^n c_{ij}x_{ij} \\\\ s.t. & \\left\\{ \\begin{aligned} & \\sum_{i = 1}^m x_{ij} = b_{j} \\\\ & \\sum_{j = 1}^n x_{ij} = a_{i} \\\\ & x_{ij} \\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} & \\max W = \\sum_{i=1}^m a_iu_i + \\sum_{j=1}^n b_jv_j \\\\ s.t. & \\left\\{ \\begin{aligned} & u_j + v_j \\leq c_{ij} \\\\ & u_i \\geq 0 \\\\ & v_j \\geq 0 \\\\ & i = 1, 2, \\dots m \\\\ & j = 1, 2, \\dots n \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5982\u679c\u200b\u8fd0\u8f93\u200b\u95ee\u9898\u200b\u7684\u200b\u4ea7\u9500\u200b\u5e73\u8861\u200b\uff0c\u200b\u5373\u200b\\(\\sum a_i = \\sum b_j\\)\uff0c\u200b\u5219\u200b\u8fd0\u8f93\u200b\u95ee\u9898\u200b\u5fc5\u6709\u200b\u6709\u9650\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u4e2d\u57fa\u200b\u53d8\u91cf\u200b\u7684\u200b\u4e2a\u6570\u200b\u4e3a\u200b\\(m + n - 1\\)
"},{"location":"math/operating-research/chapter-2/#_2","title":"\u8868\u4e0a\u200b\u4f5c\u4e1a\u200b\u6cd5","text":"\u200b\u8868\u683c\u200b\u7684\u200b\u901a\u5e38\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u8ba1\u7b97\u200b\u521d\u59cb\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\uff0c\u200b\u5373\u200b\u5728\u200b\u8868\u683c\u200b\u4e0a\u200b\u586b\u5165\u200b\\(m + n - 1\\)\u200b\u4e2a\u200b\u6570\u5b57\u200b
- \u200b\u8ba1\u7b97\u200b\u8868\u4e2d\u200b\u5404\u200b\u7a7a\u683c\u200b\uff08\u200b\u975e\u57fa\u200b\u53d8\u91cf\u200b\uff09\u200b\u7684\u200b\u68c0\u9a8c\u200b\u6570\u200b\uff0c\u200b\u5224\u65ad\u200b\u5f53\u524d\u200b\u89e3\u200b\u662f\u5426\u200b\u6700\u4f18\u200b\u89e3\u200b
- \u200b\u82e5\u200b\u5f53\u524d\u200b\u89e3\u200b\u4e0d\u662f\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u5219\u200b\u8fed\u4ee3\u200b\u5230\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u57fa\u200b
\u200b\u6ce8\u610f\u200b
\u200b\u57fa\u200b\u53d8\u91cf\u200b\u4e0d\u80fd\u200b\u6784\u6210\u200b\u95ed\u200b\u56de\u8def\u200b\uff0c\u200b\u6784\u6210\u200b\u4e00\u7ec4\u200b\u95ed\u200b\u56de\u8def\u200b\u7684\u200b\u53d8\u91cf\u200b\u4e2d\u200b\u5fc5\u7136\u200b\u5305\u542b\u200b\u81f3\u5c11\u200b\u4e00\u4e2a\u200b\u975e\u57fa\u200b\u53d8\u91cf\u200b\u3002
\u200b\u95ed\u200b\u56de\u8def\u200b\u793a\u610f\u56fe\u200b\u5982\u4e0b\u200b\uff1a
\u200b\u4e00\u4e2a\u200b\u95ed\u200b\u56de\u8def\u200b\u4e2d\u200b\u542b\u6709\u200b\u5076\u6570\u200b\u4e2a\u200b\u5355\u5143\u683c\u200b\u3002
\u200b\u5982\u4e0b\u200b\u4f7f\u7528\u200b \u200b\u7a7a\u683c\u200b \u200b\u8868\u793a\u200b\\(x_{ij} = 0\\)\u200b\u7684\u200b\u5355\u5143\u683c\u200b\uff0c\u200b\u4f7f\u7528\u200b \u200b\u6570\u5b57\u200b\u683c\u200b \u200b\u8868\u793a\u200b\\(x_{ij} > 0\\)\u200b\u7684\u200b\u5355\u5143\u683c\u200b
"},{"location":"math/operating-research/chapter-2/#_3","title":"\u786e\u5b9a\u200b\u521d\u59cb\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3","text":"\u200b\u6709\u200b\u4e09\u79cd\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u786e\u5b9a\u200b\u521d\u59cb\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\uff1a
- \u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b\u6cd5\u200b
- \u200b\u897f\u5317\u89d2\u200b\u6cd5\u200b
- Vogol\u200b\u6cd5\u200b
"},{"location":"math/operating-research/chapter-2/#_4","title":"\u6700\u5c0f\u200b\u5143\u7d20\u200b\u6cd5","text":"\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b\u6cd5\u200b\u4f18\u5148\u200b\u5bfb\u627e\u200b\u8fd0\u4ef7\u200b\u8f83\u200b\u4f4e\u200b\u7684\u200b\u53d8\u91cf\u200b\u4f5c\u4e3a\u200b\u57fa\u200b\u53d8\u91cf\u200b\u3002\u200b\u5982\u679c\u200b\u9009\u53d6\u200b\u51fa\u200b\u7684\u200b\\(x_{ij}\\)\u200b\u6b63\u200b\u5206\u91cf\u200b\u4e0d\u200b\u5305\u542b\u200b\u95ed\u200b\u56de\u8def\u200b\uff0c\u200b\u5219\u200b\\(\\{x_{ij}\\}\\)\u200b\u4e3a\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#_5","title":"\u897f\u5317\u89d2\u200b\u6cd5","text":"\u200b\u897f\u5317\u89d2\u200b\u6cd5\u4ece\u200b\u5de6\u4e0a\u200b\u5f00\u59cb\u200b\uff0c\u200b\u4f18\u5148\u200b\u6700\u5927\u5316\u200b\u6ee1\u8db3\u200b\u5de6\u4e0a\u89d2\u200b\u7684\u200b\u8fd0\u8f93\u200b\u9700\u6c42\u200b\u3002\u200b\u5982\u679c\u200b\u4f9b\u7ed9\u65b9\u200b\u9700\u6c42\u200b\u5df2\u7ecf\u200b\u6ee1\u8db3\u200b\uff0c\u200b\u5219\u200b\u5212\u53bb\u200b\u4f9b\u7ed9\u65b9\u200b\u6240\u5728\u200b\u7684\u200b\u884c\u200b\uff0c\u200b\u5426\u5219\u200b\u5212\u200b\u53bb\u200b\u9700\u6c42\u65b9\u200b\u6240\u5728\u200b\u7684\u200b\u5217\u200b\u3002\u200b\u91cd\u590d\u200b\u4ee5\u4e0a\u200b\u8fc7\u7a0b\u200b\u76f4\u5230\u200b\u53f3\u4e0b\u89d2\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#vogol","title":"Vogol\u200b\u6cd5","text":"Vogol\u200b\u6cd5\u200b\u8ba1\u7b97\u200b\u5404\u884c\u200b\u5404\u5217\u200b\u4e2d\u200b\u6700\u5c0f\u200b\\(c_{ij}\\)\u200b\u4e0e\u200b\u6b21\u200b\u5c0f\u200b\\(c_{ij}\\)\u200b\u7684\u200b\u5dee\u200b\u4f5c\u4e3a\u200b\u7f5a\u6570\u200b\uff0c\u200b\u4f18\u5148\u200b\u5b89\u6392\u200b\u7f5a\u6570\u200b\u6bd4\u8f83\u200b\u5927\u200b\u7684\u200b\u4ea7\u5730\u200b-\u200b\u9500\u5730\u200b\u3002\u200b\u9009\u53d6\u200b\u7f5a\u6570\u200b\u6700\u5927\u200b\u7684\u200b\u884c\u200b\u6216\u200b\u5217\u200b\uff0c\u200b\u5e76\u200b\u586b\u5165\u200b\u6700\u5c0f\u200b\u7684\u200b\\(c_{ij}\\)\uff0c\u200b\u7136\u540e\u200b\u5212\u200b\u53bb\u200b\u8be5\u884c\u200b\u6216\u5217\u200b\uff0c\u200b\u91cd\u65b0\u200b\u8ba1\u7b97\u200b\u7f5a\u6570\u200b\u3002
Vogol\u200b\u6cd5\u200b\u901a\u5e38\u200b\u80fd\u591f\u200b\u5f97\u5230\u200b\u66f4\u4f18\u200b\u7684\u200b\u521d\u59cb\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#_6","title":"\u6700\u4f18\u6027\u200b\u68c0\u9a8c","text":""},{"location":"math/operating-research/chapter-2/#_7","title":"\u95ed\u200b\u56de\u8def\u200b\u6cd5","text":"\u200b\u5b9a\u7406\u200b
\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u7a7a\u683c\u200b\uff0c\u200b\u90fd\u200b\u5b58\u5728\u200b\u4e00\u6761\u200b\u95ed\u200b\u56de\u8def\u200b\uff1a
- \u200b\u7a7a\u683c\u200b\u4f4d\u4e8e\u200b\u8be5\u95ed\u200b\u56de\u8def\u200b\u7684\u200b\u62d0\u70b9\u200b\u4e0a\u200b
- \u200b\u95ed\u200b\u56de\u8def\u200b\u7684\u200b\u5176\u4ed6\u200b\u62d0\u70b9\u200b\u662f\u200b\u6570\u5b57\u200b\u683c\u200b
\u200b\u5c06\u200b\u4ece\u200b\u7a7a\u683c\u200b\u51fa\u53d1\u200b\uff0c\u200b\u5076\u6570\u200b\u5355\u5143\u683c\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u548c\u200b\u4e0e\u200b\u5947\u6570\u200b\u5355\u5143\u683c\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u548c\u200b\u4e4b\u200b\u5dee\u200b\u8bb0\u4e3a\u200b\\(\\lambda_{ij}\\)\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u6240\u6709\u200b\u7a7a\u683c\u200b\uff0c\u200b\u90fd\u200b\u6709\u200b\\(\\lambda_{ij} \\leq 0\\)\uff0c\u200b\u5219\u200b\u5f53\u524d\u200b\u7684\u200b\\(\\{x_{ij}\\}\\)\u200b\u4e3a\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#_8","title":"\u4f4d\u52bf\u200b\u6cd5","text":"\u200b\u8bbe\u200b\\((u_{i}, v_{j})\\)\u200b\u4e3a\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u53ef\u884c\u200b\u89e3\u200b\uff0c\\(\\{x_{ij}\\}\\)\u200b\u4e3a\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u53ef\u884c\u200b\u89e3\u200b\u3002\u200b\u6839\u636e\u200b\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027\u200b\uff0c\u200b\u82e5\u200b\\(x_{ij}(c_{ij} - u_i - v_j) = 0\\)\uff0c\u200b\u5219\u200b\u4e24\u7ec4\u200b\u89e3\u200b\u5206\u522b\u200b\u4e3a\u200b\u5bf9\u5e94\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
\u200b\u5df2\u77e5\u200b\u5f53\u524d\u200b\u4e00\u7ec4\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\\(\\{x_{ij}\\}\\)\uff1a
- \u200b\u5bf9\u4e8e\u200b\u57fa\u200b\u53d8\u91cf\u200b\\(\\{x_{ij}\\}\\)\uff0c\u200b\u5217\u51fa\u200b\u65b9\u7a0b\u200b\\(u_i + v_j = c_{ij}\\)\uff0c\u200b\u7ec4\u5408\u6210\u200b\u65b9\u7a0b\u7ec4\u200b
- \u200b\u8be5\u200b\u65b9\u7a0b\u7ec4\u200b\u6709\u200b\\(m+n\\)\u200b\u4e2a\u200b\u53d8\u91cf\u200b\u4f46\u200b\u53ea\u6709\u200b\\(m + n - 1\\)\u200b\u4e2a\u200b\u65b9\u7a0b\u200b\uff0c\u200b\u56e0\u6b64\u200b\u6709\u200b\u65e0\u6570\u200b\u89e3\u200b\uff0c\u200b\u4efb\u9009\u200b\u4e00\u7ec4\u200b\u89e3\u200b\u5373\u53ef\u200b
- \u200b\u5bf9\u4e8e\u200b\u975e\u57fa\u200b\u53d8\u91cf\u200b\\(x_{ij}\\)\uff0c\u200b\u8ba1\u7b97\u200b\\(\\lambda_{ij} = c_{ij} - u_i - v_j\\)
- \u200b\u82e5\u200b\\(\\lambda _{ij}\\)\u200b\u5168\u90e8\u200b\\(\\geq 0\\)\uff0c\u200b\u5219\u200b\u5f53\u524d\u200b\u89e3\u4e3a\u200b\u6700\u4f18\u200b\u89e3\u200b
- \u200b\u5426\u5219\u200b\u8f6c\u200b\u51fa\u200b\\((i, j) = \\arg\\max_{(i, j)} -\\lambda_{ij}\\)\uff0c\u200b\u8c03\u6574\u200b\u8be5\u200b\u7a7a\u683c\u200b\u6240\u5728\u200b\u7684\u200b\u95ed\u200b\u56de\u8def\u200b
"},{"location":"math/operating-research/chapter-2/#_9","title":"\u8fd0\u8f93\u200b\u95ee\u9898\u200b\u7684\u200b\u53d8\u79cd","text":""},{"location":"math/operating-research/chapter-2/#_10","title":"\u4e24\u5730\u200b\u65e0\u200b\u8fde\u63a5","text":"\u200b\u5982\u679c\u200b\u6a21\u578b\u200b\u4e2d\u200b\u5b58\u5728\u200b\u4e24\u4e2a\u200b\u5730\u70b9\u200b\u4e4b\u95f4\u200b\u4e0d\u80fd\u200b\u8fd0\u8f93\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u4e24\u5730\u200b\u95f4\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u8bbe\u200b\u4e3a\u200b\u8db3\u591f\u200b\u9ad8\u200b\u7684\u200b\u6b63\u6570\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#_11","title":"\u4ea7\u9500\u200b\u4e0d\u200b\u5e73\u8861","text":"\u200b\u5f53\u200b\u95ee\u9898\u200b\u4e2d\u200b\u4ea7\u91cf\u200b\u4e0e\u200b\u9500\u91cf\u200b\u4e0d\u200b\u76f8\u7b49\u200b\u65f6\u200b\uff1a
- \u200b\u5982\u679c\u200b\u4ea7\u91cf\u200b\u5927\u4e8e\u200b\u9500\u552e\u91cf\u200b\uff0c\u200b\u5219\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u865a\u62df\u200b\u4e70\u65b9\u200b\uff0c\u200b\u589e\u52a0\u200b\\(m\\)\u200b\u4e2a\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b
- \u200b\u5982\u679c\u200b\u9500\u552e\u91cf\u200b\u5927\u4e8e\u200b\u4ea7\u91cf\u200b\uff0c\u200b\u5219\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u865a\u62df\u200b\u5356\u65b9\u200b\uff0c\u200b\u589e\u52a0\u200b\\(n\\)\u200b\u4e2a\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b
"},{"location":"math/operating-research/chapter-2/#_12","title":"\u9700\u6c42\u200b\u8303\u56f4","text":"\u200b\u5982\u679c\u200b\u4e70\u65b9\u200b\u7684\u200b\u9700\u6c42\u200b\u5728\u200b\u4e00\u4e2a\u200b\u8303\u56f4\u200b\u4e2d\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5b58\u5728\u200b\u8303\u56f4\u200b\u9700\u6c42\u200b\u7684\u200b\u4e70\u65b9\u200b\u62c6\u200b\u5206\u4e3a\u200b\u4e24\u4e2a\u200b\u90e8\u5206\u200b\uff0c\u200b\u5373\u200b\u5fc5\u987b\u200b\u6ee1\u8db3\u200b\u7684\u200b\u9700\u6c42\u200b\u90e8\u5206\u200b\u4e0e\u200b\u53ef\u9009\u200b\u6ee1\u8db3\u200b\u7684\u200b\u9700\u6c42\u200b\u90e8\u5206\u200b\uff0c\u200b\u4e24\u200b\u90e8\u5206\u200b\u5230\u200b\u5356\u65b9\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u76f8\u540c\u200b\u3002\u200b\u540c\u65f6\u200b\u52a0\u5165\u200b\u4e00\u4e2a\u200b\u865a\u62df\u200b\u5356\u65b9\u200b\uff0c\u200b\u865a\u62df\u200b\u5356\u65b9\u200b\u5230\u200b\u5fc5\u987b\u200b\u6ee1\u8db3\u200b\u7684\u200b\u865a\u62df\u200b\u4e70\u5bb6\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u4e3a\u200b\u8db3\u591f\u200b\u5927\u200b\u7684\u200b\u6b63\u6570\u200b\uff0c\u200b\u865a\u62df\u200b\u5356\u65b9\u200b\u5230\u200b\u53ef\u9009\u200b\u6ee1\u8db3\u200b\u7684\u200b\u865a\u62df\u200b\u4e70\u5bb6\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u4e3a\u200b\\(0\\)\u3002
"},{"location":"math/operating-research/chapter-2/#_13","title":"\u4f9b\u5e94\u200b\u95ee\u9898","text":"\u200b\u8003\u8651\u200b\u6309\u200b\u6708\u200b\u751f\u4ea7\u200b\u7684\u200b\u5356\u65b9\u200b\u4e0e\u200b\u6309\u200b\u6708\u200b\u4ea7\u751f\u200b\u9700\u6c42\u200b\u7684\u200b\u4e70\u65b9\u200b\uff0c\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u5ef6\u671f\u200b\u4ea4\u8d27\u200b\u3002\u200b\u5356\u65b9\u200b\u751f\u4ea7\u200b\u7684\u200b\u4ea7\u54c1\u200b\u5f53\u6708\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u9500\u552e\u200b\u3002\u200b\u5219\u200b\u8be5\u200b\u95ee\u9898\u200b\u53ef\u4ee5\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u8fd0\u8f93\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#_14","title":"\u591a\u7ef4\u200b\u8fd0\u8f93\u200b\u95ee\u9898","text":"\u200b\u5047\u8bbe\u200b\u4e24\u5730\u200b\u4e4b\u95f4\u200b\u5b58\u5728\u200b\\(k\\)\u200b\u4e2a\u200b\u4e2d\u95f4\u200b\u8282\u70b9\u200b\\(c_k\\)\uff0c\u200b\u4ece\u200b\\(A\\)\u200b\u5230\u200b\\(B\\)\u200b\u7684\u200b\u6240\u6709\u200b\u8def\u5f84\u200b\u90fd\u200b\u5fc5\u987b\u200b\u7ecf\u8fc7\u200b\u8282\u70b9\u200b\\(C\\)\uff0c\u200b\u6c42\u200b\u6700\u4f18\u200b\u8fd0\u8f93\u200b\u65b9\u6848\u200b\u3002
"},{"location":"math/operating-research/chapter-3/","title":"\u76ee\u6807\u200b\u89c4\u5212","text":"\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u89e3\u51b3\u200b\u73b0\u5b9e\u751f\u6d3b\u200b\u4e2d\u200b\u7684\u200b\u591a\u200b\u76ee\u6807\u200b\u51b3\u7b56\u95ee\u9898\u200b\u3002
\u200b\u8bbe\u200b\u7ebf\u6027\u89c4\u5212\u200b\\((P)\\)\uff1a
\\[ \\begin{aligned} & \\max z=c^Tx \\\\ & s.t. \\left\\{ \\begin{aligned} & AX \\leq b \\\\ & X\\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5047\u8bbe\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u8c03\u6574\u200b\u4e3a\u200b\uff1a
\u200b\u5bfb\u627e\u200b\u4f7f\u5f97\u200b\\(z\\geq z_0\\)\u200b\u7684\u200b\\(X\\)\uff0c\u200b\u5176\u4e2d\u200b\\(z_0\\)\u200b\u4e3a\u200b\u6307\u5b9a\u200b\u7684\u200b\u76ee\u6807\u200b\u3002\u200b\u5141\u8bb8\u200b\\(z > z_0\\)\u200b\u4f46\u200b\u4e0d\u200b\u5141\u8bb8\u200b\\(z < z_0\\)
\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u5373\u200b\u4e3a\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\uff0c\u200b\u5f15\u5165\u200b\u4e24\u4e2a\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\\(d^+, d^-\\)\uff0c\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u8d85\u51fa\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u90e8\u5206\u200b\u4e0e\u200b\u4e0d\u8db3\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u90e8\u5206\u200b\uff0c\u200b\u4e3a\u200b\u4fdd\u8bc1\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u8d85\u8fc7\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u65b9\u5f0f\u200b\u5efa\u6a21\u200b\uff1a
\\[ \\begin{aligned} & \\max w = d^- \\\\ & s.t. \\left\\{ \\begin{aligned} & c^Tx - d^+ + d^- = z_0 \\\\ & AX \\leq b \\\\ & X\\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u7531\u6b64\u53ef\u89c1\u200b\uff0c\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u76f8\u5f53\u4e8e\u200b\u5728\u200b\u7ebf\u6027\u89c4\u5212\u200b\u4e2d\u200b\u5f15\u5165\u200b\u4e00\u79cd\u200b\u65b0\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u5373\u200b\u76ee\u6807\u200b\u7ea6\u675f\u200b\u3002\u200b\u6bcf\u4e2a\u200b\u76ee\u6807\u200b\u7ea6\u675f\u200b\u90fd\u200b\u9700\u8981\u200b\u5f15\u5165\u200b\u4e00\u5bf9\u200b\u53d8\u91cf\u200b\\(d^+\\)\u200b\u4e0e\u200b\\(d^-\\)\u3002\u200b\u5982\u679c\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e2d\u200b\u5b58\u5728\u200b\u591a\u4e2a\u200b\u76ee\u6807\u200b\u4e14\u200b\u4e4b\u95f4\u200b\u5b58\u5728\u200b\u4f18\u5148\u7ea7\u200b\u5173\u7cfb\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\(P_i\\)\u200b\u4f5c\u4e3a\u200b\u9700\u8981\u200b\u4f18\u5316\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7cfb\u6570\u200b\u3002\\(P_i\\)\u200b\u6ee1\u8db3\u200b\\(P_1 \\gg P_2 \\gg \\dots \\gg P_n\\)\u200b\u5e76\u4e14\u200b\u5404\u200b\\(P_i\\)\u200b\u4e3a\u200b\u8db3\u591f\u200b\u5927\u200b\u7684\u200b\u6b63\u6570\u200b\u3002
\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e2d\u200b\u53ea\u6709\u200b\u504f\u5dee\u200b\u53d8\u91cf\u200b\uff0c\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u7684\u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\u662f\u200b\u6700\u5c0f\u5316\u200b\u504f\u5dee\u200b\u53d8\u91cf\u200b\u3002\u200b\u5982\u679c\u200b\u6700\u4f18\u200b\u6761\u4ef6\u200b\u4e0b\u200b\\(Z=0\\)\uff0c\u200b\u8bf4\u660e\u200b\u6240\u6709\u200b\u76ee\u6807\u200b\u53ef\u4ee5\u200b\u540c\u65f6\u200b\u6ee1\u8db3\u200b\u3002
"},{"location":"math/operating-research/chapter-3/#_2","title":"\u76ee\u6807\u200b\u89c4\u5212\u200b\u7684\u200b\u6c42\u89e3\u200b\u65b9\u6cd5","text":"\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u56fe\u89e3\u6cd5\u200b\u6216\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u5bf9\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u8fdb\u884c\u200b\u6c42\u89e3\u200b
"},{"location":"math/operating-research/chapter-3/#_3","title":"\u56fe\u89e3\u6cd5","text":"\u200b\u4f7f\u7528\u200b\u56fe\u89e3\u6cd5\u200b\u6c42\u89e3\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u65f6\u200b\uff0c\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u753b\u51fa\u200b\u76ee\u6807\u200b\u7ea6\u675f\u200b\u4e2d\u200b\u7684\u200b\u786c\u200b\u7ea6\u675f\u200b\uff0c\u200b\u518d\u200b\u6309\u7167\u200b\u76ee\u6807\u200b\u7ea6\u675f\u200b\u7684\u200b\u4f18\u5148\u7ea7\u200b\u753b\u51fa\u200b\u8f6f\u200b\u7ea6\u675f\u200b\uff0c\u200b\u5e76\u200b\u6ce8\u660e\u200b\u7ea6\u675f\u200b\u504f\u5dee\u200b\u65b9\u5411\u200b\u3002\u200b\u6309\u7167\u200b\u7ea6\u675f\u200b\u7684\u200b\u4f18\u5148\u7ea7\u200b\u4f9d\u6b21\u200b\u5212\u5206\u200b\u80fd\u591f\u200b\u6ee1\u8db3\u200b\u7ea6\u675f\u200b\u7684\u200b\u53ef\u884c\u200b\u57df\u200b\u3002\u200b\u76f4\u5230\u200b\u53ef\u884c\u200b\u57df\u200b\u4e3a\u200b\u7a7a\u200b\u6216\u200b\u7ea6\u675f\u200b\u5168\u90e8\u200b\u6ee1\u8db3\u200b\u3002
"},{"location":"math/operating-research/chapter-3/#_4","title":"\u5355\u7eaf\u5f62\u6cd5","text":"\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u5c06\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u4e2d\u200b\u7684\u200b\u786c\u200b\u7ea6\u675f\u200b\u5316\u4e3a\u200b\u6807\u51c6\u578b\u200b\u3002\u200b\u5217\u51fa\u200b\u5355\u7eaf\u5f62\u200b\u8868\u540e\u200b\uff0c\u200b\u9010\u6b65\u200b\u5c06\u200b\u5305\u542b\u200b\u5728\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e2d\u200b\u7684\u200b\u504f\u5dee\u200b\u4ece\u200b\u57fa\u4e2d\u6362\u200b\u51fa\u200b\u3002\u200b\u5e76\u4e14\u200b\u5c3d\u53ef\u80fd\u200b\u4f7f\u5f97\u200b\u975e\u57fa\u200b\u53d8\u91cf\u200b\u7684\u200b\u68c0\u9a8c\u200b\u6570\u4e3a\u200b\u6b63\u200b\uff08\u200b\u56e0\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u7684\u200b\u4f18\u5316\u200b\u65b9\u5411\u200b\u4e3a\u200b\u6700\u5c0f\u5316\u200b\uff09\u3002
"},{"location":"math/operating-research/chapter-4/","title":"\u6574\u6570\u200b\u89c4\u5212","text":"\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u662f\u200b\u90e8\u5206\u200b\uff08\u200b\u6216\u200b\u5168\u90e8\u200b\uff09\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u5747\u53d6\u200b\u6574\u6570\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u3002\u200b\u5168\u90e8\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u5747\u53d6\u200b\u6574\u6570\u200b\u7684\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u79f0\u4e3a\u200b\u7eaf\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u3002\u200b\u5982\u679c\u200b\u6574\u6570\u200b\u53d8\u91cf\u200b\u53ea\u80fd\u200b\u53d6\u200b0-1\u200b\u4e24\u4e2a\u200b\u503c\u200b\uff0c\u200b\u5219\u200b\u79f0\u4e3a\u200b0-1\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u3002
"},{"location":"math/operating-research/chapter-4/#_2","title":"\u6574\u6570\u200b\u89c4\u5212\u200b\u7684\u200b\u6c42\u89e3\u200b\u65b9\u6cd5","text":"\u200b\u6c42\u89e3\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u76ee\u524d\u200b\u6709\u200b\u5982\u4e0b\u200b\u7b97\u6cd5\u200b\uff1a
- \u200b\u5272\u200b\u5e73\u9762\u200b\u6cd5\u200b
- \u200b\u5206\u652f\u200b\u5b9a\u754c\u200b\u6cd5\u200b
- \u200b\u9690\u200b\u679a\u4e3e\u6cd5\u200b\uff08\u200b\u9002\u7528\u200b\u4e8e\u200b\u6c42\u89e3\u200b0-1\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\uff09
- \u200b\u542f\u53d1\u5f0f\u200b\u7b97\u6cd5\u200b
\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u7eaf\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\uff1a
\\[ \\begin{aligned} & \\max z=c^Tx \\\\ & s.t. \\left\\{ \\begin{aligned} & AX \\leq b \\\\ & X\\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5176\u4e2d\u200b\\(A, b, x\\)\u200b\u5747\u200b\u4e3a\u200b\u6574\u6570\u200b\u3002
"},{"location":"math/operating-research/chapter-4/#_3","title":"\u5272\u200b\u5e73\u9762\u200b\u6cd5","text":"\u200b\u79f0\u200b\u6d88\u9664\u200b\u6574\u6570\u200b\u7ea6\u675f\u200b\u7684\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u4e3a\u200b\u677e\u5f1b\u200b\u95ee\u9898\u200b\uff0c\u200b\u5272\u200b\u5e73\u9762\u200b\u6cd5\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u6c42\u89e3\u200b\u677e\u5f1b\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u8bbe\u200b\u4e3a\u200b\\(X^*\\)\u3002\u200b\u901a\u5e38\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\\(X^*\\)\u200b\u4e0d\u662f\u200b\u6574\u6570\u200b\u6216\u200b\u4e0d\u5168\u662f\u200b\u6574\u6570\u200b\u3002\u200b\u5355\u7eaf\u5f62\u200b\u8868\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
\u200b\u8bbe\u200b\u5355\u7eaf\u5f62\u200b\u8868\u4e2d\u200b\u7684\u200b\u7b2c\u200b\\(i\\)\u200b\u884c\u200b\u5bf9\u5e94\u200b\u7684\u200b\\(b'_i\\)\u200b\u4e0d\u200b\u4e3a\u200b\u6574\u6570\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u8fd9\u200b\u4e00\u884c\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ x_i + \\sum_{j=m+1}^n a'_{ij}x_j = b'_i \\] \u200b\u5c06\u200b\\(a'_{ij}, b'_i\\)\u200b\u5212\u5206\u200b\u4e3a\u200b\u6574\u6570\u200b\u90e8\u5206\u200b\u4e0e\u200b\u5c0f\u6570\u200b\u90e8\u5206\u200b\uff0c\u200b\u5373\u200b\uff1a
\\[ \\begin{aligned} a'_{ij} &= \\tilde a_{ij} + \\alpha_{ij}, \\; \\tilde a_{ij} = \\lfloor a'_{ij}\\rfloor \\\\ b'_{i} &= \\tilde b_{i} + \\beta_{i}, \\; \\tilde b_{ij} = \\lfloor b'_{i}\\rfloor \\end{aligned} \\] \u200b\u5c06\u200b\u8fd9\u200b\u4e00\u884c\u200b\u7b49\u5f0f\u200b\u53d8\u5f62\u200b\uff0c\u200b\u5f97\u5230\u200b\uff1a
\\[ \\beta_i - \\sum_{j=m+1}^n\\alpha_{ij}y_j = x_i - \\tilde b_i + \\sum_{j=m+1}^n \\tilde \\alpha_{ij}y_j \\] \u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u7684\u200b\u6761\u4ef6\u200b\u8981\u6c42\u200b\u7b49\u5f0f\u200b\u53f3\u4fa7\u200b\u4e3a\u200b\u6574\u6570\u200b\uff0c\u200b\u56e0\u6b64\u200b\u7b49\u5f0f\u200b\u5de6\u4fa7\u200b\u540c\u6837\u200b\u9700\u8981\u200b\u4e3a\u200b\u6574\u6570\u200b\uff0c\u200b\u5219\u200b\u6709\u200b\\(\\beta_i - \\sum_{j=m+1}^n\\alpha_{ij}y_j + s_i = 0\\)\uff0c\u200b\u5176\u4e2d\u200b\\(s_i\\)\u200b\u4e3a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u3002
\u200b\u79f0\u200b\u65b9\u7a0b\u200b
\\[ \\beta_i - \\sum_{j=m+1}^n\\alpha_{ij}y_j + s_i = 0 \\] \u200b\u4e3a\u200b\u5272\u200b\u5e73\u9762\u200b\u65b9\u7a0b\u200b\uff0c\u200b\u5272\u200b\u5e73\u9762\u200b\u65b9\u7a0b\u200b\u4f5c\u4e3a\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u6d88\u53bb\u200b\u4e86\u200b\u975e\u200b\u6574\u6570\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u7559\u4e0b\u200b\u6574\u6570\u200b\u89e3\u200b\u3002\u200b\u5411\u200b\u677e\u5f1b\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u5355\u7eaf\u5f62\u200b\u8868\u4e2d\u200b\u52a0\u5165\u200b\u5272\u200b\u5e73\u9762\u200b\u65b9\u7a0b\u200b\u4f5c\u4e3a\u200b\u65b0\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u6c42\u89e3\u200b\u7ebf\u6027\u89c4\u5212\u200b\u5373\u53ef\u200b\u5f97\u5230\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-4/#_4","title":"\u5206\u652f\u200b\u5b9a\u754c\u200b\u6cd5","text":"\u200b\u5148\u200b\u6c42\u89e3\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u5bf9\u5e94\u200b\u7684\u200b\u677e\u5f1b\u200b\u95ee\u9898\u200b\uff0c\u200b\u5e76\u200b\u4f30\u8ba1\u200b\u4e00\u4e2a\u200b\u975e\u200b\u6700\u4f18\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u4f5c\u4e3a\u200b\u8bb0\u5f55\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u6700\u4f18\u200b\u89e3\u4e2d\u200b\u7684\u200b\u975e\u200b\u6574\u6570\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\uff0c\u200b\u9009\u62e9\u200b\u5176\u4e2d\u200b\u4e00\u4e2a\u200b\\(x_i\\)\u200b\u8fdb\u884c\u200b\u5206\u652f\u200b\uff1a
- \u200b\u6dfb\u52a0\u200b\u7ea6\u675f\u200b\\(x'_i \\leq \\lfloor x_i \\rfloor\\)
- \u200b\u6dfb\u52a0\u200b\u7ea6\u675f\u200b\\(x'_i \\geq \\lceil x_i \\rceil\\)
\u200b\u6dfb\u52a0\u200b\u7ea6\u675f\u200b\u540e\u200b\u91cd\u65b0\u200b\u6c42\u89e3\u200b\u7ebf\u6027\u89c4\u5212\u200b\uff0c\u200b\u5982\u679c\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u89e3\u200b\u6ee1\u8db3\u200b\u6574\u6570\u200b\u7ea6\u675f\u200b\uff0c\u200b\u5219\u200b\u5c06\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u4e0e\u200b\u8bb0\u5f55\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u76f8\u200b\u6bd4\u8f83\u200b\u3002\u200b\u5982\u679c\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u66f4\u4f18\u200b\uff0c\u200b\u5219\u200b\u66f4\u65b0\u200b\u6700\u4f18\u200b\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u505c\u6b62\u200b\u5411\u4e0b\u200b\u63a2\u7d22\u200b\uff08\u200b\u526a\u679d\u200b\uff09\u3002
\u200b\u5206\u652f\u200b\u53ef\u4ee5\u200b\u91c7\u53d6\u200b\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b\u6216\u200b\u5e7f\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b\u3002
"},{"location":"math/operating-research/chapter-4/#_5","title":"\u9690\u200b\u679a\u4e3e\u6cd5","text":"\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b0-1\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\uff1a
\\[ \\begin{aligned} & \\max z=c^Tx \\\\ & s.t. \\left\\{ \\begin{aligned} & AX \\leq b \\\\ & x_i \\in \\{0, 1\\} \\end{aligned} \\right . \\end{aligned} \\] \u200b\u9996\u5148\u200b\u8bd5\u63a2\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u53ef\u884c\u200b\u89e3\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u4f5c\u4e3a\u200b\u8bb0\u5f55\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u200b\\(Z_0\\)\uff0c\u200b\u518d\u200b\u679a\u4e3e\u200b\u6240\u6709\u200b\u7684\u200b\u53ef\u884c\u200b\u89e3\u200b\uff0c\u200b\u82e5\u89e3\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u8d85\u8fc7\u200b\u6700\u4f18\u200b\u503c\u5219\u200b\u66f4\u65b0\u200b\u6700\u4f18\u200b\u503c\u200b\u3002
"},{"location":"math/operating-research/chapter-4/#_6","title":"\u6307\u6d3e\u200b\u95ee\u9898","text":"\u200b\u6307\u6d3e\u200b\u95ee\u9898\u200b\u662f\u200b\u7279\u6b8a\u200b\u7684\u200b0-1\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\uff0c\u200b\u5176\u200b\u76ee\u6807\u200b\u662f\u200b\u5c06\u200b\\(n\\)\u200b\u4e2a\u200b\u5de5\u4eba\u200b\u5728\u200b\\(n\\)\u200b\u4e2a\u200b\u5de5\u4f5c\u200b\u4e2d\u200b\u5206\u914d\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5de5\u4eba\u200b\\(i\\)\u200b\u5728\u200b\u8fdb\u884c\u200b\u5de5\u4f5c\u200b\\(j\\)\u200b\u65f6\u200b\uff0c\u200b\u90fd\u200b\u4f1a\u200b\u4ea7\u751f\u200b\u6210\u672c\u200b\\(c_{ij}\\)\uff0c\u200b\u51b3\u7b56\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u662f\u200b\u6700\u5c0f\u5316\u200b\u603b\u6210\u672c\u200b\u3002\u200b\u8bb0\u200b\u6210\u672c\u200b\u77e9\u9635\u200b\u4e3a\u200b
\\[ A = \\begin{bmatrix} c_{11} & c_{12} & \\cdots & c_{1n} \\\\ c_{21} & c_{22} & \\cdots & c_{2n} \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ c_{n1} & c_{n2} & \\cdots & c_{nn} \\end{bmatrix} \\] \u200b\u6027\u8d28\u200b
\u200b\u82e5\u200b\u7cfb\u6570\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u7684\u200b\u67d0\u200b\u4e00\u884c\u200b\u6216\u200b\u67d0\u200b\u4e00\u5217\u200b\u51cf\u53bb\u200b\u5206\u522b\u200b\u51cf\u53bb\u200b\u4e00\u4e2a\u200b\u5e38\u6570\u200b\\(k\\)\uff0c\u200b\u4e0d\u200b\u5f71\u54cd\u200b\u6307\u6d3e\u200b\u95ee\u9898\u200b\u7684\u200b\u89e3\u200b\u3002
\u200b\u4f7f\u7528\u200b\u5308\u7259\u5229\u200b\u7b97\u6cd5\u200b\u6c42\u89e3\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u3002\u200b\u9996\u5148\u200b\u5bf9\u200b\u7cfb\u6570\u200b\u77e9\u9635\u200b\u5148\u200b\u51cf\u53bb\u200b\u6bcf\u884c\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\uff0c\u200b\u518d\u200b\u51cf\u53bb\u200b\u6bcf\u5217\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\u3002\u200b\u4ece\u800c\u200b\u6bcf\u884c\u200b\u3001\u200b\u6bcf\u5217\u200b\u4e2d\u200b\u81f3\u5c11\u200b\u51fa\u73b0\u200b\u4e00\u4e2a\u96f6\u200b\u3002\u200b\u5b9a\u4e49\u200b\u201c\u200b\u72ec\u7acb\u200b\u96f6\u200b\u201d\u200b\u4e3a\u200b\u7cfb\u6570\u200b\u77e9\u9635\u200b\u4e2d\u200b\u65e2\u200b\u4e0d\u200b\u5904\u4e8e\u200b\u540c\u4e00\u200b\u884c\u200b\u3001\u200b\u4e5f\u200b\u4e0d\u200b\u5904\u4e8e\u200b\u540c\u4e00\u200b\u5217\u200b\u7684\u200b\\(0\\)\u200b\u7684\u200b\u6700\u5927\u200b\u4e2a\u6570\u200b\u3002
- \u200b\u82e5\u200b\u201c\u200b\u72ec\u7acb\u200b\u96f6\u200b\u201d\u200b\u7684\u200b\u4e2a\u6570\u200b\u7b49\u4e8e\u200b\u65b9\u9635\u200b\u7684\u200b\u7ef4\u5ea6\u200b\uff0c\u200b\u5219\u200b\u5f97\u5230\u200b\u6307\u6d3e\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u200b\u7684\u200b\u6307\u6d3e\u200b\u65b9\u6848\u200b\u4e0e\u200b\u72ec\u7acb\u200b\u96f6\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u5206\u5e03\u200b\u76f8\u540c\u200b\u3002
- \u200b\u82e5\u200b\u201c\u200b\u72ec\u7acb\u200b\u96f6\u200b\u201d\u200b\u7684\u200b\u4e2a\u6570\u200b\u5c0f\u4e8e\u200b\u65b9\u9635\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u3002\u200b\u9996\u5148\u200b\u627e\u51fa\u200b\u65b9\u9635\u200b\u4e2d\u200b\u80fd\u591f\u200b\u8986\u76d6\u200b\u6240\u6709\u200b\u96f6\u200b\u5143\u7d20\u200b\u7684\u200b\u6700\u5c11\u200b\u76f4\u7ebf\u200b\u6570\u200b\u3002\u200b\u5728\u200b\u4e0d\u200b\u88ab\u200b\u76f4\u7ebf\u200b\u8986\u76d6\u200b\u7684\u200b\u5143\u7d20\u200b\u4e2d\u200b\u5bfb\u627e\u200b\u6700\u5c0f\u503c\u200b\uff0c\u200b\u5c06\u200b\u6240\u5728\u200b\u884c\u6216\u5217\u200b\u51cf\u53bb\u200b\u8fd9\u4e2a\u200b\u6700\u5c0f\u503c\u200b\u3002\u200b\u7136\u540e\u200b\u5bf9\u200b\u4ea7\u751f\u200b\u7684\u200b\u8d1f\u503c\u200b\u8fdb\u884c\u200b\u8c03\u6574\u200b\uff0c\u200b\u76f4\u5230\u200b\u77e9\u9635\u200b\u4e2d\u200b\u4e0d\u200b\u5b58\u5728\u200b\u8d1f\u503c\u200b\u3002\u200b\u7ed3\u675f\u200b\u540e\u200b\u7ee7\u7eed\u200b\u68c0\u67e5\u200b\u72ec\u7acb\u200b\u96f6\u200b\u7684\u200b\u4e2a\u6570\u200b\u3002
"},{"location":"math/operations-mamagement/","title":"\u9ad8\u7b49\u200b\u8fd0\u4f5c\u200b\u7ba1\u7406","text":" - \u200b\u9884\u6d4b\u200b\u6280\u672f\u200b
- \u200b\u9884\u6d4b\u200b\u4e0e\u200b\u9700\u6c42\u200b\u5efa\u6a21\u200b
- \u200b\u7efc\u5408\u200b\u751f\u4ea7\u200b\u8ba1\u5212\u200b
- \u200b\u786e\u5b9a\u200b\u9700\u6c42\u200b\u4e0b\u200b\u7684\u200b\u5e93\u5b58\u200b\u63a7\u5236\u200b
- \u200b\u968f\u673a\u200b\u9700\u6c42\u200b\u4e0b\u200b\u7684\u200b\u5e93\u5b58\u200b\u63a7\u5236\u200b
"},{"location":"math/operations-mamagement/#todo","title":"TODO","text":" - \u200b\u5468\u671f\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\u2014\u2014\\((s, S)\\)\u200b\u7b56\u7565\u200b
- \u200b\u591a\u7ea7\u200b\u7cfb\u7edf\u200b\u4e0e\u200b\u534f\u8c03\u200b\u8ba2\u8d27\u200b
"},{"location":"math/operations-mamagement/aggregrate-planning/","title":"\u7efc\u5408\u200b\u751f\u4ea7\u200b\u8ba1\u5212","text":""},{"location":"math/operations-mamagement/aggregrate-planning/#_2","title":"\u6a21\u578b\u200b\u8bbe\u5b9a","text":"\u200b\u6a21\u578b\u200b\u4e2d\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\u4f01\u4e1a\u200b\uff0c\u200b\u4f01\u4e1a\u200b\u901a\u8fc7\u200b\u96c7\u4f63\u5de5\u4eba\u200b\u751f\u4ea7\u200b\u5e76\u200b\u9500\u552e\u200b\u4ea7\u54c1\u200b\u4f5c\u4e3a\u200b\u6536\u5165\u200b\u3002\u200b\u76f8\u5173\u200b\u7684\u200b\u53c2\u6570\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u6210\u672c\u200b\u53c2\u6570\u200b
- \u200b\u5e93\u5b58\u200b\u76f8\u5173\u200b\uff1a\u200b\u539f\u6750\u6599\u200b\u6210\u672c\u200b\u3001\u200b\u6301\u6709\u200b\u6210\u672c\u200b\u3001\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b
- \u200b\u4eba\u5458\u200b\u76f8\u5173\u200b\uff1a\u200b\u96c7\u4f63\u200b\u6210\u672c\u200b\u3001\u200b\u89e3\u96c7\u200b\u6210\u672c\u200b\u3001\u200b\u5de5\u65f6\u200b\u6210\u672c\u200b\u3001\u200b\u95f2\u7f6e\u200b\u6210\u672c\u200b\u4e0e\u200b\u52a0\u73ed\u200b\u6210\u672c\u200b
- \u200b\u751f\u4ea7\u529b\u200b\u76f8\u5173\u200b\uff1a\u200b\u8f6c\u5305\u200b\u6210\u672c\u200b
- \u200b\u6536\u76ca\u200b\u53c2\u6570\u200b\uff1a\u200b\u5355\u4f4d\u200b\u4ea7\u54c1\u200b\u552e\u4ef7\u200b
- \u200b\u751f\u4ea7\u200b\u53c2\u6570\u200b
- \u200b\u5355\u4f4d\u200b\u4ea7\u54c1\u200b\u751f\u4ea7\u200b\u5de5\u65f6\u200b
- \u200b\u65e5\u5e38\u200b\u5de5\u4f5c\u200b\u5de5\u65f6\u200b
- \u200b\u5e93\u5b58\u200b\u53c2\u6570\u200b
- \u200b\u671f\u521d\u200b\u5b58\u91cf\u200b\u4e0e\u200b\u671f\u672b\u200b\u5b58\u91cf\u200b
- \u200b\u9700\u6c42\u91cf\u200b
\u200b\u53d8\u91cf\u200b \u200b\u8bf4\u660e\u200b \u200b\u53d8\u91cf\u200b \u200b\u8bf4\u660e\u200b \\(c_F\\) \u200b\u89e3\u96c7\u200b\u6210\u672c\u200b \\(c_H\\) \u200b\u96c7\u4f63\u200b\u6210\u672c\u200b \\(c_I\\) \u200b\u6301\u6709\u200b\u6210\u672c\u200b \\(c_P\\) \u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b \\(c_R\\) \u200b\u65e5\u5e38\u200b\u751f\u4ea7\u6210\u672c\u200b \\(c_O\\) \u200b\u52a0\u73ed\u200b\u751f\u4ea7\u6210\u672c\u200b \\(c_S\\) \u200b\u8f6c\u5305\u200b\u6210\u672c\u200b \\(c_U\\) \u200b\u751f\u4ea7\u529b\u200b\u7684\u200b\u95f2\u7f6e\u200b\u6210\u672c\u200b \\(D_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u9700\u6c42\u200b \\(n_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u5de5\u200b\u65f6\u6570\u200b \\(F_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u89e3\u96c7\u200b\u4eba\u6570\u200b \\(H_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u96c7\u4f63\u200b\u4eba\u6570\u200b \\(K\\) \u200b\u5355\u4f4d\u200b\u5de5\u65f6\u200b\u4ea7\u91cf\u200b \\(W_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u5458\u5de5\u200b\u4eba\u6570\u200b \\(P_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u603b\u5de5\u200b\u65f6\u200b \\(O_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u603b\u200b\u52a0\u73ed\u200b\u5de5\u65f6\u200b \\(U_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u603b\u200b\u95f2\u7f6e\u200b\u5de5\u65f6\u200b \\(S_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u5916\u5305\u200b\u4ea7\u91cf\u200b \\(I_t^+\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u591a\u4f59\u200b\u5e93\u5b58\u200b \\(I_t^-\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u7f3a\u8d27\u200b\u6c34\u5e73\u200b \u200b\u4e0a\u8868\u200b\u4e2d\u200b\\(I_t^\\pm, W_t\\)\u200b\u5206\u522b\u200b\u6307\u7b2c\u200b\\(t\\)\u200b\u4e2a\u200b\u5468\u671f\u200b\u7ed3\u675f\u200b\u65f6\u200b\u7684\u200b\u6570\u503c\u200b\u3002\u200b\u7279\u522b\u200b\u5730\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u521d\u59cb\u72b6\u6001\u200b\uff0c\u200b\u6709\u200b
- \\(I_0\\)\u200b\u4e3a\u200b\u521d\u59cb\u200b\u5e93\u5b58\u200b
- \\(W_0\\)\u200b\u4e3a\u200b\u521d\u59cb\u200b\u5458\u5de5\u200b\u6570\u200b
"},{"location":"math/operations-mamagement/aggregrate-planning/#_3","title":"\u7b56\u7565\u200b\u5206\u7c7b","text":"\u200b\u6839\u636e\u200b\u4e0d\u540c\u200b\u7684\u200b\u6210\u672c\u200b\u7b56\u7565\u200b\u4e0e\u200b\u98ce\u9669\u200b\u504f\u597d\u200b\uff0c\u200b\u7efc\u5408\u200b\u8ba1\u5212\u200b\u7c7b\u578b\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u591a\u79cd\u4e0d\u540c\u200b\u7684\u200b\u8ba1\u5212\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5982\u200b\uff1a
- \u200b\u8ffd\u9010\u200b\u7b56\u7565\u200b\uff08\u200b\u6700\u5c0f\u5316\u200b\u5e93\u5b58\u200b\uff09
- \u200b\u5e73\u7a33\u200b\u7b56\u7565\u200b\uff08\u200b\u6700\u5c0f\u5316\u200b\u5458\u5de5\u200b\u7684\u200b\u53d8\u52a8\u200b\uff09
- \u200b\u5f39\u6027\u200b\u5de5\u4f5c\u200b\u65f6\u95f4\u200b\u7b56\u7565\u200b
- \u200b\u6df7\u5408\u7b56\u7565\u200b
"},{"location":"math/operations-mamagement/aggregrate-planning/#_4","title":"\u6c42\u89e3\u200b\uff1a\u200b\u7ebf\u6027\u89c4\u5212","text":"\u200b\u5bf9\u4e8e\u200b\u5e93\u5b58\u200b\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u7ea6\u675f\u200b\uff1a
\\[ \\begin{aligned} I_t &= I_t^+ - I_t^- \\\\ I_t &= I_{t-1} + P_t + S_t - D_t \\end{aligned} \\] \u200b\u5bf9\u4e8e\u200b\u5458\u5de5\u200b\u7684\u200b\u96c7\u4f63\u200b\u4e0e\u200b\u89e3\u96c7\u200b\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u7ea6\u675f\u200b\uff1a
\\[ \\begin{aligned} W_t &= W_{t-1} + H_t - F_t \\\\ 0 &= H_t\\cdot F_t \\end{aligned} \\] \u200b\u5bf9\u4e8e\u200b\u5458\u5de5\u200b\u7684\u200b\u751f\u4ea7\u200b\u5de5\u65f6\u200b\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u7ea6\u675f\u200b\uff1a
\\[ \\begin{aligned} P_t &= Kn_t W_t + O_t - U_t \\\\ 0 &= O_t \\cdot U_t \\end{aligned} \\] \u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e3a\u200b\u6700\u5c0f\u5316\u200b\u5404\u9879\u200b\u6210\u672c\u200b\u3002
"},{"location":"math/operations-mamagement/fdm/","title":"\u9884\u6d4b\u200b\u4e0e\u200b\u9700\u6c42\u200b\u5efa\u6a21","text":"\u200b\u7ecf\u5178\u200b\u6a21\u578b\u200b\uff08\u200b\u5982\u200b\u6ed1\u52a8\u200b\u5e73\u5747\u200b\u3001\u200b\u6307\u6570\u200b\u5e73\u6ed1\u200b\u7b49\u200b\uff09\u200b\u7684\u200b\u7f3a\u9677\u200b\u5728\u4e8e\u200b\uff1a
- \u200b\u7ecf\u5178\u200b\u6a21\u578b\u200b\u6301\u7eed\u200b\u4f9d\u8d56\u4e8e\u200b\u5386\u53f2\u200b\u89c2\u6d4b\u200b\u6570\u636e\u200b
- \u200b\u90e8\u5206\u200b\u6a21\u578b\u200b\uff08\u200b\u5982\u200b\u6ed1\u52a8\u200b\u5e73\u5747\u200b\uff09\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b
- \u200b\u4ea7\u54c1\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u4e0d\u540c\u200b\uff0c\u200b\u5982\u679c\u200b\u4e00\u4e2a\u200b\u4ea7\u54c1\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u660e\u663e\u200b\u8f83\u200b\u77ed\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u6ca1\u6709\u200b\u5145\u8db3\u200b\u7684\u200b\u5386\u53f2\u6570\u636e\u200b\u5bf9\u200b\u8be5\u200b\u4ea7\u54c1\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b\u3002
\u200b\u672c\u7ae0\u200b\u8ba8\u8bba\u200b\u5982\u4e0b\u200b\u6a21\u578b\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u6a21\u578b\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u9884\u6d4b\u200b\u751f\u547d\u5468\u671f\u200b\u8f83\u200b\u77ed\u200b\u7684\u200b\u4ea7\u54c1\u200b\u3002
- Bass\u200b\u6269\u6563\u200b\u6a21\u578b\u200b
- \u200b\u9886\u5148\u200b\u6307\u6807\u200b\u6a21\u578b\u200b
- \u200b\u9009\u62e9\u200b\u6a21\u578b\u200b
"},{"location":"math/operations-mamagement/fdm/#bass","title":"Bass\u200b\u6269\u6563\u200b\u6a21\u578b","text":"Bass\u200b\u6a21\u578b\u200b\u63d0\u51fa\u200b\u4e86\u200b\u6269\u6563\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u6982\u5ff5\u200b\u3002\uff08\u200b\u67d0\u200b\u4e00\u7c7b\u200b\uff09\u200b\u65b0\u200b\u4ea7\u54c1\u200b\u9996\u6b21\u200b\u4e0a\u5e02\u200b\u540e\u200b\uff0c\u200b\u8be5\u200b\u4ea7\u54c1\u200b\u7684\u200b\u8bbe\u8ba1\u200b\u7406\u5ff5\u200b\u7b49\u200b\u5185\u5bb9\u200b\u4f1a\u200b\u5728\u200b\u5e02\u573a\u200b\u4e0a\u200b\u6269\u6563\u200b\uff08\u200b\u88ab\u200b\u6a21\u4eff\u200b\uff09\uff0c\u200b\u9020\u6210\u200b\u540c\u7c7b\u4ea7\u54c1\u200b\u7684\u200b\u4ea7\u91cf\u200b\u4e0a\u5347\u200b\u3002
\u200b\u524d\u63d0\u200b\u5047\u8bbe\u200b\uff1a
- \u200b\u5e02\u573a\u200b\u4e0a\u200b\u7684\u200b\u7528\u6237\u6570\u91cf\u200b\u4e0d\u53d8\u200b
- \u200b\u7528\u6237\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u7b80\u5355\u200b\u5206\u4e3a\u200b\u521b\u65b0\u8005\u200b\u4e0e\u200b\u6a21\u4eff\u8005\u200b
- \u200b\u521b\u65b0\u8005\u200b\u8d2d\u4e70\u200b\u4ea7\u54c1\u200b\u7684\u200b\u51b3\u7b56\u200b\u4e0d\u200b\u53d7\u5230\u200b\u5176\u4ed6\u200b\u4e2a\u4f53\u200b\u7684\u200b\u5f71\u54cd\u200b
- \u200b\u6a21\u4eff\u8005\u200b\u8d2d\u4e70\u200b\u4ea7\u54c1\u200b\u7684\u200b\u51b3\u7b56\u200b\u53d7\u5230\u200b\u5176\u4ed6\u200b\u4e2a\u4f53\u200b\u7684\u200b\u5f71\u54cd\u200b\uff0c\u200b\u8fd9\u79cd\u200b\u5f71\u54cd\u200b\u65b9\u5f0f\u200b\u901a\u8fc7\u200b\u4e2a\u4f53\u200b\u95f4\u200b\u7684\u200b\u4ea4\u6d41\u200b\u5b9e\u73b0\u200b
\u200b\u5b9a\u4e49\u200b\uff1a\\(P(t)\\)\u200b\u4e3a\u200b\u5e02\u573a\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u987e\u5ba2\u200b\u5728\u200b\\(t\\)\u200b\u65f6\u523b\u200b\u4f5c\u51fa\u200b\u8d2d\u4e70\u51b3\u7b56\u200b\u7684\u200b\u6982\u7387\u200b
\\[ P(t) = p + \\frac{q}{m} D(t) \\] - \\(p\\)\u200b\u4e3a\u200b\u521b\u65b0\u200b\u7cfb\u6570\u200b
- \\(q\\)\u200b\u4e3a\u200b\u6a21\u4eff\u200b\u7cfb\u6570\u200b\uff0c\\(p\\ll q\\)
- \\(m\\)\u200b\u4e3a\u200b\u6d88\u8d39\u8005\u200b\u7684\u200b\u603b\u91cf\u200b\uff0c\u200b\u4e5f\u200b\u5373\u200b\u5e02\u573a\u200b\u89c4\u6a21\u200b\uff0c\u200b\u5e38\u6570\u200b
- \\(D(t)\\)\u200b\u4e3a\u200b\u65f6\u95f4\u200b\u4ece\u200b\\(0\\)\u200b\u5230\u200b\\(t\\)\u200b\u7684\u200b\u7d2f\u79ef\u200b\u8d2d\u4e70\u91cf\u200b
\u200b\u5373\u200b\uff0c\u200b\u5e02\u573a\u200b\u4e0a\u200b\u7684\u200b\u7d2f\u8ba1\u200b\u9700\u6c42\u200b\\(D(t)\\)\u200b\u8d8a\u5927\u200b\uff0c\u200b\u6d88\u8d39\u8005\u200b\u8d8a\u200b\u5bb9\u6613\u200b\u4f5c\u51fa\u200b\u8d2d\u4e70\u51b3\u7b56\u200b\u3002
\u200b\u4e0d\u59a8\u200b\u8bbe\u200b\\(d(t) = \\frac{\\mathrm dD}{\\mathrm dt}\\)\uff0c\u200b\u5373\u200b\\(t\\)\u200b\u65f6\u523b\u200b\u5e02\u573a\u200b\u4e0a\u200b\u8d2d\u4e70\u200b\u4eba\u6570\u200b\uff0c\u200b\u6839\u636e\u200b\\(P(t)\\)\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ P(t) = \\frac{d(t)}{m - D(t)} \\] \u200b\u8054\u7acb\u200b\u4e8c\u200b\u5f0f\u200b\uff0c\u200b\u5f97\u5230\u200b\uff1a
\\[ \\begin{aligned} p + \\frac{q}{m} D(t) &= \\frac{d(t)}{m - D(t)} \\\\ d(t) &= (m-D(t))\\left(p + \\frac qmD(t)\\right) \\\\ d(t) &= -\\frac qmD^2(t) + (q-p)D(t) + pm \\end{aligned} \\] \u200b\u89e3\u200b\u5fae\u5206\u65b9\u7a0b\u200b\\(\\frac{\\mathrm dD}{\\mathrm dt} = -\\frac qmD^2 + (q-p)D + pm\\)\uff0c\u200b\u5f97\u200b\\(D(t)\\)\uff1a
\\[ \\boxed{\\begin{aligned}D(t) &= m\\frac{1-e^{-(p+q)t}}{1+\\frac qp e^{-(p+q)t}} \\\\ d(t) &= m\\frac{p(p+q)^2e^{-(p+q)t}}{\\left(p+qe^{-(p+q)t}\\right)^2}\\end{aligned}} \\] \u200b\u5bf9\u200b\\(d(t)\\)\u200b\u8fdb\u4e00\u6b65\u200b\u6c42\u5bfc\u200b\uff0c\u200b\u5f97\u5f53\u200b\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(t = \\frac{1}{p+q}\\log \\frac{q}{p}\\)\u200b\u65f6\u200b\uff0c\\(d(t)\\)\u200b\u53d6\u5f97\u200b\u6700\u5927\u503c\u200b\u3002
\u200b\u6b64\u65f6\u200b\uff1a
\\[ \\boxed{\\begin{aligned}d(t) &= \\frac{m(p+q)^2}{4q} \\\\ D(t) &= \\frac{m(q-p)}{2q}\\end{aligned}} \\] \u200b\u7ed3\u679c\u200b\u8bf4\u660e\u200b\uff1a
- \u200b\u5f53\u200b\\(p\\)\u200b\u5f88\u200b\u5c0f\u65f6\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u9500\u552e\u91cf\u200b\u7684\u200b\u589e\u957f\u200b\u7f13\u6162\u200b
- \u200b\u5f53\u200b\\(p, q\\)\u200b\u5f88\u5927\u200b\u65f6\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u9500\u552e\u91cf\u200b\u7684\u200b\u589e\u957f\u200b\u4e0e\u200b\u4e0b\u8dcc\u200b\u5747\u200b\u8fc5\u901f\u200b
- \u200b\u4ec5\u5f53\u200b\\(q>p\\)\u200b\u65f6\u200b\uff0c\u200b\u4e0a\u5f0f\u200b\u624d\u200b\u6709\u200b\u610f\u4e49\u200b\uff0c\u200b\u5426\u5219\u200b\u610f\u5473\u7740\u200b\u9500\u552e\u91cf\u200b\u6301\u7eed\u200b\u4e0b\u8dcc\u200b
"},{"location":"math/operations-mamagement/forecast/","title":"\u9884\u6d4b\u200b\u6280\u672f","text":"\u200b\u5e38\u89c1\u200b\u7684\u200b\u5ba2\u89c2\u200b\u9884\u6d4b\u200b\u65b9\u6cd5\u200b\u6709\u200b\u56e0\u679c\u200b\u6a21\u578b\u200b\u4e0e\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u65b9\u6cd5\u200b\u3002\u200b\u8fd9\u4e9b\u200b\u65b9\u6cd5\u200b\u7684\u200b\u524d\u63d0\u200b\u5047\u8bbe\u200b\u662f\u200b\u8fc7\u53bb\u200b\u7684\u200b\u53d8\u91cf\u200b\u53ca\u5176\u200b\u76f8\u4e92\u4f5c\u7528\u200b\u5173\u7cfb\u200b\u5728\u200b\u672a\u6765\u200b\u5c06\u200b\u7ee7\u7eed\u200b\u5b58\u5728\u200b\u5e76\u200b\u53d1\u6325\u4f5c\u7528\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_2","title":"\u56e0\u679c\u200b\u6a21\u578b","text":"\u200b\u56e0\u679c\u200b\u6a21\u578b\u200b\u5373\u200b\u627e\u5230\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u4f7f\u7528\u200b\u4e0e\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b\u76f8\u5173\u200b\u7684\u200b\u5176\u4ed6\u200b\u53d8\u91cf\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b\u3002
\\[ y = f(X_1, \\dots, X_n) \\] \u200b\u5176\u4e2d\u200b\\(X_1, \\dots, X_n\\)\u200b\u662f\u200b\u4e0e\u200b\\(y\\)\u200b\u76f8\u5173\u200b\u7684\u200b\u5176\u4ed6\u200b\u53d8\u91cf\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u7ebf\u6027\u200b\u56e0\u679c\u200b\u6a21\u578b\u200b\uff0c\u200b\u51fd\u6570\u200b\\(f\\)\u200b\u662f\u200b\u5173\u4e8e\u200b\\(X_1, \\dots, X_n\\)\u200b\u7684\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\uff0c\u200b\u5373\u200b\uff1a
\\(f(X_1, \\dots, X_n) = \\alpha_0 + \\alpha_1X_1 + \\dots + \\alpha_nX_n\\)
"},{"location":"math/operations-mamagement/forecast/#_3","title":"\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u65b9\u6cd5","text":"\u200b\u6b64\u5904\u200b\u7684\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u6307\u5f80\u671f\u200b\u5bf9\u200b\u67d0\u200b\u53d8\u91cf\u200b\u89c2\u6d4b\u200b\u503c\u200b\u7684\u200b\u96c6\u5408\u200b\u3002\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u65b9\u6cd5\u200b\u4ec5\u4ec5\u200b\u4f9d\u9760\u200b\u8fd9\u4e9b\u200b\u89c2\u6d4b\u200b\u503c\u200b\u5bf9\u200b\u8be5\u200b\u53d8\u91cf\u200b\u7684\u200b\u672a\u6765\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b\u3002
\u200b\u5728\u200b\u73b0\u5b9e\u200b\u7684\u200b\u751f\u4ea7\u200b\u8fd0\u4f5c\u200b\u4e2d\u200b\uff0c\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u901a\u5e38\u200b\u4f1a\u200b\u8868\u73b0\u200b\u51fa\u200b\u4ee5\u4e0b\u200b\u6a21\u5f0f\u200b\uff1a
- \u200b\u8d8b\u52bf\u200b\uff0c\u200b\u5373\u200b\u89c2\u6d4b\u200b\u503c\u200b\u5728\u200b\u6574\u4e2a\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u6240\u200b\u8868\u73b0\u200b\u51fa\u200b\u7684\u200b\u8d8b\u52bf\u200b
- \u200b\u5b63\u8282\u200b\uff0c\u200b\u5373\u200b\u89c2\u6d4b\u200b\u503c\u200b\u5728\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u4e00\u90e8\u5206\u200b\u6240\u200b\u8868\u73b0\u200b\u51fa\u200b\u7684\u200b\u8d8b\u52bf\u200b
- \u200b\u5468\u671f\u200b\uff0c\u200b\u5373\u200b\u89c2\u6d4b\u200b\u503c\u200b\u5728\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u91cd\u590d\u200b\u591a\u6b21\u200b\u51fa\u73b0\u200b\u7684\u200b\u8d8b\u52bf\u200b
- \u200b\u968f\u673a\u200b\uff0c\u200b\u6307\u200b\u89c2\u6d4b\u200b\u503c\u200b\u65e0\u89c4\u5219\u200b\u7684\u200b\u53d8\u52a8\u200b
\u200b\u5b9e\u9645\u200b\u7684\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u53ef\u80fd\u200b\u540c\u65f6\u200b\u5305\u542b\u200b\u4ee5\u4e0a\u200b\u6240\u6709\u200b\u7279\u5f81\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_4","title":"\u89c2\u6d4b\u200b\u4e0e\u200b\u9884\u6d4b","text":" - \\(\\{D_t\\}\\)\u200b\u4e3a\u200b\u89c2\u6d4b\u200b\u53d8\u91cf\u200b\u5728\u200b\\(1\\sim t\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u5185\u200b\u7684\u200b\u89c2\u6d4b\u200b\u503c\u200b\u7ec4\u6210\u200b\u7684\u200b\u5e8f\u5217\u200b\uff1b
- \\(F_{t-\\tau, t}\\)\u200b\u8868\u793a\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u5728\u200b\\(t-\\tau\\)\u200b\u5468\u671f\u200b\u5185\u200b\u5bf9\u200b\\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u89c2\u6d4b\u200b\u503c\u200b\u4f5c\u51fa\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002\u200b\u7279\u6b8a\u200b\u5730\u200b\uff0c\\(F_t=F_{t-1, t}\\)\uff0c\u200b\u5373\u200b\u4e3a\u200b\u63d0\u524d\u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002
\u200b\u5982\u4e0b\u200b\u6307\u6807\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8861\u91cf\u200b\u9884\u6d4b\u200b\u6548\u679c\u200b\uff0c\u200b\u5b9a\u4e49\u200b\u504f\u5dee\u200b\\(e_t = D_t - F_t\\)
- \u200b\u5e73\u5747\u200b\u7edd\u5bf9\u200b\u504f\u5dee\u200b\uff08MAD\uff09\uff1a\\(\\frac{1}{n}\\sum_{i=1}^n|e_i|\\)
- \u200b\u5747\u65b9\u200b\u8bef\u5dee\u200b\uff08MSE\uff09\uff1a\\(\\frac{1}{n}\\sum_{i=1}^ne_i^2\\)
- \u200b\u5e73\u5747\u200b\u7edd\u5bf9\u200b\u767e\u5206\u200b\u8bef\u5dee\u200b\uff08MAPE\uff09\uff1a\\(\\frac{1}{n}\\sum_{i=1}^n|e_i/D_i|\\times 100\\%\\)
"},{"location":"math/operations-mamagement/forecast/#_5","title":"\u5e73\u7a33\u200b\u5e8f\u5217\u200b\u7684\u200b\u9884\u6d4b","text":"\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\u662f\u200b\u8054\u5408\u200b\u6982\u7387\u5206\u5e03\u200b\u4e0d\u968f\u200b\u65f6\u95f4\u200b\u6539\u53d8\u200b\uff0c\u200b\u5f62\u200b\u5982\u200b\\(D_t=\\mu + \\epsilon_t\\)\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002
\u200b\u5bf9\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5e38\u7528\u200b\u4e24\u79cd\u200b\u9884\u6d4b\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5373\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\u4e0e\u200b\u6307\u6570\u200b\u5e73\u6ed1\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_6","title":"\u79fb\u52a8\u200b\u5e73\u5747","text":"\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\uff0c\\(MA(N)\\)\uff1a
\\[ F_t = \\frac{1}{N}\\sum_{i=t-N}^{t-1}\\alpha_{i-t+N+1}D_i \\] \u200b\u5f53\u200b\\(\\alpha_i=1\\)\u200b\u65f6\u200b\uff0c\u200b\u79f0\u8be5\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\u4e3a\u200b\u7b80\u5355\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\uff0c\u200b\u5426\u5219\u200b\u4e3a\u200b\u52a0\u6743\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u7b80\u5355\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\uff0c\u200b\u6839\u636e\u200b\u524d\u200b\u4e00\u200b\u5468\u671f\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b\u548c\u200b\u65b0\u200b\u7684\u200b\u89c2\u6d4b\u200b\u503c\u200b\u53ef\u4ee5\u200b\u8ba1\u7b97\u200b\u4e0b\u200b\u4e00\u200b\u5468\u671f\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b\uff1a
\\[ \\begin{aligned} F_{t+1} &= \\frac{1}{N}\\sum_{i=t-N+1}^{t}D_i \\\\ &= \\frac{1}{N}\\sum_{i=t-N}^{t-1} - D_{t-N} + D_t \\\\ &= F_{t} + \\frac 1N \\left(D_t - D_{t-N}\\right) \\end{aligned} \\] \u200b\u5bf9\u4e8e\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\uff0c\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\u7684\u200b\u9884\u6d4b\u200b\u901a\u5e38\u200b\u6ede\u540e\u200b\u4e8e\u200b\u8d8b\u52bf\u200b\u7684\u200b\u53d1\u5c55\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_7","title":"\u6307\u6570\u200b\u5e73\u6ed1","text":"\u200b\u5f53\u524d\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b\u7b49\u4e8e\u200b\u4e0a\u200b\u4e00\u6b21\u200b\u9884\u6d4b\u503c\u200b\u4e0e\u200b\u5f53\u524d\u200b\u9700\u6c42\u200b\u5b9e\u9645\u200b\u503c\u200b\u7684\u200b\u52a0\u6743\u200b\u5e73\u5747\u200b\uff0c\u200b\u5373\u200b\uff1a
\\[ \\begin{aligned} F_t &= \\alpha D_{t-1} + (1-\\alpha)F_{t-1} \\\\ &= F_{t-1} + \\alpha e_{t-1} \\end{aligned} \\] \u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7406\u89e3\u200b\u4e3a\u200b\u5bf9\u200b\u4e0a\u200b\u4e00\u6b21\u200b\u9884\u6d4b\u200b\u7684\u200b\u504f\u5dee\u200b\u4f5c\u51fa\u200b\u7cfb\u6570\u200b\u4e3a\u200b\\(\\alpha\\)\u200b\u7684\u200b\u4fee\u6b63\u200b\u3002
\u200b\u5df2\u77e5\u200b\\(t=0\\)\u200b\u65f6\u200b\u5bf9\u200b\\(D_1\\)\u200b\u7684\u200b\u9884\u6d4b\u200b\u4e3a\u200b\\(F_1\\)\uff0c\u200b\u5219\u200b\uff1a
\\[ \\begin{aligned} F_2 &= \\alpha D_1 + (1-\\alpha) F_1 \\\\ F_3 &= \\alpha D_2 + (1-\\alpha) F_2 =\\alpha D_2 + (1-\\alpha)\\alpha D_1 + (1-\\alpha) ^ 2 F_1 \\\\ \\vdots \\\\ F_n &= \\sum_{i=1} ^{n-1} \\alpha(1-\\alpha)^{i-1}D_{n-i} + (1-\\alpha)^{n-1}F_1 \\end{aligned} \\]"},{"location":"math/operations-mamagement/forecast/#_8","title":"\u8d8b\u52bf\u200b\u5e8f\u5217","text":"\u200b\u5bf9\u200b\u8d8b\u52bf\u200b\u5e8f\u5217\u200b\u7684\u200b\u9884\u6d4b\u200b\u901a\u5e38\u200b\u4f7f\u7528\u200b\u56de\u5f52\u200b\u5206\u6790\u200b\uff0c\u200b\u5373\u200b\u5047\u8bbe\u200b\u89c2\u6d4b\u200b\u53d8\u91cf\u200b\u4e0e\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b\u95f4\u200b\u5b58\u5728\u200b\u51fd\u6570\u200b\u5173\u7cfb\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u6839\u636e\u200b\u89c2\u6d4b\u200b\u53d8\u91cf\u200b\u548c\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b\u7684\u200b\u89c2\u6d4b\u200b\u503c\u200b\u5bf9\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_9","title":"\u7ebf\u6027\u200b\u56de\u5f52","text":"\u200b\u5f53\u200b\u56de\u5f52\u200b\u4f7f\u7528\u200b\u5f62\u200b\u5982\u200b\\(\\hat Y=a+bX\\)\u200b\u7684\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u65f6\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u7ebf\u6027\u200b\u56de\u5f52\u200b\u3002\u200b\u7531\u6b64\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6700\u5c0f\u200b\u4e8c\u200b\u4e58\u6cd5\u200b\u8fdb\u884c\u200b\u62df\u5408\u200b\u3002
\u200b\u6700\u5c0f\u200b\u4e8c\u200b\u4e58\u6cd5\u200b\u4f7f\u5f97\u200b\\(\\sum|Y-\\hat Y|^2\\)\u200b\u6700\u5c0f\u200b\uff0c\u200b\u5373\u200b\u9884\u6d4b\u200b\u70b9\u200b\u548c\u200b\u89c2\u6d4b\u70b9\u200b\u7684\u200b\u8ddd\u79bb\u200b\u5e73\u65b9\u548c\u200b\u6700\u5c0f\u200b\u3002\u200b\u5047\u8bbe\u200b\u89c2\u6d4b\u200b\u53d8\u91cf\u200b\u4e3a\u200b\\(X_1, \\dots, X_m\\)\uff0c\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b\u4e3a\u200b\\(y\\)\uff0c\u200b\u5171\u200b\\(n\\)\u200b\u7ec4\u200b\u6570\u636e\u200b\u70b9\u200b\uff0c\u200b\u5219\u200b\u7ebf\u6027\u200b\u56de\u5f52\u200b\u6a21\u578b\u200b\u4e3a\u200b\uff1a
\\[ \\hat y = X\\vec a \\] \u200b\u5176\u4e2d\u200b\\(\\vec a, , \\hat y\\)\u200b\u4e3a\u200b\\(m\\)\u200b\u7ef4\u5217\u200b\u5411\u91cf\u200b\uff0c\\(X\\)\u200b\u4e3a\u200b\\(n\\times m\\)\u200b\u77e9\u9635\u200b\u3002
\u200b\u5219\u200b\u6b8b\u5dee\u200b\u5e73\u65b9\u548c\u200b\u5373\u200b\u4e3a\u200b\\(f(a; X, y) = (y - \\hat y)^T(y - \\hat y)=(y - Xa)^T(y - Xa)\\)\u3002
\u200b\u5bf9\u200b\\(\\vec a, \\vec b\\)\u200b\u6c42\u5bfc\u200b\uff0c\u200b\u5f97\u200b\uff1a
\\[ \\frac{\\partial f}{\\partial \\vec a} = 0 \\] \\(\\frac{\\partial f}{\\partial \\vec a} = 0\\)\u200b\u5373\u200b\uff1a
\\[ \\begin{aligned} \\frac{\\partial f}{\\partial \\vec a} &= 2X^T(X\\vec a - y) \\\\ &= 2X^TX\\vec a + 2X^Ty \\\\ &= \\vec 0 \\end{aligned} \\] \u200b\u5f97\u200b\\(\\vec a = (X^TX)^{-1}X^Ty\\)
"},{"location":"math/operations-mamagement/forecast/#_10","title":"\u53cc\u91cd\u200b\u6307\u6570\u200b\u5e73\u6ed1","text":"\u200b\u53cc\u91cd\u200b\u6307\u6570\u200b\u5e73\u6ed1\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u9884\u6d4b\u200b\u5177\u6709\u200b\u7ebf\u6027\u200b\u8d8b\u52bf\u200b\u7684\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5176\u4e2d\u200b\u4f7f\u7528\u200b\u4e24\u4e2a\u200b\u5e73\u6ed1\u200b\u53c2\u6570\u200b\u5206\u522b\u200b\u9884\u6d4b\u200b\u5e8f\u5217\u200b\u503c\u200b\\(S_t\\)\u200b\u548c\u200b\u8d8b\u52bf\u200b\u503c\u200b\\(G_t\\)
- \u200b\u5e8f\u5217\u200b\u503c\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u66f2\u7ebf\u200b\u7684\u200b\u622a\u8ddd\u200b $$ S_t = \\alpha D_t + (1 - \\alpha)(S_{t-1} + G_{t-1}) $$
- \u200b\u8d8b\u52bf\u200b\u503c\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u66f2\u7ebf\u200b\u7684\u200b\u659c\u7387\u200b $$ G_t = \\beta(S_t - S_{t-1})+(1-\\beta)G_{t-1} $$
- \u200b\u5728\u200b\\(t\\)\u200b\u65f6\u523b\u200b\u63d0\u524d\u200b\\(\\tau\\)\u200b\u6b65\u200b\u4f5c\u51fa\u200b\u7684\u200b\u9884\u6d4b\u200b\\(F_{t, t+\\tau} = S_t+\\tau G_t\\)
"},{"location":"math/operations-mamagement/forecast/#_11","title":"\u5b63\u8282\u6027\u200b\u5e8f\u5217","text":"\u200b\u5b63\u8282\u6027\u200b\u5e8f\u5217\u200b\u662f\u200b\u6bcf\u200b\\(N\\)\u200b\u4e2a\u200b\u5468\u671f\u200b\u91cd\u590d\u200b\u4e00\u6b21\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5176\u4e2d\u200b\\(N\\)\u200b\u88ab\u200b\u79f0\u4e3a\u200b\u5b63\u200b\u7684\u200b\u957f\u5ea6\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u5b63\u8282\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\uff0c\u200b\u90fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\\(c_t\\)\uff0c\u200b\u6307\u200b\u5e73\u5747\u200b\u610f\u4e49\u200b\u4e0b\u200b\u7b2c\u200b\\(t\\)\u200b\u4e2a\u200b\u5468\u671f\u200b\u7684\u200b\u9700\u6c42\u200b\u4e0e\u200b\u6574\u4f53\u200b\u5e73\u5747\u200b\u9700\u6c42\u200b\u7684\u200b\u6bd4\u503c\u200b\uff0c\u200b\u6709\u200b\\(\\sum c_t = N\\)
- \u200b\u8ba1\u7b97\u200b\u6240\u6709\u200b\u6570\u636e\u200b\u7684\u200b\u6837\u672c\u5747\u503c\u200b
- \u200b\u5c06\u200b\u6bcf\u4e2a\u200b\u89c2\u6d4b\u200b\u503c\u200b\u9664\u4ee5\u200b\u6837\u672c\u5747\u503c\u200b\uff0c\u200b\u5373\u200b\u4e3a\u200b\u6bcf\u4e2a\u200b\u89c2\u6d4b\u200b\u5468\u671f\u200b\u7684\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b
- \u200b\u5c06\u200b\u6bcf\u5b63\u200b\u4e2d\u200b\u76f8\u540c\u200b\u5468\u671f\u200b\u7684\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\u53d6\u200b\u5747\u503c\u200b\uff0c\u200b\u5f97\u5230\u200b\\(N\\)\u200b\u4e2a\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b
\u200b\u5bf9\u4e8e\u200b\u540c\u65f6\u200b\u5177\u6709\u200b\u5b63\u8282\u6027\u200b\u6ce2\u52a8\u200b\u548c\u200b\u8d8b\u52bf\u200b\u7684\u200b\u5b63\u8282\u6027\u200b\u5e8f\u5217\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b\uff1a
- \u200b\u8ba1\u7b97\u200b\u5e8f\u5217\u200b\u7684\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b
- \u200b\u5c06\u200b\u89c2\u6d4b\u200b\u503c\u200b\u9664\u4ee5\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\uff0c\u200b\u5f97\u5230\u200b\u6d88\u9664\u200b\u5b63\u8282\u6027\u200b\u6ce2\u52a8\u200b\u7684\u200b\u5e8f\u5217\u200b
- \u200b\u7528\u200b\u8d8b\u52bf\u200b\u5e8f\u5217\u200b\u7684\u200b\u9884\u6d4b\u200b\u65b9\u6cd5\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b
- \u200b\u9884\u6d4b\u200b\u7ed3\u679c\u200b\u4e58\u4ee5\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\uff0c\u200b\u5f97\u5230\u200b\u6700\u7ec8\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b
\u200b\u7f3a\u70b9\u200b\uff1a\u200b\u5728\u200b\u83b7\u5f97\u200b\u65b0\u200b\u7684\u200b\u89c2\u6d4b\u200b\u503c\u540e\u200b\uff0c\u200b\u9700\u8981\u200b\u91cd\u65b0\u200b\u8ba1\u7b97\u200b\u6240\u6709\u200b\u7684\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_12","title":"\u4e09\u91cd\u200b\u6307\u6570\u200b\u5e73\u6ed1","text":"\u200b\u5047\u8bbe\u200b\u9700\u6c42\u200b\u4e3a\u200b\\(D_t = (\\mu +G_t)c_t + \\epsilon_t\\)\uff08\u200b\u4e58\u79ef\u200b\u578b\u200b\uff09\u3002\u200b\u8be5\u200b\u5f62\u5f0f\u200b\u4f7f\u7528\u200b\u4e09\u4e2a\u200b\u6307\u6570\u200b\u5e73\u6ed1\u200b\u5bf9\u200b\u5e8f\u5217\u200b\uff08\u200b\u622a\u8ddd\u200b\uff09\u3001\u200b\u8d8b\u52bf\u200b\uff08\u200b\u659c\u7387\u200b\uff09\u200b\u548c\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\uff08\u200b\u5468\u671f\u200b\uff09\u200b\u5206\u522b\u200b\u8fdb\u884c\u200b\u62df\u5408\u200b\u3002
- \u200b\u5e8f\u5217\u200b\uff1a\\(S_t = \\alpha \\frac{D_t}{c_{t-N}} + (1-\\alpha) (S_{t-1} + G_{t-1})\\)\uff0c\\(c_{t-N}\\)\u200b\u7528\u4e8e\u200b\u6d88\u9664\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002
- \u200b\u8d8b\u52bf\u200b\uff1a\\(G_t = \\beta(S_t - S_{t-1}) + (1-\\beta) G_{t-1}\\)
- \u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\uff1a\\(c_t = \\gamma\\frac{D_t}{S_t} + (1-\\gamma) c_{t-N}\\)
"},{"location":"math/operations-mamagement/forecast/#box-jenkinsarima","title":"Box-Jenkins\u200b\u6a21\u578b\u200b\uff1aARIMA","text":"ARIMA\u200b\u6a21\u578b\u200b\u662f\u200b\u5229\u7528\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u200b\u7ed3\u6784\u200b\uff1a
Auto Regressive Integrated Moving Average
\u200b\u6784\u5efa\u200b\u6b65\u9aa4\u200b\uff1a
- \u200b\u6570\u636e\u200b\u8f6c\u6362\u200b
- \u200b\u6a21\u578b\u200b\u8bc6\u522b\u200b
- \u200b\u53c2\u6570\u4f30\u8ba1\u200b
- \u200b\u9884\u6d4b\u200b
- \u200b\u8bc4\u4ef7\u200b
"},{"location":"math/operations-mamagement/forecast/#arp","title":"\u81ea\u200b\u56de\u5f52\u200b\u8fc7\u7a0b\u200b\uff1aAR(p)","text":"\u200b\u5bf9\u4e8e\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\uff1a
- \u200b\u95f4\u9694\u200b\u76f8\u540c\u200b\u7684\u200b\u4efb\u610f\u200b\u4e00\u7ec4\u200b\u9700\u6c42\u200b\u7684\u200b\u8054\u5408\u200b\u8fb9\u9645\u200b\u5206\u5e03\u200b\u76f8\u540c\u200b->\u200b\u534f\u65b9\u5dee\u200b\u76f8\u540c\u200b
- \u200b\u4efb\u610f\u200b\u4e24\u4e2a\u200b\u89c2\u6d4b\u200b\u7684\u200b\u534f\u65b9\u5dee\u200b\u4ec5\u200b\u53d6\u51b3\u4e8e\u200b\u76f8\u9694\u200b\u7684\u200b\u5468\u671f\u200b\u6570\u200b
\\[ \\mathrm{Cov}(D_{t+m}, D_{t+m+k}) = E(D_{t+m}D_{t+m+k}) - E(D_{t+m})E(D_{t+m+k}) \\] \u200b\u76f8\u5173\u7cfb\u6570\u200b\uff1a\u200b\u6ede\u540e\u200b\\(k\\)\u200b\u671f\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u7cfb\u6570\u200b
\\[ \\rho_k = \\frac{\\mathrm {Cov}(D_{t+m}, D_{t+m+k})}{\\sqrt{\\mathrm {Var}(D_{t+m})}\\sqrt{\\mathrm {Var}(D_{t+m+k})}} \\] \u200b\u6837\u672c\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u200b\u51fd\u6570\u200b\uff1a
\\[ r_k = \\frac{\\sum_{t=k+1} ^ n(D_t - \\overline D)(D_{t-k} - \\overline D)}{\\sum_{t=1} ^ n(D_t - \\overline D)^2} \\] \\[ D_t = a_0 + a_1D_{t-1} + \\dots + a_pD_{t-p} + \\epsilon_t \\] \\(p\\)\u200b\u4e3a\u200b\u81ea\u200b\u56de\u5f52\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u9636\u6570\u200b\uff0c\u200b\u4e00\u9636\u81ea\u200b\u56de\u5f52\u200b\u6a21\u578b\u200b\\(AR(1)\\)\uff1a
\\[ D_t = a_0 + a_1 D_{t-1} + \\epsilon_t \\] \u200b\u81ea\u200b\u76f8\u5173\u200b\u51fd\u6570\u200b\u4e3a\u200b\uff1a\\(\\rho_j = a_1^j\\)
\u200b\u5c06\u200b\u6837\u672c\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u200b\u51fd\u6570\u200b\u4e0e\u200b\u7406\u8bba\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u200b\u51fd\u6570\u200b\u8fdb\u884c\u200b\u6bd4\u8f83\u200b\uff0c\u200b\u5224\u65ad\u200bARIMA\u200b\u7684\u200b\u62df\u5408\u200b\u6548\u679c\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#maq","title":"\u79fb\u52a8\u200b\u5e73\u5747\u200b\u8fc7\u7a0b\u200b\uff1aMA(q)","text":"\\[ D_t = b_0 - b_1\\epsilon_{t-1} -\\dots - b_q\\epsilon{t-q} +\\epsilon_t \\] \\(AR(1)\\)\u200b\u8fc7\u7a0b\u200b\u672c\u8d28\u200b\u4e0a\u200b\u662f\u200b\\(MA(\\infty)\\)\u200b\u8fc7\u7a0b\u200b\u3002
\\(MA(1)\\)\u200b\u8fc7\u7a0b\u200b\uff1a\\(D_t = b_0 - b_1\\epsilon_{t-1} + \\epsilon_t\\)
\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\\(AR(1)\\)\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u200b\u51fd\u6570\u200b\uff1a
\\[ \\left\\{\\begin{aligned} \\rho_1 &= \\frac{-b_1}{1+b_1^2} \\\\ \\rho_2 &= \\rho_3 = \\dots = 0 \\end{aligned}\\right. \\]"},{"location":"math/operations-mamagement/forecast/#arma","title":"ARMA\u200b\u6a21\u578b","text":"\\(ARMA(p, q)\\)\u200b\u6a21\u578b\u200b\u662f\u200b\\(AR(p)\\)\u200b\u6a21\u578b\u200b\u4e0e\u200b\\(MA(q)\\)\u200b\u6a21\u578b\u200b\u7684\u200b\u7ed3\u5408\u200b\uff0c\u200b\u5982\u200b\\(ARMA(1, 1)\\)\uff1a
\\[ D_t = c+a_1D_{t-1} - b_1\\epsilon_{t-1} + \\epsilon_t \\] \u200b\u5982\u679c\u200b\u5e8f\u5217\u200b\u4e0d\u662f\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\uff0c\u200b\u800c\u200b\u5b58\u5728\u200b\u8d8b\u52bf\u6027\u200b\u548c\u200b/\u200b\u6216\u200b\u5b63\u8282\u6027\u200b\uff0c\u200b\u9700\u8981\u200b\u5c06\u200b\u975e\u200b\u5e73\u7a33\u200b\u8fc7\u7a0b\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u5e73\u7a33\u200b\u8fc7\u7a0b\u200b\u3002
- \u200b\u5f53\u200b\\(D_t\\)\u200b\u5b58\u5728\u200b\u7ebf\u6027\u200b\u8d8b\u52bf\u200b\u65f6\u200b\uff0c\u200b\u4f7f\u7528\u200b\u5dee\u5206\u200b\u65b9\u6cd5\u200b\u6d88\u9664\u200b\u8d8b\u52bf\u6027\u200b\uff1a\\(U_t = D_t - D_{t-1}\\)\uff0c\\(U_t\\)\u200b\u662f\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\u3002
- \u200b\u5f53\u200b\\(D_t\\)\u200b\u5b58\u5728\u200b\u5b63\u8282\u6027\u200b\u8d8b\u52bf\u200b\u65f6\u200b\uff0c\u200b\u4f7f\u7528\u200b\u5dee\u5206\u200b\u65b9\u6cd5\u200b\u6d88\u9664\u200b\u8d8b\u52bf\u6027\u200b\uff1a\\(U_t = D_t - D_{t-N}\\)
- \u200b\u5bf9\u200b\\(U_t\\)\u200b\u8fdb\u884c\u200b\u52a0\u200b\u548c\u200b\uff0c\u200b\u5f97\u5230\u200b\u521d\u59cb\u200b\u7684\u200b\\(D_t\\)
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/","title":"\u786e\u5b9a\u200b\u9700\u6c42\u200b\u4e0b\u200b\u7684\u200b\u5e93\u5b58\u200b\u63a7\u5236","text":"\u200b\u5728\u200b\u6301\u6709\u200b\u6210\u672c\u200b\u4e0e\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u4e4b\u95f4\u200b\u5e73\u8861\u200b\u2014\u2014\u200b\u5355\u6b21\u200b\u8ba2\u8d27\u91cf\u200b\\(\\bsQ\\)
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#eoq","title":"EOQ\u200b\u6a21\u578b","text":""},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_2","title":"\u8bb0\u53f7","text":" - \u200b\u9700\u6c42\u200b\u7387\u200b\\(\\lambda\\)\uff0c\u200b\u5468\u671f\u200b\u957f\u5ea6\u200b\\(T\\)
- \u200b\u6210\u672c\u200b\uff1a\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(K\\)\u3001\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(c\\)\u3001\u200b\u8fb9\u9645\u200b\u6301\u6709\u200b\u6210\u672c\u200b\\(h\\)
\u200b\u8fb9\u9645\u200b\u6301\u6709\u200b\u6210\u672c\u200b\\(h\\)\u200b\u901a\u5e38\u200b\u4ee5\u200b\u5229\u7387\u200b\\(I\\)\u200b\u7684\u200b\u5f62\u5f0f\u200b\u8868\u793a\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b\\(h = Ic\\)
- \u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u200b\\(\\tau = 0\\)
- \u200b\u4e0d\u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_3","title":"\u63a8\u5bfc","text":"\u200b\u8003\u8651\u200b\u4e00\u4e2a\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\uff0c\u200b\u7531\u4e8e\u200b\u4e0d\u200b\u8003\u8651\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u91cf\u200b\uff0c\u200b\u8ba2\u8d27\u200b\u540e\u200b\u4ea7\u54c1\u200b\u4f1a\u200b\u7acb\u5373\u200b\u5230\u8fbe\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e3a\u200b\u964d\u4f4e\u200b\u6301\u6709\u200b\u6210\u672c\u200b\uff0c\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u200b\u65b9\u5f0f\u200b\u4e3a\u200b\u5e93\u5b58\u200b\u4e3a\u200b\u96f6\u65f6\u200b\u91cd\u65b0\u200b\u8ba2\u8d27\u200b\u3002\u200b\u56e0\u6b64\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\u6ee1\u8db3\u200b\\(Q = \\lambda T\\)\u3002\u200b\u4e00\u4e2a\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\u4e2d\u200b\u7684\u200b\u6210\u672c\u200b\u4e3a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u548c\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u4e4b\u200b\u548c\u200b\uff0c\u200b\u5373\u200b\\(C = K + cQ + hQT/2\\)\u3002
\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u7684\u200b\u6210\u672c\u200b
\\[ C(Q) = \\frac{C}{T} = \\frac{K\\lambda}{Q} + \\lambda c + \\frac{hQ}{2} \\] \u200b\u5bf9\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u6210\u672c\u200b\u6c42\u5bfc\u200b\uff0c\u200b\u5f97\u5230\u200b
\\[ C'(Q) = \\frac{h}{2} - \\frac{K\\lambda}{Q^2} \\] \u200b\u5f53\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u6210\u672c\u200b\u6700\u200b\u5c0f\u65f6\u200b\uff0c\\(C'(Q^\\ast) = 0\\)\uff0c\u200b\u89e3\u5f97\u200b
\\[ Q^\\ast = \\sqrt{\\frac{2K\\lambda}{h}} \\] \u200b\u4e0e\u200b\u6b64\u5bf9\u5e94\u200b\u7684\u200b\u6700\u5c0f\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ C(Q^\\ast) = \\frac{K\\lambda}{Q^\\ast} + \\lambda c + \\frac{hQ^\\ast}{2} = \\lambda c + \\sqrt{2K\\lambda h} \\]"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_4","title":"\u6a21\u578b\u200b\u6269\u5145","text":""},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_5","title":"\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f","text":"\u200b\u8bbe\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u4e3a\u200b\\(\\tau > 0\\)\uff0c\u200b\u9996\u5148\u200b\u8003\u8651\u200b\\(\\tau \\leq T\\)\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u7531\u4e8e\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b\uff0c\u200b\u5728\u200b\u5e93\u5b58\u200b\u63d0\u524d\u200b\u671f\u5185\u200b\u7684\u200b\u6700\u4f4e\u200b\u5e93\u5b58\u200b\u5e94\u5f53\u200b\u4e3a\u200b\u96f6\u200b\uff0c\u200b\u5373\u200b\\(R = \\lambda\\tau\\)\u200b\u65f6\u200b\u5e94\u5f53\u200b\u91cd\u65b0\u200b\u8ba2\u8d27\u200b\uff0c\\(R\\)\u200b\u79f0\u4e3a\u200b\u91cd\u200b\u8ba2\u8d27\u200b\u70b9\u200b\u3002
\u200b\u5f53\u200b\\(\\tau > T\\)\u200b\u65f6\u200b\uff0c\u200b\u7531\u4e8e\u200b\u6a21\u578b\u200b\u9762\u5bf9\u200b\u5468\u671f\u6027\u200b\u7684\u200b\u9700\u6c42\u200b\uff0c\u200b\u53ea\u200b\u9700\u200b\u6839\u636e\u200b\u63d0\u524d\u200b\u671f\u200b\\(\\tau' = \\tau\\mod T\\)\u200b\u8ba1\u7b97\u200b\u91cd\u200b\u8ba2\u8d27\u200b\u70b9\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_6","title":"\u654f\u611f\u6027\u200b\u5206\u6790","text":"\u200b\u654f\u611f\u6027\u200b\u5206\u6790\u200b\u6307\u200b\\(Q^*\\)\u200b\u7684\u200b\u4f30\u8ba1\u200b\u504f\u5dee\u200b\u5bf9\u200b\u603b\u6210\u672c\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002\u200b\u504f\u5dee\u200b\u4ee5\u200b\\(C(Q) / C(Q^\\ast)\\)\u200b\u8861\u91cf\u200b\uff0c\u200b\u4e3a\u200b\u4fbf\u4e8e\u200b\u5206\u6790\u200b\uff0c\u200b\u8bbe\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(c = 0\\)\uff0c\u200b\u5219\u200b\u603b\u6210\u672c\u200b\u7684\u200b\u504f\u5dee\u200b\u91cf\u200b\\(C(Q) / C(Q^\\ast)\\)\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} \\frac{C(Q)}{C(Q^\\ast)} &= \\frac{\\frac{K\\lambda}{Q} + \\frac{hQ}{2}}{\\sqrt{2K\\lambda h}} \\\\ &= \\sqrt{\\frac{K\\lambda}{2h}}\\frac{1}{Q} + \\sqrt{\\frac{h}{2K\\lambda}}Q \\\\ &= \\frac{1}{2}\\left(\\frac{Q}{Q^\\ast} + \\frac{Q^\\ast}{Q}\\right) \\end{aligned} \\]"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_7","title":"\u5141\u8bb8\u200b\u7f3a\u8d27","text":"\u200b\u5f53\u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b\u65f6\u200b\uff0c\u200b\u8bbe\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\u4e3a\u200b\\(p\\)\uff0c\u200b\u6700\u5927\u200b\u7f3a\u8d27\u91cf\u200b\\(xQ\\)\uff0c\u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u5185\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u53d8\u5316\u200b\u5982\u4e0b\u200b\u56fe\u200b\u6240\u793a\u200b\uff1a
\u200b\u6210\u672c\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ C(Q, x) = \\frac{C}{T} = \\frac{(1-x)^2 Qh + x^2Qp}{2} + \\frac{K\\lambda}{Q} + \\lambda c \\] \u200b\u5206\u522b\u200b\u6c42\u200b\\(C\\)\u200b\u5173\u4e8e\u200b\\(Q, x\\)\u200b\u7684\u200b\u504f\u200b\u5bfc\u6570\u200b\uff0c\u200b\u6709\u200b
\\[ \\begin{aligned} \\frac{\\partial C}{\\partial Q} &= \\frac{(1-x)^2h + x^2p}{2} - \\frac{K\\lambda}{Q^2} \\\\ \\frac{\\partial C}{\\partial x} &= xpQ + (x-1)hQ \\end{aligned} \\] \u200b\u89e3\u65b9\u7a0b\u200b\\(\\partial C/\\partial x =0\\)\u200b\u5f97\u5230\u200b\\(x^* = h/(h+p)\\)\uff0c\u200b\u4ee3\u5165\u200b\u65b9\u7a0b\u200b\\(\\partial C/\\partial Q =0\\)\uff0c\u200b\u89e3\u5f97\u200b\uff1a
\\[ Q^* = \\sqrt{\\frac{2K\\lambda}{(1-x)^2h+x^2p}} = \\sqrt{\\frac{2K\\lambda(h+p)}{hp}} \\] \u200b\u82e5\u200b\u5b9a\u4e49\u200b\\(h' = hp/(h+p)\\)\u3002\u200b\u5219\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bEOQ\u200b\u7684\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u5373\u200b\\(\\sqrt{\\frac{2K\\lambda}{h'}}\\)
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_8","title":"\u6709\u9650\u200b\u751f\u4ea7\u7387\u200b\u6a21\u578b","text":"\u200b\u5728\u200b\u6709\u9650\u200b\u751f\u4ea7\u7387\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u4ea7\u54c1\u200b\u901a\u8fc7\u200b\u751f\u4ea7\u200b\u800c\u200b\u4e0d\u662f\u200b\u8ba2\u8d2d\u200b\u83b7\u5f97\u200b\u3002\u200b\u4ea7\u54c1\u200b\u7684\u200b\u751f\u4ea7\u7387\u200b\u4e3a\u200b\\(P > \\lambda\\)\uff0c\u200b\u751f\u4ea7\u7ebf\u200b\u7684\u200b\u542f\u52a8\u200b\u6210\u672c\u200b\u4e3a\u200b\\(K\\)\uff0c\u200b\u4ea7\u54c1\u200b\u7684\u200b\u5355\u4f4d\u200b\u751f\u4ea7\u6210\u672c\u200b\u4e3a\u200b\\(c\\)\u3002
\u200b\u751f\u4ea7\u6210\u672c\u200b\uff08\u200b\u539f\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\uff09\u200b\u90e8\u5206\u200b\u7684\u200b\u5904\u7406\u200b\u4e0e\u200bEOQ\u200b\u6a21\u578b\u200b\u76f8\u540c\u200b\u3002\u200b\u4f46\u200b\u6709\u9650\u200b\u751f\u4ea7\u7387\u200b\u6a21\u578b\u200b\u7684\u200b\u5e73\u5747\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u4e0e\u200bEOQ\u200b\u6a21\u578b\u200b\u4e0d\u540c\u200b\u3002
- \u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u4e2d\u200bEOQ\u200b\u6a21\u578b\u200b\u7684\u200b\u5e73\u5747\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\uff1a\\(Q/2\\)
- \u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u4e2d\u200b\u6709\u9650\u200b\u751f\u4ea7\u7387\u200b\u6a21\u578b\u200b\u7684\u200b\u5e73\u5747\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\uff1a\\(Q(P-\\lambda)/2P\\)
\u200b\u56e0\u6b64\u200b\u6709\u9650\u200b\u751f\u4ea7\u7387\u200b\u6a21\u578b\u200b\u7684\u200b\u6210\u672c\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ C(Q) = \\frac{C}{T} = \\frac{K\\lambda}{Q} + \\frac{hQ(P-\\lambda)}{2P} + \\lambda c \\] \u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\u4e3a\u200b
\\[ Q^\\ast = \\sqrt{\\frac{2PK\\lambda}{h(P-\\lambda)}} \\] \u200b\u82e5\u200b\u5b9a\u4e49\u200b\\(h' = (P-\\lambda) / P\\)\uff0c\u200b\u5219\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bEOQ\u200b\u7684\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u5373\u200b\\(\\sqrt{\\frac{2K\\lambda}{h'}}\\)
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_9","title":"\u6570\u91cf\u200b\u6298\u6263\u200b\u6a21\u578b","text":"\u200b\u5728\u200b\u6570\u91cf\u200b\u6298\u6263\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u5f53\u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\u7684\u200b\u8ba2\u8d27\u91cf\u200b\u8fbe\u5230\u200b\u4e00\u5b9a\u200b\u6c34\u5e73\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u83b7\u5f97\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u7684\u200b\u6298\u6263\u200b\uff0c\u200b\u6298\u6263\u200b\u5206\u4e3a\u200b\u4e24\u79cd\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5373\u200b\u5168\u91cf\u200b\u6298\u6263\u200b\u4e0e\u200b\u589e\u91cf\u200b\u6298\u6263\u200b\u3002
- \u200b\u5168\u91cf\u200b\u6298\u6263\u200b\u6307\u5f53\u200b\u8ba2\u8d2d\u200b\u91cf\u200b\u8d85\u8fc7\u200b\u4e34\u754c\u503c\u200b\u65f6\u200b\uff0c\u200b\u5c06\u200b\u6298\u6263\u200b\u5e94\u7528\u200b\u4e8e\u200b\u5168\u90e8\u200b\u7684\u200b\u8ba2\u8d2d\u200b\u6570\u91cf\u200b\u4e0a\u200b\u3002
- \u200b\u589e\u91cf\u200b\u6298\u6263\u200b\u6307\u5f53\u200b\u8ba2\u8d2d\u200b\u91cf\u200b\u8d85\u8fc7\u200b\u4e34\u754c\u503c\u200b\u65f6\u200b\uff0c\u200b\u5c06\u200b\u6298\u6263\u200b\u5e94\u7528\u200b\u4e8e\u200b\u8d85\u8fc7\u200b\u4e34\u754c\u503c\u200b\u7684\u200b\u90e8\u5206\u200b\u4e0a\u200b\u3002
\u200b\u6570\u91cf\u200b\u6298\u6263\u200b\u6a21\u578b\u200b\u9488\u5bf9\u200b\u7684\u200b\u662f\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u7684\u200b\u6539\u53d8\u200b\uff0c\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u7684\u200b\u6539\u53d8\u200b\u4e0d\u4f1a\u200b\u5f71\u54cd\u200bEOQ\u200b\u6a21\u578b\u200b\u7684\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\u3002
\u200b\u901a\u8fc7\u200b\u6570\u91cf\u200b\u6298\u6263\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8bf1\u5bfc\u200b\u96f6\u552e\u5546\u200b\u63d0\u9ad8\u200b\u8ba2\u8d27\u200b\u6279\u91cf\u200b\uff0c\u200b\u4ece\u800c\u200b\u5b9e\u73b0\u200b\u8d85\u91cf\u200b\u5e93\u5b58\u200b\u7684\u200b\u8f6c\u79fb\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_10","title":"\u5168\u91cf\u200b\u6298\u6263\u200b\u7684\u200b\u6c42\u89e3\u200b\u8fc7\u7a0b","text":"\u200b\u6839\u636e\u200bEOQ\u200b\u6a21\u578b\u200b\u8ba1\u7b97\u200b\u51fa\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u6298\u6263\u200b\u4ef7\u683c\u200b\\(h_i\\)\u200b\u4e0b\u200b\u5bf9\u5e94\u200b\u7684\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\\(Q^*_i\\)\uff0c\u200b\u786e\u5b9a\u200b\u6700\u5927\u200b\u53ef\u884c\u200b\u7684\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\\(Q^\\ast = \\max Q^\\ast_i\\)\u3002\u200b\u53d6\u8be5\u200b\u6298\u6263\u200b\u70b9\u200b\u4ee5\u53ca\u200b\u9ad8\u4e8e\u200b\u8be5\u200b\u6298\u6263\u200b\u70b9\u200b\u7684\u200b\u6240\u6709\u200b\u6298\u6263\u200b\u70b9\u4e3a\u200b\u5019\u9009\u200b\uff0c\u200b\u5373\u200b\\(I = \\{i | i\\geq \\arg\\max_i Q^\\ast_i\\}\\)\u3002\u200b\u5206\u522b\u200b\u6bd4\u8f83\u200b\u6bcf\u4e2a\u200b\u6298\u6263\u200b\u70b9\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5e73\u5747\u200b\u6210\u672c\u200b\uff0c\u200b\u6210\u672c\u200b\u6700\u4f4e\u200b\u7684\u200b\\(Q\\)\u200b\u5373\u200b\u4e3a\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u200b\u6279\u91cf\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_11","title":"\u589e\u91cf\u200b\u6298\u6263\u200b\u7684\u200b\u6c42\u89e3\u200b\u8fc7\u7a0b","text":"\u200b\u6839\u636e\u200bEOQ\u200b\u6a21\u578b\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u51fa\u200b\u6240\u6709\u200b\u6210\u672c\u200b\u66f2\u7ebf\u200b\u6700\u4f4e\u70b9\u200b\u5bf9\u5e94\u200b\u7684\u200b\\(Q\\)\u200b\u503c\u200b\uff0c\u200b\u5e76\u200b\u7b5b\u9009\u200b\u51fa\u200b\u6ee1\u8db3\u200b\u589e\u91cf\u200b\u6298\u6263\u200b\u7ea6\u675f\u200b\u7684\u200b\u8ba2\u8d27\u91cf\u200b\uff0c\u200b\u5e73\u5747\u200b\u6210\u672c\u200b\u6700\u4f4e\u200b\u7684\u200b\\(Q\\)\u200b\u5373\u200b\u4e3a\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u200b\u6279\u91cf\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_12","title":"\u77ed\u671f\u200b\u6298\u6263","text":"\u200b\u77ed\u671f\u200b\u6298\u6263\u200b\u5373\u200b\u751f\u4ea7\u5546\u200b\u53ea\u200b\u5728\u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u4e2d\u200b\u63d0\u4f9b\u200b\u6298\u6263\u200b\u3002\u200b\u4e3a\u200b\u7b80\u5316\u200b\u5904\u7406\u200b\uff0c\u200b\u6298\u6263\u200b\u65f6\u200b\u96f6\u552e\u5546\u200b\u7684\u200b\u8d2d\u4e70\u91cf\u200b\\(Q_d\\)\u200b\u4e3a\u200bEOQ\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\\(Q^*\\)\u200b\u7684\u200b\u6574\u6570\u200b\\(k\\)\u200b\u500d\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#eoq_1","title":"\u8d44\u6e90\u200b\u7ea6\u675f\u200b\u4e0b\u200b\u7684\u200bEOQ\u200b\u6a21\u578b","text":"EOQ\u200b\u6a21\u578b\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u4e00\u79cd\u200b\u4ea7\u54c1\u200b\u7684\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u200b\u60c5\u5f62\u200b\uff0c\u200b\u65e0\u6cd5\u200b\u5904\u7406\u200b\u591a\u79cd\u4ea7\u54c1\u200b\u9700\u8981\u200b\u534f\u8c03\u200b\u8ba2\u8d2d\u200b\u7684\u200b\u95ee\u9898\u200b\u3002\u200b\u5728\u200b\u591a\u79cd\u4ea7\u54c1\u200b\u7684\u200b\u8ba2\u8d2d\u200b\u573a\u666f\u200b\u4e0b\u200b\uff0c\u200b\u4e0d\u540c\u200b\u7684\u200b\u4ea7\u54c1\u200b\u6709\u200b\u4e0d\u540c\u200b\u7684\u200b\u9700\u6c42\u200b\u7387\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u4e0d\u540c\u200b\u4ea7\u54c1\u200b\u7684\u200bEOQ\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\u8fdb\u884c\u200b\u5e73\u8861\u200b\u3002
\u200b\u6a21\u578b\u200b\u5047\u8bbe\u200b\uff1a\u200b\u90e8\u5206\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u4e0e\u200b\u4ea7\u54c1\u79cd\u7c7b\u200b\u6709\u5173\u200b\u2014\u2014\\(K_i\\)\uff0c\u200b\u90e8\u5206\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u4e0e\u200b\u4ea7\u54c1\u79cd\u7c7b\u200b\u65e0\u5173\u200b\u2014\u2014\\(K\\)\u3002
\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u5206\u4e3a\u200b\u8d44\u91d1\u200b\u7ea6\u675f\u200b\u4e0e\u200b\u5e93\u5b58\u200b\u7a7a\u95f4\u200b\u7ea6\u675f\u200b\u3002\u200b\u5982\u200b
\\[ \\left\\{ \\begin{aligned} C&\\geq \\sum_{i=1}^n c_iQ_i \\\\ Q_i^{\\mathrm{EOQ}} &= \\sqrt{\\frac{2K_i\\lambda_i}{h_i}} \\end{aligned} \\right. \\] \u200b\u5bf9\u4e8e\u200b\u7d27\u200b\u7ea6\u675f\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u5c06\u200b\u7ea6\u675f\u200b\u5199\u4f5c\u200b\\(\\sum_{i=1}^n c_iQ_i = C\\)\uff0c\u200b\u5f15\u5165\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u7b97\u5b50\u200b\\(\\theta\\)\uff0c\u200b\u5c06\u200b\u6b8b\u5dee\u200b\u9879\u200b\u4e0e\u200b\u4e58\u200b\u5b50\u9879\u200b\u76f8\u52a0\u200b\uff0c\u200b\u5f97\u5230\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u4f18\u5316\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\\(C(Q_1, \\cdots, Q_n, \\theta)\\)
\\[ \\min C(Q_1, \\cdots, Q_n, \\theta) = \\sum_{i=1}^n \\left(\\frac{h_iQ_i}{2} + \\frac{K_i\\lambda_i}{Q_i}\\right) + \\theta\\left(\\sum_{i=1}^n c_iQ_i - C\\right) \\] \u200b\u6700\u4f18\u200b\u6761\u4ef6\u200b\u4e0b\u200b\uff0c\u200b\u6709\u200b\\(\\partial C/\\partial \\theta = \\partial C/\\partial Q_i = 0\\)\uff0c\u200b\u5373\u200b
\\[ \\begin{aligned} \\sum_{i=1}^n c_iQ_i^* - C &= 0 \\\\ \\frac{h_i}{2} - \\frac{K_i\\lambda_i}{ {Q_i^*}^2} + \\theta c_i &= 0 \\end{aligned} \\] \u200b\u89e3\u5f97\u200b\\(Q_i^*\\)\uff0c\u200b\u4ee3\u5165\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u5373\u53ef\u200b\u89e3\u5f97\u200b\u6700\u4f18\u200b\u7684\u200b\\(\\theta\\)
\\[ \\sum_{i=q}^n c_i\\sqrt{\\frac{2K_i\\lambda_i}{h_i + 2\\theta c_i}} = C \\] \u200b\u4e0d\u59a8\u200b\u8bbe\u200b\\(h_i / c_i = I, \\forall i=1, \\cdots, n\\)\u3002\u200b\u5219\u200b\\(Q_i^* = \\sqrt{\\frac{2K_i\\lambda_i}{h_i}}\\sqrt{\\frac{1}{1 + 2\\theta / I}}\\)\uff0c\u200b\u6ce8\u610f\u200b\u5230\u200b\\(Q_{i}^{\\mathrm{EOQ}} = \\sqrt{\\frac{2K_i\\lambda_i}{h_i}}\\)\uff0c\u200b\u5219\u200b
\\[ \\left\\{ \\begin{aligned} Q_i^* &= \\sqrt{\\frac{1}{1 + 2\\theta / I}}Q_{i}^{\\mathrm{EOQ}} \\\\ C &= \\sum_{i=1}^n c_iQ_i^* \\end{aligned} \\right. \\] \u200b\u89e3\u5f97\u200b
\\[ \\theta = \\frac{\\sum_{i=1}^n \\left(c_iQ_i^{\\mathrm{EOQ}}\\right) - c}{2c / I} \\]"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#eoq_2","title":"\u591a\u200b\u4ea7\u54c1\u200bEOQ\u200b\u6a21\u578b","text":"\u200b\u5728\u200b\u591a\u200b\u4ea7\u54c1\u200bEOQ\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u9700\u8981\u200b\u9762\u5bf9\u200b\\(U = \\{1, \\cdots, n\\}\\)\u200b\u4e2a\u200b\u4ea7\u54c1\u200b\u7684\u200b\u9700\u6c42\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u4ea7\u54c1\u200b\\(i\\)\u200b\u6709\u200b\u5982\u4e0b\u200b\u7684\u200b\u53c2\u6570\u200b\uff1a
- \u200b\u9644\u52a0\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(K_i\\)\u3001\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(c_i\\)
- \u200b\u4ee5\u200b\u5229\u7387\u200b\u5f62\u5f0f\u200b\u8868\u793a\u200b\u7684\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\\(h_i = I_ic_i\\)
- \u200b\u9700\u6c42\u200b\u7387\u200b\\(\\lambda_i\\)
- \u200b\u4e0d\u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b
\u200b\u5411\u200b\u91cf\u5316\u200b\u8868\u793a\u200b\u7684\u200b\u5404\u4e2a\u200b\u53c2\u6570\u200b\u5206\u522b\u200b\u4e3a\u200b\\(\\boldsymbol{K}, \\boldsymbol{c}, \\boldsymbol{h}, \\boldsymbol{I}, \\boldsymbol{\\lambda}\\)\u3002\u200b\u53e6\u5916\u200b\uff0c\u200b\u6709\u200b\u5168\u5c40\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(K\\)\u3002\u200b\u5728\u200b\u591a\u200b\u4ea7\u54c1\u200bEOQ\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u5047\u8bbe\u200b\u67d0\u6b21\u200b\u7684\u200b\u8ba2\u8d27\u91cf\u200b\u4e3a\u200b\\(\\boldsymbol Q = (Q_i)_{n}\\)\uff0c\u200b\u5219\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ \\begin{aligned} G(\\boldsymbol Q) =& K + \\sum_{i=1}^n K_i\\boldsymbol{1}_{\\{Q_i > 0\\}} & \\text{Setup cost} \\\\ &+\\sum_{i=1}^n c_iQ_i & \\text{Marginal cost} \\end{aligned} \\] \u200b\u73b0\u6709\u200b\u4e09\u79cd\u200b\u8ba2\u8d27\u200b\u65b9\u6cd5\u200b
- \u200b\u72ec\u7acb\u200b\u8ba2\u8d27\u200b\u2014\u2014\u200b\u6bcf\u6b21\u200b\u8ba2\u8d2d\u200b\u90fd\u200b\u9700\u8981\u200b\u591a\u200b\u82b1\u8d39\u200b\\(K\\)\u200b\u7684\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b
- \u200b\u5b8c\u6574\u200b\u8ba2\u8d27\u200b\u2014\u2014\u200b\u5bf9\u4e8e\u200b\u9700\u6c42\u200b\u7387\u4e0d\u9ad8\u200b\u7684\u200b\u4ea7\u54c1\u200b\uff0c\u200b\u8ba2\u8d27\u200b\u8fc7\u4e8e\u200b\u9891\u7e41\u200b\u5bfc\u81f4\u200b\u989d\u5916\u200b\u82b1\u8d39\u200b\u4e86\u200b\\(K_i\\)\u200b\u7684\u200b\u9644\u52a0\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b
- \u200b\u8054\u5408\u200b\u8ba2\u8d27\u200b\uff1a\u200b\u4e0d\u200b\u9700\u8981\u200b\u8ba2\u8d2d\u200b\u6240\u6709\u200b\u7c7b\u578b\u200b\u7684\u200b\u4ea7\u54c1\u200b
\u200b\u4ee5\u4e0b\u200b\u5bf9\u200b\u4e09\u79cd\u200b\u8ba2\u8d27\u200b\u65b9\u6cd5\u200b\u8fdb\u884c\u200b\u8ba8\u8bba\u200b
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_13","title":"\u72ec\u7acb\u200b\u8ba2\u8d27","text":"\u200b\u72ec\u7acb\u200b\u8ba2\u8d27\u200b\u4e0b\u200b\uff0c\u200b\u6bcf\u79cd\u200b\u4ea7\u54c1\u200b\u6309\u200b\u5176\u200b\u5bf9\u5e94\u200b\u7684\u200bEOQ\u200b\u8ba2\u8d27\u91cf\u200b\u8fdb\u884c\u200b\u8ba2\u8d27\u200b\uff0c\u200b\u5219\u200b\u5e73\u5747\u200b\u6210\u672c\u200b
\\[ G^* = \\sum_{i=1}^nG_i^* = \\sum_{i=1}^n\\sqrt{2{K + K_i}\\lambda_i h_i} \\]"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_14","title":"\u5b8c\u6574\u200b\u8ba2\u8d27","text":"\u200b\u5b8c\u6574\u200b\u8ba2\u8d27\u200b\u4e0b\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\u5185\u200b\u90fd\u200b\u9700\u8981\u200b\u8ba2\u8d2d\u200b\u6240\u6709\u200b\u4ea7\u54c1\u200b\uff0c\u200b\u8bbe\u200b\u8ba2\u8d27\u91cf\u200b\u4e3a\u200b\\(\\boldsymbol{Q} = T\\boldsymbol\\lambda\\)\uff0c\u200b\u7c7b\u6bd4\u200b\u4e8e\u200bEOQ\u200b\u6a21\u578b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u603b\u6210\u672c\u200b\u4e3a\u200b
\\[ G(Q) = \\frac{K + \\sum_{i} K_i}{T} + \\boldsymbol{c}^\\top\\boldsymbol{\\lambda} + \\frac{T\\boldsymbol{h}^\\top\\boldsymbol \\lambda}{2} \\] \u200b\u8f6c\u5316\u200b\u4e3a\u5355\u200b\u4ea7\u54c1\u200bEOQ\u200b\u95ee\u9898\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u4e3a\u200b
\\[ \\begin{aligned} T^* &= \\sqrt{\\frac{2\\left(K + \\sum_{i} K_i\\right)}{\\boldsymbol{h}^\\top \\boldsymbol{\\lambda}}} \\\\ G^* &= \\sqrt{2\\left(K + \\sum_{i} K_i\\right)\\boldsymbol{h}^\\top \\boldsymbol{\\lambda}} \\\\ \\end{aligned} \\]"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_15","title":"\u8054\u5408\u200b\u8ba2\u8d27","text":"\u200b\u8054\u5408\u200b\u8ba2\u8d27\u200b\u6761\u4ef6\u200b\u4e0b\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u8ba2\u8d27\u200b\u4e0d\u9700\u200b\u5305\u542b\u200b\u6240\u6709\u200b\u7c7b\u578b\u200b\u7684\u200b\u4ea7\u54c1\u200b\uff0c\u200b\u4f46\u200b\u9700\u6c42\u91cf\u200b\u6700\u9ad8\u200b\u7684\u200b\u4ea7\u54c1\u200b\u5fc5\u7136\u200b\u5728\u200b\u6bcf\u4e2a\u200b\u8ba2\u5355\u200b\u4e2d\u200b\u90fd\u200b\u51fa\u73b0\u200b\uff0c\u200b\u56e0\u6b64\u200b\uff0c\u200b\u9996\u5148\u200b\u8003\u8651\u200bEOQ\u200b\u6a21\u578b\u200b\u4e0b\u200b\u4ea7\u54c1\u200b\u7684\u200b\u8ba2\u8d27\u200b\u9891\u7387\u200b\uff1a
\\[ n_i = \\frac{1}{T_i} = \\sqrt{\\frac{h_i\\lambda_i}{(K + K_i)}} \\] \u200b\u4ee5\u200b\u8ba2\u8d27\u200b\u6700\u200b\u9891\u7e41\u200b\u7684\u200b\u4ea7\u54c1\u200b\\(i^\\ast = \\arg\\max\\limits_{i} n_i\\)\u200b\u5bf9\u5e94\u200b\u7684\u200b\u8ba2\u8d27\u200b\u9891\u7387\u200b\\(\\bar n = n_{i^\\ast}\\)\u3001\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\\(\\bar T = T_{i^\\ast}\\)\u200b\u4e3a\u200b\u57fa\u51c6\u200b\uff0c\u200b\u8003\u8651\u200b\u5176\u4ed6\u200b\u7c7b\u578b\u200b\u4ea7\u54c1\u200b\u7684\u200b\u8ba2\u8d27\u200b\u9891\u7387\u200b\uff1a
\\[ m_i = \\left\\lceil\\frac{\\bar n}{n_i}\\right\\rceil \\] \\(m_i\\)\u200b\u8868\u793a\u200b\u4ea7\u54c1\u200b\\(i\\)\u200b\u7684\u200b\u8ba2\u8d2d\u200b\u5468\u671f\u200b\u4e3a\u200b\\(m_i\\bar T_i\\)\uff0c\u200b\u5373\u200b\u6700\u200b\u9891\u7e41\u200b\u8ba2\u5355\u200b\u5468\u671f\u200b\u7684\u200b\\(m_i\\)\u200b\u500d\u200b\uff0c\u200b\u5219\u200b\u4e00\u4e2a\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\u5185\u200b\u7684\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ \\begin{aligned} G(\\boldsymbol Q) =& \\frac{1}{T}\\left(K + \\sum_i\\frac{K_i}{m_i}\\right) & \\text{Setup cost} \\\\ &+\\frac{h}{2}\\sum_{i}\\lambda_i m_i & \\text{Marginal cost} \\end{aligned} \\] \u200b\u56e0\u6b64\u200b\uff0c\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\u4e0e\u200b\u6700\u4f18\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ \\begin{aligned} T^* &= \\sqrt{\\frac{\\sum_{i} \\lambda_i m_i h}{2\\left(K + \\sum_i\\frac{K_i}{m_i}\\right)}} \\\\ G^* &= \\sqrt{2\\left(\\sum_{i} \\lambda_i m_i h\\right)\\left(K + \\sum_i\\frac{K_i}{m_i}\\right)} \\end{aligned} \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/","title":"\u968f\u673a\u200b\u9700\u6c42\u200b\u4e0b\u200b\u7684\u200b\u5e93\u5b58\u200b\u63a7\u5236","text":"\u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\uff1a\u200b\u6700\u5c0f\u5316\u200b\u6210\u672c\u200b\u7684\u200b\u6570\u5b66\u200b\u671f\u671b\u200b
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_2","title":"\u5355\u200b\u5468\u671f\u200b\u5355\u7ea7\u200b\u2014\u2014\u200b\u62a5\u7ae5\u200b\u6a21\u578b","text":"\u200b\u62a5\u7ae5\u200b\u6a21\u578b\u200b\u662f\u200b\u5355\u200b\u5468\u671f\u200b\u4e0b\u200b\u7684\u200b\u5e93\u5b58\u200b\u63a7\u5236\u200b\u95ee\u9898\u200b
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_3","title":"\u8bb0\u53f7","text":" - \\(c_o\\)\u200b\u8868\u793a\u200b\u8d85\u989d\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\uff0c\\(c_u\\)\u200b\u8868\u793a\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b
- \\(f(\\cdot), F(\\cdot)\\)\u200b\u5206\u522b\u200b\u4e3a\u200b\u9700\u6c42\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u4e0e\u200b\u6982\u7387\u5206\u5e03\u200b\u51fd\u6570\u200b
- \\(Q\\)\u200b\u4e3a\u200b\u8ba2\u8d27\u91cf\u200b
- \\(x^+ = \\max\\{x, 0\\}\\)
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_4","title":"\u63a8\u5bfc","text":"\u200b\u62a5\u7ae5\u200b\u6a21\u578b\u200b\u7684\u200b\u6210\u672c\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ G(Q, D) = c_o\\max\\{0, Q-D\\} + c_u\\max\\{0, D-Q\\} \\] \\(G(Q, D)\\)\u200b\u662f\u200b\u968f\u673a\u53d8\u91cf\u200b\\(D\\)\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e5f\u200b\u662f\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u5bf9\u200b\\(D\\)\u200b\u53d6\u200b\u671f\u671b\u200b\uff0c\u200b\u6709\u200b
\\[ \\begin{aligned} C(Q) &= E(G(Q, D) | Q) \\\\ &= \\int_{0}^\\infty G(Q, D)f(x)\\mathrm dx \\\\ &= \\int_{0}^Q c_o(Q-x)f(x)\\mathrm dx + \\int_Q^\\infty c_u(x-Q)f(x)\\mathrm dx \\\\ \\end{aligned} \\] \u200b\u5f53\u200b\\(C(Q)\\)\u200b\u53d6\u200b\u6781\u5c0f\u503c\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(\\frac{\\mathrm dC}{\\mathrm dD} = 0\\)\uff0c\u200b\u5373\u200b
\\[ \\begin{aligned} \\frac{\\mathrm dC}{\\mathrm dQ} &= c_o\\int_0^Q f(x)\\mathrm dx + c_u\\int_Q^\\infty -f(x)\\mathrm dx \\\\ &= c_oF(Q) - c_u(1-F(Q)) \\\\ &= 0 \\end{aligned} \\] \u200b\u9a8c\u8bc1\u200b\uff1a\\(\\frac{\\mathrm d^2 C}{\\mathrm dQ^2} = (c_o + c_u)f(Q) > 0\\)\uff0c\u200b\u56e0\u6b64\u200b\u4e3a\u200b\u6781\u5c0f\u503c\u200b\u70b9\u200b\u3002\u200b\u6b64\u65f6\u200b\\(F(Q^*) = c_u / (c_o + c_u)\\)\u3002
\u200b\u79f0\u200b\\(c_u / (c_o + c_u)\\)\u200b\u4e3a\u200b\u5173\u952e\u200b\u6bd4\u4f8b\u200b\uff08crucial ratio\uff09
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_5","title":"\u5355\u200b\u5468\u671f\u200b\u6a21\u578b\u200b\u6269\u5c55","text":""},{"location":"math/operations-mamagement/inventory-control-random-demand/#_6","title":"\u79bb\u6563\u200b\u9700\u6c42\u200b\u7684\u200b\u6700\u4f18\u200b\u7b56\u7565","text":"\u200b\u786e\u5b9a\u200b\\(\\max_{Q_0}, \\min_{Q_1}\\)\u200b\u6ee1\u8db3\u200b\\(Q_1 > Q_0\\)\u200b\u4e14\u200b\\(F(Q_0) < c_u / (c_u + c_o) < F(Q_1)\\)\uff0c\u200b\u6b64\u65f6\u200b\\(Q_1\\)\u200b\u5373\u200b\u4e3a\u200b\u6700\u4f18\u200b\u7684\u200b\\(Q^*\\)\u3002\u200b\u5373\u200b\u9ad8\u4e8e\u200b\u6700\u4f18\u200b\u5173\u952e\u200b\u6bd4\u4f8b\u200b\u7684\u200b\u6700\u5c0f\u200b\u5173\u952e\u200b\u6bd4\u4f8b\u200b\u5bf9\u5e94\u200b\u7684\u200b\\(Q\\)
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#u","title":"\u5b58\u5728\u200b\u521d\u59cb\u200b\u5e93\u5b58\u200b\\(u\\)","text":"\\(u\\)\u200b\u7684\u200b\u5b58\u5728\u200b\u4e0d\u200b\u5f71\u54cd\u200b\\(Q^*\\)\uff0c\u200b\u56e0\u6b64\u200b\uff0c\u200b\u8ba2\u8d27\u91cf\u200b\\(Q'\\)\u200b\u6ee1\u8db3\u200b
\\[ Q^{*\\prime} = \\max\\{Q^*-u, 0\\} \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_7","title":"\u591a\u7ea7\u200b\u7cfb\u7edf","text":"\u200b\u591a\u7ea7\u200b\u5e93\u5b58\u200b\u7cfb\u7edf\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u4e32\u884c\u200b\u7cfb\u7edf\u200b\u3001\u200b\u88c5\u914d\u200b\u7cfb\u7edf\u200b\u548c\u200b\u914d\u9001\u200b\u7cfb\u7edf\u200b\u3002
\u200b\u8003\u8651\u200b\u4e00\u4e2a\u200b\u4e32\u884c\u200b\u7684\u200b\u4f9b\u5e94\u94fe\u200b\uff0c\u200b\u4f9b\u5e94\u94fe\u200b\u4e0b\u6e38\u200b\u5411\u200b\u4f9b\u5e94\u94fe\u200b\u4e0a\u6e38\u200b\u91c7\u8d2d\u200b\u4ea7\u54c1\u200b\u3002\u200b\u901a\u5e38\u200b\u91c7\u7528\u200b\u5d4c\u5957\u200b\u7b56\u7565\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u8ba2\u8d27\u200b\uff0c\u200b\u5373\u5f53\u200b\u4e0b\u6e38\u200b\u8ba2\u8d27\u200b\u65f6\u200b\uff0c\u200b\u4e0a\u6e38\u200b\u624d\u200b\u53ef\u80fd\u200b\u8fdb\u884c\u200b\u8ba2\u8d27\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_8","title":"\u5468\u671f\u200b\u68c0\u67e5\u200b\u6a21\u578b","text":"\u200b\u5728\u200b\u5468\u671f\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u9996\u5148\u200b\u4e0d\u200b\u8003\u8651\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(K\\)\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002\u200b\u9700\u6c42\u200b\u5206\u4e3a\u200b\u591a\u4e2a\u200b\u5468\u671f\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\u7684\u200b\u9700\u6c42\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_9","title":"\u8bb0\u53f7","text":" - \u200b\u5269\u4f59\u200b\u5468\u671f\u200b\u6570\u4e3a\u200b\\(n\\)
- \u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\u7684\u200b\u9700\u6c42\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u9700\u6c42\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u4e3a\u200b\\(f(\\cdot)\\)\uff0c\u200b\u6982\u7387\u5206\u5e03\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(F(\\cdot)\\)\u3002
- \u200b\u5468\u671f\u200b\u4e4b\u95f4\u200b\u7684\u200b\u8d34\u73b0\u7387\u200b\\(\\alpha\\)\u200b\u8868\u793a\u200b
- \u200b\u4e0d\u200b\u8003\u8651\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u200b\uff0c\\(L=0\\)
- \\(y_i\\)\u200b\u8868\u793a\u200b\u7b2c\u200b\\(i\\)\u200b\u671f\u200b\u7ed3\u675f\u200b\u65f6\u200b\u7684\u200b\u5e93\u5b58\u200b\uff0c\\(y_0\\)\u200b\u8868\u793a\u200b\u671f\u521d\u200b\u5e93\u5b58\u200b
- \\(C_n(y_0)\\)\u200b\u8868\u793a\u200b\u7b2c\u200b\\(n\\)\u200b\u671f\u200b\u603b\u200b\u671f\u671b\u200b\u8d34\u73b0\u200b\u6210\u672c\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b
\\[ C_n(y_0) = \\min_{y\\geq y_0}\\left\\{L(y) - cy_0 + \\alpha\\int_{0}^\\infty C_{n-1}[t(y, x)]f(x)\\mathrm dx\\right\\} \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/#q-r","title":"\u8fde\u7eed\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\uff1a(Q, R)\u200b\u6a21\u578b","text":"\u200b\u5728\u200b\u8fde\u7eed\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u9700\u8981\u200b\u533a\u5206\u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\u4e0e\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u7684\u200b\u6982\u5ff5\u200b
- \u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\uff08Inventory Position\uff09\uff0c\u200b\u6307\u200b\u76ee\u524d\u200b\u6301\u6709\u200b\u7684\u200b\u5e93\u5b58\u200b\u603b\u91cf\u200b\u52a0\u4e0a\u200b\u5904\u4e8e\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u200b\u7684\u200b\u5e93\u5b58\u91cf\u200b
- \u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\uff08Inventory Level\uff09\uff0c\u200b\u6307\u200b\u76ee\u524d\u200b\u6301\u6709\u200b\u7684\u200b\u5e93\u5b58\u200b\u603b\u91cf\u200b
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_10","title":"\u6a21\u578b\u200b\u8bbe\u5b9a\u200b\u53ca\u200b\u63a8\u5bfc","text":"\\((Q, R)\\)\u200b\u6a21\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u8bbe\u5b9a\u200b
- \u200b\u6bcf\u6b21\u200b\u8ba2\u8d27\u200b\u7684\u200b\u56fa\u5b9a\u6210\u672c\u200b\u4e3a\u200b\\(K\\)\uff0c\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u4e3a\u200b\\(c\\)\uff0c\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u4e3a\u200b\\(\\tau\\)\uff1b
- \u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u5185\u200b\u7684\u200b\u9700\u6c42\u200b\\(D\\)\u200b\u5728\u200b\u65f6\u95f4\u200b\u4e0a\u200b\u8fde\u7eed\u200b\uff0c\u200b\u5728\u200b\u6570\u91cf\u200b\u4e0a\u200b\u670d\u4ece\u200b\u5747\u503c\u200b\u4e3a\u200b\\(\\mu\\)\u3001\u200b\u6807\u51c6\u5dee\u200b\u4e3a\u200b\\(\\sigma\\)\u200b\u7684\u200b\u67d0\u4e2a\u200b\u6982\u7387\u5206\u5e03\u200b\\(f(\\cdot), F(\\cdot)\\)\uff1b\\(\\lambda\\)\u200b\u4e3a\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u7684\u200b\u671f\u671b\u200b\u9700\u6c42\u200b\u7387\u200b\uff1b
- \u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u7684\u200b\u8fb9\u9645\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u4e3a\u200b\\(h = Ic\\)\uff08\u200b\u5f0f\u200b\u4e2d\u200b\\(I\\)\u200b\u4e3a\u200b\u5229\u7387\u200b\uff09
- \u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b\uff0c\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\\(p\\)\uff08backorder\uff09\uff1b
- \u200b\u6a21\u578b\u200b\u7684\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u4e3a\u91cd\u200b\u8ba2\u8d27\u200b\u70b9\u200b\\(R\\)\u3001\u200b\u4e0e\u200b\u8ba2\u8d27\u91cf\u200b\\(Q\\)\uff1a\u200b\u5f53\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u964d\u4f4e\u200b\u81f3\u200b\\(R\\)\u200b\u65f6\u200b\uff0c\u200b\u8ba2\u8d2d\u200b\\(Q\\)\u200b\u5355\u4f4d\u200b\u7684\u200b\u5e93\u5b58\u200b\u3002\u200b\u53d7\u200b\u8ba2\u8d27\u91cf\u200b\\(Q\\)\u200b\u7684\u200b\u5f71\u54cd\u200b\uff0c\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\\(T\\)\u200b\u6ee1\u8db3\u200b\\(Q = \\lambda T\\)
-
\u200b\u6a21\u578b\u200b\u4e2d\u200b\u4f7f\u7528\u200b\u7684\u200b\u5176\u4ed6\u200b\u8bb0\u53f7\u200b\u6709\u200b\uff1a
- \\(\\mathrm{IP}\\)\uff1a\u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b
- \\(\\mathrm{IL}\\)\uff1a\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b
- \\(\\mathrm{SS} = R - \\mu\\)\uff1a\u200b\u5b89\u5168\u200b\u5e93\u5b58\u200b
\\((Q, R)\\)\u200b\u6a21\u578b\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u6765\u6e90\u200b\u7684\u200b\u6210\u672c\u200b\uff1a
-
\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\uff1a\u200b\u6bcf\u6b21\u200b\u8ba2\u8d2d\u200b\\(Q\\)\u200b\u5355\u4f4d\u200b\u7684\u200b\u5e93\u5b58\u200b\uff0c\u200b\u603b\u6210\u672c\u200b\u4e3a\u200b\\(K + cQ\\)\uff1b
\\[ \\frac{K + cQ}{T} = \\frac{K\\lambda}{Q} + c\\lambda \\] -
\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\uff1a\u200b\u9996\u5148\u200b\u8ba1\u7b97\u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\u5185\u200b\u7684\u200b\u671f\u671b\u200b\u7f3a\u8d27\u91cf\u200b\\(n(R)\\)\uff0c\u200b\u6709\u200b
\\[ n(R) = E(\\max(D - R, 0)) = \\int_R^\\infty (x-R)f(x)\\mathrm dx \\] \u200b\u6839\u636e\u200b\\(n(R)\\)\uff0c\u200b\u5373\u53ef\u200b\u5f97\u5230\u200b\u4e00\u4e2a\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\\(T\\)\u200b\u65f6\u95f4\u200b\u7684\u200b\u5e73\u5747\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\\(\\lambda n(R)p/Q\\)
-
\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\uff1a\u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u5185\u200b\u671f\u671b\u200b\u7684\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u53d8\u5316\u200b\u4e3a\u200b\u7ebf\u6027\u200b\uff0c\u200b\u5f53\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u964d\u200b\u81f3\u200b\\(R\\)\u200b\u540e\u200b\u91cd\u65b0\u200b\u8ba2\u8d27\u200b\uff0c\u200b\u671f\u671b\u200b\u5e93\u5b58\u200b\u7ee7\u7eed\u200b\u4e0b\u964d\u200b\uff0c\u200b\u76f4\u81f3\u200b\u964d\u4f4e\u200b\u81f3\u200b\\(R - \\lambda\\tau\\)\u200b\u65f6\u200b\u8ba2\u5355\u200b\u5230\u8fbe\u200b\uff0c\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u5185\u200b\u7684\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ h\\left(\\frac{Q}{2} + R - \\lambda\\tau\\right) \\]
\u200b\u6839\u636e\u200b\u5982\u200b\u4e0a\u200b\u5206\u6790\u200b\uff0c\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u5185\u200b\u7684\u200b\u671f\u671b\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ \\begin{aligned} G(Q, R) &= h\\left(\\frac{Q}{2} + R - \\lambda\\tau\\right) + \\frac{K\\lambda}{Q} + \\frac{p\\lambda n(R)}{Q} \\\\ &= \\frac{hQ}{2} + \\lambda(K + pn(R))\\frac{1}{Q} + hR - h\\lambda\\tau \\end{aligned} \\] \\((Q, R)\\)\u200b\u6a21\u578b\u200b\u7684\u200b\u76ee\u6807\u200b\u5373\u200b\u4e3a\u200b\u6c42\u89e3\u200b\u51fa\u200b\u4f7f\u5f97\u200b\\(G(Q, R)\\)\u200b\u6700\u5c0f\u200b\u7684\u200b\\(Q, R\\)\u3002\u200b\u82e5\u200b\u8868\u793a\u200b\u4e3a\u200b\\((s, S)\\)\u200b\u7b56\u7565\u200b\u7684\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u5373\u200b\u6709\u200b\\(s = R, S = Q + R\\)
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_11","title":"\u6c42\u89e3","text":"\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u8fed\u4ee3\u200b\u7684\u200b\u65b9\u5f0f\u200b\u903c\u8fd1\u200b\\((Q, R)\\)\u200b\u6a21\u578b\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u5206\u522b\u200b\u5bf9\u200b\\(G\\)\u200b\u6c42\u200b\\(Q, R\\)\u200b\u7684\u200b\u504f\u200b\u5bfc\u6570\u200b\uff0c\u200b\u6709\u200b
\\[ \\begin{aligned} \\frac{\\partial G}{\\partial Q} &= \\frac{h}{2} - \\lambda (K + pn(R))\\frac{1}{Q^2} \\\\ \\frac{\\partial G}{\\partial R} &= h + \\frac{\\lambda p n'(R)}{Q} \\\\ &= h - \\frac{\\lambda p(1-F(R))}{Q} \\end{aligned} \\] \u200b\u8fed\u4ee3\u200b\u8fc7\u7a0b\u200b\u4ece\u200bEOQ\u200b\u6a21\u578b\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\\(Q_{\\mathrm{EOQ}}^* = \\sqrt{\\frac{2K\\lambda}{h}}\\)\u200b\u5f00\u59cb\u200b\uff0c\u200b\u6c42\u200b\u51fa\u200b\u4f7f\u5f97\u200b\\(G\\)\u200b\u6700\u4f18\u200b\u7684\u200b\\(R\\)\u200b\u503c\u200b\uff0c\u200b\u518d\u200b\u5c06\u200b\\(R\\)\u200b\u4ee3\u5165\u200b\u6c42\u200b\u51fa\u200b\u6700\u4f18\u200b\u7684\u200b\\(Q\\)\u200b\u503c\u200b\uff0c\u200b\u5982\u6b64\u200b\u5faa\u73af\u200b\uff0c\\(Q, R\\)\u200b\u5373\u200b\u903c\u8fd1\u200b\u6700\u4f18\u200b\u7684\u200b\\(Q^*, R^*\\)\u200b\u53d6\u503c\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u65b9\u7a0b\u200b\uff1a
\\[ \\begin{aligned} Q &= \\sqrt{\\frac{2\\lambda (K + pn(R))}{h}} \\\\ F(R) &= 1 - \\frac{hQ}{\\lambda p} \\end{aligned} \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_12","title":"\u670d\u52a1\u6c34\u5e73","text":"\u200b\u7c7b\u4f3c\u200b\u4e8e\u200b\u5468\u671f\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\uff0c\u200b\u5728\u200b\u8fde\u7eed\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\u4e2d\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u7b2c\u4e00\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\u4e0e\u200b\u7b2c\u4e8c\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\u7b49\u200b\u6307\u6807\u200b\u3002\u200b\u82e5\u200b\u5047\u8bbe\u200b\u6bcf\u4e2a\u200b\u63d0\u524d\u200b\u671f\u5185\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u5728\u200b\u9014\u200b\u8ba2\u5355\u200b\uff1a
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_13","title":"\u7b2c\u4e00\u7c7b\u200b\u670d\u52a1\u6c34\u5e73","text":"\u200b\u7b2c\u4e00\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\u6307\u5728\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u4e2d\u200b\u4e0d\u200b\u53d1\u751f\u200b\u7f3a\u8d27\u200b\u7684\u200b\u6982\u7387\u200b\uff0c\u200b\u7528\u200b\\(\\alpha\\)\u200b\u8868\u793a\u200b\u3002\u200b\u5219\u200b\u6709\u200b\\(\\alpha = F(R)\\)\u3002\u200b\u6c42\u89e3\u200b\u6ee1\u8db3\u200b\u7b2c\u4e00\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\u6761\u4ef6\u200b\u7684\u200b\\((Q, R)\\)\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u6b65\u9aa4\u200b\u8fdb\u884c\u200b
- \u200b\u6c42\u89e3\u200b\u6ee1\u8db3\u200b\\(F(R) = \\alpha\\)\u200b\u7684\u200b\\(R\\)\u200b\u503c\u200b
- \\(Q\\)\u200b\u503c\u53d6\u200bEOQ\u200b\u6700\u4f18\u200b\u503c\u200b\\(\\sqrt{\\frac{2K\\lambda}{h}}\\)\u200b\u5373\u53ef\u200b
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#fill-rate","title":"\u7b2c\u4e8c\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\uff1aFill rate","text":"\u200b\u7b2c\u4e8c\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\u6307\u200b\u6ee1\u8db3\u200b\u7684\u200b\u9700\u6c42\u200b\u5360\u200b\u603b\u9700\u6c42\u200b\u7684\u200b\u6bd4\u4f8b\u200b\u6bd4\u4f8b\u200b\uff0c\u200b\u7528\u200b\\(\\beta\\)\u200b\u8868\u793a\u200b\uff0c\u200b\u7531\u4e8e\u200b\\(n(R)\\)\u200b\u4e3a\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u4e2d\u200b\u7684\u200b\u671f\u671b\u200b\u7f3a\u8d27\u91cf\u200b\uff0c\u200b\u5219\u200b\u6709\u200b\\(n(R)/Q = 1 - \\beta\\)\u3002\u200b\u6839\u636e\u200b\\(F(R) = 1 - \\frac{hQ}{\\lambda p}\\)\uff0c\u200b\u53ef\u200b\u5f97\u200b
\\[ p = \\frac{Qh}{\\lambda(1 - F(R))} \\] \u200b\u5c06\u200b\u5176\u200b\u4ee3\u5165\u200b\\(Q = \\sqrt{\\frac{2\\lambda (K + pn(R))}{h}}\\)\uff0c\u200b\u6574\u7406\u200b\u5f97\u5230\u200b
\\[ hQ^2 - \\frac{2hn(R)}{1-F(R)}Q - 2K\\lambda = 0 \\] \u200b\u89e3\u5f97\u200b
\\[ Q = \\frac{n(R)}{1 - F(R)} + \\sqrt{\\frac{2K\\lambda}{h} + \\left(\\frac{n(R)}{1-F(R)}\\right)^2} \\] \u200b\u53c8\u200b\u6839\u636e\u200b\u7b2c\u4e8c\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\uff0c\u200b\u6709\u200b
\\[n(R) = (1-\\beta)Q\\] \u200b\u8054\u200b\u7acb\u5373\u200b\u5f97\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u200b\u4f7f\u7528\u200b\u8fed\u4ee3\u200b\u65b9\u5f0f\u200b\u6c42\u89e3\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_14","title":"\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\u4e0e\u200b\u5e93\u5b58\u200b\u6c34\u5e73","text":"\u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\u4e0e\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u7684\u200b\u5173\u7cfb\u200b\uff1a
\\[ \\mathrm{IL}(t+L) = \\mathrm{IP}(t) - D(t, t+L) \\] \u200b\u5f0f\u200b\u4e2d\u200b\\(D(t, t+L)\\)\u200b\u4e3a\u200b\\([t, t+L]\\)\u200b\u65f6\u95f4\u200b\u5185\u200b\u7684\u200b\u9700\u6c42\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u82e5\u200b\u5df2\u77e5\u200b\\(\\mathrm{IP}(t), D(t, t+L)\\)\u200b\u7684\u200b\u5206\u5e03\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u636e\u6b64\u200b\u8ba1\u7b97\u200b\\(\\mathrm{IL}(t+L)\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u7a33\u6001\u200b\uff0c\u200b\u5728\u200b\u4efb\u610f\u200b\u65f6\u523b\u200b\\(t\\)\uff0c\u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\\(\\mathrm{IP}(t), \\mathrm{IL}(t+L), D(t, t+L)\\)\u200b\u5206\u522b\u200b\u5bf9\u200b\u4e0d\u540c\u200b\u7684\u200b\\(t\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\u3002\u200b\u7531\u6b64\u200b\uff0c\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u968f\u673a\u53d8\u91cf\u200b\\(\\mathrm{IP}, \\mathrm{IL}, D(L)\\)\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5206\u5e03\u200b\u5173\u7cfb\u200b\u3002\u200b\u5df2\u77e5\u200b\\(\\mathrm{IP}\\)\u200b\u4e3a\u200b\u5747\u5300\u5206\u5e03\u200b\uff0c\u200b\u8bbe\u200b\\(D(L)\\)\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u4e3a\u200b\\(f(x;L)\\)\uff0c\u200b\u5219\u200b
\\[ \\begin{aligned} F_{\\mathrm{IL}}(x) &= P(\\mathrm{IL}\\leq x) \\\\ &= \\int_{R}^{R+Q}P(\\mathrm{IP} = u)P(\\mathrm{IP} - \\mathrm{IL} \\geq u-x) \\mathrm du \\\\ &= \\frac{1}{Q}\\int_{R}^{R+Q} P(D \\geq u-x) \\mathrm du \\\\ &= \\frac{1}{Q}\\int_{R}^{R+Q} (1 - F(u-x;L)) \\mathrm du \\end{aligned} \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_15","title":"\u6a21\u578b\u200b\u6269\u5c55","text":""},{"location":"math/operations-mamagement/inventory-control-random-demand/#_16","title":"\u6b63\u6001\u5206\u5e03\u200b\u9700\u6c42","text":"\u200b\u5f53\u200b\u63d0\u524d\u200b\u671f\u5185\u200b\u9700\u6c42\u200b\\(D\\)\u200b\u670d\u4ece\u200b\u6b63\u6001\u5206\u5e03\u200b\\(N(\\mu, \\sigma)\\)\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6b63\u6001\u5206\u5e03\u200b\u7684\u200b\u6807\u51c6\u200b\u635f\u5931\u200b\u51fd\u6570\u200b\\(L(z)\\)\u200b\u7b80\u5316\u200b\\(n(R)\\)\u200b\u7684\u200b\u8ba1\u7b97\u200b
\\[ n(R) = \\sigma L\\left(\\frac{R-\\mu}{\\sigma}\\right) = \\sigma L(z) \\] \\(L(z)\\)\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\\(\\phi(z), \\varPhi(z)\\)\u200b\u8ba1\u7b97\u200b\u5f97\u5230\u200b\uff1a
\\[ L(z) = \\phi(z) - z + z\\varPhi(z) \\] \u200b\u5c06\u200b\\(D(L) \\sim N(\\mu, \\sigma)\\)\u200b\u4ee3\u5165\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u7684\u200b\u5206\u5e03\u200b\uff0c\u200b\u5f97\u5230\u200b
\\[ F_{\\mathrm{IL}}(x) = \\frac{1}{Q}\\int_{R}^{R+Q} \\left[1 - \\varPhi\\left(\\frac{u-x-\\mu}{\\sigma}\\right)\\right] \\mathrm du \\] \u200b\u7531\u6b64\u200b\u53ef\u200b\u5f97\u200b\uff0c\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\\(f_{\\mathrm{IL}}(x)\\)\u200b\u4e3a\u200b
\\[ f_{\\mathrm{IL}}(x) = \\frac{1}{Q}\\left[\\varPhi\\left(\\frac{R+Q-x-\\mu}{\\sigma}\\right) - \\varPhi\\left(\\frac{R-x-\\mu}{\\sigma}\\right)\\right] \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/#lost-sales","title":"Lost-sales","text":"\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b\uff0c\u200b\u5219\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u4e0d\u200b\u4f4e\u4e8e\u200b0\uff0c\u200b\u6b64\u65f6\u200b\u5e73\u5747\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u53d8\u4e3a\u200b
\\[ \\frac{Q}{2} + \\max(R-\\mu, 0) \\] \u200b\u5176\u4f59\u200b\u6210\u672c\u200b\u4e0d\u53d8\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_17","title":"\u968f\u673a\u200b\u63d0\u524d\u200b\u671f","text":""},{"location":"math/operations-mamagement/inventory-control-random-demand/#one-for-one-policy","title":"One-for-one policy","text":"\u200b\u5f53\u200b\u8ba2\u8d27\u200b\u6279\u91cf\u200b\\(Q = 1\\)\u200b\u65f6\u200b\uff0c\u200b\u79f0\u4e3a\u200bOne-for-one policy\uff0c\u200b\u901a\u5e38\u200b\u9002\u7528\u200b\u4e8e\u200b\u987e\u5ba2\u200b\u9700\u6c42\u200b\u7387\u200b\u8f83\u200b\u4f4e\u200b\u800c\u200b\u4ea7\u54c1\u200b\u4ef7\u503c\u200b\u8f83\u200b\u9ad8\u200b\uff0c\u200b\u5982\u200b\u6c7d\u8f66\u200b\u7b49\u200b\u5927\u5b97\u200b\u5546\u54c1\u200b\u3002\u200b\u8be5\u200b\u7b56\u7565\u200b\u4e00\u200b\u51fa\u73b0\u200b\u9700\u6c42\u200b\u5c31\u200b\u8ba2\u8d27\u200b\uff0c\u200b\u4ece\u800c\u200b\u4f7f\u5f97\u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\u59cb\u7ec8\u200b\u5904\u4e8e\u200b\\(S = Q + R\\)\u3002\u200b\u4ee5\u4e0b\u200b\u8003\u8651\u200b\u9700\u6c42\u200b\u79bb\u6563\u200b\u7684\u200b\u60c5\u51b5\u200b\uff1a
- \u200b\u9700\u6c42\u200b\u670d\u4ece\u200b\u53c2\u6570\u200b\u4e3a\u200b\\(\\lambda\\)\u200b\u7684\u200b\u6cca\u677e\u200b\u5206\u5e03\u200b
- \u200b\u5141\u8bb8\u200b\u5ef6\u671f\u200b\u4ea4\u8d27\u200b
- \u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u7684\u200b\u5355\u4f4d\u200b\u6301\u6709\u200b\u6210\u672c\u200b\u4e0e\u200b\u5355\u4f4d\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\u4e3a\u200b\\(h, p\\)
\u200b\u5f53\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u4e3a\u200b\u5e38\u6570\u200b\\(\\tau\\)\u200b\u65f6\u200b\uff0c\u200b\u5206\u6790\u200b\u6301\u6709\u200b\u6210\u672c\u200b\u4e0e\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\u3002\u200b\u9996\u5148\u200b\u8003\u8651\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u5904\u4e8e\u200b\u4e0d\u540c\u200b\u72b6\u6001\u200b\u7684\u200b\u6982\u7387\u200b\uff1a
\\[ P(\\mathrm{IL} = i) = P(D = S - i) = \\frac{e^{-\\lambda t}(\\lambda t)^{S-i}}{(S-i)!} \\] \u200b\u5df2\u77e5\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u4e3a\u200b\\(i\\)\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5b58\u8d27\u91cf\u200b\u4e3a\u200b\\(\\max\\{S - D, 0\\}\\)\uff0c\u200b\u7f3a\u8d27\u91cf\u200b\u4e3a\u200b\\(\\max\\{D-S, 0\\}\\)\uff0c\u200b\u56e0\u6b64\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u4e0e\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\u5206\u522b\u200b\u4e3a\u200b
\\[ \\begin{aligned} c_h &= h\\sum_{D=0}^S (S-D)\\frac{e^{-\\lambda t}(\\lambda t)^{D}}{D!} \\\\ c_u &= p\\sum_{D=S}^\\infty (D-S)\\frac{e^{-\\lambda t}(\\lambda t)^{D}}{D!} \\end{aligned} \\] \u200b\u5f53\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u200b\u968f\u673a\u200b\uff0c\u200b\u4e0d\u540c\u200b\u8ba2\u5355\u200b\u7684\u200b\u63d0\u524d\u200b\u671f\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\u65f6\u200b\uff0c\u200b\u4e3a\u200b\u7b80\u5316\u200b\u5904\u7406\u200b\uff0c\u200b\u8bbe\u200b\u63d0\u524d\u200b\u671f\u200b\u670d\u4ece\u200b\u5747\u503c\u200b\u4e3a\u200b\\(\\tau\\)\u200b\u7684\u200b\u6307\u6570\u5206\u5e03\u200b\uff0c\u200b\u5219\u200b\u7cfb\u7edf\u200b\u7684\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u56fe\u4e3a\u200b
\u200b\u8be5\u200b\u7cfb\u7edf\u200b\u4e3a\u751f\u200b\u706d\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u72b6\u6001\u200b\\(i < S\\)\uff0c\u200b\u6709\u200b
\\[ \\left(\\lambda + \\frac{S-i}{\\tau}\\right)P(\\mathrm{IL} = i) = \\lambda P(\\mathrm{IL} = i+1) + \\frac{S-i+1}{\\tau} P(\\mathrm{IL} = i-1) \\] \u200b\u5f53\u200b\\(i = S\\)\u200b\u65f6\u200b\uff0c\\(\\lambda P(\\mathrm{IL} = S) = \\frac{1}{\\tau}P(\\mathrm{IL} = S-1)\\)\u3002\u200b\u7531\u6b64\u200b\u53ef\u4ee5\u200b\u63a5\u200b\u7684\u200b
\\[ \\begin{aligned} P(\\mathrm{IL} = S) &= e^{-\\lambda\\tau} \\\\ P(\\mathrm{IL} = i) &= \\frac{(\\lambda\\tau)^{S-i}}{(S-i)!}P(\\mathrm{IL} = S) \\\\ &= \\frac{(\\lambda\\tau)^{S-i}e^{-\\lambda\\tau}}{(S-i)!} \\end{aligned} \\] \u200b\u5f53\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u5ef6\u671f\u200b\u4ea4\u8d27\u200b\u65f6\u200b\uff0c\\(\\mathrm{IL}\\geq 0\\)\uff0c\u200b\u60c5\u51b5\u200b\u4e0e\u200b\u5141\u8bb8\u200b\u5ef6\u671f\u200b\u4ea4\u8d27\u200b\u65f6\u200b\u53c8\u200b\u6709\u200b\u4e0d\u540c\u200b\uff0c\u200b\u4ece\u200b\u65e0\u9650\u200b\u72b6\u6001\u200b\u9a6c\u6c0f\u94fe\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u6709\u9650\u200b\u72b6\u6001\u200b\u9a6c\u6c0f\u94fe\u200b\u3002
"},{"location":"math/queue-theory/","title":"\u5bf9\u7b56\u200b\u3001\u200b\u51b3\u7b56\u200b\u4e0e\u200b\u6392\u961f\u200b\u8bba","text":"\u200b\u8bfe\u7a0b\u200b\u76ee\u5f55\u200b\uff1a
- Chapter 1\uff0c
- Chapter 2\uff0c
- Chapter 3\uff0c
- Chapter 4\uff0c
- Chapter 5\uff0c
- Chapter 6\uff0c
- Chapter 7\uff0c
- Chapter 8\uff0c
- Chapter 9\uff0c
- Chapter 10\uff0c
- Chapter 11\uff0c
- Chapter 12\uff0c\u200b\u5e38\u89c1\u200b\u7684\u200b\u6392\u961f\u6a21\u578b\u200b
"},{"location":"math/queue-theory/chapter-12/","title":"\u5e38\u89c1\u200b\u6392\u961f\u6a21\u578b","text":"\u200b\u4e00\u4e2a\u200b\u6392\u961f\u6a21\u578b\u200b\u4e3b\u8981\u200b\u7531\u200b\u4ee5\u4e0b\u200b\u90e8\u5206\u200b\u7ec4\u6210\u200b
- \u200b\u987e\u5ba2\u200b\uff08\u200b\u5b9e\u4f53\u200b\uff09\u200b\u5904\u7406\u200b
- \u200b\u5b9e\u4f53\u200b\u6392\u961f\u200b\u7b49\u5f85\u200b\u5904\u7406\u200b\uff08\u200b\u7cfb\u7edf\u200b\u7684\u200b\u6392\u961f\u200b\u7b56\u7565\u200b\u53ef\u80fd\u200b\u4e0d\u540c\u200b\uff0c\u200b\u635f\u5931\u200b\u5236\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u6392\u961f\u200b\u3001\u200b\u6df7\u5408\u5236\u200b\u5141\u8bb8\u200b\u6392\u200b\u6709\u9650\u200b\u957f\u5ea6\u200b\u7684\u200b\u961f\u5217\u200b\uff09
- \u200b\u5b9e\u4f53\u200b\u5904\u7406\u5b8c\u6bd5\u200b\uff0c\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b
"},{"location":"math/queue-theory/chapter-12/#_2","title":"\u6392\u961f\u6a21\u578b\u200b\u7684\u200b\u63cf\u8ff0","text":""},{"location":"math/queue-theory/chapter-12/#_3","title":"\u8fdb\u5165\u200b\u7cfb\u7edf","text":"\u200b\u5047\u8bbe\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u5b9e\u4f53\u200b\u6570\u91cf\u200b\u65e0\u9650\u200b\u3002\u200b\u8003\u5bdf\u200b\u76f8\u90bb\u200b\u4e24\u4e2a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u65f6\u95f4\u5dee\u200b\uff1a
- \u200b\u5bf9\u4e8e\u200b\u5b9a\u200b\u957f\u200b\u5206\u5e03\u200b\uff0c\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u65f6\u95f4\u5dee\u200b\u4e3a\u200b\u5e38\u91cf\u200b\\(t\\)\uff0c\\(t\\)\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u4e3a\u200b\uff1a
\\[ f(t; \\alpha)=\\left\\{ \\begin{aligned} & 1 & t=\\alpha \\\\ & 0 & t\\not =\\alpha \\end{aligned} \\right . \\] - Poisson \u200b\u6d41\u200b\uff0c\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u65f6\u95f4\u5dee\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u670d\u4ece\u200b\u53c2\u6570\u200b\u4e3a\u200b\\(\\lambda\\)\u200b\u7684\u200b\u6307\u6570\u5206\u5e03\u200b
\\[ f_{\\xi_i}(t; \\lambda)=\\left\\{ \\begin{aligned} & \\lambda e^{-\\lambda t} & t\\geq 0 \\\\ & 0 & t < 0 \\end{aligned} \\right . \\] - Erlang \u200b\u5206\u5e03\u200b\uff0c\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u65f6\u95f4\u5dee\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u670d\u4ece\u200b\u5982\u4e0b\u200b\u516c\u5f0f\u200b\u6240\u793a\u200b\u7684\u200b\u5206\u5e03\u200b\u3002\u200b\u82e5\u200b\u67d0\u4e2a\u200b\u7cfb\u7edf\u200b\u4e2d\u6709\u200b\\(K\\)\u200b\u4e2a\u200b\u5e76\u8054\u200b\u7684\u200b\u670d\u52a1\u53f0\u200b\uff0c\u200b\u8f93\u5165\u200b\u5b9e\u4f53\u200b\u4e3a\u200b Poisson \u200b\u6d41\u200b\uff0c\u200b\u5219\u200b\u7b2c\u200b\\(K\\)\u200b\u4e2a\u200b\u670d\u52a1\u53f0\u200b\u7684\u200b\u987e\u5ba2\u200b\u6d41\u4e3a\u200b Erlang \u200b\u6d41\u200b\uff0c\u200b\u524d\u9762\u200b\u6240\u6709\u200b\\(K - 1\\)\u200b\u4e2a\u200b\u670d\u52a1\u53f0\u200b\u5728\u200b\u7b2c\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u5230\u8fbe\u200b\u4ee5\u540e\u200b\u7684\u200b\u8f93\u5165\u200b\u6d41\u200b\u540c\u6837\u200b\u4e3a\u200b Erlang \u200b\u6d41\u200b\u3002
\\[ f(t; \\lambda, K)=\\left\\{ \\begin{aligned} & \\frac{\\lambda(\\lambda t)^{K-1}}{(K-1)!} & t\\geq 0 \\\\ & 0 & t < 0 \\end{aligned} \\right . \\]"},{"location":"math/queue-theory/chapter-12/#_4","title":"\u5b9e\u4f53\u200b\u6392\u961f\u200b\u4e0e\u200b\u5904\u7406","text":"\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u53ef\u80fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u6216\u200b\u591a\u4e2a\u200b\u670d\u52a1\u53f0\u200b\u3002\u200b\u5728\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u670d\u52a1\u53f0\u200b\u90fd\u200b\u5904\u4e8e\u200b\u8fd0\u884c\u200b\u72b6\u6001\u200b\u65f6\u200b\uff0c\u200b\u65b0\u200b\u8fdb\u5165\u200b\u7684\u200b\u5b9e\u4f53\u200b\u65e0\u6cd5\u200b\u7acb\u5373\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b\uff0c\u200b\u800c\u662f\u200b\u8fdb\u5165\u200b\u961f\u5217\u200b\u6216\u200b\u76f4\u63a5\u200b\u79bb\u5f00\u200b\uff0c\u200b\u53d6\u51b3\u4e8e\u200b\u7cfb\u7edf\u200b\u7684\u200b\u6392\u961f\u200b\u7b56\u7565\u200b\u3002\u200b\u6392\u961f\u200b\u7b56\u7565\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u635f\u5931\u200b\u5236\u200b\u3001\u200b\u7b49\u5f85\u200b\u5236\u200b\u4e0e\u200b\u6df7\u5408\u5236\u200b\u3002
\u200b\u5728\u200b\u635f\u5931\u200b\u5236\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\uff0c\u200b\u5982\u679c\u200b\u65b0\u200b\u8fdb\u5165\u200b\u7684\u200b\u5b9e\u4f53\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u7acb\u5373\u200b\u5904\u7406\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\u3002 \u200b\u5728\u200b\u7b49\u5f85\u200b\u5236\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\uff0c\u200b\u5982\u679c\u200b\u65b0\u200b\u8fdb\u5165\u200b\u7684\u200b\u5b9e\u4f53\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u7acb\u5373\u200b\u5904\u7406\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u5728\u200b\u961f\u5217\u200b\u4e2d\u200b\u7b49\u5f85\u200b\uff0c\u200b\u76f4\u5230\u200b\u88ab\u200b\u5904\u7406\u200b\u3002 \u200b\u5728\u200b\u6df7\u5408\u5236\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\uff0c\u200b\u5982\u679c\u200b\u65b0\u200b\u8fdb\u5165\u200b\u7684\u200b\u5b9e\u4f53\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u7acb\u5373\u200b\u5904\u7406\u200b\u4e14\u200b\u6b64\u65f6\u200b\u7684\u200b\u961f\u5217\u200b\u957f\u5ea6\u200b\u5927\u4e8e\u200b\u67d0\u4e00\u5e38\u200b\u6570\u503c\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u5426\u5219\u200b\u4f1a\u200b\u8fdb\u5165\u200b\u961f\u5217\u200b\u7b49\u5f85\u200b\u3002
\u200b\u5b9e\u4f53\u200b\u5728\u200b\u6392\u961f\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u7684\u200b\u884c\u4e3a\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u5982\u4e0b\u200b\u7c7b\u578b\u200b\uff1a
- \u200b\u79bb\u5f00\u200b\uff1a\u200b\u5f53\u200b\u5b9e\u4f53\u200b\u5f97\u77e5\u200b\u9700\u8981\u200b\u7b49\u5f85\u200b\u6216\u200b\u6ca1\u6709\u200b\u8010\u5fc3\u200b\u7ee7\u7eed\u200b\u7b49\u5f85\u200b\u65f6\u200b\uff0c\u200b\u5b9e\u4f53\u200b\u53ef\u80fd\u200b\u9000\u51fa\u200b\u961f\u5217\u200b
- \u200b\u53d8\u6362\u200b\uff1a\u200b\u5373\u200b\u5b9e\u4f53\u200b\u4e3a\u200b\u51cf\u5c11\u200b\u6392\u961f\u200b\u65f6\u95f4\u200b\u800c\u200b\u5728\u200b\u4e0d\u540c\u200b\u670d\u52a1\u53f0\u200b\u7684\u200b\u961f\u5217\u200b\u4e4b\u95f4\u200b\u79fb\u52a8\u200b
\u200b\u670d\u52a1\u53f0\u200b\u4f1a\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u53ef\u80fd\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u670d\u52a1\u200b\uff1a
- FCFS\uff1a\u200b\u5148\u200b\u8fdb\u5165\u200b\u961f\u5217\u200b\u7684\u200b\u5148\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b
- LCFS\uff1a\u200b\u540e\u200b\u8fdb\u5165\u200b\u961f\u5217\u200b\u7684\u200b\u5148\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b
- \u200b\u968f\u673a\u200b\u5904\u7406\u200b
- PS\uff1a\u200b\u4f18\u5148\u7ea7\u200b\u9ad8\u200b\u7684\u200b\u5b9e\u4f53\u200b\u5148\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b
- \u200b\u65ad\u7eed\u200b\u5904\u7406\u200b\uff1a\u200b\u5728\u200b\u5904\u7406\u200b\u67d0\u4e2a\u200b\u5b9e\u4f53\u200b\u4e00\u6bb5\u65f6\u95f4\u200b\u540e\u200b\uff0c\u200b\u8f6c\u800c\u200b\u5904\u7406\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u5faa\u73af\u200b\u76f4\u5230\u200b\u5b9e\u4f53\u200b\u5904\u7406\u200b\u5b8c\u6210\u200b
\u200b\u5728\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u670d\u52a1\u53f0\u200b\u7684\u200b\u670d\u52a1\u200b\u65f6\u95f4\u200b\u662f\u200b\u4e00\u4e2a\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u6982\u7387\u5206\u5e03\u200b\u4e3a\u200b\u5e38\u6570\u200b\u3001\u200b\u6307\u6570\u5206\u5e03\u200b\u3001K\u200b\u7ea7\u200b Erlang \u200b\u5206\u5e03\u200b\u3001\u200b\u4e00\u822c\u200b\u5206\u5e03\u200b\u7b49\u200b\u3002
"},{"location":"math/queue-theory/chapter-12/#_5","title":"\u7cfb\u7edf\u200b\u7684\u200b\u7b26\u53f7\u200b\u8868\u793a","text":"Kendall\u200b\u8bb0\u53f7\u200b\uff0c\u200b\u683c\u5f0f\u200b\u4e3a\u200b\\(X/Y/Z/A/B/C\\)
- \\(X\\)\u200b\u8868\u793a\u200b\u5b9e\u4f53\u200b\u5230\u8fbe\u200b\u95f4\u9694\u65f6\u95f4\u200b\u7684\u200b\u5206\u5e03\u200b
- \\(M\\)\u200b\u8868\u793a\u200b\u5230\u8fbe\u200b\u8fc7\u7a0b\u200b\u4e3a\u200b Poisson \u200b\u8fc7\u7a0b\u200b\uff08\u200b\u95f4\u9694\u65f6\u95f4\u200b\u670d\u4ece\u200b\u6307\u6570\u5206\u5e03\u200b\uff09\u200b\u6216\u8d1f\u200b\u6307\u6570\u5206\u5e03\u200b
- \\(D\\)\u200b\u8868\u793a\u200b\u95f4\u9694\u65f6\u95f4\u200b\u4e3a\u200b\u5e38\u6570\u200b
- \\(E_k\\)\u200b\u8868\u793a\u200b\u95f4\u9694\u65f6\u95f4\u200b\u670d\u4ece\u200b\\(k\\)\u200b\u9636\u200b Erlang \u200b\u5206\u5e03\u200b
- \\(G\\)\u200b\u8868\u793a\u200b\u95f4\u9694\u65f6\u95f4\u200b\u670d\u4ece\u200b\u4e00\u822c\u200b\u3001\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u7684\u200b\u968f\u673a\u200b\u5206\u5e03\u200b
- \\(Y\\)\u200b\u8868\u793a\u200b\u670d\u52a1\u53f0\u200b\u5355\u6b21\u200b\u670d\u52a1\u200b\u65f6\u95f4\u200b\u7684\u200b\u5206\u5e03\u200b\uff0c\u200b\u8bb0\u53f7\u200b\u4e0e\u200b\\(X\\)\u200b\u7684\u200b\u542b\u4e49\u200b\u76f8\u540c\u200b
- \\(Z\\)\u200b\u8868\u793a\u200b\u670d\u52a1\u53f0\u200b\u4e2a\u6570\u200b
- \\(A\\)\u200b\u8868\u793a\u200b\u7cfb\u7edf\u200b\u7684\u200b\u7b49\u5f85\u200b\u7a7a\u95f4\u200b\u5bb9\u91cf\u200b\uff0c\\(0\\)\u200b\u4e3a\u200b\u635f\u5931\u200b\u5236\u200b\u7cfb\u7edf\u200b\uff0c\\(\\infty\\)\u200b\u4e3a\u200b\u7b49\u5f85\u200b\u5236\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u5426\u5219\u200b\u4e3a\u200b\u6df7\u5408\u5236\u200b\u7cfb\u7edf\u200b\u3002
- \\(B\\)\u200b\u8868\u793a\u200b\u5b9e\u4f53\u200b\u7684\u200b\u603b\u200b\u6570\u91cf\u200b\uff0c\\(\\infty\\)\u200b\u8868\u793a\u200b\u5b9e\u4f53\u200b\u6e90\u200b\u65e0\u9650\u200b
- \\(C\\)\u200b\u8868\u793a\u200b\u670d\u52a1\u200b\u89c4\u5219\u200b
\\(A, B, C\\)\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u3002\u200b\u5206\u522b\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\\(\\infty, \\infty, \\mathit{FCFS}\\)
"},{"location":"math/queue-theory/chapter-12/#_6","title":"\u7cfb\u7edf\u200b\u7684\u200b\u89c2\u6d4b\u200b\u6307\u6807","text":"\u200b\u8861\u91cf\u200b\u7cfb\u7edf\u200b\u6027\u80fd\u200b\u7684\u200b\u5e38\u7528\u200b\u89c2\u6d4b\u200b\u6307\u6807\u200b\u4e3a\u200b\uff1a
- \\(N(L)\\)\uff1a\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u7684\u200b\u961f\u957f\u200b\uff08\u200b\u6307\u200b\u7cfb\u7edf\u200b\u5185\u200b\u6240\u6709\u200b\u7684\u200b\u5b9e\u4f53\u200b\u6570\u91cf\u200b\uff09
- \\(N_q(L_q)\\)\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u7684\u200b\u6392\u961f\u200b\u957f\u200b
- \\(T(W)\\)\uff1a\u200b\u987e\u5ba2\u200b\u5728\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u505c\u7559\u65f6\u95f4\u200b\uff08\u200b\u5904\u7406\u200b+\u200b\u7b49\u5f85\u200b\uff09
- \\(T_q(W_q)\\)\uff1a\u200b\u987e\u5ba2\u200b\u5728\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u7b49\u5f85\u65f6\u95f4\u200b
- \\(p_n\\)\uff1a\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u4efb\u610f\u200b\u65f6\u523b\u200b\u72b6\u6001\u200b\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u6982\u7387\u200b\uff0c\\(p_n=P(N=n)=\\lim_{t\\rightarrow \\infty}P(N(t) = n)\\)
- \\(\\rho\\)\uff1a\u200b\u5229\u7528\u7387\u200b
- \\(p_D\\)\uff1a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u65f6\u200b\u9700\u8981\u200b\u7b49\u5f85\u200b\u7684\u200b\u6982\u7387\u200b
\u200b\u82e5\u200b\u5c06\u200b\u7cfb\u7edf\u200b\u89c6\u4e3a\u200b\u7ba1\u9053\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u5b9e\u4f53\u200b\u7684\u200b\u6570\u91cf\u200b\u7b49\u4e8e\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u901f\u5ea6\u200b\u4e0e\u200b\u7cfb\u7edf\u200b\u5e73\u5747\u200b\u54cd\u5e94\u200b\uff08\u200b\u5904\u7406\u200b\uff09\u200b\u65f6\u95f4\u200b\u4e4b\u79ef\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\\(M/M/s\\)\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u4ee4\u200b\\(\\lambda\\)\u200b\u4e3a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u901f\u5ea6\u200b\uff0c\\(\\mu\\)\u200b\u4e3a\u200b\u670d\u52a1\u53f0\u200b\u5904\u7406\u200b\u5b9e\u4f53\u200b\u7684\u200b\u901f\u5ea6\u200b\uff0c\\(s\\)\u200b\u4e3a\u200b\u670d\u52a1\u53f0\u200b\u7684\u200b\u6570\u91cf\u200b\uff0c\u200b\u5219\u200b\uff1a
\\[ \\begin{aligned} L &= \\lambda_e W \\\\ L_q &= \\lambda_e W_q \\end{aligned} \\]"},{"location":"math/queue-theory/chapter-12/#_7","title":"\u968f\u673a\u200b\u8fc7\u7a0b","text":"\u200b\u5e38\u89c1\u200b\u7684\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\u6709\u200b Markov \u200b\u8fc7\u7a0b\u200b\u3001\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b\u3001 Poisson \u200b\u8fc7\u7a0b\u200b\u7b49\u200b\u3002\u200b\u6240\u6709\u200b\u7684\u200b Poisson \u200b\u8fc7\u7a0b\u200b\u90fd\u200b\u662f\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u6240\u6709\u200b\u7684\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b\u90fd\u200b\u662f\u200b Markov \u200b\u8fc7\u7a0b\u200b\u3002
"},{"location":"math/queue-theory/chapter-12/#markov","title":"Markov \u200b\u8fc7\u7a0b","text":"\u200b\u7279\u70b9\u200b\uff1a\\(t_0\\)\u200b\u65f6\u523b\u200b\u7684\u200b\u72b6\u6001\u200b\u4e0e\u200b\u4efb\u610f\u200b\\(t<t_0\\)\u200b\u65f6\u200b\u7684\u200b\u72b6\u6001\u200b\u65e0\u5173\u200b
Markov \u200b\u94fe\u200b\u7531\u200b\u9a6c\u5c14\u53ef\u592b\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u7684\u200b\u79bb\u6563\u200b\u72b6\u6001\u200b\u7ec4\u5408\u200b\u3002\u200b\u5bf9\u4e8e\u200b Markov \u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u65e0\u200b\u8bb0\u5fc6\u6027\u200b\uff0c\u200b\u5f53\u524d\u200b\u7684\u200b\u72b6\u6001\u200b\u4e0d\u4f1a\u200b\u5bf9\u200b\u540e\u9762\u200b\u7684\u200b\u72b6\u6001\u200b\u4ea7\u751f\u200b\u5f71\u54cd\u200b\u3002
\\(M/M/s\\)\u200b\u7cfb\u7edf\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b Markov \u200b\u8fc7\u7a0b\u200b\u5efa\u6a21\u200b\u3002\u200b\u961f\u5217\u200b\u4e2d\u200b\u5b9e\u4f53\u200b\u7684\u200b\u6570\u91cf\u200b\u662f\u200b\u4e00\u4e2a\u200b Markov \u200b\u94fe\u200b\u3002
"},{"location":"math/queue-theory/chapter-12/#_8","title":"\u751f\u706d\u200b\u8fc7\u7a0b","text":"\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b\u6309\u200b\u5982\u4e0b\u200b\u56fe\u200b\u8fdb\u884c\u200b\u63cf\u8ff0\u200b\uff08\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u56fe\u200b\uff09\uff1a
\u200b\u5047\u8bbe\u200b\u5b9e\u4f53\u200b\u79bb\u6563\u200b\u8fdb\u5165\u200b\u7684\u200b\\(M/M/s\\)\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u961f\u5217\u200b\u4e2d\u200b\u7684\u200b\u5b9e\u4f53\u200b\u6570\u91cf\u200b\u670d\u4ece\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b
"},{"location":"math/queue-theory/chapter-12/#poisson","title":"Poisson \u200b\u8fc7\u7a0b","text":"\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7684\u200b\u65f6\u95f4\u5dee\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u4e14\u200b\u670d\u4ece\u200b\u540c\u4e00\u200b\u6307\u6570\u5206\u5e03\u200b\u7684\u200b\u8fc7\u7a0b\u200b
"},{"location":"math/queue-theory/chapter-12/#_9","title":"\u751f\u706d\u200b\u8fc7\u7a0b","text":"\u200b\u5bf9\u4e8e\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u5047\u8bbe\u200b
- \u200b\u6bcf\u4e2a\u200b\u65f6\u523b\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b
- \u200b\u5b9a\u4e49\u200b\u7cfb\u7edf\u200b\u7684\u200b\u72b6\u6001\u200b\u4e3a\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u5b9e\u4f53\u200b\u6570\u91cf\u200b\\(n\\)
- \u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u7684\u200b\u72b6\u6001\u200b\u7531\u200b\\(n-1\\)\u200b\u8f6c\u53d8\u200b\u4e3a\u200b\\(n\\)
- \u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u7684\u200b\u72b6\u6001\u200b\u7531\u200b\\(n\\)\u200b\u8f6c\u53d8\u200b\u4e3a\u200b\\(n+1\\)
- \u200b\u7cfb\u7edf\u200b\u5904\u4e8e\u200b\u72b6\u6001\u200b\\(n\\)\u200b\u65f6\u200b\uff0c\u200b\u5b9a\u4e49\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7684\u200b\u901f\u5ea6\u200b\u4e3a\u200b\\(\\lambda _n\\)\uff0c\u200b\u7cfb\u7edf\u200b\u7684\u200b\u5904\u7406\u901f\u5ea6\u200b\u4e3a\u200b\\(\\mu_n\\)\u3002\u200b\u5bf9\u4e8e\u200b\\(\\lambda_n\\)\uff0c\\(n\\geq 0\\)\uff1b\u200b\u5bf9\u4e8e\u200b\\(\\mu_n\\)\uff0c\\(n>0\\)
\u200b\u95ee\u9898\u200b\uff1a\u200b\u7cfb\u7edf\u200b\u5904\u4e8e\u200b\u7a33\u5b9a\u200b\u72b6\u6001\u200b\u65f6\u200b\uff0c\u200b\u751f\u706d\u200b\u7cfb\u7edf\u200b\u5904\u4e8e\u200b\u72b6\u6001\u200b\\(n\\)\u200b\u7684\u200b\u6982\u7387\u200b\\(p_n\\)\uff1f
\u200b\u5bf9\u4e8e\u200b\u5904\u4e8e\u200b\u72b6\u6001\u200b\\(j\\)\u200b\u7684\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u8003\u5bdf\u200b\u4e00\u4e2a\u200b\u6781\u77ed\u200b\u7684\u200b\u65f6\u95f4\u200b\u95f4\u9694\u200b\\(\\Delta t\\)\uff0c\u200b\u7531\u4e8e\u200b\\(\\Delta t\\)\u200b\u6781\u77ed\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5ffd\u7565\u200b\\(\\Delta t\\)\u200b\u65f6\u95f4\u200b\u5185\u200b\u4e24\u4e2a\u200b\u5b9e\u4f53\u200b\u540c\u65f6\u200b\u8fdb\u5165\u200b/\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\u6216\u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u3001\u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\\(\\Delta t\\)\u200b\u65f6\u95f4\u200b\u5185\u200b\u7cfb\u7edf\u200b\u53d1\u751f\u53d8\u5316\u200b\u7684\u200b\u6982\u7387\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\uff1a\\(P(n(t+\\Delta t)=j+1 | n(t) = j)=\\lambda_j\\Delta t\\)
- \u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\uff1a\\(P(n(t+\\Delta t)=j-1| n(t) = j) = \\mu_j\\Delta t\\)
- \u200b\u7cfb\u7edf\u200b\u5728\u200b\\(\\Delta t\\)\u200b\u65f6\u95f4\u200b\u5185\u200b\u6ca1\u6709\u200b\u53d1\u751f\u200b\u72b6\u6001\u200b\u6539\u53d8\u200b\uff1a\\(P(n(t+\\Delta t) = j | n(t)=j) = 1 - (\\lambda_j+\\mu_j)\\Delta t\\)
\u200b\u6839\u636e\u200b\u5047\u8bbe\u200b\uff0c\u200b\u5904\u4e8e\u200b\u72b6\u6001\u200b\\(i\\)\u200b\u7684\u200b\u7cfb\u7edf\u200b\u5728\u200b\\(t+\\Delta t\\)\u200b\u65f6\u200b\u53ea\u200b\u53ef\u80fd\u200b\u5904\u4e8e\u200b\\(i-1, i, i+1\\)\u200b\u4e09\u79cd\u200b\u72b6\u6001\u200b\u4e2d\u200b\u7684\u200b\u4e00\u79cd\u200b\u3002\u200b\u4e5f\u200b\u5373\u200b\uff0c\u200b\u5904\u4e8e\u200b\u72b6\u6001\u200b\\(i\\)\u200b\u7684\u200b\u7cfb\u7edf\u200b\u5728\u200b\\(t-\\Delta t\\)\u200b\u65f6\u200b\u53ea\u200b\u53ef\u80fd\u200b\u5904\u4e8e\u200b\\(i-1, i, i+1\\)\u200b\u4e09\u79cd\u200b\u72b6\u6001\u200b\u4e2d\u200b\u7684\u200b\u4e00\u79cd\u200b\u3002\u200b\u7531\u6b64\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5217\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
\\[ \\begin{aligned} p_0(t+\\Delta t) &= (1-\\lambda_0\\Delta t)p_0(t) + \\mu_1\\Delta tp_1(t) \\\\ p_j(t+\\Delta t) &= \\lambda_{j-1}\\Delta tp_{j-1}(t)+(1-\\mu_j\\Delta t-\\lambda_j\\Delta t)p_j(t)+\\mu_{j+1}\\Delta tp_{j+1}(t) \\end{aligned} \\] \u200b\u6574\u7406\u200b\u540e\u53d6\u200b\u6781\u9650\u200b\\(\\Delta t\\rightarrow 0\\)\uff0c\u200b\u4e0a\u200b\u5f0f\u200b\u53d8\u4e3a\u200b\u5bfc\u6570\u200b\u5f62\u5f0f\u200b\uff1a
\\[ \\begin{aligned} &\\lim_{\\Delta t\\rightarrow 0} \\frac{p_j(t+\\Delta t)-p_j(t)}{\\Delta t}=\\lambda_{j-1}p_{j-1}(t)+\\mu_{j+1}p_{j+1}(t) - (\\mu_j+\\lambda_j)p_j(t) \\\\ \\Rightarrow &\\frac{\\mathrm dp_j(t)}{\\mathrm dt}=\\lambda_{j-1}p_{j-1}(t)+\\mu_{j+1}p_{j+1}(t) - (\\mu_j+\\lambda_j)p_j(t) \\end{aligned} \\] \u200b\u5f53\u200b\\(t\\rightarrow \\infty\\)\u200b\u65f6\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u8d8b\u4e8e\u200b\u7a33\u6001\u200b\uff0c\u200b\u5219\u200b\u6709\u200b\\(\\lim_{t\\rightarrow \\infty}p_j(t) = p_j\\)\uff0c\u200b\u6536\u655b\u200b\u7684\u200b\u5145\u5206\u200b\u5fc5\u8981\u6761\u4ef6\u200b\u4e3a\u200b\\(\\lim_{t\\rightarrow\\infty} \\frac{\\mathrm dp_j(t)}{\\mathrm dt}=0\\)\u3002\u200b\u5373\u200b\\(\\lambda_{j-1}p_{j-1}(t)+\\mu_{j+1}p_{j+1}(t) - (\\mu_j+\\lambda_j)p_j(t)=0\\)\u3002
\u200b\u89e3\u200b\\(p_{j+1}\\)\uff0c\u200b\u89e3\u5f97\u200b\uff1a
\\[ p_{j+1} = \\left(\\frac{\\mu_j+\\lambda_j}{\\mu_{j+1}}\\right)p_j-\\frac{\\lambda_{j-1}}{\\mu_{j+1}}p_{j-1} \\] \u200b\u5bf9\u4e8e\u200b\\(p_1\\)\uff0c\u200b\u6709\u200b\\(p_1=\\frac{\\lambda_0}{\\mu_1}p_0\\)\u3002
\u200b\u6839\u636e\u200b\u9012\u63a8\u200b\u516c\u5f0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200b\\(p_0\\)\u200b\u8868\u793a\u200b\u51fa\u200b\\(p_j\\)\uff1a
\\[ \\begin{aligned} p_2&=\\left(\\frac{\\mu_1+\\lambda_1}{\\mu_2}\\right)p_1-\\frac{\\lambda _0}{\\mu_2}p_0 = \\frac{\\lambda_0(\\mu_1+\\lambda_1)}{\\mu_1\\mu_2}p_0-\\frac{\\lambda_0}{\\mu_2}p_0=\\frac{\\lambda_0\\lambda_1}{\\mu_1\\mu_2}p_0 \\\\ p_3&=\\left(\\frac{\\mu_2+\\lambda_2}{\\mu_3}\\right)p_2-\\frac{\\lambda_1}{\\mu_3}p_1=\\frac{\\lambda_0\\lambda_1(\\mu_2+\\lambda_2)}{\\mu_1\\mu_2\\mu_3}p_0-\\frac{\\lambda_0\\lambda_1}{\\mu_1\\mu_3}p_0=\\frac{\\lambda_0\\lambda_1\\lambda_2}{\\mu_1\\mu_2\\mu_3}p_0 \\\\ &\\vdots \\\\ &p_j = \\frac{\\lambda_0\\lambda_1\\cdots\\lambda_{j-1}}{\\mu_1\\mu_2\\cdots\\mu_j}p_0=p_0\\prod_{i = 1}^{j}\\frac{\\lambda_{i-1}}{\\mu_i} \\end{aligned} \\] \u200b\u7531\u4e8e\u200b\u7cfb\u7edf\u200b\u7684\u200b\u72b6\u6001\u200b\u53ea\u200b\u53ef\u80fd\u200b\u53d6\u200b\\(0\\sim\\infty\\)\u200b\u4e4b\u95f4\u200b\u7684\u200b\u6574\u6570\u200b\u503c\u200b\uff0c\u200b\u6982\u7387\u200b\u4e4b\u200b\u548c\u200b\u4e3a\u200b\\(1\\)\uff0c\u200b\u53ef\u4ee5\u200b\u8ba1\u7b97\u200b\u51fa\u200b\\(p_0\\)\uff1a
\\[ p_0=\\frac{1}{1+\\sum_{n=1}^\\infty \\prod_{i=0}^{n}\\frac{\\lambda_{i-1}}{\\mu_i}} \\]"},{"location":"math/queue-theory/chapter-12/#mm1","title":"M/M/1\u200b\u961f\u5217","text":"\u200b\u5bf9\u4e8e\u200b\\(M/M/1\\)\u200b\u7cfb\u7edf\u200b\uff0c\\(\\lambda_0=\\lambda_1=\\cdots=\\lambda_n=\\lambda, \\mu_1=\\cdots=\\mu_n=\\mu\\)\u3002
\u200b\u7531\u6b64\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u51fa\u200b\\(M/M/1\\)\u200b\u7cfb\u7edf\u200b\u5728\u200b\u7a33\u6001\u200b\u65f6\u200b\u5904\u4e8e\u200b\\(p_0\\)\u200b\u7684\u200b\u6982\u7387\u200b\uff1a
\\[ p_0=\\frac{1}{1+\\sum_{n=1}^\\infty \\prod_{i=0}^{n}\\frac{\\lambda}{\\mu}} = \\frac{1}{1+\\sum_{n=1}^\\infty \\rho^n}=\\frac{1}{\\sum_{n=0}^\\infty \\rho^n}=1-\\rho \\] \u200b\u6982\u7387\u5206\u5e03\u200b\u4e3a\u200b\uff1a\\(P(N=n)=\\rho^n(1-\\rho)\\)
"},{"location":"math/queue-theory/chapter-12/#mms","title":"M/M/s\u200b\u961f\u5217","text":"\u200b\u5bf9\u4e8e\u200b\\(M/M/s\\)\u200b\u7cfb\u7edf\u200b\uff0c\\(\\lambda_i, \\mu_i\\)\u200b\u670d\u4ece\u200b\u5982\u4e0b\u200b\u89c4\u5f8b\u200b\uff1a
- \\(\\lambda_i = \\lambda \\qquad i=0, 1\\cdots, \\infty\\)
- \\(\\mu_i = \\max\\{i, s\\}\\mu \\qquad i=1, 2, \\cdots, \\infty\\)
\u200b\u8ba1\u7b97\u200b\u51fa\u200b\\(M/M/s\\)\u200b\u7cfb\u7edf\u200b\u5728\u200b\u7a33\u6001\u200b\u65f6\u200b\u5904\u4e8e\u200b\\(p_0\\)\u200b\u7684\u200b\u6982\u7387\u200b\uff0c\u200b\u4ee4\u200b\\(\\rho_0=\\frac{\\lambda}{\\mu}\\)\uff1a
\\[ \\begin{aligned} p_0&=\\frac{1}{1+\\sum_{n=1}^\\infty \\prod_{i=0}^{n}\\frac{\\lambda}{\\max\\{i, s\\}\\mu}} \\\\ &= \\frac{1}{\\sum_{i=0}^{s-1}\\frac{\\rho_0^i}{i!}+\\sum_{i=s}^\\infty \\frac{\\rho_0^i}{s!s^{i-s}}} \\\\ &=\\frac{1}{\\sum_{i=0}^{s-1}\\frac{\\rho_0^i}{i!}+\\frac{\\rho_0^s}{s!}\\sum_{i=0}^\\infty \\frac{\\rho_0^i}{s^i}} \\\\ &=\\frac{1}{\\sum_{i=0}^{s-1}\\frac{\\rho_0^i}{i!}+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}} \\end{aligned} \\] \u200b\u8bbe\u200b\\(\\sum_{i=0}^{s-1}\\frac{\\rho_0^i}{i!}=T\\)\uff0c\\(p_i\\)\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\\(p_0\\)\u200b\u63a8\u5bfc\u200b\u5f97\u200b\uff1a
\\[ p_i=\\frac{\\lambda_0\\lambda_1\\cdots\\lambda_{i-1}}{\\mu_1\\mu_2\\cdots\\mu_i}p_0=\\left\\{ \\begin{aligned} & \\frac{\\rho_0^i}{i!}p_0=\\frac{\\rho_0^i}{i!\\left(T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}\\right)} & i\\leq s \\\\ & \\frac{\\rho_0^i}{s!s^{i-s}}p_0=\\frac{\\rho_0^i}{s!s^{i-s}\\left(T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}\\right)} & i > s \\end{aligned} \\right. \\] \u200b\u5f53\u200b\\(n \\geq s\\)\u200b\u65f6\u200b\uff0c\u200b\u987e\u5ba2\u200b\u5230\u8fbe\u200b\u7cfb\u7edf\u200b\u65f6\u200b\u9700\u8981\u200b\u7b49\u5f85\u200b\uff0c\u200b\u5219\u200b\u6709\u200b\uff1a
\\[ p_D=\\sum_{i=s}^\\infty p_i= \\sum_{i=s}^\\infty \\frac{\\rho^i_0}{s!s^{i-s}}p_0 = \\frac{\\rho^s_0p_0}{(s-1)!(s-\\rho_0)}=\\frac{\\rho^s_0}{(s-1)!(s-\\rho_0)T+\\rho_0^s} \\] \u200b\u5f53\u200b\\(N\\leq s\\)\u200b\u65f6\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u6ca1\u6709\u200b\u961f\u5217\u200b\uff0c\\(L_q=0\\)\uff0c\u200b\u5f53\u200b\\(N>s\\)\u200b\u65f6\u200b\uff0c\u200b\u961f\u5217\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(N-s\\)\uff0c\u200b\u56e0\u6b64\u200b\u7a33\u6001\u200b\u65f6\u200b\u7684\u200b\u5e73\u5747\u200b\u6392\u961f\u200b\u957f\u4e3a\u200b\uff1a
\\[ \\begin{aligned} L_q&=\\sum_{i=s + 1}^\\infty (i - s)p_i \\\\ &=\\sum_{i=s}^\\infty (i-s)\\frac{\\rho^i_0}{s!s^{i-s}}p_0 \\\\ &= \\frac{\\rho^s_0p_0}{s!}\\sum_{i=0}^\\infty \\frac{i\\rho_0^i}{s^i} \\\\ &= \\frac{\\rho^s_0p_0}{s!}\\sum_{i=1}^\\infty \\left(\\frac{\\rho_0}{s}\\right)^i\\frac{s}{s-\\rho_0} \\\\ &= \\frac{\\rho^s_0p_0}{(s-1)!(s-\\rho)}\\frac{\\rho_0/s}{1-\\rho_0/s} \\\\ &= \\frac{\\rho^{s+1}_0p_0}{(s-1)!(s-\\rho_0)^2} \\end{aligned} \\] \u200b\u72b6\u6001\u200b\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u7a33\u6001\u200b\u65f6\u200b\u7cfb\u7edf\u200b\u63a5\u53d7\u200b\u670d\u52a1\u200b\u7684\u200b\u5b9e\u4f53\u200b\u6570\u91cf\u200b\u4e3a\u200b\uff1a
\\[ \\left\\{ \\begin{aligned} &n & n\\leq s \\\\ &s & n> s \\end{aligned} \\right . \\] \u200b\u56e0\u6b64\u200b\uff0c\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u63a5\u53d7\u200b\u670d\u52a1\u200b\u7684\u200b\u5b9e\u4f53\u200b\u5e73\u5747\u200b\u6570\u91cf\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} L-L_q&=\\sum_{i=0}^s ip_i+\\sum_{i=s+1}^\\infty sp_i \\\\ &=\\sum_{i=0}^s \\frac{\\rho_0^i}{(i-1)!}p_0+s\\sum_{i=s+1}^\\infty \\frac{\\rho_0^i}{s!s^{i-s}}p_0 \\\\ &= \\sum_{i=0}^s \\frac{\\rho_0^i}{(i-1)!}p_0 + \\frac{\\rho_0^sp_0}{(s-1)!}\\sum_{i=1}^\\infty \\frac{\\rho_0^i}{s^i} \\\\ &= \\sum_{i=0}^s \\frac{\\rho_0^i}{(i-1)!}p_0 + \\frac{\\rho_0^{s+1}p_0}{(s-1)!(s-\\rho_0)} \\\\ &= \\frac{\\sum_{i=0}^s \\frac{\\rho_0^i}{(i-1)!}}{\\left(T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}\\right)} + \\frac{\\rho_0^{s+1}p_0}{(s-1)!(s-\\rho_0)} \\\\ &= \\frac{\\rho_0 T+1}{T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}} + \\frac{\\rho_0^{s+1}}{(s-1)!(s-\\rho_0)T+\\rho_0^s} \\\\ &= \\frac{(\\rho_0 T+1)(s-1)!(s-\\rho_0) + \\rho_0^{s+1}}{(s-1)!(s-\\rho_0)T+\\rho_0^s}\\\\ &= \\rho_0 + \\frac{(s-1)!(s-\\rho_0)}{(s-1)!(s-\\rho_0)T+\\rho_0^s} \\end{aligned} \\] \u200b\u987e\u5ba2\u200b\u7684\u200b\u5e73\u5747\u200b\u9017\u7559\u200b\u65f6\u95f4\u200b\\(W=\\frac{L}{\\lambda}\\)\uff1a
\\[ \\begin{aligned} W&=\\frac{L}{\\lambda} \\\\ &= \\frac{\\sum_{i=0}^\\infty ip_i}{\\lambda} \\\\ &= \\frac{\\sum_{i=1}^s \\left(\\frac{\\rho_0^i}{(i-1)!\\left(T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}\\right)}\\right) + \\sum_{i=s+1}^\\infty \\left(i\\frac{\\rho_0^i}{s!s^{i-s}\\left(T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}\\right)}\\right) }{\\lambda} \\\\ &= \\frac{\\frac{T(s-1)!(s-\\rho_0)}{T(s-1)!(s-\\rho_0) + \\rho_0^s} + \\frac{\\rho_0^{s+1}(s-\\rho_0+1)/(s-\\rho_0)}{T(s-1)!(s-\\rho_0) + \\rho_0^s}}{\\lambda} \\\\ &= \\frac{T(s-1)!(s-\\rho_0) + \\rho_0^{s+1}(s-\\rho_0+1)/(s-\\rho_0)}{\\lambda(T(s-1)!(s-\\rho_0) + \\rho_0^s)} \\end{aligned} \\]"},{"location":"math/random-process/","title":"\u968f\u673a\u200b\u8fc7\u7a0b","text":" - \u200b\u9884\u5907\u200b\u77e5\u8bc6\u200b
- \u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b
- \u200b\u8bb0\u53f7\u200b
"},{"location":"math/random-process/basics/","title":"\u9884\u5907\u200b\u77e5\u8bc6","text":""},{"location":"math/random-process/basics/#_2","title":"\u53ef\u6d4b\u200b\u7a7a\u95f4\u200b\u3001\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b\u4e0e\u200b\u6982\u7387\u200b\u6d4b\u5ea6","text":"\\(\\renewcommand{\\geq}{\\geqslant}\\renewcommand{\\leq}{\\leqslant}\\) \u200b\u5f53\u200b\u4e00\u4e2a\u200b\u8bd5\u9a8c\u200b\u7684\u200b\u7ed3\u679c\u200b\u65e0\u6cd5\u200b\u9884\u5148\u786e\u5b9a\u200b\u65f6\u200b\uff0c\u200b\u79f0\u8be5\u200b\u5b9e\u9a8c\u200b\u4e3a\u200b\u968f\u673a\u200b\u8bd5\u9a8c\u200b\u3002\u200b\u968f\u673a\u200b\u8bd5\u9a8c\u200b\u53ef\u80fd\u200b\u51fa\u73b0\u200b\u7684\u200b\u6240\u6709\u200b\u7ed3\u679c\u200b\u96c6\u5408\u200b\u6784\u6210\u200b\u6837\u672c\u7a7a\u95f4\u200b\\(\\Omega\\)\uff0c\u200b\u6bcf\u4e2a\u200b\u53ef\u80fd\u200b\u7684\u200b\u7ed3\u679c\u200b\u79f0\u4e3a\u200b\u6837\u672c\u200b\u70b9\u200b\\(\\omega\\)\u3002\\(\\Omega\\)\u200b\u7684\u200b\u5b50\u96c6\u200b\u6784\u6210\u200b\u7684\u200b\u96c6\u5408\u200b\u79f0\u4e3a\u200b\u96c6\u7c7b\u200b\\(\\mathcal F\\)\u3002
\u200b\u53ef\u6d4b\u200b\u7a7a\u95f4\u200b
\u200b\u8bbe\u200b\\(\\mathcal F\\)\u200b\u4e3a\u200b\u7531\u200b\\(\\Omega\\)\u200b\u7684\u200b\u67d0\u4e9b\u200b\u5b50\u96c6\u200b\u6784\u6210\u200b\u7684\u200b\u975e\u200b\u7a7a\u96c6\u200b\u7c7b\u200b\uff0c\u200b\u82e5\u200b\u6ee1\u8db3\u200b\u4ee5\u4e0b\u200b\u6761\u4ef6\u200b\uff1a
- \u200b\u82e5\u200b\\(A\\in \\mathcal F\\)\uff0c\u200b\u5219\u200b\\(A^C = \\Omega - A\\in \\mathcal F\\)\u3002
- \u200b\u82e5\u200b\\(A_n\\in \\mathcal F\\)\uff0c\u200b\u5219\u200b\\(\\bigcup\\limits_{n=1}^\\infty A_n \\in \\mathcal F\\)
\u200b\u79f0\u200b\\(\\mathcal F\\)\u200b\u4e3a\u200b\\(\\sigma\\)\u200b\u57df\u200b\uff0c\\((\\Omega, \\mathcal F)\\)\u200b\u4e3a\u200b\u53ef\u6d4b\u200b\u7a7a\u95f4\u200b\u3002
\\(\\sigma\\)\u200b\u57df\u200b\\(\\mathcal F\\)\u200b\u5bf9\u200b\\(\\cap, \\cup, -\\)\u200b\u8fd0\u7b97\u200b\u5c01\u95ed\u200b\uff0c\u200b\u4efb\u4f55\u200b\u5143\u7d20\u200b\u7ecf\u8fc7\u200b\u53ef\u5217\u6b21\u200b\u8fd0\u7b97\u200b\u540e\u200b\u4ecd\u200b\u5c5e\u4e8e\u200b\\(\\mathcal F\\)\u3002
\u200b\u5bf9\u4e8e\u200b\u96c6\u7c7b\u200b\\(\\mathcal A\\)\uff0c\u200b\u5305\u542b\u200b\\(\\mathcal A\\)\u200b\u7684\u200b\\(\\sigma\\)\u200b\u57df\u200b\u7684\u200b\u4ea4\u200b\u79f0\u4e3a\u200b\\(\\mathcal A\\)\u200b\u751f\u6210\u200b\u7684\u200b\\(\\sigma\\)\u200b\u57df\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\sigma(\\mathcal A)\\)\u3002\u200b\u5982\u200b\uff1a\\(\\sigma(\\{\\varnothing, A, \\Omega\\}) = \\{\\varnothing, A, A^C, \\Omega\\}\\)\u3002\u200b\u7279\u6b8a\u200b\u5730\u200b\uff0c\u200b\u8bb0\u200b\\(\\mathcal B = \\sigma(\\{(-\\infty, \\alpha], \\forall \\alpha \\in \\mathbb R\\})\\)\u200b\u4e3a\u200bBorel\u200b\u57df\u200b\u3002Borel\u200b\u57df\u200b\u89e3\u51b3\u200b\u4e86\u200b\u6837\u672c\u7a7a\u95f4\u200b\u5728\u200b\\(\\mathbb R\\)\u200b\u4e0a\u200b\u8fde\u7eed\u200b\u7684\u200b\u95ee\u9898\u200b\u3002\u200b\u53ef\u4ee5\u200b\u8bc1\u660e\u200b\uff0c\\(\\forall a < b, [a, b]\\in \\mathcal B, (a, b]\\in \\mathcal B, [a, b)\\in \\mathcal B, (a, b)\\in \\mathcal B\\)\u3002\u200b\u5b9a\u4e49\u200b\\(\\mathcal B[a, b]\\)\u200b\u4e3a\u200b\u9650\u5236\u200b\u5728\u200b\\([a, b]\\)\u200b\u4e0a\u200b\u7684\u200bBorel\u200b\u57df\u200b\u3002
\u200b\u6982\u7387\u200b\u6d4b\u5ea6\u200b\u4e0e\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b
\u200b\u8bbe\u200b\\((\\Omega, \\mathcal F)\\)\u200b\u4e3a\u200b\u53ef\u6d4b\u200b\u7a7a\u95f4\u200b\uff0c\\(P: \\mathcal F\\rightarrow [0, 1]\\)\u200b\u4e3a\u200b\u5b9a\u4e49\u200b\u5728\u200b\\(\\mathcal F\\)\u200b\u4e0a\u200b\u7684\u200b\u96c6\u200b\u51fd\u6570\u200b\u3002\u200b\u4e14\u200b\\(P\\)\u200b\u6ee1\u8db3\u200b
- \u200b\u975e\u200b\u8d1f\u6027\u200b\uff1a\\(\\forall A\\in \\mathcal F, P(A)\\geq 0\\)
- \u200b\u89c4\u4e00\u6027\u200b\uff1a\\(P(\\Omega) = 1\\)
-
\u200b\u53ef\u5217\u200b\u53ef\u52a0\u6027\u200b\uff1a\u200b\u82e5\u200b\\(\\forall i\\in \\mathbb N, A_i\\in \\mathcal F\\)\uff0c\u200b\u4e14\u200b\\(\\forall i\\not = j, A_i\\cap A_j=\\varnothing\\)\uff0c\u200b\u5219\u200b
\\[ P\\left(\\bigcup_{n=0}^\\infty A_n\\right) = \\sum_{n=0}^\\infty P(A_n) \\]
\u200b\u79f0\u200b\\(P\\)\u200b\u4e3a\u200b\u53ef\u6d4b\u200b\u7a7a\u95f4\u200b\\((\\Omega, \\mathcal F)\\)\u200b\u4e0a\u200b\u7684\u200b\u6982\u7387\u200b\u6d4b\u5ea6\u200b\uff0c\\((\\Omega, \\mathcal F, P)\\)\u200b\u4e3a\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b\u3002\\(\\mathcal F\\)\u200b\u4e3a\u200b\u4e8b\u4ef6\u200b\u57df\u200b\uff0c\\(A\\in \\mathcal F\\)\u200b\u4e3a\u200b\uff08\u200b\u968f\u673a\u200b\uff09\u200b\u4e8b\u4ef6\u200b
\u200b\u6982\u7387\u200b\u6d4b\u5ea6\u200b\\(P\\)\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \u200b\u6709\u9650\u200b\u53ef\u52a0\u6027\u200b\uff1a\u200b\u53ef\u4ee5\u200b\u4ee4\u200b\\(A_{n+1} = A_{n+2} = \\cdots = \\varnothing\\)\uff0c\u200b\u7ed3\u5408\u200b\u53ef\u5217\u200b\u53ef\u52a0\u6027\u200b\u63a8\u51fa\u200b
- \\(P(A^C) = 1 - P(A)\\)
- \\(P(\\varnothing) = 0\\)
- \u200b\u96c6\u5408\u200b\u7684\u200b\u5305\u542b\u200b\u5173\u7cfb\u200b\uff1a\\(A\\subset B\\Rightarrow P(A)\\leq P(B)\\)
-
\u200b\u5bb9\u65a5\u200b\u539f\u7406\u200b\uff1a
\\[ P\\left(\\bigcup_{i=1}^n A_i\\right) = \\sum_{i=1}^n P(A_i) - \\sum_{1\\leq i < j\\leq n}P(A_i\\cap A_j) + \\cdots + (-1)^{n+1}P(A_1\\cap \\cdots \\cap A_n) \\] - \\(P(A\\cup B) = P(A) + P(B) - P(A\\cap B)\\)
- \\(P(A - B) = P(A\\cup B) - P(B) = P(A) - P(A\\cap B)\\)
- \\(P\\left(\\bigcup_{i=1}^n A_i\\right)\\leq \\sum_{i=1}^n P(A_i)\\)
\u200b\u6ee1\u8db3\u200b\\(A_n\\subset A_{n+1}\\)\u200b\u7684\u200b\u4e8b\u4ef6\u200b\u5217\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u79f0\u4e3a\u200b\u5355\u8c03\u200b\u589e\u200b\u5e8f\u5217\u200b\uff0c\u200b\u6ee1\u8db3\u200b\\(A_n\\supset A_{n+1}\\)\u200b\u7684\u200b\u4e8b\u4ef6\u200b\u5217\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u79f0\u4e3a\u200b\u5355\u8c03\u200b\u51cf\u200b\u5e8f\u5217\u200b\u3002\u200b\u7531\u6b64\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u4e8b\u4ef6\u200b\u5217\u200b\u7684\u200b\u6781\u9650\u200b\uff1a
- \u200b\u82e5\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u4e3a\u200b\u5355\u8c03\u200b\u589e\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5219\u200b\\(\\lim\\limits_{n\\rightarrow \\infty}A_n = \\bigcup_{i=1}^\\infty A_i\\)
- \u200b\u82e5\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u4e3a\u200b\u5355\u8c03\u200b\u51cf\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5219\u200b\\(\\lim\\limits_{n\\rightarrow \\infty}A_n = \\bigcap_{i=1}^\\infty A_i\\)
\u200b\u4e8b\u4ef6\u200b\u5217\u200b\u7684\u200b\u6781\u9650\u200b\u6ee1\u8db3\u200b
\\[ \\lim_{n\\rightarrow\\infty}P(A_n) = P\\left(\\lim_{n\\rightarrow\\infty} A_n\\right) \\] \u200b\u53ef\u4ee5\u200b\u8bc1\u660e\u200b\uff0c\u200b\u5355\u70b9\u200b\u96c6\u200b\\(\\{a\\}\\)\u200b\u4e3a\u200b\u4e8b\u4ef6\u200b\u5217\u200b\\(\\{[a, a+1/n], n > 0\\}\\)\u200b\u7684\u200b\u6781\u9650\u200b\u3002
Borel-Cantelli\u200b\u5f15\u7406\u200b
\u200b\u8bbe\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u4e3a\u200b\u4e8b\u4ef6\u200b\u5e8f\u5217\u200b\uff0c\u200b\u6ee1\u8db3\u200b\\(\\sum_{i=1}^\\infty P(A_i) < \\infty\\)\uff0c\u200b\u5219\u200b
\\[ P\\left(\\lim_{i\\rightarrow\\infty}\\sup A_i\\right) \\triangleq P\\left(\\bigcap_{n=1}^\\infty \\bigcup_{i=n}^\\infty A_i\\right) = 0 \\] \u200b\u5b9a\u4e49\u200b\u6761\u4ef6\u200b\u6982\u7387\u200b
\\[ P(A|B) = \\frac{P(A\\cap B)}{P(B)} \\] \u200b\u82e5\u200b\u4e8b\u4ef6\u200b\\(A, B\\)\u200b\u6ee1\u8db3\u200b\\(P(A\\cap B) = P(A)P(B)\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\u4e8b\u4ef6\u200b\\(A, B\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\uff0c\u200b\u4e14\u200b\\(P(A|B) = P(A)\\)\u3002\u200b\u540c\u7406\u200b\u53ef\u4ee5\u200b\u63a8\u5e7f\u200b\u81f3\u200b\\(n\\)\u200b\u4e2a\u200b\u4e8b\u4ef6\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\u200b\u8bbe\u200b\\(A_1, \\cdots, A_n\\in \\mathcal F\\)\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u5176\u4e2d\u200b\u4efb\u610f\u200b\\(k\\)\u200b\u4e2a\u200b\u4e8b\u4ef6\u200b\uff0c\u200b\u90fd\u200b\u6709\u200b
\\[ P(A_{i_1}\\cap\\cdots\\cap A_{i_k}) = P(A_{i_1})\\cdots P(A_{i_k}) \\] \u200b\u79f0\u200b\\(A_1, \\cdots, A_n\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u3002
\u200b\u82e5\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u4e3a\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u7684\u200b\u4e8b\u4ef6\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e14\u200b\\(\\sum_{n=1}^\\infty P(A_n) = \\infty\\)\uff0c\u200b\u5219\u200b
\\[ P\\left(\\lim_{i\\rightarrow\\infty}\\sup A_i\\right) \\triangleq P\\left(\\bigcap_{n=1}^\\infty \\bigcup_{i=n}^\\infty A_i\\right) = 1 \\]"},{"location":"math/random-process/basics/#_3","title":"\u968f\u673a\u53d8\u91cf\u200b\u4e0e\u200b\u5206\u5e03\u200b\u51fd\u6570","text":"\u200b\u8bbe\u200b\u6837\u672c\u7a7a\u95f4\u200b\u4e3a\u200b\\(\\Omega\\)\u3002
"},{"location":"math/random-process/basics/#_4","title":"\u968f\u673a\u53d8\u91cf","text":"\u200b\u8bbe\u200b\\((\\Omega, \\mathcal F, P)\\)\u200b\u4e3a\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b\uff0c\\(X(\\omega)\\)\u200b\u4e3a\u200b\u5b9a\u4e49\u200b\u5728\u200b\\(\\Omega\\)\u200b\u4e0a\u200b\u7684\u200b\u5355\u503c\u200b\u5b9e\u200b\u51fd\u6570\u200b\uff0c\u200b\u5373\u200b\\(X: \\Omega\\rightarrow \\mathbb R\\)\uff0c\u200b\u82e5\u200b\\(\\forall a\\in \\mathbb R\\)\uff0c\u200b\u6709\u200b\\(\\{\\omega: X(\\omega) \\leq a\\}\\in \\mathcal F\\)\uff0c\u200b\u79f0\u200b\\(X(\\omega)\\)\u200b\u4e3a\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u7b80\u8bb0\u200b\u4e3a\u200b\\(X\\)\u3002\u200b\u5b9a\u4e49\u200b\\(F(x) = P(X\\leq x) = P(X\\in (-\\infty, X])\\)\u200b\u4e3a\u200b\\(X\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b\u3002
- \u200b\u79bb\u6563\u200b\u578b\u200b\u968f\u673a\u53d8\u91cf\u200b\uff1a\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X\\)\u200b\u7684\u200b\u53ef\u80fd\u200b\u53d6\u503c\u200b\u7684\u200b\u5168\u4f53\u200b\u662f\u200b\u53ef\u5217\u96c6\u200b\u6216\u8005\u200b\u6709\u9650\u200b\u96c6\u200b\u3002
-
\u200b\u8fde\u7eed\u578b\u200b\u968f\u673a\u53d8\u91cf\u200b\uff1a\u200b\u82e5\u200b\\(\\forall B\\in \\mathcal F\\)\uff0c\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\\(f(x)\\)\u200b\u6ee1\u8db3\u200b
\\[ P(X\\in B) = \\int_B f(x)\\mathrm dx \\] \u200b\u79f0\u200b\\(X\\)\u200b\u4e3a\u200b\u8fde\u7eed\u578b\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\\(f(x)\\)\u200b\u4e3a\u200b\\(X\\)\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u3002
\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u4e0e\u200b\u6982\u7387\u5206\u5e03\u200b\u51fd\u6570\u200b
\u200b\u6839\u636e\u200b\u6982\u7387\u5206\u5e03\u200b\u51fd\u6570\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u6709\u200b
\\[ P(x < X\\leq x + h) = F(x + h) - F(x) = \\int_{x}^{x + h} f(x)\\mathrm dx = f(x)h + o(h) \\] \u200b\u4ee4\u200b\\(h\\rightarrow 0\\)\u200b\u5e76\u53d6\u200b\u6781\u9650\u200b\uff0c\u200b\u5f97\u5230\u200b
\\[ \\frac{\\mathrm dF(x)}{\\mathrm dx} = \\lim_{h\\rightarrow 0} \\frac{F(x + h) - F(x)}{h} = f(x) \\] \u200b\u5bf9\u4e8e\u200b\u4e8c\u7ef4\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X, Y\\)\uff0c\u200b\u5b9a\u4e49\u200b\u8054\u5408\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(F(x, y) = P(X\\leq x, Y\\leq y)\\)\uff0c\u200b\u8fb9\u7f18\u200b\u5206\u5e03\u200b\u4e3a\u200b\\(F_X(x) = P(X\\leq x), F_Y = P(Y\\leq y)\\)\u3002\u200b\u540c\u7406\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\\(f(x, y)\\)\uff1a
\\[ F(x, y) = \\int_{-\\infty}^x\\int_{-\\infty}^y f(v, u)\\mathrm du\\mathrm dv \\] \u200b\u82e5\u200b\\(F(x, y) = F_X(x)F_Y(y)\\)\uff0c\u200b\u79f0\u200b\\(X\\)\u200b\u4e0e\u200b\\(Y\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u3002
"},{"location":"math/random-process/basics/#_5","title":"\u6570\u5b57\u200b\u7279\u5f81","text":"\u200b\u8bbe\u200b\\(X\\)\u200b\u4e3a\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(F(x)\\)\uff0c\u200b\u82e5\u200b\\(\\int_{-\\infty}^\\infty |x|\\mathrm dF(x)\\)\u200b\u5b58\u5728\u200b\uff0c\u200b\u5219\u200b\u5b9a\u4e49\u200b\\(X\\)\u200b\u7684\u200b\u671f\u671b\u200b\\(E(X)\\)\u200b\u4e3a\u200b
\\[ E(X) = \\int_{-\\infty}^\\infty x\\mathrm dF(x) \\] \u200b\u6570\u5b66\u200b\u671f\u671b\u200b\\(E(X)\\)\u200b\u6ee1\u8db3\u200b
\u200b\u5bf9\u4e8e\u200b\u79bb\u6563\u200b\u578b\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u6709\u200b
\\[ E(X) = \\sum_{i=1}^\\infty x_nP(X = x_n) \\] \u200b\u5bf9\u4e8e\u200b\u8fde\u7eed\u578b\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u6709\u200b
\\[ E(X) = \\int_{-\\infty}^\\infty xf(x)\\mathrm dx \\] \u200b\u82e5\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X, Y\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\uff0c\u200b\u5219\u200b\u6709\u200b
\\[ \\begin{aligned} E(XY) &= \\int_{-\\infty}^\\infty \\int_{-\\infty}^\\infty xyf(x, y)\\mathrm dx\\mathrm dy \\\\ &= \\int_{-\\infty}^\\infty \\int_{-\\infty}^\\infty xyf_X(x)f_Y(y)\\mathrm dx\\mathrm dy \\\\ &= \\int_{-\\infty}^\\infty xf_X(x)\\mathrm dx\\int_{-\\infty}^\\infty yf_Y(y)\\mathrm dy \\\\ &= E(X)E(Y) \\end{aligned} \\] \u200b\u5b9a\u4e49\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X\\)\u200b\u7684\u200b\u65b9\u5dee\u200b\u4e3a\u200b\\(\\sigma_X^2 = D(X) = E(X - E(X)) = E(X^2) - E^2(X)\\)\uff0c\u200b\u5b9a\u4e49\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X, Y\\)\u200b\u7684\u200b\u534f\u65b9\u5dee\u200b\u4e3a\u200b\\(\\mathrm{cov}(X, Y) = E(XY) - E(X)E(Y)\\)\uff0c\u200b\u76f8\u5173\u7cfb\u6570\u200b\u4e3a\u200b\\(\\rho = \\mathrm{cov}(X, Y) / (\\sigma_X\\sigma_Y)\\)\uff0c\\(k\\)\u200b\u9636\u77e9\u200b\u4e3a\u200b\\(E(X^k)\\)
\u200b\u5b9a\u4e49\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X\\)\u200b\u7684\u200b\u77e9\u6bcd\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(\\psi(t) = E\\left(e^{tX}\\right)\\)\uff0c\u200b\u7279\u5f81\u51fd\u6570\u200b\u4e3a\u200b\\(\\phi(t) = E\\left(e^{\\mathbf itX}\\right)\\)
\u200b\u77e9\u6bcd\u200b\u51fd\u6570\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \\(E\\left(X^k\\right) = \\psi^{(k)}(0)\\)
- \u200b\u8bbe\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X, Y\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(F_X(t), F_Y(t)\\)\uff0c\u200b\u77e9\u6bcd\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(\\psi_X(t), \\psi_Y(t)\\)\uff0c\u200b\u5219\u200b\\(\\psi_X(t) = \\psi_Y(t) \\Leftrightarrow F_X(t) = F_Y(t)\\)
\u200b\u7279\u5f81\u51fd\u6570\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \u200b\u8bbe\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X, Y\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(F_X(t), F_Y(t)\\)\uff0c\u200b\u7279\u5f81\u51fd\u6570\u200b\u4e3a\u200b\\(\\phi_X(t), \\phi_Y(t)\\)\uff0c\u200b\u5219\u200b\\(\\phi_X(t) = \\phi_Y(t) \\Leftrightarrow F_X(t) = F_Y(t)\\)
- \\(i^kE(X^k) = \\phi^{(k)}(0)\\)
- \u200b\u82e5\u200b\\(X, Y\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\uff0c\u200b\u6709\u200b\\(\\phi_{X+Y}(t) = \\phi_{X}(t) + \\phi_{Y}(t)\\)
"},{"location":"math/random-process/basics/#_6","title":"\u5e38\u89c1\u200b\u968f\u673a\u53d8\u91cf\u200b\u7684\u200b\u5206\u5e03","text":" -
\u200b\u4e8c\u9879\u5206\u5e03\u200b\uff1a\\(X\\sim B(n, p)\\)
\\[ P(X = k) = \\binom{n}{k} p^k(1 - p)^{n - k} \\] -
\u200b\u6cca\u677e\u200b\u5206\u5e03\u200b\uff1a\\(X\\sim P(\\lambda)\\)
\\[ P(X = k) = \\frac{\\lambda^k}{k!}e^{-\\lambda} \\] -
\u200b\u51e0\u4f55\u200b\u5206\u5e03\u200b\uff1a\\(X\\sim G(p)\\)
\\[ P(X = k) = (1 - p)^{k - 1}p \\] -
\u200b\u5747\u5300\u5206\u5e03\u200b\uff1a\\(X\\sim U(a, b)\\)
\\[ f(x) = \\left\\{\\begin{aligned} & \\frac{1}{b-a} & a < x < b \\\\ & 0 & \\text{otherwise} \\end{aligned}\\right. \\] -
\u200b\u6b63\u6001\u5206\u5e03\u200b\uff1a\\(X\\sim N(\\mu, \\sigma^2)\\)
\\[ f(x) = \\frac{1}{\\sqrt{2\\pi}\\sigma} e^{-\\frac{(x-\\mu)^2}{2\\sigma^2}} \\] -
\u200b\u6307\u6570\u5206\u5e03\u200b\uff1a\\(X\\sim E(\\lambda)\\)
\\[ f(x) = \\left\\{\\begin{aligned} & \\lambda e^{-\\lambda x} & x\\geq 0 \\\\ & 0 & x < 0 \\end{aligned}\\right. \\]
"},{"location":"math/random-process/basics/#_7","title":"\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b","text":"\u200b\u5bf9\u4e8e\u200b\u8fde\u7eed\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b\u200b\\(E(X|Y = y)\\)\u200b\u7684\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
\\[ E(X|Y = y) = \\int_{-\\infty}^\\infty x\\frac{f(x, y)}{f_Y(y)}\\mathrm dx \\] \u200b\u5b9a\u4e49\u200b\\(E(X|Y)\\)\u200b\u4e3a\u200b\\(X\\)\u200b\u5173\u4e8e\u200b\\(Y\\)\u200b\u7684\u200b\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b\u200b
\\[ E(X|Y) = \\sum_j \\boldsymbol 1_{\\{Y = y_j\\}}(\\omega)E(X|Y=y_j) \\] \u200b\u5bf9\u4e8e\u200b\u79bb\u6563\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b\u200b\\(E(X|Y = y)\\)\u200b\u7684\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
\\[ E(X|Y = y) = \\sum_i x_iP(X=x_i | Y=y) \\] \u200b\u663e\u7136\u200b\uff0c\\(E(X|Y = y)\\)\u200b\u662f\u200b\\(y\\)\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5b9a\u4e49\u200b\u968f\u673a\u53d8\u91cf\u200b\\(E(X|Y)\\)\u200b\u4e3a\u200b\\(X\\)\u200b\u5173\u4e8e\u200b\\(Y\\)\u200b\u7684\u200b\u6761\u4ef6\u671f\u671b\u200b\uff0c\u200b\u82e5\u200b\\(E(X|Y)\\)\u200b\u6ee1\u8db3\u200b
- \\(E(X|Y)\\)\u200b\u662f\u200b\\(Y\\)\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5f53\u200b\\(Y = y\\)\u200b\u65f6\u200b\uff0c\\(E(X|Y) = E(X|Y = y)\\)
-
\\(\\forall D\\in \\mathcal B\\)\uff0c\u200b\u6709\u200b
\\[ E[E(X|Y)|Y\\in D] = E(X|Y\\in D) \\]
\u200b\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b\u200b\u7684\u200b\u6027\u8d28\u200b
\u200b\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \\(E(E(X|Y)) = EX\\)
- \u200b\u82e5\u200b\\(X, Y\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\uff0c\u200b\u5219\u200b\\(E(X|Y) = EX\\)
- \\(E[g(X)h(Y)|Y] = h(Y)E(g(X)|Y)\\quad \\text{a.s.}\\)
"},{"location":"math/random-process/basics/#_8","title":"\u968f\u673a\u200b\u8fc7\u7a0b","text":"\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\u662f\u200b\u4e00\u65cf\u200b\u65e0\u7a77\u200b\u591a\u4e2a\u200b\uff0c\u200b\u76f8\u4e92\u200b\u6709\u5173\u200b\u7684\u200b\u968f\u673a\u53d8\u91cf\u200b\u3002\u200b\u8bbe\u200b\\(X(t, \\omega)\\)\u200b\u4e3a\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u5176\u4e2d\u200b\\(t\\in T\\subset \\mathbb R\\)\u200b\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u79f0\u200b\\(X_T = \\{X(t, \\omega), t\\in T\\}\\)\u200b\u4e3a\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\u3002
- \\(X(t, \\omega)\\)\u200b\u53ef\u4ee5\u200b\u7b80\u8bb0\u200b\u4e3a\u200b\\(X(t)\\)\uff1b
- \u200b\u5f53\u200b\\(T\\)\u200b\u4e3a\u200b\u53ef\u5217\u200b\u96c6\u65f6\u200b\uff0c\u200b\u79f0\u200b\\(X_T\\)\u200b\u4e3a\u200b\u968f\u673a\u200b\u5e8f\u5217\u200b\uff1b
- \\(X_T\\)\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u79f0\u4e3a\u200b\u72b6\u6001\u200b\u7a7a\u95f4\u200b\\(S\\)\uff1b
- \\(X(\\cdot, \\omega), \\omega\\in \\Omega\\)\u200b\u662f\u200b\u5173\u4e8e\u200b\\(t\\)\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u8f68\u9053\u200b\u3002
"},{"location":"math/random-process/notations/","title":"\u8bb0\u53f7","text":"\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u5e38\u7528\u200b\u7684\u200b\u8bb0\u53f7\u200b\u8868\u793a\u200b
"},{"location":"math/random-process/notations/#_2","title":"\u9884\u5907\u200b\u77e5\u8bc6","text":"\u200b\u53ef\u5217\u96c6\u200b
\u200b\u82e5\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u53ef\u4ee5\u200b\u4ee5\u200b\u5e8f\u5217\u200b\\(\\{a_n\\}\\)\u200b\u7684\u200b\u5f62\u5f0f\u200b\u8868\u793a\u200b\uff0c\u200b\u5373\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\\(\\mathbb N_+\\rightarrow A\\)\u200b\u7684\u200b\u53cc\u5c04\u200b\uff0c\u200b\u79f0\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u4e3a\u200b\u53ef\u5217\u96c6\u200b\u3002
\u200b\u51e0\u4e4e\u200b\u5904\u5904\u200b
\u200b\u8bbe\u200b\\(Z_1, Z_2\\)\u200b\u4e3a\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u4e14\u200b\\(P(Z_1 = Z_2) = 1\\)\uff0c\u200b\u79f0\u200b\\(Z_1, Z_2\\)\u200b\u51e0\u4e4e\u200b\u5904\u5904\u200b\u76f8\u7b49\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(Z_1 = Z_2\\quad \\text{a.s.}\\)
"},{"location":"math/random-process/notations/#_3","title":"\u6cca\u677e\u200b\u8fc7\u7a0b","text":"\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b
\u200b\u82e5\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\\(\\{N(t), t\\geq 0\\}\\)\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\uff0c\u200b\u79f0\u200b\\(N(t)\\)\u200b\u4e3a\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b\u3002
- \\(N(t)\\in \\mathbb N\\)\uff0c\u200b\u5373\u200b\\(N(t)\\)\u200b\u53d6\u503c\u200b\u4e3a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b
- \\(\\forall t > s, N(t)\\geq N(s)\\)
"},{"location":"math/random-process/poisson/","title":"\u6cca\u677e\u200b\u8fc7\u7a0b","text":"\\(\\renewcommand{\\geq}{\\geqslant}\\renewcommand{\\leq}{\\leqslant}\\) \u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\\(\\{N(t), t\\geq 0\\}\\)\u200b\u4e3a\u200b\u65f6\u200b\u9f50\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u3002
- \\(\\{N(t), t\\geq 0\\}\\)\u200b\u4e3a\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u4e14\u200b\\(N(0) = 0\\)\uff1b
- \\(\\{N(t), t\\geq 0\\}\\)\u200b\u4e3a\u200b\u72ec\u7acb\u200b\u589e\u91cf\u200b\u8fc7\u7a0b\u200b\uff1b
- \\(\\{N(t), t\\geq 0\\}\\)\u200b\u5177\u5907\u200b\u589e\u91cf\u200b\u5e73\u7a33\u6027\u200b\uff0c\u200b\u5373\u200b\\(N(t) - N(s)\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u4ec5\u200b\u4e0e\u200b\\(t - s\\)\u200b\u6709\u5173\u200b
-
\u200b\u5bf9\u4e8e\u200b\u5145\u5206\u200b\u5c0f\u200b\u7684\u200b\\(\\Delta t > 0\\)\uff0c\u200b\u6709\u200b
\\[ \\left\\{ \\begin{aligned} P(N(t + \\Delta t) - N(t) = 1) &= \\lambda \\Delta t + o(\\Delta t) \\\\ P(N(t + \\Delta t) - N(t) \\geq 2) &= o(\\Delta t) \\end{aligned} \\right. \\]
"},{"location":"math/random-process/poisson/#_2","title":"\u589e\u91cf\u200b\u7684\u200b\u6982\u7387\u5206\u5e03","text":"\u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u589e\u91cf\u200b\\(N(t + s) - N(s)\\)\u200b\u670d\u4ece\u200b\u53c2\u6570\u200b\u4e3a\u200b\\(\\lambda t\\)\u200b\u7684\u200b\u6cca\u677e\u200b\u5206\u5e03\u200b\uff0c\u200b\u5373\u200b
\\[ P[N(t + s) - N(s) = k] = \\frac{(\\lambda t)^k}{k!}e^{-\\lambda t} \\] \u200b\u8bc1\u660e\u200b \u200b\u6839\u636e\u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u589e\u91cf\u200b\u5e73\u7a33\u6027\u200b\uff0c\u200b\u6709\u200b
\\[ P(N(s + t) - N(s) = n) = P(N(t) = n) \\] -
\\(n = 0\\)\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(\\{N(h + t) = 0, h > 0\\} = \\{N(h+ t) - N(t) = 0, N(t) = 0, h > 0\\}\\)\uff0c\u200b\u6839\u636e\u200b\u589e\u91cf\u200b\u72ec\u7acb\u6027\u200b\uff0c\u200b\u6709\u200b
\\[ \\begin{aligned} P(N(h + t) = 0) &= P(N(h + t) - N(t) = 0) P(N(t) = 0) \\\\ &= P(N(h) = 0) P(N(t) = 0) \\end{aligned} \\] \u200b\u6839\u636e\u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u6027\u8d28\u200b\\(P(N(t + \\Delta t) - N(t) = 1) = \\lambda \\Delta t + o(\\Delta t)\\)\uff0c\u200b\u6709\u200b\uff1a
\\[ \\begin{aligned} \\lim_{h\\rightarrow 0} \\frac{P(t + h) - P(t)}{h} &= \\lim_{h\\rightarrow 0} \\frac{P(t)(1 - \\lambda h - o(h)) - P(t)}{h} \\\\ &= -\\lambda P(t) - \\lim_{h\\rightarrow 0} \\frac{o(h)}{h} \\\\ &= -\\lambda P(t) \\end{aligned} \\] \u200b\u89e3\u200b\u5fae\u5206\u65b9\u7a0b\u200b\\(P_0'(t) = -\\lambda P_0(t)\\)\uff0c\u200b\u89e3\u5f97\u200b\\(P_0(t) = e^{-\\lambda t + C}\\)\uff0c\u200b\u53c8\u200b\u56e0\u4e3a\u200b\\(N(0) = 0, P_0(N(0) = 0) = 1\\)\uff0c\u200b\u5f97\u200b\\(C = 0\\)\uff0c\u200b\u4ece\u800c\u200b\u6709\u200b
\\[ P_0(t) = e^{-\\lambda t} \\] -
\\(n > 0\\)\u200b\u65f6\u200b\uff0c\\(\\{N(t + h) = n\\} = \\bigcup_{k = 0} ^ n \\{N(t) = k, N(t + h) - N(t) = (n - k)\\}\\)\uff0c\u200b\u800c\u200b\\(n - k \\geq 2\\)\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(P(N(t + h) - N(t) = n - k) = o(h)\\)\uff0c\u200b\u7531\u200b\u589e\u91cf\u200b\u72ec\u7acb\u6027\u200b
\\[ \\begin{aligned} P(N(t + h) = n) &= \\sum_{k = 0} ^ n P(N(t) = k) P(N(t + h) - N(t) = n - k) \\\\ &= P(N(t) = n)(1 - \\lambda t - o(h)) + P(N(t) = n - 1)(\\lambda t + o(h)) \\\\ &+ \\sum_{k = 2}^n P(N(t) = n - k)o(h) \\end{aligned} \\] \u200b\u7531\u6b64\u200b
\\[ \\begin{aligned} &\\lim_{h\\rightarrow 0} \\frac{P(N(t + h) = n) - P(N(t) = n)}{h} \\\\ =& \\lim_{h\\rightarrow 0}\\frac{P(N(t) = n)(\\sum_{k = 2}^n P(N(t) = n - k)o(h) - P(N(t) = n)}{h} \\\\ +& \\lim_{h\\rightarrow 0}\\frac{\\sum_{k = 2}^n P(N(t) = n - k)o(h) - P(N(t) = n)}{h} \\\\ =& \\lim_{h\\rightarrow 0}\\frac{P(N(t) = n)(- \\lambda t) + P(N(t) = n - 1)(\\lambda t)}{h} \\\\ \\end{aligned} \\] \u200b\u5f97\u5230\u200b
\\[ P_n'(t) = -\\lambda P_n(t) + \\lambda P_{n-1}(t) \\] \u200b\u8003\u8651\u200b\u7ea6\u675f\u6761\u4ef6\u200b\\(P_n(0) = 0\\)\uff0c\u200b\u89e3\u5f97\u200b
\\[ \\frac{\\mathrm d}{\\mathrm dt}[e^{\\lambda t} P_n(t)] = \\lambda e^{\\lambda t}P_{n - 1}(t) \\] - \\(n = 0\\)\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(P_n(t) = e^{-\\lambda t} = \\frac{(\\lambda t)^0}{0!}e^{-\\lambda t}\\)
-
\u200b\u8bbe\u200b\u5bf9\u4e8e\u200b\\(n < k\\)\u200b\u65f6\u200b\u547d\u9898\u200b\u6210\u7acb\u200b\uff0c\u200b\u53ea\u200b\u9700\u200b\u8bc1\u660e\u200b\\(n = k\\)\u200b\u65f6\u200b\u547d\u9898\u200b\u6210\u7acb\u200b\u5373\u53ef\u200b\uff0c\u200b\u6709\u200b
\\[ \\begin{aligned} P_k(t) &= e^{-\\lambda t}\\int \\frac{\\mathrm d}{\\mathrm dt}[e^{\\lambda t} P_k(t)] \\mathrm dt \\\\ &= e^{-\\lambda t}\\int \\lambda e^{\\lambda t}P_{k - 1}(t) \\mathrm dt \\\\ &= e^{-\\lambda t}\\int \\lambda \\frac{(\\lambda t)^{k-1}}{(k-1)!} \\mathrm dt \\\\ &= \\frac{(\\lambda t)^k}{k!}e^{-\\lambda t} \\end{aligned} \\]
"},{"location":"math/random-process/poisson/#_3","title":"\u76f8\u90bb\u200b\u4e8b\u4ef6\u200b\u65f6\u95f4\u200b\u95f4\u9694\u200b\u7684\u200b\u6982\u7387\u5206\u5e03","text":"\u200b\u8bbe\u200b\\(\\{N(t), t \\geq 0\\}\\)\u200b\u4e3a\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u8bbe\u200b\\(S_n\\)\u200b\u8868\u793a\u200b\u7b2c\u200b\\(n\\)\u200b\u4e2a\u200b\u65f6\u95f4\u200b\u53d1\u751f\u200b\u7684\u200b\u65f6\u523b\u200b\uff0c\u200b\u5373\u200b\\(S_n = \\inf\\{t, t > S_{n - 1}, N(t) = n\\}\\)\uff0c\u200b\u7279\u522b\u200b\u5730\u200b\uff0c\u200b\u4ee4\u200b\\(S_0 = 0\\)\u3002\\(S_n, N(t)\\)\u200b\u7684\u200b\u4e8b\u4ef6\u200b\u6ee1\u8db3\u200b
\\[ \\begin{aligned} \\{S_n \\leq t\\} &\\equiv \\{N(t) \\geq n\\} \\\\ \\{N(t) = n\\} &\\equiv \\{S_n\\leq t < S_{n + 1}\\} \\equiv \\{S_n\\leq t\\} - \\{S_{n+1}\\leq t\\} \\end{aligned} \\] \u200b\u7531\u4e8e\u200b\\(\\{S_n \\leq t\\} \\equiv \\{N(t) \\geq n\\}\\)\uff0c\u200b\u53ef\u4ee5\u200b\u8ba1\u7b97\u200b\\(S_n\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b
\\[ P(S_n\\leq t) = P(N(t)\\geq n) = 1 - e^{-\\lambda t}\\sum_{k=0}^{n-1} \\frac{(\\lambda t)^{k}}{k!} \\] \u200b\u7279\u522b\u200b\u5730\u200b\uff0c\u200b\u5f53\u200b\\(n = 1\\)\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(P(X_1\\leq t) = P(S_1\\leq t) = (1 - e^{-\\lambda t}) I_{\\{t\\geq 0\\}}\\)
\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b\\(\\{N(t), t\\geq 0\\}\\)\u200b\u662f\u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u5145\u8981\u6761\u4ef6\u200b\u662f\u200b\\(\\{X_n = S_{n} - S_{n-1}, n\\geq 1\\}\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u670d\u4ece\u200b\u7684\u200b\u5206\u5e03\u200b\u4e3a\u200b\u53c2\u6570\u200b\\(\\lambda\\)\u200b\u7684\u200b\u6307\u6570\u5206\u5e03\u200b\u3002
\u200b\u8bc1\u660e\u200b -
\\(\\Leftarrow\\)\uff1a\u200b\u5fc5\u8981\u6027\u200b\u8bc1\u660e\u200b\uff0c\u200b\u5148\u6c42\u200b\\(S_1, \\cdots, S_n\\)\u200b\u7684\u200b\u8054\u5408\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\uff0c\u200b\u8bbe\u200b\\(t_1 < t_2 < \\cdots < t_n\\)\uff0c\u200b\u8bbe\u200b\\(h\\)\u200b\u4e3a\u200b\u5145\u5206\u200b\u5c0f\u200b\u7684\u200b\u6b63\u6570\u200b\uff0c\u200b\u6ee1\u8db3\u200b
\\[ t_1 + \\frac h2 < t_2 - \\frac h2 < t_2 + \\frac h2 < \\cdots < t_n - \\frac h2 \\] \u200b\u8003\u8651\u200b\u4e8b\u4ef6\u200b\\(A\\)
\\[ \\begin{aligned} A& \\\\ &\\equiv \\left\\{t_1 - \\frac h2 < S_1 \\leq t_1 + \\frac h2, t_2 - \\frac h2 < S_2 \\leq t_2 + \\frac h2, \\cdots, t_n - \\frac h2 < S_n \\leq t_n + \\frac h2\\right\\} \\\\ \\equiv & \\left\\{N\\left(t_1 - \\frac h2\\right) = 0, N\\left(t_{i+1} - \\frac h2\\right) - N\\left(t_i + \\frac h2\\right) = 0, N\\left(t_{i} + \\frac h2\\right) - N\\left(t_{i} - \\frac h2\\right) = 1\\right\\} \\\\ & 0\\leq i\\leq n - 1 \\end{aligned} \\] \u200b\u800c\u200b\u6839\u636e\u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u6027\u8d28\u200b
\\[ \\begin{aligned} P\\left(N\\left(t_n + \\frac h2\\right) - N\\left(t_n - \\frac h2\\right)= 1\\right) &= \\lambda h + o(h) \\\\ P\\left(N\\left(t_n + \\frac h2\\right) - N\\left(t_n - \\frac h2\\right)\\geq 2\\right) &= o(h) \\\\ \\end{aligned} \\] \u200b\u6709\u200b
\\[ P(A) = (\\lambda h)^ne^{-\\lambda (t_n + h/2)} + o\\left(h^n\\right) = \\lambda ^nh^ne^{-\\lambda t_n} + o\\left(h^n\\right) \\] \u200b\u56e0\u6b64\u200b\uff0c\\(\\left(S_1, \\cdots, S_n\\right)\\)\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u200b\u4e3a\u200b
\\[ f(t_1, \\cdots, t_n) = \\left\\{ \\begin{aligned} & \\lambda^n e^{-\\lambda t_n} & 0 < t_1 < \\cdots < t_n \\\\ & 0 & \\mathrm{otherwise} \\end{aligned} \\right. \\] \u200b\u800c\u200b\\(X_n = S_n - S_{n-1}\\)\uff0c\u200b\u8bbe\u200b\\(x_n = t_n - t_{n - 1}\\)\uff0c\u200b\u5219\u200b\\(t_n = \\sum_{i=1}^n x_n\\)\uff0c\u200b\u4ece\u800c\u200b\u53d8\u6362\u200b\u7684\u200bJacob\u200b\u77e9\u9635\u200b\u4e3a\u200b
\\[ J = \\frac{\\partial (t_1, \\cdots, t_n)}{\\partial (x_1, \\cdots, x_n)} = \\begin{vmatrix} 1 & 0 & \\cdots & 0 \\\\ 1 & 1 & \\cdots & 0 \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ 1 & 1 & \\cdots & 1 \\end{vmatrix} \\] \u200b\u56e0\u6b64\u200b\\(X_1, \\cdots, X_n\\)\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u200b\u4e3a\u200b
\\[ g(x_1, \\cdots, x_n) = \\lambda^n e^{-\\lambda (x_1 + \\cdots + x_n)} = \\prod_{i=1}^n \\left(\\lambda e^{-\\lambda x_i}\\right), x_i \\geq 0 \\] \u200b\u56e0\u6b64\u200b\\(X_1, \\cdots, X_n\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u6307\u6570\u5206\u5e03\u200b\u3002
-
\\(\\Rightarrow\\)\uff1a\u200b\u5145\u5206\u6027\u200b\u8bc1\u660e\u200b\uff0c\u200b\u8bbe\u200b\\(\\{X_k, k\\geq 1\\}\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u6307\u6570\u5206\u5e03\u200b\uff0c\u200b\u8bbe\u200b\\(S_0 = 0, S_n = S_0 + \\sum_{i = 1}^n X_i\\)\u3002\u200b\u5b9a\u4e49\u200b
\\[ N(t) = \\sum_{n=1}^\\infty I_{\\{S_n\\leq t\\}} \\] - \u200b\u7531\u4e8e\u200b\\(I_{\\{S_n\\leq t\\}}\\in \\mathbb N\\)\uff0c\u200b\u5219\u200b\\(N(t)\\in \\mathbb N\\)\u3002
-
\u200b\u5bf9\u4e8e\u200b\\(t > s\\)\uff0c\u200b\u6709\u200b
\\[ N(t) - N(s) = \\sum_{n = 1}^\\infty I_{\\{S_n\\leq t\\}}- I_{\\{S_n\\leq s\\}} \\] \u200b\u800c\u200b\\(S_n - S_{n-1} = X_n > 0\\)\uff0c\u200b\u56e0\u6b64\u200b\\(S_n\\)\u200b\u4e3a\u200b\u5355\u8c03\u200b\u589e\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4ece\u800c\u200b\\(\\{S_n\\leq s\\}\\subset \\{S_n\\leq t\\}\\)\uff0c\u200b\u5373\u200b\\(I_{\\{S_n\\leq t\\}}- I_{\\{S_n\\leq s\\}} \\geq 0\\)\uff0c\u200b\u56e0\u6b64\u200b\\(N(t) - N(s)\\)
\u200b\u53ef\u200b\u5f97\u200b\\(N(t)\\)\u200b\u4e3a\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b\u3002\u200b\u4ee5\u4e0b\u200b\u8ba1\u7b97\u200b\\(S_n\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u3002\u200b\u5df2\u77e5\u200b\\(X_1, \\cdots, X_n\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u6307\u6570\u5206\u5e03\u200b\uff0c\u200b\u8bbe\u200b\\(t_n = \\sum_{i=1}^n x_i\\)\uff0c\u200b\u5219\u200b\\(x_n = t_n - t_{n-1}\\)\uff0c\u200b\u4ece\u800c\u200bJacob\u200b\u77e9\u9635\u200b\u4e3a\u200b
\\[ J = \\frac{\\partial (x_1, \\cdots, x_n)}{\\partial (t_1, \\cdots, t_n)} = \\begin{vmatrix} 1 & 0 & 0 & \\cdots & 0 \\\\ -1 & 1 & 0 & \\cdots & 0 \\\\ 0 & -1 & 1 & \\cdots & 0 \\\\ \\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\ 0 & 0 & 0 & \\cdots & 1 \\end{vmatrix} \\] \u200b\u800c\u200b\\(X_1, \\cdots, X_n\\)\u200b\u7684\u200b\u8054\u5408\u200b\u6982\u7387\u5bc6\u5ea6\u200b\u4e3a\u200b
\\[ g(x_1, \\cdots, x_n) = \\lambda^n e^{-\\lambda (x_1 + \\cdots + x_n)} = \\prod_{i=1}^n \\left(\\lambda e^{-\\lambda x_i}\\right), x_i \\geq 0 \\] \u200b\u56e0\u6b64\u200b\\(S_1, \\cdots, S_n\\)\u200b\u7684\u200b\u8054\u5408\u200b\u6982\u7387\u5bc6\u5ea6\u200b\u4e3a\u200b
\\[ f(t_1, \\cdots, t_n) = \\left\\{ \\begin{aligned} & \\lambda^n e^{-\\lambda t_n} & 0 < t_1 < \\cdots < t_n \\\\ & 0 & \\mathrm{otherwise} \\end{aligned} \\right. \\]
"},{"location":"notes/2020/","title":"\u4e00\u4e9b\u200b\u5f88\u200b\u559c\u6b22\u200b\u7684\u200b\u63a8\u9001","text":"\u300a\u200b\u6628\u665a\u200b\u300b by \u200b\u8001\u9f20\u200b\u4ec0\u4e48\u200b\u90fd\u200b\u77e5\u9053\u200b
\u300a\u200b\u6740\u6b7b\u200b\u65e0\u804a\u200b\u7684\u200b\u540c\u65f6\u200b\uff0c\u200b\u4f60\u200b\u4e5f\u200b\u5728\u200b\u6740\u6b7b\u200b\u81ea\u5df1\u200b\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u75db\u82e6\u200b\u7684\u200b\u4e00\u767e\u5f20\u200b\u5e95\u7247\u200b\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u603b\u200b\u4e0d\u80fd\u200b\u4e27\u6c14\u200b\u592a\u4e45\u200b\u5427\u200b\u3002\u300b by \u200b\u6982\u7387\u8bba\u200b
\u300a\u200b\u6211\u4eec\u200b\u628a\u200b\u8fd9\u573a\u200b\u521d\u96ea\u200b\u505a\u6210\u200b\u4e86\u200b\u7535\u5f71\u6d77\u62a5\u200b\u300b by \u200b\u6e05\u534e\u5927\u5b66\u200b\u6e05\u65b0\u200b\u65f6\u62a5\u200b
\u300a\u200b\u56f0\u4e8e\u200b\u4eba\u8138\u8bc6\u522b\u200b\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u65b0\u200b\u7684\u200b\u5341\u5e74\u200b\uff0c\u200b\u4eba\u751f\u200b\u7684\u200b\u5947\u5e7b\u200b\u6f02\u6d41\u200b\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u6587\u827a\u200b\u662f\u200b\u4e00\u573a\u200b\u9a97\u5c40\u200b\u5417\u200b\uff1f\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u4e00\u7897\u200b\u7c73\u200b\u8c46\u8150\u200b\uff0c\u200b\u7a7f\u8d8a\u200b\u5c71\u6d77\u200b\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u4fdd\u7814\u200b\u5931\u8d25\u200b\u4ee5\u540e\u200b\uff0c\u200b\u6211\u200b\u53c8\u200b\u8003\u200b\u4e86\u200b\u6b21\u200b\u6e05\u534e\u200b\u300b by \u200b\u6e05\u534e\u200b\u7814\u8bfb\u200b\u95f4\u200b
\u300a\u200b\u4eca\u5929\u200b\u662f\u200b2020\u200b\u5e74\u200b\u4f60\u200b\u5728\u200b\u6e05\u534e\u200b\u7206\u809d\u200b\u7684\u200b\u7b2c\u200b366\u200b\u5929\u200b\u300b by \u200b\u6e05\u534e\u5927\u5b66\u200b\u6e05\u65b0\u200b\u65f6\u62a5\u200b
"},{"location":"notes/2021/","title":"\u4e00\u4e9b\u200b\u5f88\u200b\u559c\u6b22\u200b\u7684\u200b\u63a8\u9001","text":"\u300a2020 \u200b\u6700\u200b\u820d\u4e0d\u5f97\u200b\u5220\u200b\u7684\u200b\u7167\u7247\u200b\u300b by \u200b\u6e05\u534e\u5927\u5b66\u200b
\u200b\u665a\u5b89\u200b\u6d77\u62a5\u200b by \u200b\u90d1\u5dde\u200b\u53d1\u5e03\u200b
\u200b\u77e5\u4e4e\u200b\u5b87\u5b99\u200b\u91cc\u200b\u7684\u200b\u90a3\u4e9b\u200b\u8d22\u5bcc\u200b\u5bc6\u7801\u200b by \u200b\u4e3a\u200b\u4f60\u200b\u5199\u200b\u4e00\u4e2a\u200b\u6545\u4e8b\u200b
\u200b\u540c\u5b66\u200b\uff0c\u200b\u8fd8\u200b\u8bb0\u5f97\u200b\u5f53\u5e74\u200b\u90a3\u9053\u200b\u9ad8\u8003\u9898\u200b\u5417\u200b\uff1f by \u200b\u6e05\u534e\u5927\u5b66\u200b
\u200b\u7ea2\u200b\u4e86\u200b\u7ea2\u200b\u4e86\u200b\uff0c\u200b\u8fd9\u6b21\u200b\u771f\u7684\u200b\u7ea2\u200b\u4e86\u200b by GQ\u200b\u5b9e\u9a8c\u5ba4\u200b
\u200b\u751f\u6d3b\u200b\u5c0f\u7a8d\u95e8\u200b \u200b\u4e4b\u200b \u200b\u5982\u4f55\u200b\u6577\u884d\u200b\u5973\u751f\u8282\u200b by \u200b\u55e8\u200b\u76ae\u200b\u8fd0\u8425\u90e8\u200b
\u200b\u6c99\u5c18\u66b4\u200b\u5bf9\u200b\u6e05\u534e\u56ed\u200b\u8bf4\u200b\uff0c\u200b\u4eca\u5929\u200b\u7ed9\u200b\u4f60\u200b\u70b9\u200b\u989c\u8272\u200b\u770b\u770b\u200b by \u200b\u5bf9\u200b\u725b\u200b\u8c08\u6e05\u200b
"},{"location":"notes/2022/","title":"\u4e00\u4e9b\u200b\u5f88\u200b\u559c\u6b22\u200b\u7684\u200b\u63a8\u9001","text":"\u200b\u665a\u5b89\u200b\u6d77\u62a5\u200b by \u200b\u90d1\u5dde\u200b\u53d1\u5e03\u200b
\u200b\u6e05\u534e\u200b\u5bf9\u200b\u4f60\u200b\u8bf4\u200b\u665a\u5b89\u200b\uff01 by \u200b\u6e05\u534e\u5927\u5b66\u200b
\u200b\u5c0f\u533a\u200b\u88ab\u200b\u5c01\u200b\u4e94\u5929\u200b\u540e\u200b\uff0c\u200b\u6211\u200b\u6e10\u6e10\u200b\u61c2\u200b\u4e86\u200b by \u200b\u96f7\u53d4\u200b\u5199\u200b\u6545\u4e8b\u200b
\u201c\u200b\u6211\u4eec\u200b\u7ec8\u200b\u4f1a\u200b\u627e\u5230\u200b\u610f\u4e49\u200b\u3002\u201d by \u200b\u6e05\u534e\u5927\u5b66\u200b
40\u200b\u4e2a\u200b\u975e\u5fc5\u8981\u200b\u751f\u6d3b\u200b\u4e0b\u200b\u7684\u200b\u5e78\u798f\u200b\u77ac\u95f4\u200b by \u200b\u5168\u5143\u200b\u5149\u6ed1\u200b
\u200b\u7ba1\u200b\u4ed6\u200b\u51e0\u5c81\u200b\uff0c\u200b\u9752\u6625\u200b\u4e07\u5c81\u200b by \u200b\u5c0f\u6797\u200b
\u300c\u200b\u65f6\u4ee3\u200b\u4e4b\u97f3\u200b\u300d\u200b\u53bb\u200b\u54ea\u513f\u200b\u4e86\u200b\uff1f by \u200b\u4eba\u7269\u200b
\u200b\u5e94\u200b \u200b\u6da6\u200b \u200b\u5c3d\u200b \u200b\u6da6\u200b by \u200b\u5168\u5143\u200b\u5149\u6ed1\u200b
\u200b\u6bd5\u4e1a\u200b\u7279\u520a\u200b | \u200b\u634c\u200b\u6765\u200b\u65e0\u6059\u200b\uff0c\u200b\u540e\u4f1a\u6709\u671f\u200b by \u200b\u6e05\u534e\u5927\u5b66\u200b\u6e05\u65b0\u200b\u65f6\u62a5\u200b
\u200b\u6bd5\u4e1a\u200b\u65f6\u200b\uff0c\u200b\u4f60\u200b\u6700\u200b\u60f3\u200b\u5e26\u8d70\u200b\u7684\u200b\u4e00\u4ef6\u200b\u4e1c\u897f\u200b\u662f\u200b\uff1f by \u200b\u6e05\u534e\u5927\u5b66\u200b
\u200b\u6bd5\u4e1a\u200b\u5feb\u4e50\u200b | \u200b\u7247\u523b\u200b\u6210\u4e3a\u200b\u6c38\u6052\u200b by \u200b\u957f\u6b4c\u200b\u695a\u5929\u200b\u78a7\u200b
\u200b\u4fdd\u7814\u200b\u5931\u8d25\u200b\u4e86\u200b\uff0c\u200b\u82df\u4f4f\u200b\u5c31\u200b\u597d\u200b by\u200b\u4e28\u200bJust Lose It\u200b\u4e28\u200b
10\u200b\u6708\u200b\uff0c\u200b\u5728\u200b\u51ac\u5929\u200b\u5230\u6765\u200b\u4e4b\u524d\u200b\uff0c\u200b\u7559\u4e0b\u200b\u70b9\u200b\u4ec0\u4e48\u200b by \u200b\u4eba\u7269\u200b
"}]}
\ No newline at end of file
+{"config":{"lang":["en"],"separator":"[\\s\\u200b\\-]","pipeline":["stemmer"]},"docs":[{"location":"","title":"Welcome to HuangFuSL's blog","text":""},{"location":"#table-of-contents","title":"Table of contents","text":" - \u200b\u63a8\u9001\u200b
- LaTeX
- \u200b\u6570\u5b66\u200b
- Coding
- \u200b\u65e5\u8bed\u200b
- \u200b\u5173\u4e8e\u200b\u6211\u200b
"},{"location":"#blog-timeline","title":"Blog timeline","text":"Jupyter
2024-12-16Rust\u200b\u7684\u200bevcxr_jupyter\u200b\u5305\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5bf9\u200bjupyter notebook\u200b\u7684\u200b\u652f\u6301\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5728\u200bnotebook\u200b\u4e2d\u200b\u8fd0\u884c\u200bRust\u200b\u4ee3\u7801\u200b\u3002\u200b\u4f7f\u7528\u200b\u5982\u4e0b\u200b\u547d\u4ee4\u200b\u5b89\u88c5\u200b\uff1a
\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b
2024-12-16\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\uff08Gaussian Process\uff0cGP\uff09\u200b\u662f\u200b\u5c06\u200b\u591a\u200b\u53d8\u91cf\u200b\u9ad8\u65af\u5206\u5e03\u200b\u63a8\u5e7f\u200b\u5230\u200b\u65e0\u9650\u200b\u7ef4\u5ea6\u200b\\(\\mathcal X\\subseteq \\mathbb R^n\\)\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\u3002\u200b\u5177\u4f53\u200b\u5730\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\\(X = \\{x_1, \\ldots, x_n\\}\\subseteq \\mathcal X\\)\uff0c\u200b\u968f\u673a\u53d8\u91cf\u200b\\(f(x_1), \\ldots, f(x_n)\\)\u200b\u670d\u4ece\u200b\u591a\u5143\u200b\u9ad8\u65af\u5206\u5e03\u200b\\(\\mathcal N(\\mu(X), \\Sigma(X))\\)\u3002\u200b\u5176\u4e2d\u200b\uff0c\\(\\mu(X)\\)\u200b\u4e3a\u200b\u5747\u503c\u200b\u51fd\u6570\u200b\uff0c\\(\\Sigma(X)\\)\u200b\u4e3a\u200b\u534f\u65b9\u5dee\u200b\u51fd\u6570\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u9ad8\u65af\u5206\u5e03\u200b\u7814\u7a76\u200b\u7684\u200b\u662f\u200b\u51fd\u6570\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\u3002
\u200b\u7b97\u6cd5\u200b
2024-12-09\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u662f\u200b\u4e00\u7c7b\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u4f18\u5316\u200b\u9ed1\u76d2\u200b\u51fd\u6570\u200b\u7684\u200b\u4f18\u5316\u200b\u65b9\u6cd5\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u9ed1\u76d2\u200b\u51fd\u6570\u200b\u6765\u8bf4\u200b\uff0c\u200b\u6211\u4eec\u200b\u65e0\u6cd5\u200b\u5f97\u77e5\u200b\u5176\u200b\u663e\u5f0f\u200b\u7684\u200b\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200b\u8f93\u5165\u200b\u4e00\u4e2a\u200b\u6570\u636e\u200b\uff0c\u200b\u89c2\u6d4b\u200b\u5176\u200b\u8f93\u51fa\u200b\u7684\u200b\u65b9\u6cd5\u200b\u5bfb\u627e\u200b\u5b83\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u3002\u200b\u501f\u52a9\u4e8e\u200b\u8d1d\u53f6\u65af\u200b\u7edf\u8ba1\u200b\u7684\u200b\u601d\u60f3\u200b\uff0c\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u6700\u521d\u200b\u8ba4\u4e3a\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5b8c\u5168\u200b\u968f\u673a\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e0d\u65ad\u200b\u5730\u200b\u89c2\u6d4b\u200b\u6765\u200b\u66f4\u65b0\u200b\u5bf9\u200b\u51fd\u6570\u200b\u7684\u200b\u4f30\u8ba1\u200b\uff08\u200b\u540e\u9a8c\u200b\uff09\u3002\u200b\u5728\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u8fed\u4ee3\u200b\u4e2d\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u6839\u636e\u200b\u5f53\u524d\u200b\u7684\u200b\u540e\u9a8c\u200b\uff0c\u200b\u901a\u8fc7\u200b\u91c7\u96c6\u200b\u51fd\u6570\u200b\u6765\u200b\u9009\u62e9\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u89c2\u6d4b\u200b\u7684\u200b\u70b9\u200b\u3002\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u7684\u200b\u4f18\u70b9\u200b\u662f\u200b\u53ef\u4ee5\u200b\u5728\u200b\u8f83\u200b\u5c11\u200b\u7684\u200b\u8fed\u4ee3\u200b\u6b21\u6570\u200b\u5185\u200b\u627e\u5230\u200b\u5168\u5c40\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5728\u200b\u5b9e\u9645\u200b\u5e94\u7528\u200b\u4e2d\u200b\u88ab\u200b\u5e7f\u6cdb\u200b\u4f7f\u7528\u200b\u3002
\u200b\u5f3a\u5316\u200b\u5b66\u4e60\u200b
2024-12-04\u200b\u8bb0\u5f55\u200b\u5f3a\u5316\u200b\u5b66\u4e60\u200b\u7684\u200b\u5b66\u4e60\u200b\u8fc7\u7a0b\u200b\u3002
\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b
2024-12-04\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\uff08Multi-armed bandit\uff09\u200b\u95ee\u9898\u200b\u6765\u81ea\u200b\u4e8e\u200b\u73b0\u5b9e\u200b\u4e2d\u200b\u7684\u200b\u8001\u864e\u673a\u200b\u95ee\u9898\u200b\u3002\u200b\u6bcf\u53f0\u200b\u8001\u864e\u673a\u200b\u90fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u62c9\u6746\u200b\uff0c\u200b\u62c9\u52a8\u200b\u62c9\u6746\u200b\u540e\u200b\uff0c\u200b\u8001\u864e\u200b\u673a\u4f1a\u200b\u968f\u673a\u200b\u7ed9\u51fa\u200b\u4e00\u4e2a\u200b\u5956\u52b1\u200b\u3002\u200b\u73a9\u5bb6\u200b\u7684\u200b\u4efb\u52a1\u200b\u662f\u200b\u5728\u200b\u6709\u9650\u200b\u7684\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u5185\u200b\u5c3d\u53ef\u80fd\u200b\u83b7\u5f97\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u5956\u52b1\u200b\u3002
\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5\u200b
2024-12-04\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\uff08Upper Confidence Bound, UCB\uff09\u200b\u7b97\u6cd5\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u5c06\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u7eb3\u5165\u200b\u8003\u8651\u200b\uff0c\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u8f83\u5c11\u200b\u7684\u200b\u52a8\u4f5c\u200b\u6709\u200b\u66f4\u200b\u5927\u200b\u7684\u200b\u4e0d\u786e\u5b9a\u6027\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u5c3d\u53ef\u80fd\u200b\u4e50\u89c2\u200b\u5730\u200b\u8003\u8651\u200b\u8fd9\u4e9b\u200b\u6ca1\u6709\u200b\u5c1d\u8bd5\u200b\u8fc7\u200b\u7684\u200b\u52a8\u4f5c\u200b\uff0c\u200b\u5e76\u200b\u4f18\u5148\u200b\u63a2\u7d22\u200b\u8fd9\u4e9b\u200b\u52a8\u4f5c\u200b\u3002\u200b\u5728\u200b\u6bcf\u4e2a\u200b\u52a8\u4f5c\u200b\u63a2\u7d22\u200b\u6bd4\u8f83\u200b\u6df1\u5165\u200b\u540e\u200b\uff0c\u200b\u518d\u200b\u8f6c\u5411\u200b\u5229\u7528\u200b\u5956\u52b1\u200b\u8f83\u200b\u9ad8\u200b\u7684\u200b\u52a8\u4f5c\u200b\u3002
\u200b\u6a21\u578b\u200b\u63a8\u7406\u200b
2024-11-25\u200b\u5728\u200b\u63a8\u7406\u200b\u9636\u6bb5\u200b\uff0c\u200b\u5927\u200b\u6a21\u578b\u200b\u6839\u636e\u200b\u8f93\u5165\u200b\u7684\u200b\u6587\u672c\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u9884\u6d4b\u200b\u8f93\u5165\u200b\u6587\u672c\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u8bcd\u200b\uff0c\u200b\u76f4\u5230\u200b\u9884\u6d4b\u51fa\u200b\u7ed3\u675f\u200b\u7b26\u53f7\u200b\u4e3a\u6b62\u200b\u3002\u200b\u4e0d\u8fc7\u200b\uff0c\u200b\u5728\u200b\u9884\u200b\u8bad\u7ec3\u200b\u9636\u6bb5\u200b\u4e2d\u200b\uff0c\u200b\u4e0d\u200b\u5305\u542b\u200b\u5bf9\u200bbos\uff08begin of sentence\uff09\u200b\u548c\u200beos\uff08end of sentence\uff09\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002\u200b\u6240\u4ee5\u200b\uff0c\u200b\u5982\u679c\u200b\u4f7f\u7528\u200b\u57fa\u5ea7\u200b\u6a21\u578b\u200b\uff0c\u200b\u6a21\u578b\u200b\u4f1a\u200b\u4e0d\u65ad\u200b\u8f93\u51fa\u200btoken\u3002
\u200b\u5b9e\u73b0\u200bLlama-2
2024-09-07\u200b\u5728\u200b\u672c\u8282\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200bLlama-2\u200b\u6a21\u578b\u200b\u3002
\u200b\u5f52\u4e00\u5316\u200b
2024-09-07\u200b\u5f52\u4e00\u5316\u200b\u662f\u200b\u6307\u200b\u5c06\u200b\u6570\u636e\u200b\u6309\u7167\u200b\u6bd4\u4f8b\u200b\u7f29\u653e\u200b\uff0c\u200b\u6539\u53d8\u200b\u5176\u200b\u5206\u5e03\u200b\u3002\u200b\u6309\u7167\u200b\u5f52\u4e00\u5316\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u4e0d\u540c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u4ee5\u4e0b\u200b\u51e0\u79cd\u200b\uff1a
\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b
2024-09-07Attention\u200b\u673a\u5236\u200b\u867d\u7136\u200b\u80fd\u200b\u6355\u6349\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u4e0d\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u4f9d\u8d56\u200b\u5173\u7cfb\u200b\uff0c\u200b\u4f46\u662f\u200b\u65e0\u6cd5\u200b\u533a\u5206\u200b\u4e0d\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\u200b\u4e3a\u4e86\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\uff0cTransformer\u200b\u6a21\u578b\u200b\u5f15\u5165\u200b\u4e86\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff08Positional Encoding\uff09\u3002
"},{"location":"#recent-updates","title":"Recent updates","text":" - 2024-12-16\uff1aJupyter\uff0c\u200b\u673a\u5668\u200b\u5b66\u4e60\u200b\uff0c\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b
- 2024-12-09\uff1a\u200b\u7b97\u6cd5\u200b
- 2024-12-04\uff1a\u200b\u6df1\u5ea6\u200b\u5b66\u4e60\u200b\uff0c\u200b\u6570\u636e\u7ed3\u6784\u200b\uff0cPython\uff0c\u200b\u5f3a\u5316\u200b\u5b66\u4e60\u200b\uff0c\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\uff0c\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5\u200b\uff0cRust
- 2024-11-25\uff1a\u200b\u5b9e\u73b0\u200bLlama-2\uff0c\u200b\u6a21\u578b\u200b\u63a8\u7406\u200b
- 2024-09-07\uff1aCustom transformer\uff0c\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff0ctransformer\u200b\u53d8\u79cd\u200b\uff0c\u200b\u5b9e\u73b0\u200btransformer
"},{"location":"#currently-working-on","title":"Currently working on","text":""},{"location":"#customization","title":"Customization","text":"Click on the buttons to change the primary color.
Red Pink Purple Deep Purple Indigo Blue Light Blue Cyan Teal Green Light Green Lime Yellow Amber Orange Deep Orange Brown Grey Blue Grey White Click on the buttons to change the accent color.
Red Pink Purple Deep Purple Indigo Blue Light Blue Cyan Teal Green Light Green Lime Yellow Amber Orange Deep Orange However, if you try to switch from dark mode to light mode or reversed, changes to the primary color and accent color will lose.
"},{"location":"#building-documentation","title":"Building documentation","text":"Run git clone https://github.com/HuangFuSL/HuangFuSL.github.io.git
to get the source code.
"},{"location":"#bootstrap-icon-installation","title":"Bootstrap icon installation","text":"The site uses bootstrap icons, which are added as submodules in third_party/icons
. You have to manually initialize the submodule.
git submodule update --recursive --remote\n
"},{"location":"#latex-support","title":"LaTeX support","text":"The site uses xelatex
and dvisvgm
to render tex document to SVG images embedded in the markdown files. However, as the SVG images are ignored by .gitignore
, you have to manually perform the conversion.
For GitHub repository clones:
- Run
git submodule update --recursive --remote
to receive the template. - Make sure you have installed and correctly configured
xelatex
and dvisvgm
. - Add
./template
directory to $TEXINPUTS
environmental variable. - Execute
ci/convert.py
in the root directory of the repository. - Run
mkdocs serve
to view the images.
The template is located at HuangFuSL/latex-template
"},{"location":"#github-workflow","title":"GitHub workflow","text":"You need to install the dependencies stored in requirements.txt
before you can start building the site:
pip install -r requirements.txt\n
There are cross-links in the site which require metadata defined in the page, so the project should be built before mkdocs serve
is executed. The exported metadata is saved in meta.json
after a build is successfully executed. To build the site, execute the following command:
mkdocs build -d build\n
Execute mkdocs serve
, the built site will appear at http://127.0.0.1:8000
"},{"location":"#acknowledgements","title":"Acknowledgements","text":"The blog relies on the following open-source projects:
- mkdocs
- Python Markdown
- Python Markdown Extension
- jupyter
The blog uses the following mkdocs plugins to function correctly.
- Neoteroi/mkdocs-plugins
- lukasgeiter/mkdocs-awesome-pages-plugin
- timvink/mkdocs-git-revision-date-localized-plugin
- zhaoterryy/mkdocs-git-revision-date-plugin
- squidfunk/mkdocs-material
- facelessuser/mkdocs-material-extensions
- fralau/mkdocs_macros_plugin
- danielfrg/mkdocs-jupyter
- prcr/mkdocs-meta-descriptions-plugin
Unless noted, content in this blog are shared under CC-BY-NC-SA 4.0 license.
"},{"location":"#version-information","title":"Version information","text":"commit 3634d38c7e95f633ed80e816b6dbfa4e3edce5ac\nMerge: 4b7d0e34 98aca170\nAuthor: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nDate: Mon Dec 16 20:57:31 2024 +0800\n\n Merge pull request #422 from HuangFuSL/rust-jupyter\n\n Update: Rust Jupyter\n
"},{"location":"about/","title":"\u5173\u4e8e\u200b\u6211","text":"Guess who is here?
"},{"location":"coding/","title":"Coding","text":"\u200b\u7f16\u7a0b\u200b\u76f8\u5173\u200b
"},{"location":"coding/#_1","title":"\u7f16\u7a0b\u8bed\u8a00","text":""},{"location":"coding/#_2","title":"\u7b97\u6cd5","text":" - Leetcode
- \u200b\u6570\u636e\u7ed3\u6784\u200b
"},{"location":"coding/#_3","title":"\u673a\u5668\u200b\u5b66\u4e60","text":" - \u200b\u673a\u5668\u200b\u5b66\u4e60\u200b
- \u200b\u6df1\u5ea6\u200b\u5b66\u4e60\u200b
- \u200b\u5f3a\u5316\u200b\u5b66\u4e60\u200b
"},{"location":"coding/#_4","title":"\u5176\u4ed6","text":" - \u200b\u7cfb\u7edf\u914d\u7f6e\u200b
- SVG
"},{"location":"coding/rust-jupyter/","title":"Jupyter for Rust","text":"In\u00a0[2]: Copied! fn add(a: i32, b: i32) -> i32 {\n a + b\n}\n\nadd(1, 2) // The last expression is evaluated and printed\n
fn add(a: i32, b: i32) -> i32 { a + b } add(1, 2) // The last expression is evaluated and printed Out[2]: 3
\u200b\u4f7f\u7528\u200b:dep <package>
\u200b\u6765\u200b\u5bfc\u5165\u200b\u5305\u200b\u3002evcxr_input
\u200b\u5305\u200b\u63d0\u4f9b\u200b\u4e86\u200bget_string
\u200b\u548c\u200bget_password
\u200b\u51fd\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5728\u200bnotebook\u200b\u4e2d\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u548c\u200b\u5bc6\u7801\u200b\u3002
In\u00a0[3]: Copied! :dep evcxr_input\nlet name = evcxr_input::get_string(\"Name?\");\nlet password = evcxr_input::get_password(\"Password?\");\n\nprintln!(\"Hello, {name}! Your password is {password}\", name=name, password=password);\n
:dep evcxr_input let name = evcxr_input::get_string(\"Name?\"); let password = evcxr_input::get_password(\"Password?\"); println!(\"Hello, {name}! Your password is {password}\", name=name, password=password); Hello, Alice! Your password is alice123\n
\u200b\u4f7f\u7528\u200b\u5982\u4e0b\u200b\u547d\u4ee4\u200b\u5378\u8f7d\u200bRust
evcxr_jupyter --uninstall\ncargo uninstall evcxr_jupyter\n
"},{"location":"coding/rust-jupyter/#jupyter-for-rust","title":"Jupyter for Rust\u00b6","text":"Rust\u200b\u7684\u200bevcxr_jupyter
\u200b\u5305\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5bf9\u200bjupyter notebook\u200b\u7684\u200b\u652f\u6301\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5728\u200bnotebook\u200b\u4e2d\u200b\u8fd0\u884c\u200bRust\u200b\u4ee3\u7801\u200b\u3002\u200b\u4f7f\u7528\u200b\u5982\u4e0b\u200b\u547d\u4ee4\u200b\u5b89\u88c5\u200b\uff1a
cargo install --locked evcxr_jupyter\nevcxr_jupyter --install\n
\u200b\u53e6\u5916\u200b\uff0c\u200b\u8fd8\u200b\u9700\u8981\u200b\u5b89\u88c5\u200bRust\u200b\u6807\u51c6\u200b\u5e93\u200b\u7684\u200b\u6e90\u4ee3\u7801\u200b\uff1a
rustup component add rust-src\n
\u200b\u4e4b\u540e\u200b\uff0c\u200b\u5c31\u200b\u53ef\u4ee5\u200b\u5728\u200bnotebook\u200b\u4e2d\u200b\u8fd0\u884c\u200bRust\u200b\u4ee3\u7801\u200b\u4e86\u200b\u3002
jupyter notebook\n
"},{"location":"coding/svg/","title":"SVG\u200b\u52a8\u753b","text":"SVG\u200b\u7684\u200b\u52a8\u753b\u200b\u4f7f\u7528\u200b<animate>
\u200b\u6807\u7b7e\u200b\uff0c\u200b\u5728\u200b\u4f7f\u7528\u200b\u65f6\u200b\uff0c<animate>
\u200b\u6807\u7b7e\u200b\u9700\u8981\u200b\u653e\u5728\u200b\u52a8\u753b\u200b\u64cd\u4f5c\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5185\u90e8\u200b\u3002
\u200b\u4f5c\u4e3a\u200b\u5bf9\u6bd4\u200b\uff0c\u200b\u6211\u4eec\u200b\u5148\u200b\u6784\u9020\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u77e9\u5f62\u200b\uff0c\u200b\u5728\u200b\u77e9\u5f62\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\u6dfb\u52a0\u200b\u52a8\u753b\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n </rect>\n</svg>\n
"},{"location":"coding/svg/#_1","title":"\u7b80\u5355\u200b\u52a8\u753b","text":"\u200b\u5728\u200b<rect>
\u200b\u6807\u7b7e\u200b\u4e2d\u200b\u6dfb\u52a0\u200b<animate>
\u200b\u6807\u7b7e\u200b\uff0c\u200b\u6307\u5b9a\u200b\u52a8\u753b\u200b\u7684\u200b\u7ed1\u5b9a\u200b\u5c5e\u6027\u200b\u3001\u200b\u5f00\u59cb\u200b\u7ed3\u675f\u200b\u7684\u200b\u53d6\u503c\u200b\u548c\u200b\u65f6\u957f\u200b\u5373\u53ef\u200b\u3002
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" from=\"20\" to=\"150\" begin=\"click\" dur=\"1.5s\" />\n </rect>\n</svg>\n
\u200b\u901a\u8fc7\u200battributeName
\u200b\u5c5e\u6027\u200b\u8bbe\u7f6e\u200b\u4ea4\u4e92\u200b\u7ed1\u5b9a\u200b\u7684\u200b\u5c5e\u6027\u200b\uff0c\u200b\u5141\u8bb8\u200b\u7684\u200b\u5c5e\u6027\u200b\u5217\u4e8e\u200b\u4e0b\u8868\u200b\uff1a
\u200b\u6807\u7b7e\u200b \u200b\u5c5e\u6027\u200b\u540d\u200b \u200b\u5907\u6ce8\u200b <animate>
x
<animate>
y
<animate>
width
<animate>
height
<animate>
r
cx
, cy
<animate>
opacity
<animate>
d
<animate>
points
<animate>
stroke
stroke-width
, stroke-linecap
, stroke-dashoffset
<animate>
fill
<set>
visibility
<animateTransform>
translate
<animateTransform>
transform
<animateTransform>
scale
<animateTransform>
rotate
<animateTransform>
skewX
<animateTransform>
skewY
<animateMotion>
path
<animateMotion>
rotate
<animateMotion>
keypoints
<animateMotion>
mpath
"},{"location":"coding/svg/#_2","title":"\u81ea\u5b9a\u4e49\u200b\u52a8\u753b","text":"<animate>
\u200b\u6807\u7b7e\u200b\u652f\u6301\u200b\u591a\u79cd\u200b\u81ea\u5b9a\u4e49\u200b\u5c5e\u6027\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u5c5e\u6027\u200b\u5141\u8bb8\u200b\u5728\u200b\u52a8\u753b\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u5173\u952e\u5e27\u200b\u3001\u200b\u8ba9\u200b\u52a8\u753b\u200b\u54cd\u5e94\u200b\u7528\u6237\u200b\u4ea4\u4e92\u200b\u7b49\u200b\u9ad8\u7ea7\u200b\u529f\u80fd\u200b\u7684\u200b\u5b9e\u73b0\u200b
"},{"location":"coding/svg/#fill","title":"fill
\u200b\u5c5e\u6027","text":"fill
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u52a8\u753b\u200b\u7ed3\u675f\u200b\u65f6\u200b\u52a8\u753b\u200b\u5bf9\u8c61\u200b\u7684\u200b\u72b6\u6001\u200b\uff0c\u200b\u53d6\u503c\u200b\u53ef\u4ee5\u200b\u4e3a\u200bremove
\u200b\u6216\u200bfreeze
\uff0c\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cfill
\u200b\u7684\u200b\u53d6\u503c\u200b\u4e3a\u200bremove
\u3002
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200bfill
\u200b\u53d6\u503c\u200b\u4e3a\u200bfreeze
\u200b\u7684\u200bSVG\u200b\u52a8\u753b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u770b\u51fa\u200b\uff0c\u200b\u52a8\u753b\u200b\u7ed3\u675f\u200b\u540e\u200b\u77e9\u5f62\u200b\u6ca1\u6709\u200b\u56de\u5230\u200b\u5f00\u59cb\u200b\u7684\u200b\u72b6\u6001\u200b\u3002
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" from=\"20\" to=\"150\" begin=\"click\" dur=\"1.5s\" fill=\"freeze\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#repeatcount","title":"repeatCount
\u200b\u5c5e\u6027","text":"repeatcount
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u52a8\u753b\u200b\u5728\u200b\u5f00\u59cb\u200b\u4ee5\u540e\u200b\u91cd\u590d\u200b\u7684\u200b\u6b21\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u6574\u6570\u200b\u503c\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4e3a\u200bindefinite
\u200b\u8868\u793a\u200b\u65e0\u9650\u200b\u6b21\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u4f7f\u200b\u77e9\u5f62\u200b\u79fb\u52a8\u200b\u7684\u200b\u52a8\u4f5c\u200b\u91cd\u590d\u200b\u4e09\u6b21\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" from=\"20\" to=\"150\" begin=\"click\" dur=\"1.5s\" repeatcount=\"3\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#values","title":"values
\u200b\u5c5e\u6027","text":"values
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u52a8\u753b\u200b\u7684\u200b\u5c5e\u6027\u200b\u5173\u952e\u5e27\u200b\uff0c\u200b\u5c5e\u6027\u200b\u503c\u4e3a\u200b\u5404\u200b\u5173\u952e\u5e27\u200b\u7684\u200b\u5c5e\u6027\u200b\u53d6\u503c\u200b\uff0c\u200b\u4ee5\u5206\u200b\u53f7\u200b\u5206\u9694\u200b\u3002values
\u200b\u5c5e\u6027\u200b\u53ef\u4ee5\u200b\u540c\u65f6\u200b\u66ff\u6362\u200bfrom
\u200b\u5c5e\u6027\u200b\u4e0e\u200bto
\u200b\u5c5e\u6027\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u4f7f\u7528\u200bvalues
\u200b\u5c5e\u6027\u200b\uff0c\u200b\u4ee4\u200b\u77e9\u5f62\u200b\u5728\u200b\u79fb\u52a8\u200b\u540e\u200b\u6298\u8fd4\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" values=\"20;150;20\" begin=\"click\" dur=\"3s\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#keytimes","title":"keyTimes
\u200b\u5c5e\u6027","text":"keyTimes
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u5173\u952e\u5e27\u200b\u7684\u200b\u65f6\u95f4\u200b\u5206\u914d\u200b\uff0c\u200b\u5f53\u200bcalcMode
\u200b\u5c5e\u6027\u200b\u4e3a\u200blinear
\u200b\u6216\u200bspline
\u200b\u65f6\u200b\uff0c\u200b\u8be5\u200b\u5c5e\u6027\u200b\u6709\u6548\u200b\uff0c\u200b\u5c5e\u6027\u200b\u7684\u200b\u503c\u200b\u4e3a\u200b\u5404\u4e2a\u200b\u5173\u952e\u5e27\u200b\u5728\u200b\u6574\u4e2a\u200b\u52a8\u753b\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u7684\u200b\u8fdb\u5ea6\u200b\uff08\u200b\u53d6\u503c\u200b\u5728\u200b0-1\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5c0f\u6570\u200b\uff09\u3002
\u200b\u4ee5\u4e0b\u200b\u4f7f\u7528\u200bkeyTimes
\u200b\u5c5e\u6027\u200b\uff0c\u200b\u4ee4\u200b\u77e9\u5f62\u200b\u5728\u200b\u53f3\u79fb\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u7684\u200b\u901f\u5ea6\u200b\u662f\u200b\u5de6\u79fb\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u901f\u5ea6\u200b\u7684\u200b\u4e09\u500d\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" values=\"20;150;20\" keyTimes=\"0;0.25;1\" begin=\"click\" dur=\"3s\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#calcmodekeysplines","title":"calcMode
\u200b\u5c5e\u6027\u200b\u4e0e\u200bkeySplines
\u200b\u5c5e\u6027","text":"calcMode
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u5173\u952e\u5e27\u200b\u63d2\u503c\u200b\u7684\u200b\u8ba1\u7b97\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u8fdb\u4e00\u6b65\u200b\u5730\u200b\uff0ckeySplines
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u5173\u952e\u5e27\u200b\u63d2\u503c\u200b\u6240\u7528\u200b\u7684\u200b\u51fd\u6570\u200b\uff08\u200b\u8d1d\u585e\u5c14\u200b\u66f2\u7ebf\u200b\uff09\u3002calcMode
\u200b\u5c5e\u6027\u200b\u5141\u8bb8\u200b\u7684\u200b\u53d6\u503c\u200b\u5982\u4e0b\u200b\uff1a
paced
\uff1a\u200b\u5ffd\u7565\u200bkeyTimes
\u200b\u5c5e\u6027\u200b\uff0c\u200b\u5c5e\u6027\u200b\u503c\u200b\u6309\u7167\u200bvalues
\u200b\u4e2d\u200b\u5b9a\u4e49\u200b\u7684\u200b\u5173\u952e\u5e27\u200b\u7ebf\u6027\u200b\u53d8\u5316\u200b linear
\uff1a\u200b\u9ed8\u8ba4\u200b\u53d6\u503c\u200b\uff0c\u200b\u5c5e\u6027\u200b\u503c\u200b\u6309\u7167\u200bvalues
\u200b\u4e2d\u200b\u5b9a\u4e49\u200b\u7684\u200b\u5173\u952e\u5e27\u200b\u5728\u200bkeyTimes
\u200b\u65f6\u95f4\u200b\u5185\u200b\u7ebf\u6027\u200b\u53d8\u5316\u200b discrete
\uff1a\u200b\u5c5e\u6027\u200b\u503c\u200b\u9636\u8dc3\u200b\u53d8\u5316\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8ba4\u4e3a\u200b\u6ca1\u6709\u200b\u63d2\u503c\u200b spline
\uff1a\u200b\u5c5e\u6027\u200b\u503c\u200b\u6309\u7167\u200bkeySplines
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\u5b9a\u4e49\u200b\u7684\u200b\u8d1d\u585e\u5c14\u200b\u66f2\u7ebf\u200b\u53d8\u5316\u200b
\u200b\u4ee5\u4e0b\u200b\u5206\u522b\u200b\u6f14\u793a\u200bcalcMode
\u200b\u5c5e\u6027\u200b\u56db\u79cd\u200b\u53d6\u503c\u200b\u7684\u200b\u6548\u679c\u200b\uff0ckeySplines
\u200b\u5c5e\u6027\u200b\u503c\u200b\u8bbe\u5b9a\u200b\u4e3a\u200b1 0 1 1; 0 0 0 1
\uff1a
SVG\u200b\u56fe\u50cf\u200b pacedlineardiscretespline
"},{"location":"coding/svg/#beginend","title":"begin
\u200b\u5c5e\u6027\u200b\u4e0e\u200bend
\u200b\u5c5e\u6027","text":"begin
\u200b\u5c5e\u6027\u200b\u4e0e\u200bend
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200bSVG\u200b\u52a8\u753b\u200b\u5728\u200b\u4f55\u65f6\u200b\u5f00\u59cb\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u65f6\u95f4\u200b\u96f6\u70b9\u200b\u4e3a\u200b\u9875\u9762\u200b\u6e32\u67d3\u200b\u5b8c\u6210\u200b\u7684\u200b\u65f6\u95f4\u200b\uff0c\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5982\u679c\u200b\u4e0d\u200b\u5728\u200bbegin
\u200b\u4e2d\u200b\u6307\u5b9a\u200b\u7528\u6237\u200b\u4ea4\u4e92\u200b\u4e8b\u4ef6\u200b\uff0c\u200b\u5219\u200b\u52a8\u753b\u200b\u5728\u200b\u6e32\u67d3\u200b\u5b8c\u6210\u200b\u540e\u200b\u5373\u200b\u5f00\u59cb\u200b\u8ba1\u65f6\u200b\u3002end
\u200b\u5c5e\u6027\u200b\u53ef\u4ee5\u200b\u63a7\u5236\u200b\u52a8\u753b\u200b\u7684\u200b\u5f3a\u5236\u200b\u7ed3\u675f\u200b\u65f6\u95f4\u200b\uff0c\u200b\u5982\u679c\u200b\u52a8\u753b\u200b\u5728\u200b\u8be5\u200b\u65f6\u95f4\u200b\u5185\u200b\u6ca1\u6709\u200b\u7ed3\u675f\u200b\uff0c\u200b\u5219\u200b\u7acb\u5373\u200b\u7ed3\u675f\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u4f7f\u7528\u200bbegin
\u200b\u5c5e\u6027\u200b\u63a7\u5236\u200b\u52a8\u753b\u200b\u5ef6\u8fdf\u200b\u5f00\u59cb\u200b2s\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" from=\"20\" to=\"150\" begin=\"click+2s\" dur=\"1.5s\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#additive","title":"additive
\u200b\u5c5e\u6027","text":"additive
\u200b\u5c5e\u6027\u200b\u51b3\u5b9a\u200bvalues
\u200b\u53ca\u200bfrom
\u200b\u4e0e\u200bto
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\u7684\u200b\u5c5e\u6027\u200b\u503c\u200b\u662f\u200b\u7edd\u5bf9\u503c\u200b\u8fd8\u662f\u200b\u76f8\u5bf9\u503c\u200b\u3002\u200b\u5141\u8bb8\u200b\u7684\u200b\u53d6\u503c\u200b\u4e3a\u200bsum
\u200b\u4e0e\u200breplace
\uff0c\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u76f8\u5bf9\u503c\u200b\u4e0e\u200b\u7edd\u5bf9\u503c\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cadditive
\u200b\u5c5e\u6027\u200b\u53d6\u200breplace
\u3002
\u200b\u4ee5\u4e0b\u200b\u4f7f\u7528\u200b\u76f8\u5bf9\u503c\u200b\u63a7\u5236\u200b\u77e9\u5f62\u200b\u7684\u200b\u79fb\u52a8\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100%\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" from=\"0\" to=\"130\" additive=\"sum\" begin=\"click\" dur=\"1.5s\" />\n </rect>\n</svg>\n
"},{"location":"coding/svg/#accumulate","title":"accumulate
\u200b\u5c5e\u6027","text":"accumulate
\u200b\u5c5e\u6027\u200b\u5f53\u200b\u52a8\u753b\u200b\u91cd\u590d\u200b\u65f6\u200b\uff0c\u200b\u5c5e\u6027\u200b\u503c\u200b\u662f\u5426\u200b\u7d2f\u52a0\u200b\u3002\u200b\u5141\u8bb8\u200b\u7684\u200b\u53d6\u503c\u200b\u4e3a\u200bsum
\u200b\u4e0e\u200bnone
\u3002\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u4e0a\u200b\u4e00\u6b21\u200b\u52a8\u753b\u200b\u7ed3\u675f\u200b\u7684\u200b\u503c\u200b\u4e0e\u200b\u52a8\u753b\u200b\u539f\u672c\u200b\u7684\u200b\u5c5e\u6027\u200b\u503c\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0caccumulate
\u200b\u5c5e\u6027\u200b\u53d6\u200bnone
\u3002\u200b\u5f53\u200b\u5c5e\u6027\u200b\u503c\u200b\u4e0d\u200b\u652f\u6301\u200b\u76f8\u52a0\u200b\u6216\u200b\u52a8\u753b\u200b\u4e0d\u200b\u91cd\u590d\u200b\u65f6\u200b\uff0c\u200b\u8be5\u200b\u5c5e\u6027\u200b\u88ab\u200b\u5ffd\u7565\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u5b9e\u73b0\u200b\u6bcf\u6b21\u200b\u70b9\u51fb\u200b\u540e\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u77e9\u5f62\u200b\u4e24\u6b21\u200b\uff0c\u200b\u6bcf\u6b21\u200b65\u200b\u5355\u4f4d\u200b\uff1a
SVG\u200b\u56fe\u50cf\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b
<svg width=\"100%\" height=\"100\">\n <rect x=\"20\" y=\"20\" fill=\"#69EC69\" width=\"100\" height=\"60\">\n <animate attributeName=\"x\" values=\"0;65\" begin=\"click\" keyTimes=\"0;1\" keySplines=\"1 0 1 1\" calcMode=\"spline\" additive=\"sum\" accumulate=\"sum\" dur=\"1.5s\" fill=\"freeze\" repeatCount=\"2\"/>\n </rect>\n</svg>\n
"},{"location":"coding/svg/#_3","title":"\u4ea4\u4e92\u200b\u52a8\u753b","text":"begin
\u200b\u5c5e\u6027\u200b\u7684\u200b\u53d6\u503c\u200b\u53ef\u4ee5\u200b\u4e3a\u200bclick
\u200b\u6216\u200btouch
\u200b\u4ee5\u200b\u54cd\u5e94\u200b\u7528\u6237\u200b\u8f93\u5165\u200b\u3002click
\u200b\u65e2\u200b\u53ef\u4ee5\u200b\u54cd\u5e94\u200b\u9f20\u6807\u200b\u70b9\u51fb\u200b\u4e8b\u4ef6\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u54cd\u5e94\u200b\u7528\u6237\u200b\u89e6\u6478\u200b\u3002touch
\u200b\u53ea\u80fd\u200b\u54cd\u5e94\u200b\u7528\u6237\u200b\u89e6\u6478\u200b\u3002
"},{"location":"coding/svg/#svg_1","title":"\u5e38\u89c1\u200b\u7684\u200bSVG\u200b\u52a8\u753b\u200b\u6548\u679c","text":" - \u200b\u4f4d\u79fb\u200b
- \u200b\u53d8\u6362\u200b
- \u200b\u6de1\u5165\u6de1\u51fa\u200b
- \u200b\u63cf\u8fb9\u200b
- \u200b\u8def\u5f84\u200b\u53d8\u5316\u200b
- \u200b\u989c\u8272\u200b\u53d8\u5316\u200b
"},{"location":"coding/svg/#_4","title":"\u4f4d\u79fb","text":"\u200b\u4f4d\u79fb\u200b\u64cd\u4f5c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4f7f\u7528\u200b<animate>
\u200b\u63a7\u5236\u200b\u5bf9\u8c61\u200b\u7684\u200bx
\u3001y
\u200b\u5c5e\u6027\u200b\u4e0e\u200bwidth
\u3001height
\u200b\u5c5e\u6027\u200b\u5b9e\u73b0\u200b\u3002\u200b\u53ef\u80fd\u200b\u7684\u200b\u5e94\u7528\u200b\u573a\u666f\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u8fdb\u5ea6\u6761\u200b\u3001\u200b\u76f4\u65b9\u56fe\u200b\u7b49\u200b\u7528\u4e8e\u200b\u4ea4\u4e92\u200b\u7684\u200b\u6570\u636e\u200b\u56fe\u8868\u200b
- \u200b\u4ea4\u901a\u5de5\u5177\u200b\u6216\u200b\u5176\u4ed6\u200b\u5bf9\u8c61\u200b\u7684\u200b\u79fb\u52a8\u200b
\u200b\u8fdb\u5ea6\u6761\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8fdb\u5ea6\u6761\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b <svg id=\"\u200b\u56fe\u5c42\u200b_1\" data-name=\"\u200b\u56fe\u5c42\u200b 1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"700\" height=\"195\" viewBox=\"0 0 700 195\">\n <rect x=\"0.5\" y=\"0.5\" width=\"699\" height=\"58\" fill=\"#fff\"/><path d=\"M699,1V58H1V1H699m1-1H0V59H700V0Z\"/>\n <rect x=\"1\" y=\"1\" width=\"446\" height=\"57\" fill=\"red\">\n <animate attributeName=\"width\" values=\"0;698\" keytimes=\"0;1\" calcmode=\"spline\" keysplines=\"0.44 0.27 0.21 0.99\" begin=\"click\" dur=\"1s\" fill=\"freeze\" repeatcount=\"3\"/>\n </rect>\n <rect x=\"0.5\" y=\"68.5\" width=\"699\" height=\"58\" fill=\"#fff\"/>\n <path d=\"M699,69v57H1V69H699m1-1H0v59H700V68Z\"/>\n <rect x=\"1\" y=\"69\" width=\"446\" height=\"57\" fill=\"#dd2\">\n <animate attributeName=\"width\" values=\"0;698\" keytimes=\"0;1\" calcmode=\"spline\" keysplines=\"0 0 0.5 1\" begin=\"click\" dur=\"1s\" fill=\"freeze\" repeatcount=\"3\"/>\n </rect>\n <rect x=\"0.5\" y=\"136.5\" width=\"699\" height=\"58\" fill=\"#fff\"/>\n <path d=\"M699,137v57H1V137H699m1-1H0v59H700V136Z\"/>\n <rect x=\"1\" y=\"137\" width=\"446\" height=\"57\" fill=\"lime\">\n <animate attributeName=\"width\" values=\"0;698\" keytimes=\"0;1\" calcmode=\"spline\" keysplines=\"0.5 0 1 1\" begin=\"click\" dur=\"1s\" fill=\"freeze\" repeatcount=\"3\"/>\n </rect>\n</svg>\n
\u200b\u4e00\u4e2a\u200b\u79fb\u52a8\u200b\u7684\u200b\u5706\u70b9\u200b\uff1a
\u200b\u5706\u70b9\u200b\u52a8\u753b\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b <svg id=\"\u200b\u56fe\u5c42\u200b_1\" data-name=\"\u200b\u56fe\u5c42\u200b 1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" viewBox=\"0 0 700 195\">\n <rect width=\"700\" height=\"195\" fill=\"none\"/>\n <circle cx=\"279.5\" cy=\"97.5\" r=\"25.5\">\n <animate attributeName=\"cx\" values=\"0;90;0\" keytimes=\"0;0.5;1\" calcmode=\"spline\" keysplines=\"0.5 0 0.5 1; 0.5 0 0.5 1\" begin=\"0s\" dur=\"2s\" fill=\"freeze\" repeatcount=\"indefinite\" additive=\"sum\"/>\n </circle>\n</svg>\n
\u200b\u6b64\u5916\u200b\uff0c\u200b\u90e8\u5206\u200b\u4f4d\u79fb\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b<animateMotion>
\u200b\u6807\u7b7e\u200b\u8fdb\u884c\u200b\u63a7\u5236\u200b\uff0c<animateMotion>
\u200b\u6807\u7b7e\u200b\u652f\u6301\u200b\u5bf9\u8c61\u200b\u6309\u7167\u200b\u8def\u5f84\u200b\u8fdb\u884c\u200b\u4f4d\u79fb\u200b\u3002
\u200b\u590d\u6742\u200b\u7684\u200b\u4f4d\u79fb\u200b\u9700\u8981\u200b\u63a7\u5236\u200b\u5bf9\u8c61\u200b\u7684\u200btranslate
\u200b\u5c5e\u6027\u200b\u3002
"},{"location":"coding/svg/#_5","title":"\u53d8\u6362","text":"\u200b\u4ee5\u4e0b\u200b\u5c5e\u6027\u200b\u5f71\u54cd\u200b\u56fe\u5f62\u200b\u7684\u200b\u53d8\u6362\u200b\uff1a
r
\uff1a\u200b\u534a\u5f84\u200b\uff08\u200b\u5bf9\u4e8e\u200b\u5706\u200b\uff09 rotate
\uff1a\u200b\u65cb\u8f6c\u200b\uff08\u200b\u4ee5\u200b\u4e2d\u5fc3\u70b9\u200b\uff09 skewX
\u3001skewY
\uff1a\u200b\u503e\u659c\u200b transform
\uff1a\u200b\u590d\u6742\u200b\u53d8\u6362\u200b
\u200b\u4ee5\u4e0b\u200b\u7ed9\u51fa\u200br
\u200b\u53d8\u6362\u200b\u7684\u200b\u793a\u4f8b\u200b\uff1a
r\u200b\u53d8\u6362\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b >>> \u200b\u70b9\u51fb\u200b\u5706\u70b9\u200b \u200b\u67e5\u770b\u200b\u9690\u85cf\u200b\u5185\u5bb9\u200b <<< Hello World!
<svg id=\"\u200b\u56fe\u5c42\u200b_1\" data-name=\"\u200b\u56fe\u5c42\u200b 1\" xmlns=\"http://www.w3.org/2000/svg\" width=\"350\" viewBox=\"0 0 749 1334\">\n <rect width=\"749\" height=\"1334\" fill=\"#fff\"/>\n <text transform=\"translate(221.4 1070.91)\" font-size=\"21\" font-family=\"PingFang-SC-Regular, PingFang SC\">\n >>> \u200b\u70b9\u51fb\u200b\u5706\u70b9\u200b \u200b\u67e5\u770b\u200b\u9690\u85cf\u200b\u5185\u5bb9\u200b <<<\n </text>\n <circle cx=\"375\" cy=\"992\" r=\"29\" fill=\"#ed1e79\">\n <animate attributeName=\"r\" values=\"0;1100\" keytimes=\"0;1\" calcmode=\"spline\" keysplines=\"0 0 0.5 1\" begin=\"click\" dur=\"0.75s\" fill=\"freeze\" additive=\"sum\" restart=\"never\">\n </circle>\n <text transform=\"translate(0 295.12)\" font-size=\"192\" fill=\"#fff\" font-family=\"PingFang-SC-Heavy, PingFang SC\" font-weight=\"800\">\n Hello\n <tspan x=\"0\" y=\"230.4\">\n World!\n </tspan>\n </text>\n</svg>\n
transform
\u200b\u5c5e\u6027\u200b\u5728\u200banimateTransform
\u200b\u6807\u7b7e\u200b\u4e2d\u200b\u66f4\u6539\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u8f83\u4e3a\u200b\u590d\u6742\u200b\u7684\u200b\u53d8\u6362\u200b\uff0c\u200b\u5982\u7ed5\u200b\u67d0\u200b\u4e00\u4e2a\u200b\u7279\u5b9a\u200b\u70b9\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\uff1a
transform\u200b\u53d8\u6362\u200b \u200b\u6e32\u67d3\u200b\u56fe\u50cf\u200bSVG\u200b\u4ee3\u7801\u200b <svg id=\"\u200b\u56fe\u5c42\u200b_1\" data-name=\"\u200b\u56fe\u5c42\u200b 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 749 1340\" width=\"350\">\n <rect y=\"6\" width=\"749\" height=\"1334\" fill=\"#fff\"/>\n <g>\n <animateTransform attributeName=\"transform\" type=\"rotate\" values=\"0 375 0; -10 375 0; 10 375 0; 0 375 0\" keytimes=\"0;0.25;0.75;1\" calcmode=\"spline\" keysplines=\"0 0 0.5 1; 0.5 0 0.5 1; 0.5 0 1 1\" start=\"0s\" dur=\"2s\" repeatcount=\"indefinite\" />\n <line x1=\"375\" y1=\"6\" x2=\"375\" y2=\"969.5\" fill=\"none\" stroke=\"#000\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"12\"/>\n <circle cx=\"375\" cy=\"969\" r=\"45\" stroke=\"#000\" stroke-linecap=\"round\" stroke-miterlimit=\"10\" stroke-width=\"12\"/>\n </g>\n</svg>\n
"},{"location":"coding/configuration/","title":"\u7cfb\u7edf\u914d\u7f6e","text":""},{"location":"coding/configuration/#_2","title":"\u547d\u4ee4\u884c","text":" - apt
- Docker
- ssh
- Vim
- update-alternatives
"},{"location":"coding/configuration/#_3","title":"\u8f6f\u4ef6\u200b\u7f16\u8bd1\u200b\u6d41\u7a0b","text":" - \u200b\u6e90\u7801\u200b\u7f16\u8bd1\u200bnginx\u200b\u5e76\u200b\u6dfb\u52a0\u200bRTMP\u200b\u6a21\u5757\u200b
"},{"location":"coding/configuration/apt-get/","title":"apt\uff1aUbuntu \u200b\u5305\u200b\u7ba1\u7406\u5de5\u5177","text":"Ubuntu\u200b\u4e0b\u200b\u7684\u200b\u5305\u200b\u7ba1\u7406\u5de5\u5177\u200b\u662f\u200bdpkg
\uff0c\u200b\u6709\u200b\u4e24\u4e2a\u200b\u524d\u7aef\u200bapt
\u200b\u548c\u200bapt-get
\u3002
"},{"location":"coding/configuration/apt-get/#_1","title":"\u5b89\u88c5\u200b\u4e2d\u65ad\u200b\u540e\u200b\u7684\u200b\u6062\u590d","text":"\u200b\u5728\u200b\u67d0\u4e2a\u200b\u8f6f\u4ef6\u200b\u5b89\u88c5\u200b\u4e2d\u65ad\u200b\uff08\u200b\u5982\u200bCtrl+C\u200b\u6216\u200bkill\uff09\u200b\u540e\u200b\uff0c\u200b\u8f6f\u4ef6\u200b\u7684\u200b\u5b89\u88c5\u200b\u5e76\u200b\u6ca1\u6709\u200b\u5b9e\u9645\u200b\u5b8c\u6210\u200b\uff0c\u200b\u9700\u8981\u200b\u7ee7\u7eed\u6267\u884c\u200b\u5b89\u88c5\u64cd\u4f5c\u200b\u6216\u200b\u56de\u6eda\u200b\u5230\u200b\u5b89\u88c5\u200b\u4e4b\u524d\u200b\u7684\u200b\u72b6\u6001\u200b\u3002
\u200b\u82e5\u200b\u8981\u200b\u7ee7\u7eed\u200b\u5b89\u88c5\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6267\u884c\u200b\u5982\u4e0b\u200b\u547d\u4ee4\u200b\uff0cdpkg
\u200b\u4f1a\u200b\u5c1d\u8bd5\u200b\u5bf9\u200b\u5df2\u7ecf\u200b\u89e3\u538b\u200b\u672a\u200b\u5b8c\u6210\u200b\u5b89\u88c5\u200b\u7684\u200b\u8f6f\u4ef6\u5305\u200b\u8fdb\u884c\u200b\u6062\u590d\u200b\u3002
sudo dpkg --configure -a\n
\u200b\u82e5\u8981\u200b\u56de\u6eda\u200b\u5b89\u88c5\u200b\uff0c\u200b\u9700\u8981\u200b\u5148\u200b\u5728\u200bdpkg
\u200b\u7684\u200b\u5b89\u88c5\u200b\u8bb0\u5f55\u200b\u4e0b\u200b\u627e\u5230\u200b\u672a\u200b\u5b8c\u5168\u5b89\u88c5\u200b\u7684\u200b\u5305\u200b\uff0c\u200b\u5c06\u200b\u5176\u200b\u5220\u9664\u200b\u540e\u200b\u91cd\u65b0\u914d\u7f6e\u200bapt
\u3002\u200b\u6b64\u5904\u200b\u4ee5\u200bnvidia-cudnn
\u200b\u4e3a\u4f8b\u200b\uff1a
sudo ls -l /var/lib/dpkg/info | grep -i nvidia-cudnn\nsudo mv /var/lib/dpkg/info/nvidia-cudnn.* /tmp\nsudo dpkg --configure -a\nsudo apt-get autoremove\n
"},{"location":"coding/configuration/docker/","title":"Docker","text":"docker
\u200b\u662f\u200b\u7528\u4e8e\u200b\u63d0\u4f9b\u200b\u5bb9\u5668\u200b\u955c\u50cf\u200b\u7684\u200b\u8f6f\u4ef6\u200b\u3002\u200b\u955c\u50cf\u200b\u662f\u200b\u4e00\u5957\u200b\u914d\u7f6e\u200b\u597d\u200b\u7684\u200b\u8fd0\u884c\u200b\u73af\u5883\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5feb\u901f\u200b\u90e8\u7f72\u200b\u4e3a\u200b\u5e94\u7528\u7a0b\u5e8f\u200b\u3002
"},{"location":"coding/configuration/docker/#docker-registry","title":"Docker registry","text":"Docker registry\u200b\u662f\u200bdocker\u200b\u7684\u200b\u955c\u50cf\u200b\u6e90\u200b\u3002
"},{"location":"coding/configuration/docker/#_1","title":"\u767b\u5f55","text":"\u200b\u767b\u5f55\u200b\u7ec8\u7aef\u200b\u540e\u200b\uff0c\u200b\u624d\u80fd\u200b\u4ece\u200b\u7f51\u7edc\u200b\u4e0a\u200bpush\u200b\u548c\u200bpull\u200b\u955c\u50cf\u200b\u3002\u200b\u767b\u5f55\u200b\u7684\u200b\u547d\u4ee4\u200b\u4e3a\u200b
docker login <registry-url>\n
\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u6307\u5b9a\u200b<registry-url>
\uff0c\u200b\u5219\u200b\u9ed8\u8ba4\u200b\u4f7f\u7528\u200bDocker registry docker.io
\u3002
\u200b\u767b\u5f55\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u4f1a\u200b\u8bf7\u6c42\u200b\u7528\u6237\u200b\u8f93\u5165\u200b\u7528\u6237\u540d\u200b\u548c\u200b\u5bc6\u7801\u200b\uff08\u200b\u6216\u200bAccess Token\uff09\u3002\u200b\u5982\u679c\u200b\u8d26\u6237\u200b\u914d\u7f6e\u200b\u4e86\u200b2FA\uff0c\u200b\u5219\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200bAccess Token\u200b\u7684\u200b\u65b9\u5f0f\u200b\u767b\u5f55\u200b\u3002\u200b\u767b\u5f55\u200b\u4fe1\u606f\u200b\u4fdd\u5b58\u200b\u5728\u200b~/.docker/config.json
\u200b\u6216\u200b\u7cfb\u7edf\u200b\u7684\u200b\u94a5\u5319\u200b\u4e32\u4e2d\u200b\u3002\u200b\u5982\u679c\u200b\u52a0\u4e0a\u200b--password-stdin
\u200b\u53c2\u6570\u200b\uff0cdocker\u200b\u4f1a\u200b\u4ece\u200b\u547d\u4ee4\u884c\u200b\u4e2d\u200b\u8bfb\u53d6\u200b\u5bc6\u7801\u200b\u3002
\u200b\u914d\u7f6e\u200bdocker\u200b\u4f7f\u7528\u200bmacOS\u200b\u94a5\u5319\u200b\u4e32\u200b
- \u200b\u6267\u884c\u200b
docker logout
\uff0c\u200b\u5220\u9664\u200b\u539f\u5148\u200b\u7684\u200b\u767b\u5f55\u200b\u51ed\u8bc1\u200b\uff1b - \u200b\u4ece\u200bHomebrew\u200b\u5b89\u88c5\u200b
docker-credential-helper
\uff1b - \u200b\u5728\u200b
~/.docker/config.json
\u200b\u4e2d\u200b\u52a0\u5165\u200b\u5982\u4e0b\u200b\u4e00\u884c\u200b\uff1a
{\n \"credsStore\": \"osxkeychain\"\n}\n
- \u200b\u91cd\u65b0\u200b\u6267\u884c\u200b
docker login
\u200b\u767b\u5f55\u200b\uff1b - \u200b\u786e\u8ba4\u200b
~/.docker/config.json
\u200b\u91cc\u200b\u6ca1\u6709\u200b\u767b\u5f55\u200b\u51ed\u8bc1\u200b\uff1a
{\n \"auths\": {\n \"https://index.docker.io/v1/\": {}\n }\n}\n
"},{"location":"coding/configuration/docker/#_2","title":"\u7b2c\u4e09\u65b9\u200b\u955c\u50cf\u200b\u6e90\u200b\u5217\u8868","text":"ghcr.io
ghcr.io
\u200b\u662f\u200bGitHub\u200b\u63d0\u4f9b\u200b\u7684\u200b\u955c\u50cf\u200b\u6e90\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u65e0\u7f1d\u200b\u96c6\u6210\u200b\u81f3\u200bGitHub Actions\u3002
\u200b\u9a8c\u8bc1\u200b\u65b9\u5f0f\u200b\uff1a
- \u200b\u4f7f\u7528\u200bGitHub Access Token\u200b\u9a8c\u8bc1\u200b\uff0cAccess Token\u200b\u5fc5\u987b\u200b\u81f3\u5c11\u200b\u5177\u5907\u200b
read:packages
\u200b\u6743\u9650\u200b\uff0c\u200b\u5982\u679c\u200b\u8981\u200b\u63a8\u9001\u200b\u955c\u50cf\u200b\uff0c\u200b\u5219\u200b\u8fd8\u200b\u9700\u8981\u200bwrite:packages
\u200b\u6743\u9650\u200b - \u200b\u5728\u200bGitHub Actions\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b
GITHUB_TOKEN
\u200b\u9a8c\u8bc1\u200b\u3002
"},{"location":"coding/configuration/docker/#dockerfile","title":"Dockerfile","text":"dockerfile
\u200b\u6587\u4ef6\u200b\u7528\u6765\u200b\u5c06\u200b\u4e00\u5957\u200b\u73af\u5883\u200b\u6253\u5305\u200b\u6210\u200b\u955c\u50cf\u200b\u3002\u200b\u6bcf\u200b\u4e00\u6761\u200b\u6307\u4ee4\u200b\u90fd\u200b\u5bf9\u5e94\u200b\u4e86\u200b\u5bb9\u5668\u200b\u955c\u50cf\u200b\u7684\u200b\u4e00\u5c42\u200b\u3002
"},{"location":"coding/configuration/docker/#docker_1","title":"Docker\u200b\u955c\u50cf\u200b\u57fa\u7840","text":"Docker\u200b\u955c\u50cf\u200b\u7684\u200b\u57fa\u672c\u200b\u683c\u5f0f\u200b\u4e3a\u200b[<registry-name>]/<namespace>/<image-name>:[<tag>]
<registry-name>
\uff1a\u200b\u53ef\u200b\u9009\u200b\uff0c\u200b\u51b3\u5b9a\u200bDocker\u200b\u955c\u50cf\u200b\u53d1\u5e03\u200b\u5728\u200b\u54ea\u4e2a\u200bRegistry\u200b\u4e0a\u200b\uff1b <namespace>
\uff1a\u200b\u4e00\u822c\u200b\u662f\u200b\u7528\u6237\u540d\u200b\uff1b <image-name>
\uff1a\u200b\u955c\u50cf\u200b\u540d\u79f0\u200b\uff1b <tag>
\uff1a\u200b\u53ef\u200b\u9009\u200b\uff0c\u200b\u955c\u50cf\u200b\u7248\u672c\u200b\uff0c\u200b\u9ed8\u8ba4\u200b\u4e3a\u200blatest
\u200b\u4f7f\u7528\u200bdocker pull
\u200b\u547d\u4ee4\u200b\u4ece\u200bregistry\u200b\u4e0b\u8f7d\u200b\u955c\u50cf\u200b\u3002
\u200b\u6267\u884c\u200bdocker build <path>
\u200b\u6765\u200b\u4ece\u200bDockerfile\u200b\u6784\u5efa\u200b\u955c\u50cf\u200b\u3002\u200b\u7528\u200b-t
\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u6307\u5b9a\u200b\u955c\u50cf\u200b\u7684\u200b\u540d\u79f0\u200b\u548c\u200b\u7248\u672c\u200b\u3002
\u200b\u5728\u200b\u955c\u50cf\u200b\u6784\u5efa\u200b\u5b8c\u6210\u200b\u540e\u200b\uff0c\u200b\u6267\u884c\u200bdocker push <image-name>
\u200b\u5c06\u200b\u955c\u50cf\u200b\u63a8\u9001\u200b\u5230\u200b\u5bf9\u5e94\u200b\u7684\u200bregistry\u200b\u4e0a\u200b\u3002
"},{"location":"coding/configuration/docker/#add","title":"ADD
","text":"ADD
\uff08\u200b\u6216\u200bCOPY
\uff09\u200b\u547d\u4ee4\u200b\u5c06\u200b\u672c\u5730\u200b\u6216\u200b\u4e92\u8054\u7f51\u200b\u4e0a\u200b\u7684\u200b\u6587\u4ef6\u200b\u590d\u5236\u5230\u200b\u5bb9\u5668\u200b\u955c\u50cf\u200b\u4e2d\u200b\u3002
ADD <local-path> <image-path>\n
- \u200b\u5982\u679c\u200b\u8def\u5f84\u200b\u4e2d\u200b\u5305\u542b\u200b\u7a7a\u683c\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200b\u53cc\u5f15\u53f7\u200b\u628a\u200b\u8def\u5f84\u200b\u62ec\u200b\u8d77\u6765\u200b\uff1b
<local-path>
\u200b\u652f\u6301\u200b\u901a\u914d\u7b26\u200b*?
\uff1b
"},{"location":"coding/configuration/docker/#from","title":"FROM
","text":"FROM
\u200b\u547d\u4ee4\u200b\u6307\u660e\u200b\u5f53\u524d\u200b\u7684\u200bdockerfile
\u200b\u662f\u200b\u5728\u200b\u54ea\u200b\u4e00\u4e2a\u200b\u955c\u50cf\u200b\u4e0a\u200b\u6267\u884c\u200b\u7684\u200b\u3002\u200b\u6bcf\u4e2a\u200bDockerfile\u200b\u5fc5\u987b\u200b\u6709\u200b\u4e00\u6761\u200bFROM
\u200b\u8bed\u53e5\u200b\u3002
\u200b\u7a7a\u767d\u200bDocker\u200b\u955c\u50cf\u200b
scratch
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u9884\u5b9a\u200b\u4e49\u200b\u7684\u200b\u7a7a\u767d\u200bDocker\u200b\u955c\u50cf\u200b\uff0c\u200b\u4e5f\u200b\u662f\u200b\u6240\u6709\u200bDocker\u200b\u955c\u50cf\u200b\u7684\u200b\u8d77\u59cb\u200b\u3002
FROM scratch\n
"},{"location":"coding/configuration/docker/#run","title":"RUN
","text":"RUN
\u200b\u6267\u884c\u200b\u4e00\u4e2a\u200b\u547d\u4ee4\u200b\uff0c\u200b\u5982\u679c\u200b\u8981\u200b\u6267\u884c\u200b\u591a\u4e2a\u200b\u547d\u4ee4\u200b\u53ef\u4ee5\u200b\u7528\u200b&&
\u200b\u8fde\u63a5\u200b
RUN command-1 && \\\n command-2 && \\\n ...\n
"},{"location":"coding/configuration/docker/#tls","title":"\u914d\u7f6e\u200bTLS\u200b\u8fdc\u7a0b\u200b\u8bbf\u95ee","text":"Docker\u200b\u662f\u200bc/s\u200b\u67b6\u6784\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u53ef\u4ee5\u200b\u4ece\u200b\u8fdc\u7a0b\u200b\u8bbf\u95ee\u200b\u4e3b\u673a\u200b\u7684\u200bDocker daemon\uff0c\u200b\u4ece\u200b\u8fdc\u7a0b\u200b\u76f4\u63a5\u200b\u64cd\u4f5c\u200bDocker\u200b\u73af\u5883\u200b\uff0c\u200b\u5bb9\u5668\u200b\u548c\u200b\u955c\u50cf\u200b\u5747\u200b\u4fdd\u5b58\u200b\u5728\u200b\u8fdc\u7a0b\u200b\u4e3b\u673a\u200b\u4e0a\u200b\u3002\u200b\u4f46\u200b\u5728\u200b\u7f51\u7edc\u200b\u4e0a\u200b\u9700\u8981\u200bTLS\u200b\u52a0\u5bc6\u4f20\u8f93\u200b\u4ee5\u200b\u4fdd\u8bc1\u200b\u5b89\u5168\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u5148\u200b\u914d\u7f6e\u200b\u597d\u200bopenssl\uff0c\u200b\u5e76\u4e14\u200b\u6709\u200b\u4e00\u4e2a\u200b\u89e3\u6790\u200b\u5230\u200b\u670d\u52a1\u5668\u200b\u7684\u200b\u57df\u540d\u200b\uff0c\u200b\u5982\u200bwww.example.com
\u3002
"},{"location":"coding/configuration/docker/#_3","title":"\u670d\u52a1\u5668\u200b\u914d\u7f6e","text":"dockerd
\u200b\u662f\u200bDocker daemon\u200b\u7684\u200b\u53ef\u6267\u884c\u7a0b\u5e8f\u200b\u3002
Docker DaemonDocker Desktop \u200b\u5728\u200b\u670d\u52a1\u5668\u7aef\u200b\uff0c\u200b\u9700\u8981\u200b\u6267\u884c\u200b\u5982\u4e0b\u200b\u547d\u4ee4\u200b\u3002
-
\u200b\u751f\u6210\u200bCA\u200b\u5bc6\u94a5\u200b
openssl genrsa -aes256 -out ca-key.pem 4096\nopenssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem # (1)\n
- \u200b\u4f1a\u200b\u8bf7\u6c42\u200b\u8f93\u5165\u200b\u4e00\u4e9b\u200b\u4fe1\u606f\u200b\uff0c\u200b\u5176\u4e2d\u200b
Common Name
\u200b\u4e00\u6761\u200b\u9700\u8981\u200b\u586b\u5199\u200b\u670d\u52a1\u5668\u200b\u5bf9\u5e94\u200b\u7684\u200b\u57df\u540d\u200b\u3002
-
\u200b\u751f\u6210\u200b\u670d\u52a1\u5668\u200b\u5bc6\u94a5\u200b\u548c\u200b\u8bc1\u4e66\u200b
openssl genrsa -out server-key.pem 4096\nopenssl req -subj \"/CN=www.example.com\" -sha256 -new -key server-key.pem -out server.csr\necho subjectAltName = DNS:$HOST,IP:8.8.8.8 >> extfile.cnf # (1)\necho extendedKeyUsage = serverAuth >> extfile.cnf\nopenssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \\\n -CAcreateserial -out server-cert.pem -extfile extfile.cnf\n
- \u200b\u5982\u679c\u200b\u4e0d\u200b\u9700\u8981\u200bIP\u200b\u5730\u5740\u200b\u8bbf\u95ee\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5220\u9664\u200b\u76f8\u5173\u200b\u6761\u76ee\u200b\u3002
-
\u200b\u751f\u6210\u200b\u5ba2\u6237\u7aef\u200b\u5bc6\u94a5\u200b\u548c\u200b\u8bc1\u4e66\u200b
openssl genrsa -out key.pem 4096\nopenssl req -subj '/CN=client' -new -key key.pem -out client.csr\necho extendedKeyUsage = clientAuth > extfile-client.cnf\nopenssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \\\n -CAcreateserial -out cert.pem -extfile extfile-client.cnf\n
-
\u200b\u6e05\u7406\u200b\u5176\u4f59\u200b\u6587\u4ef6\u200b\uff0c\u200b\u53ea\u200b\u7559\u4e0b\u200b.pem
\u200b\u8bc1\u4e66\u200b\u6587\u4ef6\u200b\uff0c\u200b\u5e76\u4e14\u200b\u8c03\u6574\u200b\u8bc1\u4e66\u200b\u6587\u4ef6\u200b\u7684\u200b\u6743\u9650\u200b
rm -v client.csr server.csr extfile.cnf extfile-client.cnf\nchmod -v 0400 ca-key.pem key.pem server-key.pem\nchmod -v 0444 ca.pem server-cert.pem cert.pem\n
-
\u200b\u542f\u52a8\u200bDocker daemon
dockerd \\\n --tlsverify \\\n --tlscacert=ca.pem \\\n --tlscert=server-cert.pem \\\n --tlskey=server-key.pem \\\n -H=0.0.0.0:2376\n
-
\u200b\u5206\u53d1\u200b\u5ba2\u6237\u7aef\u200b\u8bc1\u4e66\u200bca.pem
\u3001cert.pem
\u3001key.pem
\u3002\u200b\u5ba2\u6237\u7aef\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4ee5\u4e0b\u200b\u547d\u4ee4\u200b\u8fde\u63a5\u200b
docker --tlsverify \\\n --tlscacert=ca.pem \\\n --tlscert=cert.pem \\\n --tlskey=key.pem \\\n -H=$HOST:2376\n
\u200b\u5728\u200bWindows\u200b\u4e2d\u200b\uff0cDocker\u200b\u901a\u8fc7\u200bWSL\u200b\u6216\u8005\u200bHyper-V\u200b\u865a\u62df\u5316\u200b\u5b9e\u73b0\u200bLinux\u200b\u73af\u5883\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5982\u679c\u200b\u5728\u200bWindows\u200b\u4e0b\u200b\u76f4\u63a5\u200b\u6267\u884c\u200bdockerd.exe
\uff0c\u200b\u5f97\u5230\u200b\u7684\u200b\u662f\u200b\u8fd0\u884c\u200bWindows\u200b\u5bb9\u5668\u200b\u7684\u200bDocker\u3002\u200b\u5982\u679c\u200b\u8981\u200b\u8fdc\u7a0b\u200b\u8fde\u63a5\u200b\u8fd0\u884c\u200bLinux\u200b\u7684\u200bDocker\u200b\u73af\u5883\u200b\uff0c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bdocker-remote-api-tls
\u3002
Docker Desktop Engine \u200b\u914d\u7f6e\u6587\u4ef6\u200b
\u200b\u5728\u200bDocker Desktop\u200b\u91cc\u200b\u7684\u200bSettings - Engine\u200b\u91cc\u200b\u4fee\u6539\u200bTLS\u200b\u53c2\u6570\u200b\u914d\u7f6e\u200b\uff0c\u200b\u4f1a\u200b\u5bfc\u81f4\u200bDocker Engine\u200b\u65e0\u6cd5\u200b\u542f\u52a8\u200b\u3002
- \u200b\u6267\u884c\u200b
git clone https://github.com/kekru/docker-remote-api-tls.git
\u200b\u514b\u9686\u200b\u955c\u50cf\u200b -
\u200b\u7f16\u8f91\u200bdocker-compose.yml
\uff0c\u200b\u66ff\u6362\u200b<password>
\u3001<domain-or-ip>
\u3001<client-cert-path>
\u200b\u4e2d\u200b\u7684\u200b\u5185\u5bb9\u200b
version: \"3.4\"\nservices:\n remote-api:\n image: kekru/docker-remote-api-tls:v0.4.0\n ports:\n - 2376:443\n environment:\n - CREATE_CERTS_WITH_PW=<password>\n - CERT_HOSTNAME=<domain-or-ip>\n volumes:\n - <client-cert-path>:/data/certs # (1)\n - /var/run/docker.sock:/var/run/docker.sock:ro\n
- \u200b\u4e0d\u52a0\u200b\u8fd9\u200b\u4e00\u884c\u200b\u4e5f\u200b\u884c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u4ece\u200bDocker Desktop\u200b\u91cc\u200b\u590d\u5236\u200b
-
\u200b\u6267\u884c\u200bdocker-compose up -d
\u200b\u8fd0\u884c\u200b\u5bb9\u5668\u200b\uff0c\u200b\u6ce8\u610f\u200b\u5728\u200b\u8fdc\u7a0b\u200b\u8fde\u63a5\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u9700\u8981\u200b\u4fdd\u8bc1\u200b\u5bb9\u5668\u200b\u59cb\u7ec8\u200b\u5f00\u542f\u200b
"},{"location":"coding/configuration/docker/#_4","title":"\u5ba2\u6237\u7aef\u200b\u914d\u7f6e","text":" - \u200b\u5c06\u200b
ca.pem
\u3001cert.pem
\u3001key.pem
\u200b\u590d\u5236\u5230\u200b\u5ba2\u6237\u7aef\u200b\u7684\u200b~/.docker
\u200b\u76ee\u5f55\u200b\u4e0b\u200b -
\u200b\u8bbe\u7f6e\u200b\u73af\u5883\u53d8\u91cf\u200b\uff08\u200b\u53ea\u200b\u9002\u7528\u200b\u4e8e\u200b\u4ece\u200b\u7ec8\u7aef\u200b\u8bbf\u95ee\u200bDocker\u200b\u7684\u200b\u60c5\u51b5\u200b\uff09
export $DOCKER_TLS_VERIFY=1\nexport $DOCKER_HOST=\"tcp://<domain-or-ip>:2376\"\n
-
\u200b\u6216\u8005\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200bDocker context
docker context create remote --docker \\\n \"host=tcp://<domain-or-ip>:2376,ca=~/.docker/ca.pem,cert=~/.docker/cert.pem,key=~/.docker/key.pem\n
-
\u200b\u6b64\u540e\u200b\uff0cDocker\u200b\u4f1a\u200b\u9ed8\u8ba4\u200b\u4f7f\u7528\u200b\u8fdc\u7a0b\u200b\u8fde\u63a5\u200b\u3002
\u200b\u5982\u679c\u200b\u8fde\u63a5\u200b\u6210\u529f\u200b\uff0c\u200b\u6267\u884c\u200bdocker version
\u200b\u4f1a\u200b\u540c\u65f6\u200b\u8f93\u51fa\u200b\u5ba2\u6237\u7aef\u200b\u548c\u200b\u670d\u52a1\u5668\u200b\u4e24\u8005\u200b\u7684\u200b\u7248\u672c\u4fe1\u606f\u200b\uff0c\u200b\u5982\u200b
Client: Docker Engine - Community\n Version: 24.0.5\n API version: 1.43\n Go version: go1.20.6\n Git commit: ced0996600\n Built: Wed Jul 19 19:44:22 2023\n OS/Arch: darwin/arm64\n Context: default\n\nServer: Docker Desktop 4.21.1 (114176)\n Engine:\n Version: 24.0.2\n API version: 1.43 (minimum version 1.12)\n Go version: go1.20.4\n Git commit: 659604f\n Built: Thu May 25 21:52:17 2023\n OS/Arch: linux/amd64\n Experimental: false\n containerd:\n Version: 1.6.21\n GitCommit: 3dce8eb055cbb6872793272b4f20ed16117344f8\n runc:\n Version: 1.1.7\n GitCommit: v1.1.7-0-g860f061\n docker-init:\n Version: 0.19.0\n GitCommit: de40ad0\n
\u200b\u6302\u8f7d\u200b\u5377\u200b
\u200b\u5728\u200bDocker\u200b\u4e2d\u200b\uff0c\u200b\u65e0\u8bba\u662f\u200b\u4f7f\u7528\u200b-v
\u200b\u53c2\u6570\u200b\u8fd8\u662f\u200b--mount
\u200b\u53c2\u6570\u200b\u6302\u8f7d\u200b\u7684\u200b\u5377\u200b\u7684\u200b\u6e90\u200b\u8def\u5f84\u200b\u90fd\u200b\u662f\u200b\u76f8\u5bf9\u200b\u4e8e\u200bDocker Daemon\u200b\u800c\u8a00\u200b\u7684\u200b\u3002
"},{"location":"coding/configuration/docker/#_5","title":"\u53c2\u8003\u200b\u9605\u8bfb","text":"Docker registry\uff1a
- Working with the Container registry (GitHub)
Dockerfile\uff1a
\u200b\u8fdc\u7a0b\u200b\u8bbf\u95ee\u200bDocker daemon\uff1a
- Windows Docker \u200b\u4e3b\u673a\u200b\u8fdc\u7a0b\u7ba1\u7406\u200b
- Protect the Docker daemon socket
- dockerd
- Docker Remote API with TLS client authentication via container
- How can I mount a volume of files to a remote docker daemon?
"},{"location":"coding/configuration/nginx-rtmp/","title":"\u6e90\u7801\u200b\u7f16\u8bd1\u200bnginx\u200b\u5e76\u200b\u6dfb\u52a0\u200bRTMP\u200b\u6a21\u5757","text":""},{"location":"coding/configuration/nginx-rtmp/#_1","title":"\u5148\u51b3\u6761\u4ef6","text":" \u200b\u672c\u6b21\u200b\u7f16\u8bd1\u200b\u4f7f\u7528\u200b\u7684\u200b\u73af\u5883\u200b\uff1a
- Windows 19042.662
- Visual Studio 2019
- Visual Studio Build Tools 2017
- Windows 10 SDK 10.0.17763.0
- nginx 1.19.5
- openssl 1.1.1g
- zlib 1.2.11
- pcre 8.44
- perl 5.32 (Strawberry)
- nasm 2.15.05
- nmake 14.27.29112.0
- MSVC(cl) 19.27.29112
\u200b\u5c06\u200b\u5305\u542b\u200bperl.exe
\u3001nasm.exe
\u3001sed.exe
\u200b\u7684\u200b\u76ee\u5f55\u200b\u6dfb\u52a0\u200b\u5230\u200bPATH\u200b\u73af\u5883\u53d8\u91cf\u200b\u3002
"},{"location":"coding/configuration/nginx-rtmp/#_2","title":"\u51c6\u5907\u200b\u5de5\u4f5c","text":"\u200b\u542f\u52a8\u200bMSYS\uff0ccd
\u200b\u5230\u200bnginx\u200b\u7684\u200b\u6e90\u4ee3\u7801\u200b\u76ee\u5f55\u200b\uff0c\u200b\u5207\u6362\u200b\u5230\u200bC\u200b\u76d8\u200b\u6839\u76ee\u5f55\u200b\u7684\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
cd /c/\n
\u200b\u6267\u884c\u200bauto/configure
\uff0c\u200b\u6839\u636e\u200bnginx\u200b\u5b98\u7f51\u200b\u63d0\u4f9b\u200b\u7684\u200b\u53c2\u6570\u200b\u8fdb\u884c\u200b\uff0c\u200b\u6dfb\u52a0\u200b``\u200b\u53c2\u6570\u200b\uff0c\u200b\u5177\u4f53\u200b\u547d\u4ee4\u200b\u5982\u4e0b\u200b\uff1a
auto/configure \\\n --with-cc=cl \\\n --with-debug \\\n --prefix=. \\\n --conf-path=conf/nginx.conf \\\n --pid-path=logs/nginx.pid \\\n --http-log-path=logs/access.log \\\n --error-log-path=logs/error.log \\\n --sbin-path=nginx.exe \\\n --http-client-body-temp-path=temp/client_body_temp \\\n --http-proxy-temp-path=temp/proxy_temp \\\n --http-fastcgi-temp-path=temp/fastcgi_temp \\\n --http-scgi-temp-path=temp/scgi_temp \\\n --http-uwsgi-temp-path=temp/uwsgi_temp \\\n --with-cc-opt=-DFD_SETSIZE=1024 \\\n --with-pcre=pcre-8.44 \\\n --with-zlib=zlib \\\n --with-openssl=openssl \\\n --with-openssl-opt=no-asm \\\n --with-http_ssl_module \\\n --add-module=nginx-rtmp-module\n
\u200b\u6ce8\u610f\u200b\u6b64\u5904\u200b--with-pcre
\u3001--with-zlib
\u3001--with-openssl
\u200b\u53c2\u6570\u200b\u4e2d\u200b\u63d0\u4f9b\u200b\u7684\u200b\u8def\u5f84\u200b\u9700\u8981\u200b\u4e0e\u200bPCRE\u3001zlib\u3001openssl\u200b\u7684\u200b\u6e90\u4ee3\u7801\u200b\u8def\u5f84\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u3002
\u200b\u6267\u884c\u200b\u5b8c\u6bd5\u200b\u540e\u200b\u751f\u6210\u200bMakefile\u200b\u6587\u4ef6\u200b\u300232\u200b\u4f4d\u200b\u73af\u5883\u200b\u4e0b\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u5f00\u59cb\u200b\u7f16\u8bd1\u200b\uff0c64\u200b\u4f4d\u200b\u73af\u5883\u200b\u4e0b\u200b\u9700\u8981\u200b\u5bf9\u200bauto\\lib\\openssl\\makefile.msvc
\u200b\u6539\u4e3a\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b
# Copyright (C) Igor Sysoev\n# Copyright (C) Nginx, Inc.\n\n\nall:\n cd $(OPENSSL)\n\n perl Configure VC-WIN64A no-shared \\\n --prefix=\"%cd%/openssl\" \\\n --openssldir=\"%cd%/openssl/ssl\" \\\n $(OPENSSL_OPT)\n\n if exist ms\\do_win64a.bat ( \\\n ms\\do_win64a \\\n && $(MAKE) -f ms\\nt.mak \\\n && $(MAKE) -f ms\\nt.mak install \\\n ) else ( \\\n $(MAKE) \\\n && $(MAKE) install_sw \\\n )\n
\u200b\u5c06\u200bVC-WIN32
\u200b\u66ff\u6362\u200b\u4e3a\u200bVC-WIN64A
\uff0c\u200b\u6240\u6709\u200b\u7684\u200bms\\do_ms.bat
\u200b\u66ff\u6362\u200b\u4e3a\u200bms\\do_win64a.bat
\u3002
"},{"location":"coding/configuration/nginx-rtmp/#msvc","title":"MSVC\u200b\u7f16\u8bd1","text":"\u200b\u7f16\u8f91\u200b\u5982\u4e0b\u200b\u6e90\u4ee3\u7801\u200b\u6587\u4ef6\u200b\uff1a
nginx-rtmp-module/ngx_rtmp_flv_module.c
\uff0c\u200b\u5b9a\u4f4d\u200b\u5230\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\u5757\u200b\uff1a
509\u200b\u884c\u200b\uff1a
ngx_rtmp_prepare_message(s, &h, ctx->msg_mask & (1 << h.type) ?\n &lh : NULL, out);\n
521\u200b\u884c\u200b\uff1a
ctx->msg_mask |= (1 << h.type);\n
\u200b\u5c06\u200b\u5176\u4e2d\u200b\u7684\u200b(1 << h.type)
\u200b\u6539\u4e3a\u200b(unsigned long)(1 << h.type)
\u3002
nginx-rtmp-module/ngx_rtmp_core_module.c
\uff0c\u200b\u5b9a\u4f4d\u200b\u5230\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\u5757\u200b\uff1a
611\u200b\u884c\u200b\uff1a
struct sockaddr *sa;\n
\u200b\u5c06\u200b\u6b64\u5904\u200b\u7684\u200b\u53d8\u91cf\u540d\u200bsa
\u200b\u6539\u4e3a\u200bsa2
\uff0c\u200b\u5e76\u200b\u5c06\u200b\u6b64\u540e\u200b\u6240\u6709\u200b\u7684\u200bsa
\u200b\u53d8\u91cf\u200b\u6539\u4e3a\u200bsa2
\u3002
\u200b\u542f\u52a8\u200bx64 Native Tools Command Prompt for VS 2019\uff0c\u200b\u5207\u6362\u200b\u5230\u200b\u6e90\u4ee3\u7801\u200b\u76ee\u5f55\u200b\uff0c\u200b\u6267\u884c\u200bnmake
\u200b\u542f\u52a8\u200b\u7f16\u8bd1\u200b\u3002\u200b\u8f93\u51fa\u200b\u6587\u4ef6\u200b\u4e3a\u200bobjs/nginx.exe
"},{"location":"coding/configuration/nginx-rtmp/#nginx","title":"nginx\u200b\u914d\u7f6e","text":"\u200b\u5c06\u200bobjs/nginx.exe
\u200b\u590d\u5236\u200b\u4e00\u4efd\u200b\u3002\u200b\u5728\u200b\u6240\u5728\u200b\u76ee\u5f55\u200b\u4e0b\u200b\u521b\u5efa\u200b\u5982\u4e0b\u200b\u6587\u4ef6\u200b\u7ed3\u6784\u200b\uff1a
.\n\u251c\u2500 nginx.exe\n\u251c\u2500 conf/\n\u2502 \u2514\u2500 nginx.conf\n\u251c\u2500 html\n\u2502 \u2514\u2500 index.xsl\n\u251c\u2500 logs\n\u2514\u2500 temp\n
\u200b\u5176\u4e2d\u200b\uff0chtml/index.xsl
\u200b\u5199\u5165\u200b\u5982\u4e0b\u200b\u5185\u5bb9\u200b
html/index.xsl\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b <?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!--\nCopyright (C) Roman Arutyunyan\n-->\n<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">\n<xsl:template match=\"/\">\n <html>\n <head>\n <title>RTMP statistics</title>\n </head>\n <body>\n <xsl:apply-templates select=\"rtmp\"/>\n <hr/>\n Generated by <a href='https://github.com/arut/nginx-rtmp-module'>\n nginx-rtmp-module</a> <xsl:value-of select=\"/rtmp/nginx_rtmp_version\"/>,\n <a href=\"http://nginx.org\">nginx</a> <xsl:value-of select=\"/rtmp/nginx_version\"/>,\n pid <xsl:value-of select=\"/rtmp/pid\"/>,\n built <xsl:value-of select=\"/rtmp/built\"/> <xsl:value-of select=\"/rtmp/compiler\"/>\n </body>\n </html>\n</xsl:template>\n<xsl:template match=\"rtmp\">\n <table cellspacing=\"1\" cellpadding=\"5\">\n <tr bgcolor=\"#999999\">\n <th>RTMP</th>\n <th>#clients</th>\n <th colspan=\"4\">Video</th>\n <th colspan=\"4\">Audio</th>\n <th>In bytes</th>\n <th>Out bytes</th>\n <th>In bits/s</th>\n <th>Out bits/s</th>\n <th>State</th>\n <th>Time</th>\n </tr>\n <tr>\n <td colspan=\"2\">Accepted: <xsl:value-of select=\"naccepted\"/></td>\n <th bgcolor=\"#999999\">codec</th>\n <th bgcolor=\"#999999\">bits/s</th>\n <th bgcolor=\"#999999\">size</th>\n <th bgcolor=\"#999999\">fps</th>\n <th bgcolor=\"#999999\">codec</th>\n <th bgcolor=\"#999999\">bits/s</th>\n <th bgcolor=\"#999999\">freq</th>\n <th bgcolor=\"#999999\">chan</th>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bytes_in\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bytes_out\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_in\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_out\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td/>\n <td>\n <xsl:call-template name=\"showtime\">\n <xsl:with-param name=\"time\" select=\"/rtmp/uptime * 1000\"/>\n </xsl:call-template>\n </td>\n </tr>\n <xsl:apply-templates select=\"server\"/>\n </table>\n</xsl:template>\n<xsl:template match=\"server\">\n <xsl:apply-templates select=\"application\"/>\n</xsl:template>\n<xsl:template match=\"application\">\n <tr bgcolor=\"#999999\">\n <td>\n <b><xsl:value-of select=\"name\"/></b>\n </td>\n </tr>\n <xsl:apply-templates select=\"live\"/>\n <xsl:apply-templates select=\"play\"/>\n</xsl:template>\n<xsl:template match=\"live\">\n <tr bgcolor=\"#aaaaaa\">\n <td>\n <i>live streams</i>\n </td>\n <td align=\"middle\">\n <xsl:value-of select=\"nclients\"/>\n </td>\n </tr>\n <xsl:apply-templates select=\"stream\"/>\n</xsl:template>\n<xsl:template match=\"play\">\n <tr bgcolor=\"#aaaaaa\">\n <td>\n <i>vod streams</i>\n </td>\n <td align=\"middle\">\n <xsl:value-of select=\"nclients\"/>\n </td>\n </tr>\n <xsl:apply-templates select=\"stream\"/>\n</xsl:template>\n<xsl:template match=\"stream\">\n <tr valign=\"top\">\n <xsl:attribute name=\"bgcolor\">\n <xsl:choose>\n <xsl:when test=\"active\">#cccccc</xsl:when>\n <xsl:otherwise>#dddddd</xsl:otherwise>\n </xsl:choose>\n </xsl:attribute>\n <td>\n <a href=\"\">\n <xsl:attribute name=\"onclick\">\n var d=document.getElementById('<xsl:value-of select=\"../../name\"/>-<xsl:value-of select=\"name\"/>');\n d.style.display=d.style.display=='none'?'':'none';\n return false\n </xsl:attribute>\n <xsl:value-of select=\"name\"/>\n <xsl:if test=\"string-length(name) = 0\">\n [EMPTY]\n </xsl:if>\n </a>\n </td>\n <td align=\"middle\"> <xsl:value-of select=\"nclients\"/> </td>\n <td>\n <xsl:value-of select=\"meta/video/codec\"/> <xsl:value-of select=\"meta/video/profile\"/> <xsl:value-of select=\"meta/video/level\"/>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_video\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:apply-templates select=\"meta/video/width\"/>\n </td>\n <td>\n <xsl:value-of select=\"meta/video/frame_rate\"/>\n </td>\n <td>\n <xsl:value-of select=\"meta/audio/codec\"/> <xsl:value-of select=\"meta/audio/profile\"/>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_audio\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:apply-templates select=\"meta/audio/sample_rate\"/>\n </td>\n <td>\n <xsl:value-of select=\"meta/audio/channels\"/>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bytes_in\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bytes_out\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_in\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td>\n <xsl:call-template name=\"showsize\">\n <xsl:with-param name=\"size\" select=\"bw_out\"/>\n <xsl:with-param name=\"bits\" select=\"1\"/>\n <xsl:with-param name=\"persec\" select=\"1\"/>\n </xsl:call-template>\n </td>\n <td><xsl:call-template name=\"streamstate\"/></td>\n <td>\n <xsl:call-template name=\"showtime\">\n <xsl:with-param name=\"time\" select=\"time\"/>\n </xsl:call-template>\n </td>\n </tr>\n <tr style=\"display:none\">\n <xsl:attribute name=\"id\">\n <xsl:value-of select=\"../../name\"/>-<xsl:value-of select=\"name\"/>\n </xsl:attribute>\n <td colspan=\"16\" ngcolor=\"#eeeeee\">\n <table cellspacing=\"1\" cellpadding=\"5\">\n <tr>\n <th>Id</th>\n <th>State</th>\n <th>Address</th>\n <th>Flash version</th>\n <th>Page URL</th>\n <th>SWF URL</th>\n <th>Dropped</th>\n <th>Timestamp</th>\n <th>A-V</th>\n <th>Time</th>\n </tr>\n <xsl:apply-templates select=\"client\"/>\n </table>\n </td>\n </tr>\n</xsl:template>\n<xsl:template name=\"showtime\">\n <xsl:param name=\"time\"/>\n\n <xsl:if test=\"$time > 0\">\n <xsl:variable name=\"sec\">\n <xsl:value-of select=\"floor($time div 1000)\"/>\n </xsl:variable>\n\n <xsl:if test=\"$sec >= 86400\">\n <xsl:value-of select=\"floor($sec div 86400)\"/>d\n </xsl:if>\n\n <xsl:if test=\"$sec >= 3600\">\n <xsl:value-of select=\"(floor($sec div 3600)) mod 24\"/>h\n </xsl:if>\n\n <xsl:if test=\"$sec >= 60\">\n <xsl:value-of select=\"(floor($sec div 60)) mod 60\"/>m\n </xsl:if>\n\n <xsl:value-of select=\"$sec mod 60\"/>s\n </xsl:if>\n</xsl:template>\n\n<xsl:template name=\"showsize\">\n <xsl:param name=\"size\"/>\n <xsl:param name=\"bits\" select=\"0\" />\n <xsl:param name=\"persec\" select=\"0\" />\n <xsl:variable name=\"sizen\">\n <xsl:value-of select=\"floor($size div 1024)\"/>\n </xsl:variable>\n <xsl:choose>\n <xsl:when test=\"$sizen >= 1073741824\">\n <xsl:value-of select=\"format-number($sizen div 1073741824,'#.###')\"/> T</xsl:when>\n\n <xsl:when test=\"$sizen >= 1048576\">\n <xsl:value-of select=\"format-number($sizen div 1048576,'#.###')\"/> G</xsl:when>\n\n <xsl:when test=\"$sizen >= 1024\">\n <xsl:value-of select=\"format-number($sizen div 1024,'#.##')\"/> M</xsl:when>\n <xsl:when test=\"$sizen >= 0\">\n <xsl:value-of select=\"$sizen\"/> K</xsl:when>\n </xsl:choose>\n <xsl:if test=\"string-length($size) > 0\">\n <xsl:choose>\n <xsl:when test=\"$bits = 1\">b</xsl:when>\n <xsl:otherwise>B</xsl:otherwise>\n </xsl:choose>\n <xsl:if test=\"$persec = 1\">/s</xsl:if>\n </xsl:if>\n</xsl:template>\n\n<xsl:template name=\"streamstate\">\n <xsl:choose>\n <xsl:when test=\"active\">active</xsl:when>\n <xsl:otherwise>idle</xsl:otherwise>\n </xsl:choose>\n</xsl:template>\n\n\n<xsl:template name=\"clientstate\">\n <xsl:choose>\n <xsl:when test=\"publishing\">publishing</xsl:when>\n <xsl:otherwise>playing</xsl:otherwise>\n </xsl:choose>\n</xsl:template>\n\n\n<xsl:template match=\"client\">\n <tr>\n <xsl:attribute name=\"bgcolor\">\n <xsl:choose>\n <xsl:when test=\"publishing\">#cccccc</xsl:when>\n <xsl:otherwise>#eeeeee</xsl:otherwise>\n </xsl:choose>\n </xsl:attribute>\n <td><xsl:value-of select=\"id\"/></td>\n <td><xsl:call-template name=\"clientstate\"/></td>\n <td>\n <a target=\"_blank\">\n <xsl:attribute name=\"href\">\n http://apps.db.ripe.net/search/query.html?searchtext=<xsl:value-of select=\"address\"/>\n </xsl:attribute>\n <xsl:attribute name=\"title\">whois</xsl:attribute>\n <xsl:value-of select=\"address\"/>\n </a>\n </td>\n <td><xsl:value-of select=\"flashver\"/></td>\n <td>\n <a target=\"_blank\">\n <xsl:attribute name=\"href\">\n <xsl:value-of select=\"pageurl\"/>\n </xsl:attribute>\n <xsl:value-of select=\"pageurl\"/>\n </a>\n </td>\n <td><xsl:value-of select=\"swfurl\"/></td>\n <td><xsl:value-of select=\"dropped\"/></td>\n <td><xsl:value-of select=\"timestamp\"/></td>\n <td><xsl:value-of select=\"avsync\"/></td>\n <td>\n <xsl:call-template name=\"showtime\">\n <xsl:with-param name=\"time\" select=\"time\"/>\n </xsl:call-template>\n </td>\n </tr>\n</xsl:template>\n\n<xsl:template match=\"publishing\">\n publishing\n</xsl:template>\n\n<xsl:template match=\"active\">\n active\n</xsl:template>\n\n<xsl:template match=\"width\">\n <xsl:value-of select=\".\"/>x<xsl:value-of select=\"../height\"/>\n</xsl:template>\n\n</xsl:stylesheet>\n
conf/nginx.conf
\u200b\u5199\u5165\u200b\u5982\u4e0b\u200b\u5185\u5bb9\u200b\uff1a
conf/nginx.conf\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b
worker_processes 8;\nerror_log logs/error.log info;\nevents {\n worker_connections 1024;\n}\n\nrtmp {\n server {\n listen 1935;\n\n application live {\n live on;\n }\n\n application hls {\n live on;\n hls on; \n hls_path temp/hls; \n hls_fragment 8s; \n }\n }\n}\n\nhttp {\n server {\n listen 8080;\n root html;\n location / {\n rtmp_stat all;\n rtmp_stat_stylesheet index.xsl;\n }\n\n location /index.xsl {\n root html;\n }\n\n location /hls { \n types{ \n application/vnd.apple.mpegurl m3u8; \n video/mp2t ts; \n } \n alias temp/hls; \n expires -1; \n } \n }\n}\n
\u200b\u53cc\u51fb\u200bnginx.exe
\u200b\u5373\u53ef\u200b\u542f\u52a8\u200b\u670d\u52a1\u5668\u200b\uff0c\u200b\u670d\u52a1\u5668\u200b\u540c\u65f6\u200b\u76d1\u542c\u200b1935\u200b\u7aef\u53e3\u200b\u4e0e\u200b8080\u200b\u7aef\u53e3\u200b
- \u200b\u63a8\u6d41\u200b\u4f7f\u7528\u200b\u7684\u200bRTMP\u200b\u670d\u52a1\u5668\u200b\u5730\u5740\u200b\u4e3a\u200b\uff1a
rtmp://localhost:1935/live
- \u200b\u8bbf\u95ee\u200b
http://localhost:8080
\u200b\u53ef\u4ee5\u200b\u67e5\u770b\u200b\u670d\u52a1\u5668\u7aef\u200b\u7684\u200b\u7edf\u8ba1\u200b\u4fe1\u606f\u200b - \u200b\u5ba2\u6237\u7aef\u200b\uff08\u200b\u5982\u200bVLC\u200b\u7b49\u200b\uff09\u200b\u53ef\u4ee5\u200b\u8bbf\u95ee\u200b
rtmp://localhost:1935/live
\u200b\u63a5\u6536\u200b\u6d41\u200b\uff0clocalhost
\u200b\u53ef\u4ee5\u200b\u66f4\u200b\u6539\u4e3a\u200b\u672c\u673a\u200b\u7684\u200bIP\u200b\u5730\u5740\u200b
\u200b\u4f7f\u7528\u200b\u547d\u4ee4\u200b.\\nginx.exe -s stop
\u200b\u5173\u95ed\u200b\u670d\u52a1\u5668\u200b
"},{"location":"coding/configuration/ssh/","title":"ssh","text":""},{"location":"coding/configuration/ssh/#_1","title":"\u57fa\u672c\u200b\u4f7f\u7528","text":"SSH\u200b\u53ef\u4ee5\u200b\u8fdc\u7a0b\u200b\u8fde\u63a5\u200b\u670d\u52a1\u5668\u200b\u7684\u200b\u7ec8\u7aef\u200b\u3002\u200b\u547d\u4ee4\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b\uff0c\u200b\u5176\u4e2d\u200b<user>
\u200b\u4e3a\u200b\u8fdc\u7a0b\u200b\u670d\u52a1\u5668\u200b\u4e0a\u200b\u7684\u200b\u7528\u6237\u540d\u200b\uff0c<hostname>
\u200b\u662f\u200b\u8fdc\u7a0b\u200b\u670d\u52a1\u5668\u200b\u7684\u200b\u7f51\u7edc\u5730\u5740\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u662f\u200bIP\u200b\u5730\u5740\u200b\u6216\u200b\u57df\u540d\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b~/.ssh/config
\u200b\u6587\u4ef6\u200b\u4e2d\u200b\u5b9a\u4e49\u200b\u7684\u200b\u4e3b\u673a\u200b\u3002\u200b\u5982\u679c\u200b\u6307\u5b9a\u200b\u4e86\u200b<command>
\u200b\u53c2\u6570\u200b\uff0c\u200b\u5219\u200bSSH\u200b\u5728\u200b\u8fde\u63a5\u200b\u6210\u529f\u200b\u540e\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u6267\u884c\u547d\u4ee4\u200b\uff0c\u200b\u5c06\u200b\u7ed3\u679c\u200b\u8f93\u51fa\u200b\u5230\u200b\u7ec8\u7aef\u200b\u5e76\u200b\u5728\u200b\u6267\u884c\u200b\u7ed3\u675f\u200b\u540e\u200b\u65ad\u5f00\u8fde\u63a5\u200b\u3002
ssh <user>@<hostname> [<command>]\n
\u200b\u82e5\u200b\u5ba2\u6237\u7aef\u200b\u7684\u200b\u7528\u6237\u540d\u200b\u548c\u200b\u670d\u52a1\u5668\u200b\u7684\u200b\u7528\u6237\u540d\u200b\u76f8\u540c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b<user>
\u200b\u53c2\u6570\u200b\uff0c\u200b\u5982\u200b
ssh <hostname> [<command>]\n
"},{"location":"coding/configuration/ssh/#_2","title":"\u7aef\u53e3\u200b\u8f6c\u53d1","text":"SSH\u200b\u63d0\u4f9b\u200b\u4e86\u200b-L
\u3001-R
\u3001-D
\u200b\u53c2\u6570\u200b\uff0c\u200b\u5206\u522b\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u672c\u5730\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u3001\u200b\u8fdc\u7a0b\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u4e0e\u200b\u52a8\u6001\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u3002\u200b\u4f7f\u7528\u200b-N
\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u5728\u200b\u4e0d\u200b\u8fde\u63a5\u200b\u8fdc\u7a0b\u200b\u7ec8\u7aef\u200b\uff0c\u200b\u53ea\u200b\u5b9e\u73b0\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u3002\u200b\u4e3a\u200b\u6e05\u6670\u200b\u8868\u8ff0\u200b\u5404\u4e2a\u200b\u7aef\u53e3\u200b\uff0c\u200b\u672c\u8282\u200b\u4e2d\u200b\u5047\u8bbe\u200b\u5ba2\u6237\u7aef\u200bA\u3001\u200b\u670d\u52a1\u5668\u200bB\u200b\u548c\u200b\u53e6\u200b\u4e00\u200b\u4e3b\u673a\u200bC\u3002\u200b\u5ba2\u6237\u7aef\u200bA\u200b\u901a\u8fc7\u200bSSH\u200b\u8fde\u63a5\u200b\u81f3\u200b\u670d\u52a1\u5668\u200bB\u3002
"},{"location":"coding/configuration/ssh/#_3","title":"\u672c\u5730\u200b\u7aef\u53e3\u200b\u8f6c\u53d1","text":"\u200b\u4f7f\u7528\u200b-L
\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u6253\u5f00\u200bSSH\u200b\u7684\u200b\u672c\u5730\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u529f\u80fd\u200b\u3002\u200b\u7531\u4e8e\u200b-L
\u200b\u53c2\u6570\u200b\u5c06\u200b\u6307\u5411\u200b\u5ba2\u6237\u7aef\u200b\u672c\u5730\u200b\u7684\u200b\u8bf7\u6c42\u200b\u8f6c\u53d1\u7ed9\u200b\u670d\u52a1\u5668\u200b\uff0c\u200b\u56e0\u6b64\u200b\u79f0\u4e3a\u200b\u672c\u5730\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u3002\u200b\u542f\u52a8\u200b\u672c\u5730\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u7684\u200b\u547d\u4ee4\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
ssh -L [<bind-addr>]:<port-of-A>:<addr-of-C>:<port-of-C> <user>@<hostname>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u8868\u793a\u200b\u5c06\u200b\u5ba2\u6237\u7aef\u200bA\u200b\u4e0a\u200b\u6307\u5411\u200b<port-of-A>
\u200b\u7aef\u53e3\u200b\u7684\u200b\u672c\u5730\u200b\u8bf7\u6c42\u200b\u901a\u8fc7\u200bSSH\u200b\u8f6c\u53d1\u7ed9\u200b\u670d\u52a1\u5668\u200bB\uff0c\u200b\u7531\u200b\u670d\u52a1\u5668\u200bB\u200b\u5411\u200b\u8fdc\u7a0b\u200b\u4e3b\u673a\u200b<addr-of-C>
\u200b\u7684\u200b<port-of-C>
\u200b\u7aef\u53e3\u200b\u53d1\u8d77\u200b\u8bf7\u6c42\u200b\u3002\u200b\u82e5\u200b\u6307\u5b9a\u200b<bind-addr>
\uff0c\u200b\u5219\u200bSSH\u200b\u4f1a\u200b\u76d1\u542c\u200b<bind-addr>
\u200b\u5730\u5740\u200b\uff0c\u200b\u5e76\u200b\u53ea\u200b\u8f6c\u53d1\u200b\u76ee\u6807\u200b\u4e3a\u200b<bind-addr>
\u200b\u7684\u200b\u8bf7\u6c42\u200b\u3002
"},{"location":"coding/configuration/ssh/#_4","title":"\u8fdc\u7a0b\u200b\u7aef\u53e3\u200b\u8f6c\u53d1","text":"\u200b\u4f7f\u7528\u200b-R
\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u6253\u5f00\u200bSSH\u200b\u7684\u200b\u8fdc\u7a0b\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u529f\u80fd\u200b\u3002-R
\u200b\u7aef\u53e3\u200b\u5c06\u200b\u6307\u5411\u200b\u8fdc\u7a0b\u200b\u670d\u52a1\u5668\u200b\u7684\u200b\u8bf7\u6c42\u200b\u8f6c\u53d1\u7ed9\u200b\u5ba2\u6237\u7aef\u200b\uff0c\u200b\u56e0\u6b64\u200b\u79f0\u4e3a\u200b\u8fdc\u7a0b\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u3002\u200b\u542f\u52a8\u200b\u8fdc\u7a0b\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u7684\u200b\u547d\u4ee4\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
ssh -R [<bind-addr>]:<port-of-B>:<addr-of-C>:<port-of-C> <user>@<hostname>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u8868\u793a\u200b\u5c06\u200b\u670d\u52a1\u5668\u200bB\u200b\u4e0a\u200b\u6307\u5411\u200b<port-of-B>
\u200b\u7aef\u53e3\u200b\u7684\u200b\u8bf7\u6c42\u200b\u901a\u8fc7\u200bSSH\u200b\u8f6c\u53d1\u7ed9\u200b\u5ba2\u6237\u7aef\u200bA\uff0c\u200b\u7531\u200b\u5ba2\u6237\u7aef\u200bA\u200b\u5411\u200b\u53e6\u4e00\u53f0\u200b\u4e3b\u673a\u200b<addr-of-C>
\u200b\u7684\u200b<port-of-C>
\u200b\u7aef\u53e3\u200b\u53d1\u8d77\u200b\u8bf7\u6c42\u200b\u3002\u200b\u82e5\u200b\u6307\u5b9a\u200b<bind-addr>
\uff0c\u200b\u5219\u200bSSH\u200b\u4f1a\u200b\u76d1\u542c\u200b<bind-addr>
\u200b\u5730\u5740\u200b\uff0c\u200b\u5e76\u200b\u53ea\u200b\u8f6c\u53d1\u200b\u76ee\u6807\u200b\u4e3a\u200b<bind-addr>
\u200b\u7684\u200b\u8bf7\u6c42\u200b\u3002
"},{"location":"coding/configuration/ssh/#_5","title":"\u52a8\u6001\u200b\u7aef\u53e3\u200b\u8f6c\u53d1","text":"\u200b\u52a8\u6001\u200b\u7aef\u53e3\u200b\u8f6c\u53d1\u200b\u7684\u200b\u547d\u4ee4\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
ssh -D <port-of-A> <user>@<hostname>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u8868\u793a\u200b\u5c06\u200b\u5ba2\u6237\u7aef\u200bA\u200b\u4e0a\u200b\u6307\u5411\u200b<port-of-A>
\u200b\u7684\u200b\u8bf7\u6c42\u200b\u901a\u8fc7\u200bSSH\u200b\u8f6c\u53d1\u7ed9\u200b\u670d\u52a1\u5668\u200bB\uff0c\u200b\u7531\u200bB\u200b\u4ee3\u4e3a\u200b\u53d1\u8d77\u200b\u8bf7\u6c42\u200b\uff0c\u200b\u5e76\u200b\u5c06\u200b\u8bbf\u95ee\u200b\u7ed3\u679c\u200b\u4f20\u8f93\u200b\u56de\u200b\u672c\u5730\u200b\u3002
\u200b\u82e5\u200b\u8981\u200b\u8f6c\u53d1\u200b\u6240\u6709\u200b\u672c\u5730\u7f51\u7edc\u200b\u8bf7\u6c42\u200b\uff0c\u200b\u8bbe\u7f6e\u200bSOCKS5\u200b\u4ee3\u7406\u200b\u5c06\u200b\u672c\u5730\u200b\u8bf7\u6c42\u200b\u91cd\u5b9a\u5411\u200b\u5230\u200b<port-of-A>
\u200b\u5373\u53ef\u200b\u3002
"},{"location":"coding/configuration/ssh/#_6","title":"\u5bc6\u94a5\u200b\u767b\u5f55","text":"SSH\u200b\u9ed8\u8ba4\u200b\u4f7f\u7528\u200b\u7528\u6237\u540d\u200b-\u200b\u5bc6\u7801\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u9a8c\u8bc1\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u767b\u5f55\u200b\u9700\u8981\u200b\u8f93\u5165\u200b\u5bc6\u7801\u200b\u3002\u200b\u53ef\u4ee5\u200b\u914d\u7f6e\u200bSSH\u200b\u4f7f\u7528\u200b\u5bc6\u94a5\u200b\u5bf9\u200b\u5ba2\u6237\u7aef\u200b\u8fdb\u884c\u200b\u9a8c\u8bc1\u200b\uff0c\u200b\u6b64\u540e\u200b\u4f7f\u7528\u200b\u8be5\u200b\u5ba2\u6237\u7aef\u200b\u767b\u5f55\u200b\u5c31\u200b\u4e0d\u518d\u200b\u9700\u8981\u200b\u8f93\u5165\u200b\u5bc6\u7801\u200b\u3002\u200b\u6b65\u9aa4\u200b\u5982\u4e0b\u200b
- \u200b\u5728\u200b\u5ba2\u6237\u7aef\u200b\u6267\u884c\u200b
ssh-keygen
\u200b\u547d\u4ee4\u200b\u751f\u6210\u200b\u5bc6\u94a5\u200b\u5bf9\u200b\uff0c\u200b\u6267\u884c\u200b\u5b8c\u6210\u200b\u540e\u4f1a\u200b\u5728\u200b~/.ssh
\u200b\u76ee\u5f55\u200b\u4e0b\u200b\u751f\u6210\u200b\u79c1\u94a5\u200b\u6587\u4ef6\u200bid_rsa
\u200b\u4e0e\u200b\u516c\u94a5\u200b\u6587\u4ef6\u200bid_rsa.pub
\uff1b - \u200b\u6267\u884c\u200b
ssh-copy-id <user>@<hostname>
\u200b\u547d\u4ee4\u200b\uff0c\u200b\u5c06\u200b\u516c\u94a5\u200b\u590d\u5236\u5230\u200b\u8fdc\u7a0b\u200b\u4e3b\u673a\u200b\u7684\u200b~/.ssh/authorized_key
\u200b\u6587\u4ef6\u200b\u4e2d\u200b\uff08\u200b\u624b\u52a8\u200b\u590d\u5236\u7c98\u8d34\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\uff09\u3002
"},{"location":"coding/configuration/ssh/#_7","title":"\u6587\u4ef6\u4f20\u8f93","text":"scp
\u200b\u53ef\u4ee5\u200b\u501f\u52a9\u200bSSH tunnel\u200b\u5b9e\u73b0\u200b\u6587\u4ef6\u4f20\u8f93\u200b\u3002\u200b\u547d\u4ee4\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
scp SOURCE DESTINATION\n
\u200b\u8868\u793a\u200b\u5c06\u200b\u6587\u4ef6\u200bSOURCE\u200b\u590d\u5236\u5230\u200bDESTINATION\u200b\u4e0b\u200b\u3002SOURCE\u200b\u548c\u200bDESTINATION\u200b\u53ef\u4ee5\u200b\u662f\u200b\uff1a
- \u200b\u672c\u5730\u200b\u6709\u6548\u200b\u8def\u5f84\u200b
- \u200b\u683c\u5f0f\u200b\u4e3a\u200b
<user>@<ip>:<path>
\u200b\u7684\u200b\u8fdc\u7a0b\u200b\u8def\u5f84\u200b
"},{"location":"coding/configuration/update-alternatives/","title":"update-alternatives","text":"update-alternatives
\u200b\u662f\u200b\u7528\u4e8e\u200b\u7ba1\u7406\u200b\u8f6f\u200b\u94fe\u63a5\u200b\u7684\u200b\u547d\u4ee4\u200b\u3002
"},{"location":"coding/configuration/update-alternatives/#_1","title":"\u57fa\u7840\u200b\u4f7f\u7528","text":""},{"location":"coding/configuration/update-alternatives/#_2","title":"\u521b\u5efa\u200b\u94fe\u63a5","text":"\u200b\u4f7f\u7528\u200b--install
\u200b\u53c2\u6570\u200b\u521b\u5efa\u200b\u6307\u5411\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u200b\u7684\u200b\u8f6f\u200b\u94fe\u63a5\u200b\uff0c\u200b\u547d\u4ee4\u200b\u7684\u200b\u57fa\u672c\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
update-alternatives --install <destination> <entry-name> <source> <priority>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b<entry-name>
\u200b\u7684\u200b\u8f6f\u200b\u94fe\u63a5\u200b\u6761\u76ee\u200b\uff0c\u200b\u5c06\u200b<source>
\u200b\u6307\u5411\u200b<destination>
\u3002\u200b\u5f53\u6709\u200b\u591a\u4e2a\u200b<source>
\u200b\u6307\u5411\u200b\u540c\u4e00\u4e2a\u200b<destination>
\u200b\u65f6\u200b\uff0c\u200b\u9ed8\u8ba4\u200b<priority>
\u200b\u66f4\u5927\u200b\u7684\u200b\u751f\u6548\u200b\u3002
"},{"location":"coding/configuration/update-alternatives/#_3","title":"\u67e5\u8be2\u200b\u6761\u76ee","text":"\u200b\u4f7f\u7528\u200b--display
\u200b\u53c2\u6570\u200b\u67e5\u8be2\u200b<entry-name>
\u200b\u4e0b\u200b\u7684\u200b\u547d\u4ee4\u200b\u6307\u5411\u200b\uff1a
update-alternatives --display <entry-name>\n
\u200b\u4f7f\u7528\u200b--get-selections
\u200b\u53c2\u6570\u200b\u67e5\u8be2\u200b\u6240\u6709\u200b\u7684\u200b\u6761\u76ee\u200b\u548c\u200b\u914d\u7f6e\u200b\u72b6\u6001\u200b\u3002
update-alternatives --get-selections\n
\u200b\u8f93\u51fa\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
arptables auto /usr/sbin/arptables-nft\nawk auto /usr/bin/gawk\nbuiltins.7.gz auto /usr/share/man/man7/bash-builtins.7.gz\nc++ auto /usr/bin/g++\nc89 auto /usr/bin/c89-gcc\nc99 auto /usr/bin/c99-gcc\ncc auto /usr/bin/gcc\ncpp auto /usr/bin/cpp\ncuda auto /usr/local/cuda-11.7\ncuda-11 auto /usr/local/cuda-11.7\n
"},{"location":"coding/configuration/update-alternatives/#_4","title":"\u5207\u6362\u200b\u94fe\u63a5","text":"\u200b\u4f7f\u7528\u200b--config
\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u5217\u51fa\u200b\u5e76\u200b\u9009\u62e9\u200b\u9700\u8981\u200b\u7684\u200b\u8f6f\u200b\u94fe\u63a5\u200b\uff0c\u200b\u547d\u4ee4\u200b\u7684\u200b\u57fa\u672c\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
update-alternatives --config <entry-name>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u4f1a\u200b\u5217\u51fa\u200b<entry-name>
\u200b\u4e0b\u200b\u7684\u200b\u6240\u6709\u200b\u6761\u76ee\u200b\u3002
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).\n\n Selection Path Priority Status\n------------------------------------------------------------\n* 0 /usr/bin/gcc-11 2 auto mode\n 1 /usr/bin/gcc-11 2 manual mode\n 2 /usr/bin/gcc-12 1 manual mode\n\nPress <enter> to keep the current choice[*], or type selection number:\n
\u200b\u6216\u8005\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200b--set
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\u94fe\u63a5\u200b\u7684\u200b\u76ee\u6807\u200b\uff0c\u200b\u683c\u5f0f\u200b\u4e3a\u200b\uff1a
update-alternatives --set <entry-name> <source>\n
\u200b\u4ee5\u4e0a\u200b\u547d\u4ee4\u200b\u4f7f\u7528\u200b<source>
\u200b\u4f5c\u4e3a\u200b<entry-name>
\u200b\u6761\u200b\u76ee\u7684\u200b\u6307\u5411\u200b\u3002
\u200b\u4f7f\u7528\u200b--auto
\u200b\u53c2\u6570\u200b\u6062\u590d\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u76ee\u6807\u200b\u6307\u5411\u200b\u3002
update-alternatives --auto <entry-name>\n
"},{"location":"coding/configuration/update-alternatives/#_5","title":"\u5220\u9664\u200b\u94fe\u63a5","text":"\u200b\u4f7f\u7528\u200b--remove
\u200b\u53c2\u6570\u200b\u5220\u9664\u200b\u4e00\u4e2a\u200b\u6761\u76ee\u200b\u4e0b\u200b\u7684\u200b\u94fe\u63a5\u200b\u3002
update-alternatives --remove <entry-name> <source>\n
"},{"location":"coding/configuration/vim/","title":"Vim","text":"Vim\u200b\u662f\u200b\u57fa\u4e8e\u200b\u547d\u4ee4\u884c\u200b\u7684\u200b\u6587\u672c\u7f16\u8f91\u200b\u5668\u200b\u3002
"},{"location":"coding/configuration/vim/#_1","title":"\u547d\u4ee4\u884c","text":""},{"location":"coding/configuration/vim/#_2","title":"\u4ea4\u4e92","text":"Vim\u200b\u7684\u200b\u4ea4\u4e92\u200b\u547d\u4ee4\u200b\u5982\u4e0b\u200b\u8868\u6240\u5217\u200b\uff0c\u200b\u4ea4\u4e92\u200b\u547d\u4ee4\u200b\u4ee5\u200b:
\u200b\u5f00\u5934\u200b\u3002
\u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b \u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b v
\u200b\u9009\u62e9\u200b\u5b57\u7b26\u200b V
\u200b\u9009\u62e9\u200b\u884c\u200b Ctrl+V
\u200b\u9009\u62e9\u200b\u5757\u200b i
\u200b\u5207\u6362\u200b\u5230\u200b\u63d2\u5165\u200b\u6a21\u5f0f\u200b \u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b \u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b :q
\u200b\u9000\u51fa\u200bVim :q!
\u200b\u9000\u51fa\u200b\u800c\u200b\u4e0d\u200b\u4fdd\u5b58\u200b :w
\u200b\u4fdd\u5b58\u200b <Esc>
\u200b\u9000\u51fa\u200b\u63d2\u5165\u200b\u6a21\u5f0f\u200b :h
\u200b\u67e5\u8be2\u200b\u5e2e\u52a9\u200b :version
\u200b\u67e5\u8be2\u200b\u7248\u672c\u200b\u548c\u200b\u529f\u80fd\u200b :history
\u200b\u67e5\u8be2\u200b\u5386\u53f2\u200b\u547d\u4ee4\u200b :s
\u200b\u6839\u636e\u200b\u6b63\u5219\u8868\u8fbe\u5f0f\u200b\u66ff\u6362\u200b\u5b57\u7b26\u4e32\u200b :edit
\u200b\u7f16\u8f91\u200b\u6587\u4ef6\u200b\uff08\u200b\u652f\u6301\u200bglob pattern\u200b\u5339\u914d\u200b\uff09 :find
\u200b\u5728\u200bpath
\u200b\u4e2d\u200b\u67e5\u627e\u6587\u4ef6\u200b :set
\u200b\u67e5\u8be2\u200b/\u200b\u8bbe\u7f6e\u200b\u73af\u5883\u53d8\u91cf\u200b :Rg
\u200b\u5728\u200b\u6587\u4ef6\u200b\u4e2d\u200b\u67e5\u627e"},{"location":"coding/configuration/vim/#_3","title":"\u64cd\u4f5c","text":"Vim\u200b\u7684\u200b\u8bed\u53e5\u200b\u7531\u200b\u64cd\u4f5c\u7b26\u200b\u548c\u200b\u52a8\u4f5c\u200b\u7ec4\u6210\u200b\uff0c\u200b\u5728\u200bVim\u200b\u754c\u9762\u200b\u4e2d\u200b\uff0c\u200b\u6309\u200b:
\u200b\u8f93\u5165\u200b\u8bed\u53e5\u200b\u3002
Vim\u200b\u7684\u200b\u52a8\u4f5c\u200b\u5982\u4e0b\u200b\u8868\u200b\u6240\u793a\u200b
\u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b \u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b h
\u200b\u5411\u200b\u5de6\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b j
\u200b\u5411\u4e0b\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b k
\u200b\u5411\u4e0a\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b l
\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b b
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0a\u200b\u4e00\u8bcd\u200b\u5f00\u5934\u200b w
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0b\u200b\u4e00\u8bcd\u200b\u5f00\u5934\u200b ge
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0a\u200b\u4e00\u8bcd\u200b\u7ed3\u5c3e\u200b e
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0b\u200b\u4e00\u8bcd\u200b\u7ed3\u5c3e\u200b {
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0a\u200b\u4e00\u6bb5\u200b }
\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0b\u200b\u4e00\u6bb5\u200b 0
\u200b\u79fb\u52a8\u200b\u5230\u200b\u884c\u9996\u200b $
\u200b\u79fb\u52a8\u200b\u5230\u200b\u884c\u5c3e\u200b ^
\u200b\u79fb\u52a8\u200b\u5230\u200b\u884c\u9996\u200b\u975e\u200b\u7a7a\u5b57\u7b26\u200b g_
\u200b\u79fb\u52a8\u200b\u5230\u200b\u884c\u5c3e\u200b\u975e\u200b\u7a7a\u5b57\u7b26\u200b n|
\u200b\u79fb\u52a8\u200b\u5230\u200b\u5f53\u524d\u200b\u884c\u200b\u7684\u200b\u7b2c\u200bn
\u200b\u5217\u200b Vim\u200b\u7684\u200b\u64cd\u4f5c\u7b26\u200b\u5982\u4e0b\u200b\u8868\u200b\u6240\u793a\u200b
\u200b\u8f93\u5165\u200b \u200b\u529f\u80fd\u200b y
\u200b\u590d\u5236\u200b d
\u200b\u526a\u5207\u200b c
\u200b\u526a\u5207\u200b\u5e76\u200b\u7f16\u8f91\u200b p
\u200b\u7c98\u8d34\u200b \u200b\u884c\u200b\u64cd\u4f5c\u200b\u6a21\u5f0f\u200b
\u200b\u8fde\u7eed\u200b\u8f93\u5165\u200b\u4e24\u4e2a\u200b\u76f8\u540c\u200b\u64cd\u4f5c\u7b26\u200b\u5bf9\u200b\u5f53\u524d\u200b\u884c\u200b\u6267\u884c\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u5982\u200byy
\u200b\u590d\u5236\u200b\u5f53\u524d\u200b\u884c\u200b\u3002
\u200b\u5728\u200b\u91cd\u590d\u200b\u7684\u200b\u64cd\u4f5c\u7b26\u200b\u524d\u9762\u200b\u52a0\u200b\u6570\u5b57\u200bn
\uff0c\u200b\u8868\u793a\u200b\u4ece\u200b\u5f53\u524d\u200b\u884c\u200b\u5f00\u59cb\u200b\u5230\u200b\u7b2c\u200bn
\u200b\u884c\u200b\u6267\u884c\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u5982\u200b3yy
\u200b\u4ece\u200b\u5f53\u524d\u200b\u884c\u200b\u5f00\u59cb\u200b\u590d\u5236\u200b3\u200b\u884c\u200b\u3002
"},{"location":"coding/dl-from-scratch/","title":"\u6df1\u5ea6\u200b\u5b66\u4e60","text":""},{"location":"coding/dl-from-scratch/#_2","title":"\u795e\u7ecf\u200b\u7f51\u7edc\u5c42","text":" - \u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b
- \u200b\u635f\u5931\u200b\u51fd\u6570\u200b
- \u200b\u5f52\u4e00\u5316\u200b
- \u200b\u591a\u5c42\u200b\u611f\u77e5\u673a\u200b
- \u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b
"},{"location":"coding/dl-from-scratch/#llm-from-scratch","title":"LLM from scratch","text":" - \u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b
- \u200b\u7f16\u7801\u5668\u200b\u4e0e\u200b\u89e3\u7801\u5668\u200b
- \u200b\u9a8c\u8bc1\u200btransformer\u200b\u5b9e\u73b0\u200b
- \u200b\u7edd\u5bf9\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b
- \u200b\u9a8c\u8bc1\u200bbert\u200b\u5b9e\u73b0\u200b
- RoPE
- transformer\u200b\u53d8\u79cd\u200b
- \u200b\u9a8c\u8bc1\u200bLlama-2\u200b\u5b9e\u73b0\u200b
- \u200b\u5927\u200b\u6a21\u578b\u200b\u63a8\u7406\u200b
"},{"location":"coding/dl-from-scratch/activation/","title":"\u6fc0\u6d3b\u200b\u51fd\u6570","text":"\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u662f\u200b\u795e\u7ecf\u7f51\u7edc\u200b\u4e2d\u200b\u7528\u4e8e\u200b\u5f15\u5165\u200b\u975e\u7ebf\u6027\u200b\u56e0\u7d20\u200b\u7684\u200b\u51fd\u6570\u200b\u3002\u200b\u5e38\u7528\u200b\u7684\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u6709\u200b\u5982\u4e0b\u200b\u51e0\u79cd\u200b\uff1a
"},{"location":"coding/dl-from-scratch/activation/#sigmoid","title":"Sigmoid \u200b\u51fd\u6570","text":"Sigmoid\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5c06\u200b\u8f93\u5165\u200b\u503c\u200b\u538b\u7f29\u200b\u5230\u200b0\u200b\u5230\u200b1\u200b\u4e4b\u95f4\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5e38\u7528\u200b\\(\\sigma\\)\u200b\u8868\u793a\u200b\u3002Sigmoid\u200b\u51fd\u6570\u200b\u5e38\u7528\u200b\u4e8e\u200b\u4e8c\u200b\u5206\u7c7b\u200b\u95ee\u9898\u200b\u4e2d\u200b\uff0c\u200b\u5c06\u200b\u8f93\u51fa\u200b\u503c\u200b\u6620\u5c04\u200b\u5230\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b\u3002
\\[ \\begin{aligned} \\sigma(x) &= \\frac{1}{1 + e^{-x}} \\\\ \\sigma'(x) &= \\sigma(x)(1 - \\sigma(x)) \\end{aligned} \\] def sigmoid(x: torch.Tensor) -> torch.Tensor:\n return 1 / (1 + torch.exp(-x))\n\nclass Sigmoid(torch.nn.Module):\n def __init__(self):\n super(Sigmoid, self).__init__()\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n return sigmoid(x)\n
"},{"location":"coding/dl-from-scratch/activation/#softmax","title":"Softmax \u200b\u51fd\u6570","text":"Softmax\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5c06\u200b\u8f93\u5165\u200b\u503c\u200b\u538b\u7f29\u200b\u5230\u200b0\u200b\u5230\u200b1\u200b\u4e4b\u95f4\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5e38\u7528\u200b\u4e8e\u200b\u591a\u200b\u5206\u7c7b\u200b\u95ee\u9898\u200b\u4e2d\u200b\uff0c\u200b\u5c06\u200b\u591a\u4e2a\u200b\u5206\u7c7b\u200b\u4e0a\u200b\u8f93\u51fa\u200b\u503c\u200b\u6620\u5c04\u200b\u5230\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u6240\u6709\u200b\u7c7b\u522b\u200b\u7684\u200b\u6982\u7387\u200b\u4e4b\u200b\u548c\u200b\u4e3a\u200b1\u3002
\\[ \\begin{aligned} \\text{softmax}(\\bsz)_i &= \\frac{e^{z_i}}{\\sum_{j=1}^n e^{z_j}} \\\\ \\text{softmax}'(\\bsz)_i &= \\text{softmax}(\\bsz)_i(1 - \\text{softmax}(\\bsz)_i) \\end{aligned} \\] def softmax(x: torch.Tensor, dim: int = -1) -> torch.Tensor:\n return torch.exp(x) / torch.exp(x).sum(dim=dim, keepdim=True)\n\nclass Softmax(torch.nn.Module):\n def __init__(self, dim: int = -1):\n super(Softmax, self).__init__()\n self.dim = dim\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n return softmax(x, dim=self.dim)\n
\u200b\u76f8\u5bf9\u200b\u5e94\u200b\u7684\u200b\uff0csoftmin\u200b\u51fd\u6570\u200b\u662f\u200bsoftmax\u200b\u51fd\u6570\u200b\u7684\u200b\u5bf9\u79f0\u200b\u51fd\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u6700\u5c0f\u5316\u200b\u8f93\u51fa\u200b\u503c\u200b\uff0c\\(\\text{softmin}(\\bsz) = \\text{softmax}(-\\bsz)\\)\u3002
"},{"location":"coding/dl-from-scratch/attention/","title":"\u6ce8\u610f\u529b\u200b\u673a\u5236","text":""},{"location":"coding/dl-from-scratch/attention/#_2","title":"\u5e8f\u5217\u200b\u5efa\u6a21","text":"\u200b\u8bed\u8a00\u200b\u6a21\u578b\u200b\u662f\u200b\u4e00\u7c7b\u200b\u5e8f\u5217\u200b\u6a21\u578b\u200b\uff0c\u200b\u5176\u200b\u76ee\u6807\u200b\u662f\u200b\u5bf9\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u5e8f\u5217\u200b\u5efa\u6a21\u200b\uff0c\u200b\u5373\u200b\u5bf9\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u4f4d\u7f6e\u200b\u9884\u6d4b\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u6982\u7387\u200b\u3002\u200b\u6587\u672c\u200b\u9996\u5148\u200b\u901a\u8fc7\u200b\u5206\u8bcd\u200b\uff0c\u200b\u83b7\u5f97\u200b\u5bf9\u5e94\u200b\u7684\u200b\u79bb\u6563\u200b\u7b26\u53f7\u200b\uff08token\uff09\uff0c\u200b\u7136\u540e\u200b\u7ecf\u8fc7\u200b\u5d4c\u5165\u200b\u5c42\u200b\uff08embedding layer\uff09\u200b\u5c06\u200b\u7b26\u53f7\u200b\u6620\u5c04\u200b\u5230\u200b\\(D\\)\u200b\u7ef4\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5e8f\u5217\u200b\u5efa\u6a21\u200b\u7684\u200b\u8f93\u5165\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(N\\times L\\times D\\)\u200b\u7684\u200b\u5f20\u91cf\u200b\uff0c\u200b\u5176\u4e2d\u200b\\(N\\)\u200b\u662f\u200bbatch size\uff0c\\(L\\)\u200b\u662f\u200b\u5e8f\u5217\u200b\u957f\u5ea6\u200b\uff0c\\(D\\)\u200b\u662f\u200b\u5d4c\u5165\u200b\u7ef4\u5ea6\u200b\u3002
"},{"location":"coding/dl-from-scratch/attention/#transformer","title":"Transformer","text":"Transformer\u200b\u7531\u200bVaswani\u200b\u7b49\u200b\u4eba\u200b\u5728\u200b2017\u200b\u5e74\u200b\u63d0\u51fa\u200b\uff0c\u200b\u5176\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\uff0c\u200b\u5373\u200b\u901a\u8fc7\u200b\u67e5\u8be2\u200b\u3001\u200b\u952e\u200b\u7684\u200b\u5339\u914d\u200b\u5f97\u200b\u5206\u4e3a\u200b\u503c\u200b\u5206\u914d\u200b\u6743\u91cd\u200b\uff0c\u200b\u4ece\u800c\u200b\u5b9e\u73b0\u200b\u5bf9\u200b\u5e8f\u5217\u200b\u7684\u200b\u5efa\u6a21\u200b\u3002\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u7684\u200b\u6570\u5b66\u200b\u8868\u8fbe\u200b\u4e3a\u200b\uff1a
\\[ \\text{Attention}(Q, K, V) = \\text{softmax}\\left(\\frac{\\bsQ\\bsK^\\top}{\\sqrt{d_k}}\\right)\\bsV \\] \u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u6307\u200b\u7684\u200b\u662f\u200b\u67e5\u8be2\u200b\u3001\u200b\u952e\u548c\u503c\u200b\u90fd\u200b\u6765\u81ea\u200b\u540c\u4e00\u4e2a\u200b\u5e8f\u5217\u200b\u3002\u200b\u5728\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\uff0c\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\\(\\bsx\\)\u200b\u5206\u522b\u200b\u7ecf\u8fc7\u200b\u4e09\u7ec4\u200b\u7ebf\u6027\u53d8\u6362\u200b\\(\\bsW^Q, \\bsW^K, \\bsW^V\\)\u200b\u5f97\u5230\u200b\u67e5\u8be2\u200b\\(\\bsQ\\)\u3001\u200b\u952e\u200b\\(\\bsK\\)\u200b\u548c\u200b\u503c\u200b\\(\\bsV\\)\uff0c\u200b\u7136\u540e\u200b\u8ba1\u7b97\u200b\u6ce8\u610f\u529b\u200b\u5f97\u5206\u200b\uff0c\u200b\u6700\u540e\u200b\u901a\u8fc7\u200b\u503c\u200b\u7684\u200b\u52a0\u6743\u200b\u6c42\u548c\u200b\u5f97\u5230\u200b\u8f93\u51fa\u200b\u3002\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u6307\u200b\u67e5\u8be2\u200b\u548c\u200b
\u200b\u4e3a\u4ec0\u4e48\u200b\u9700\u8981\u200b\u7ebf\u6027\u53d8\u6362\u200b
\u200b\u7ebf\u6027\u53d8\u6362\u200b\u7684\u200b\u76ee\u7684\u200b\u662f\u200b\u5c06\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u6620\u5c04\u200b\u5230\u200b\u4e0d\u540c\u200b\u7684\u200b\u8bed\u4e49\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u53e6\u5916\u200b\u4e00\u65b9\u9762\u200b\u4e5f\u200b\u4f7f\u5f97\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4e0d\u518d\u200b\u53d7\u5230\u200b\u77e9\u9635\u200b\u5bf9\u79f0\u200b\u7684\u200b\u7ea6\u675f\u200b\uff08A\u200b\u5bf9\u200bB\u200b\u7684\u200b\u6ce8\u610f\u529b\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u7b49\u4e8e\u200bB\u200b\u5bf9\u200bA\u200b\u7684\u200b\u6ce8\u610f\u529b\u200b\uff09\u3002
\u200b\u4e3a\u4ec0\u4e48\u200b\u8981\u200b\u9664\u4ee5\u200b\\(\\sqrt{d_k}\\)
\u200b\u5728\u200b\\(\\bsQ\\bsK^\\top\\)\u200b\u7684\u200b\u8ba1\u7b97\u200b\u4e2d\u200b\uff0c\u200b\u7ed3\u679c\u200b\u7684\u200b\u65b9\u5dee\u200b\u4f1a\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u4e3a\u4e86\u200b\u4f7f\u200b\u7ed3\u679c\u200b\u7684\u200b\u65b9\u5dee\u200b\u4fdd\u6301\u200b\u4e0d\u53d8\u200b\uff0c\u200b\u9700\u8981\u200b\u9664\u4ee5\u200b\\(\\sqrt{d_k}\\)\uff0c\u200b\u5176\u4e2d\u200b\\(d_k\\)\u200b\u662f\u200b\u952e\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u3002\u200b\u5426\u5219\u200b\uff0c\u200b\u5f53\u200b\\(d_k\\)\u200b\u8f83\u5927\u200b\u65f6\u200b\uff0c\\(\\bsQ\\bsK^\\top\\)\u200b\u4e2d\u200b\u5143\u7d20\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5dee\u5f02\u200b\u4f1a\u200b\u53d8\u5f97\u200b\u5f88\u5927\u200b\uff0c\u200b\u5bfc\u81f4\u200bsoftmax\u200b\u51fd\u6570\u200b\u7684\u200b\u68af\u5ea6\u200b\u63a5\u8fd1\u200b\u4e8e\u200b0\u3002
softmax\u200b\u51fd\u6570\u200b
softmax\u200b\u51fd\u6570\u200b\u7684\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\uff1a
\\[ \\text{softmax}(\\bsz)_i = \\frac{e^{z_i}}{\\sum_{j=1}^n e^{z_j}} \\] \u200b\u5373\u200b\u5bf9\u200b\u8f93\u5165\u200b\u5411\u91cf\u200b\\(\\bsz\\)\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u6307\u6570\u200b\u7684\u200b\u5f52\u4e00\u5316\u200b\u3002\u200b\u5176\u4e2d\u200b\\(\\bsz\\)\u200b\u662f\u200b\u8f93\u5165\u200b\u5411\u91cf\u200b\uff0c\\(n\\)\u200b\u662f\u200b\u5411\u91cf\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u3002
\u200b\u4e3a\u4e86\u200b\u4ece\u200b\u591a\u4e2a\u200b\u7ef4\u5ea6\u200b\u5b66\u4e60\u200b\u5230\u200b\u5bf9\u200b\u540c\u4e00\u4e2a\u200b\u4f4d\u7f6e\u200b\u4e0d\u540c\u200b\u7279\u5f81\u200b\u7684\u200b\u8868\u5f81\u200b\uff0ctransformer\u200b\u5f15\u5165\u200b\u4e86\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u3002\u200b\u5176\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u5c06\u200b\u8f93\u5165\u200b\u7684\u200b\\(D\\)\u200b\u7ef4\u200b\u5411\u91cf\u200b\u62c6\u5206\u200b\u5230\u200b\\(h\\)\u200b\u4e2a\u5934\u200b\uff0c\u200b\u7136\u540e\u200b\u5206\u522b\u200b\u8ba1\u7b97\u200b\u6ce8\u610f\u529b\u200b\uff0c\u200b\u6700\u540e\u200b\u5c06\u200b\\(h\\)\u200b\u4e2a\u5934\u200b\u7684\u200b\u8f93\u51fa\u200b\u62fc\u63a5\u200b\u5728\u200b\u4e00\u8d77\u200b\uff0c\u200b\u518d\u200b\u7ecf\u8fc7\u200b\u4e00\u4e2a\u200b\u7ebf\u6027\u53d8\u6362\u200b\u5f97\u5230\u200b\u6700\u7ec8\u200b\u8f93\u51fa\u200b\u3002\u200b\u5728\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\uff0c\u200b\u4e00\u822c\u200b\u4f7f\u7528\u200b\u7ef4\u5ea6\u200b\u53d8\u6362\u200b\u6765\u200b\u5b9e\u73b0\u200b\u8f93\u5165\u200b\u5411\u91cf\u200b\u7684\u200b\u62c6\u5206\u200b\u3002
\u200b\u5728\u200b\u90e8\u5206\u200b\u4efb\u52a1\u200b\u4e2d\u200b\uff0c\u200b\u9700\u8981\u200b\u63a7\u5236\u200b\u5e8f\u5217\u200b\u67d0\u4e2a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u53ea\u80fd\u200b\u4f9d\u8d56\u4e8e\u200b\u8be5\u200b\u4f4d\u7f6e\u200b\u4e4b\u524d\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u800c\u200b\u4e0d\u80fd\u200b\u4f9d\u8d56\u4e8e\u200b\u4e4b\u540e\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\u200b\u6b64\u65f6\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bmask\u200b\u673a\u5236\u200b\uff0c\u200b\u5373\u200b\u5728\u200b\u8ba1\u7b97\u200b\u6ce8\u610f\u529b\u200b\u5f97\u5206\u200b\u65f6\u200b\uff0c\u200b\u5c06\u200b\u4e0d\u200b\u5408\u6cd5\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5f97\u5206\u200b\u8bbe\u7f6e\u200b\u4e3a\u200b\u8d1f\u200b\u65e0\u7a77\u200b\uff0c\u200b\u4ece\u800c\u200b\u5728\u200bsoftmax\u200b\u51fd\u6570\u200b\u4e2d\u200b\u5f97\u5230\u200b0\u200b\u7684\u200b\u6982\u7387\u200b\u3002
"},{"location":"coding/dl-from-scratch/attention/#_3","title":"\u4ee3\u7801\u200b\u5b9e\u73b0","text":"einsum
einsum
\u200b\u662f\u200bEinstein Summation Notation\u200b\u7684\u200b\u7f29\u5199\u200b\uff0c\u200b\u662f\u200b\u4e00\u79cd\u200b\u7528\u4e8e\u200b\u5f20\u91cf\u200b\u8fd0\u7b97\u200b\u7684\u200b\u8bb0\u53f7\u200b\u3002\u200b\u5728\u200bPyTorch\u200b\u4e2d\u200b\uff0ceinsum
\u200b\u51fd\u6570\u200b\u7684\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\uff1a
torch.einsum(equation, *operands)\n
\u200b\u5176\u4e2d\u200bequation
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u63cf\u8ff0\u200b\u4e86\u200b\u5f20\u91cf\u200b\u7684\u200b\u8fd0\u7b97\u200b\u65b9\u5f0f\u200b\uff0coperands
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6216\u200b\u591a\u4e2a\u200b\u5f20\u91cf\u200b\u3002\u200b\u4f8b\u5982\u200b\uff0ctorch.einsum(\"ij,jk->ik\", A, B)
\u200b\u8868\u793a\u200b\u8ba1\u7b97\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u548c\u200b\\(B\\)\u200b\u7684\u200b\u4e58\u79ef\u200b\u3002\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5176\u200b\u7406\u89e3\u200b\u4e3a\u200b\u4e58\u79ef\u200b-\u200b\u6c42\u548c\u200b\u7684\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u5373\u5c06\u200bequation
\u200b\u4e2d\u200b\u7684\u200b\u5b57\u6bcd\u200b\u5bf9\u5e94\u200b\u5230\u200boperands
\u200b\u4e2d\u200b\u7684\u200b\u5f20\u91cf\u200b\uff0c\u200b\u7136\u540e\u200b\u5bf9\u200b\u8fd9\u4e9b\u200b\u5f20\u91cf\u200b\u8fdb\u884c\u200b\u4e58\u79ef\u200b\u548c\u200b\u6c42\u548c\u200b\u3002\u200b\u5ffd\u7565\u200bbatch size\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u8ba1\u7b97\u200b\\(\\bsQ\\bsK^\\top\\)\uff0c\u200b\u5176\u4e2d\u200b\\(\\bsQ\\)\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u662f\u200b\\((L, D)\\)\uff0c\\(\\bsK\\)\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u662f\u200b\\((L, D)\\)\uff0c\u200b\u8f93\u51fa\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u662f\u200b\\((L, L)\\)\uff0c\u200b\u56e0\u6b64\u200bequation
\u200b\u4e3a\u200b\"id,jd->ij\"
\u3002
\u200b\u4e0b\u9762\u200b\u6211\u4eec\u200b\u901a\u8fc7\u200bPyTorch\u200b\u5b9e\u73b0\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u3002\u200b\u5728\u200b\u5b9e\u73b0\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u524d\u200b\uff0c\u200b\u9700\u8981\u200b\u5148\u200b\u5b9e\u73b0\u200b\u7ebf\u6027\u53d8\u6362\u200b\u548c\u200bsoftmax\u200b\u51fd\u6570\u200b\u3002\u200b\u4e4b\u540e\u200b\u5b9e\u73b0\u200b\u7528\u4e8e\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u7684\u200bMultiHeadSelfAttention
\u200b\u7c7b\u200b\uff0c\u200b\u5176\u200b\u8f93\u5165\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(N\\times L\\times D\\)\u200b\u7684\u200b\u5f20\u91cf\u200b\uff0c\u200b\u8f93\u51fa\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(N\\times L\\times D\\)\u200b\u7684\u200b\u5f20\u91cf\u200b\u3002
class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadAttention, self).__init__()\n self.d_model = d_model\n self.num_heads = num_heads\n if d_model % num_heads != 0:\n raise ValueError(\"d_model must be divisible by num_heads\")\n\n self.d_k = d_model // num_heads\n self.sqrt_d_k = self.d_k ** 0.5\n\n self.W_Q = torch.nn.Linear(d_model, d_model)\n self.W_K = torch.nn.Linear(d_model, d_model)\n self.W_V = torch.nn.Linear(d_model, d_model)\n self.W_O = torch.nn.Linear(d_model, d_model)\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n N, L_Q, D = x_q.size()\n _, L_KV, _ = x_k.size()\n Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)\n K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n score = torch.einsum(\"nihd,njhd->nijh\", Q, K) / self.sqrt_d_k\n score = torch.nn.functional.softmax(score, dim=2)\n value = torch.einsum(\"nijh,njhd->nihd\", score, V).reshape(N, L_Q, self.d_model)\n return self.W_O(value)\n\nclass MultiHeadSelfAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadSelfAttention, self).__init__(d_model, num_heads)\n\n def forward(self, x: torch.Tensor, mask: torch.Tensor | None = None) -> torch.Tensor:\n return super().forward(x, x, x, mask)\n\nclass MultiHeadCrossAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadCrossAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x_q: torch.Tensor, x_kv: torch.Tensor,\n mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n return super().forward(x_q, x_kv, x_kv, mask)\n
\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4e2d\u200b\u7684\u200bmask
\u200b\u5728\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\uff0c\u200b\u6709\u65f6\u200b\u9700\u8981\u200b\u5bf9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u7684\u200b\u5f97\u5206\u200b\u8fdb\u884c\u200bmask\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u4ee5\u200b\u63a7\u5236\u200b\u6a21\u578b\u200b\u7684\u200b\u884c\u4e3a\u200b\u3002mask\u200b\u901a\u5e38\u200b\u5206\u4e3a\u200b\u4e09\u79cd\u200b\uff0c\u200b\u5373\u200b
- padding mask\uff1a\u200b\u7ef4\u5ea6\u200b
[N, L]
\uff0c\u200b\u7528\u4e8e\u200b\u63a9\u76d6\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200bpadding\u200b\u5143\u7d20\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u4e0d\u200b\u53c2\u4e0e\u200b\u6ce8\u610f\u529b\u200b\u8ba1\u7b97\u200b\u3002 - attention mask\uff1a\u200b\u7ef4\u5ea6\u200b
[L, L]
\uff0c\u200b\u7528\u4e8e\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4e2d\u200b\uff0c\u200b\u63a7\u5236\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u4f9d\u8d56\u200b\u5173\u7cfb\u200b\u3002\u200b\u901a\u5e38\u200b\u7528\u200bcausal mask\u200b\u6216\u200blook-ahead mask\u200b\u89c4\u5b9a\u200b\u5e8f\u5217\u200b\u67d0\u4e2a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u53ea\u80fd\u200b\u4f9d\u8d56\u4e8e\u200b\u8be5\u200b\u4f4d\u7f6e\u200b\u4e4b\u524d\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u800c\u200b\u4e0d\u80fd\u200b\u4f9d\u8d56\u4e8e\u200b\u4e4b\u540e\u200b\u7684\u200b\u5143\u7d20\u200b\u3002 - \u200b\u5728\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4e2d\u200b\u7684\u200bmemory mask\uff1a\u200b\u7ef4\u5ea6\u200b
[L_Q, L_KV]
\uff0c\u200b\u7528\u4e8e\u200b\u63a7\u5236\u200b\u67e5\u8be2\u200b\u548c\u952e\u200b\u4e4b\u95f4\u200b\u7684\u200b\u4f9d\u8d56\u200b\u5173\u7cfb\u200b\u3002
\u200b\u5728\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u5c06\u200bmask\u200b\u4e2d\u4e3a\u200b0\u200b\u7684\u200b\u5143\u7d20\u200b\u8bbe\u7f6e\u200b\u4e3a\u200b\u8d1f\u200b\u65e0\u7a77\u200b\uff0c\u200b\u4ece\u800c\u200b\u5728\u200bsoftmax\u200b\u51fd\u6570\u200b\u4e2d\u200b\u5f97\u5230\u200b0\u200b\u7684\u200b\u6982\u7387\u200b\u3002
\u200b\u5b8c\u6574\u200b\u7684\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u5b9e\u73b0\u200b\u5982\u4e0b\u200b
class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadAttention, self).__init__()\n self.d_model = d_model\n self.num_heads = num_heads\n if d_model % num_heads != 0:\n raise ValueError(\"d_model must be divisible by num_heads\")\n\n self.d_k = d_model // num_heads\n self.sqrt_d_k = self.d_k ** 0.5\n\n self.W_Q = torch.nn.Linear(d_model, d_model)\n self.W_K = torch.nn.Linear(d_model, d_model)\n self.W_V = torch.nn.Linear(d_model, d_model)\n self.W_O = torch.nn.Linear(d_model, d_model)\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n # x_q: (N, L_Q, D), x_k: (N, L_KV, D), x_v: (N, L_KV, D)\n # padding_mask: (N, L_KV), attention_mask: (L_Q, L_KV)\n N, L_Q, D = x_q.size()\n _, L_KV, _ = x_k.size()\n\n # Linear transformation -> Split heads\n Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)\n K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n # Compute attention score\n score = torch.einsum('nihd,njhd->nijh', Q, K) / self.sqrt_d_k\n\n # Apply attention mask\n if attention_mask is not None:\n score = score.masked_fill(\n attention_mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf')\n )\n\n # Apply padding mask\n if padding_mask is not None:\n score = score.masked_fill(\n padding_mask.reshape(N, 1, L_KV, 1) == 0, float('-inf')\n )\n\n # Softmax -> Weighted sum -> Merge heads -> Output transformation\n score = torch.nn.functional.softmax(score, dim=2)\n value = torch.einsum(\n 'nijh,njhd->nihd', score, V\n ).reshape(N, L_Q, self.d_model)\n return self.W_O(value)\n\n\nclass MultiHeadSelfAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadSelfAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n # Self attention is applied to the same input\n return super().forward(x, x, x, padding_mask, attention_mask)\n\n\nclass MultiHeadCrossAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadCrossAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x_q: torch.Tensor, x_kv: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n # Cross attention is applying query on another kv sequence\n return super().forward(x_q, x_kv, x_kv, padding_mask, attention_mask)\n
"},{"location":"coding/dl-from-scratch/bert/","title":"\u5b9e\u73b0\u200bBERT","text":"In\u00a0[1]: Copied! import transformers\nimport torch\n\nfrom custom_transformer import Encoder\n
import transformers import torch from custom_transformer import Encoder huggingface\u200b\u4e2d\u200b\u7684\u200b\u6a21\u578b\u200b\u901a\u5e38\u200b\u5bf9\u5e94\u200b\u4e00\u7ec4\u200bconfig\uff0c\u200b\u5b58\u50a8\u200b\u6a21\u578b\u200b\u7684\u200b\u8d85\u200b\u53c2\u6570\u200b\u3002
In\u00a0[2]: Copied! bert_config = transformers.BertConfig.from_pretrained('bert-base-uncased', local_files_only=True)\n# Remove the pooler layer\nbert_config\n
bert_config = transformers.BertConfig.from_pretrained('bert-base-uncased', local_files_only=True) # Remove the pooler layer bert_config /opt/homebrew/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n warnings.warn(\n
Out[2]: BertConfig {\n \"architectures\": [\n \"BertForMaskedLM\"\n ],\n \"attention_probs_dropout_prob\": 0.1,\n \"classifier_dropout\": null,\n \"gradient_checkpointing\": false,\n \"hidden_act\": \"gelu\",\n \"hidden_dropout_prob\": 0.1,\n \"hidden_size\": 768,\n \"initializer_range\": 0.02,\n \"intermediate_size\": 3072,\n \"layer_norm_eps\": 1e-12,\n \"max_position_embeddings\": 512,\n \"model_type\": \"bert\",\n \"num_attention_heads\": 12,\n \"num_hidden_layers\": 12,\n \"pad_token_id\": 0,\n \"position_embedding_type\": \"absolute\",\n \"transformers_version\": \"4.41.2\",\n \"type_vocab_size\": 2,\n \"use_cache\": true,\n \"vocab_size\": 30522\n}
\u200b\u9996\u5148\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u52a0\u8f7d\u200b\u9884\u200b\u8bad\u7ec3\u200b\u7684\u200bbert-base-uncased\u200b\u6a21\u578b\u200b\uff0c\u200b\u7528\u4e8e\u200b\u548c\u200b\u6211\u4eec\u200b\u7684\u200b\u6a21\u578b\u200b\u8fdb\u884c\u200b\u5bf9\u6bd4\u200b\u3002
In\u00a0[3]: Copied! bert_tokenizer = transformers.BertTokenizer.from_pretrained(\n 'bert-base-uncased', local_files_only=True\n)\nhf_model = transformers.BertModel.from_pretrained(\n 'bert-base-uncased', config=bert_config, add_pooling_layer=False\n)\nhf_model\n
bert_tokenizer = transformers.BertTokenizer.from_pretrained( 'bert-base-uncased', local_files_only=True ) hf_model = transformers.BertModel.from_pretrained( 'bert-base-uncased', config=bert_config, add_pooling_layer=False ) hf_model Out[3]: BertModel(\n (embeddings): BertEmbeddings(\n (word_embeddings): Embedding(30522, 768, padding_idx=0)\n (position_embeddings): Embedding(512, 768)\n (token_type_embeddings): Embedding(2, 768)\n (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n (encoder): BertEncoder(\n (layer): ModuleList(\n (0-11): 12 x BertLayer(\n (attention): BertAttention(\n (self): BertSdpaSelfAttention(\n (query): Linear(in_features=768, out_features=768, bias=True)\n (key): Linear(in_features=768, out_features=768, bias=True)\n (value): Linear(in_features=768, out_features=768, bias=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n (output): BertSelfOutput(\n (dense): Linear(in_features=768, out_features=768, bias=True)\n (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n )\n (intermediate): BertIntermediate(\n (dense): Linear(in_features=768, out_features=3072, bias=True)\n (intermediate_act_fn): GELUActivation()\n )\n (output): BertOutput(\n (dense): Linear(in_features=3072, out_features=768, bias=True)\n (LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n )\n )\n )\n)
\u200b\u63a5\u4e0b\u6765\u200b\uff0c\u200b\u6211\u4eec\u200b\u6839\u636e\u200bconfig\u200b\u548c\u200b\u6a21\u578b\u200b\u7684\u200b\u7ed3\u6784\u200b\uff0c\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200bBERT\u200b\u6a21\u578b\u200b\u3002
In\u00a0[4]: Copied! class BertEmbeddings(torch.nn.Module):\n def __init__(self, config: transformers.BertConfig):\n super(BertEmbeddings, self).__init__()\n\n self.word_embeddings = torch.nn.Embedding(\n config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id\n )\n self.positional_embedding = torch.nn.Embedding(\n config.max_position_embeddings, config.hidden_size\n )\n self.token_type_embeddings = torch.nn.Embedding(\n config.type_vocab_size, config.hidden_size\n )\n self.ln = torch.nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps)\n self.dropout = torch.nn.Dropout(config.hidden_dropout_prob)\n\n def forward(self, input_ids):\n input_embeds = self.word_embeddings(input_ids)\n pos_embeds = self.positional_embedding(\n torch.arange(input_ids.size(1), device=input_ids.device)\n )\n type_embeds = self.token_type_embeddings(\n torch.zeros_like(input_ids)\n )\n return self.dropout(self.ln(input_embeds + pos_embeds + type_embeds))\n\nclass CustomBertModel(torch.nn.Module):\n def __init__(self, config: transformers.BertConfig):\n super(CustomBertModel, self).__init__()\n self.shared = BertEmbeddings(config)\n self.encoder = Encoder(\n num_layers=config.num_hidden_layers,\n input_dim=config.hidden_size,\n num_heads=config.num_attention_heads,\n ffn_dim=config.intermediate_size,\n dropout=config.hidden_dropout_prob,\n layer_norm_eps=config.layer_norm_eps,\n activation=config.hidden_act,\n )\n\n def forward(self, input_ids, padding_mask):\n input_embeds = self.shared(input_ids)\n return self.encoder(input_embeds, padding_mask=padding_mask)\n\ncustom_model = CustomBertModel(bert_config)\ncustom_model\n
class BertEmbeddings(torch.nn.Module): def __init__(self, config: transformers.BertConfig): super(BertEmbeddings, self).__init__() self.word_embeddings = torch.nn.Embedding( config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id ) self.positional_embedding = torch.nn.Embedding( config.max_position_embeddings, config.hidden_size ) self.token_type_embeddings = torch.nn.Embedding( config.type_vocab_size, config.hidden_size ) self.ln = torch.nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps) self.dropout = torch.nn.Dropout(config.hidden_dropout_prob) def forward(self, input_ids): input_embeds = self.word_embeddings(input_ids) pos_embeds = self.positional_embedding( torch.arange(input_ids.size(1), device=input_ids.device) ) type_embeds = self.token_type_embeddings( torch.zeros_like(input_ids) ) return self.dropout(self.ln(input_embeds + pos_embeds + type_embeds)) class CustomBertModel(torch.nn.Module): def __init__(self, config: transformers.BertConfig): super(CustomBertModel, self).__init__() self.shared = BertEmbeddings(config) self.encoder = Encoder( num_layers=config.num_hidden_layers, input_dim=config.hidden_size, num_heads=config.num_attention_heads, ffn_dim=config.intermediate_size, dropout=config.hidden_dropout_prob, layer_norm_eps=config.layer_norm_eps, activation=config.hidden_act, ) def forward(self, input_ids, padding_mask): input_embeds = self.shared(input_ids) return self.encoder(input_embeds, padding_mask=padding_mask) custom_model = CustomBertModel(bert_config) custom_model Out[4]: CustomBertModel(\n (shared): BertEmbeddings(\n (word_embeddings): Embedding(30522, 768, padding_idx=0)\n (positional_embedding): Embedding(512, 768)\n (token_type_embeddings): Embedding(2, 768)\n (ln): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout): Dropout(p=0.1, inplace=False)\n )\n (encoder): Encoder(\n (layers): ModuleList(\n (0-11): 12 x EncoderLayer(\n (attention): MultiHeadSelfAttention(\n (W_Q): Linear(in_features=768, out_features=768, bias=True)\n (W_K): Linear(in_features=768, out_features=768, bias=True)\n (W_V): Linear(in_features=768, out_features=768, bias=True)\n (W_O): Linear(in_features=768, out_features=768, bias=True)\n )\n (norm1): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout1): Dropout(p=0.1, inplace=False)\n (ffn): FFN(\n (fc1): Linear(in_features=768, out_features=3072, bias=True)\n (fc2): Linear(in_features=3072, out_features=768, bias=True)\n (act): GELU(approximate='none')\n )\n (norm2): LayerNorm((768,), eps=1e-12, elementwise_affine=True)\n (dropout2): Dropout(p=0.1, inplace=False)\n )\n )\n )\n)
\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u5c06\u200b\u9884\u200b\u8bad\u7ec3\u200b\u6a21\u578b\u200b\u7684\u200b\u6743\u91cd\u200b\u52a0\u8f7d\u200b\u5230\u200b\u6211\u4eec\u200b\u7684\u200b\u6a21\u578b\u200b\u4e2d\u200b\u3002
In\u00a0[5]: Copied! def copy_weights(src, dest, bias: bool = False):\n src.weight.data.copy_(dest.weight.data)\n if bias:\n src.bias.data.copy_(dest.bias.data)\n\ndef load_weight_from_hf(model: CustomBertModel, hf_model: transformers.BertModel):\n # Embeddings\n unbiased_layer_pairs = [\n (model.shared.word_embeddings, hf_model.embeddings.word_embeddings),\n (model.shared.positional_embedding, hf_model.embeddings.position_embeddings),\n (model.shared.token_type_embeddings, hf_model.embeddings.token_type_embeddings),\n ]\n biased_layer_pairs = [\n (model.shared.ln, hf_model.embeddings.LayerNorm),\n ]\n for custom_layer, hf_layer in zip(model.encoder.layers, hf_model.encoder.layer):\n # attn\n biased_layer_pairs.append((custom_layer.attention.W_Q, hf_layer.attention.self.query))\n biased_layer_pairs.append((custom_layer.attention.W_K, hf_layer.attention.self.key))\n biased_layer_pairs.append((custom_layer.attention.W_V, hf_layer.attention.self.value))\n biased_layer_pairs.append((custom_layer.attention.W_O, hf_layer.attention.output.dense))\n biased_layer_pairs.append((custom_layer.norm1, hf_layer.attention.output.LayerNorm))\n # ffn\n biased_layer_pairs.append((custom_layer.ffn.fc1, hf_layer.intermediate.dense))\n biased_layer_pairs.append((custom_layer.ffn.fc2, hf_layer.output.dense))\n biased_layer_pairs.append((custom_layer.norm2, hf_layer.output.LayerNorm))\n\n for src, dest in unbiased_layer_pairs:\n copy_weights(src, dest)\n for src, dest in biased_layer_pairs:\n copy_weights(src, dest, bias=True)\n return model\n
def copy_weights(src, dest, bias: bool = False): src.weight.data.copy_(dest.weight.data) if bias: src.bias.data.copy_(dest.bias.data) def load_weight_from_hf(model: CustomBertModel, hf_model: transformers.BertModel): # Embeddings unbiased_layer_pairs = [ (model.shared.word_embeddings, hf_model.embeddings.word_embeddings), (model.shared.positional_embedding, hf_model.embeddings.position_embeddings), (model.shared.token_type_embeddings, hf_model.embeddings.token_type_embeddings), ] biased_layer_pairs = [ (model.shared.ln, hf_model.embeddings.LayerNorm), ] for custom_layer, hf_layer in zip(model.encoder.layers, hf_model.encoder.layer): # attn biased_layer_pairs.append((custom_layer.attention.W_Q, hf_layer.attention.self.query)) biased_layer_pairs.append((custom_layer.attention.W_K, hf_layer.attention.self.key)) biased_layer_pairs.append((custom_layer.attention.W_V, hf_layer.attention.self.value)) biased_layer_pairs.append((custom_layer.attention.W_O, hf_layer.attention.output.dense)) biased_layer_pairs.append((custom_layer.norm1, hf_layer.attention.output.LayerNorm)) # ffn biased_layer_pairs.append((custom_layer.ffn.fc1, hf_layer.intermediate.dense)) biased_layer_pairs.append((custom_layer.ffn.fc2, hf_layer.output.dense)) biased_layer_pairs.append((custom_layer.norm2, hf_layer.output.LayerNorm)) for src, dest in unbiased_layer_pairs: copy_weights(src, dest) for src, dest in biased_layer_pairs: copy_weights(src, dest, bias=True) return model In\u00a0[6]: Copied! custom_model = load_weight_from_hf(custom_model, hf_model)\n
custom_model = load_weight_from_hf(custom_model, hf_model) \u200b\u4f7f\u7528\u200bBERT\u200b\u7f16\u7801\u200b\u4e00\u53e5\u200b\u8bdd\u200b\uff0c\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u5bf9\u200b\u53e5\u5b50\u200b\u5206\u8bcd\u200b\uff0c\u200b\u7136\u540e\u200b\u5c06\u200b\u5176\u200b\u8f93\u5165\u200b\u6a21\u578b\u200b\u5f97\u5230\u200b\u5bf9\u5e94\u200b\u7684\u200b\u8f93\u51fa\u200b\u3002
In\u00a0[7]: Copied! custom_model.eval()\nhf_model.eval()\n\nsentence = \"Hello, World!\"\ntokenized_sentence = bert_tokenizer(sentence, return_tensors='pt')\ninput_ids = tokenized_sentence['input_ids']\npadding_mask = tokenized_sentence['attention_mask']\n\ncustom_output = custom_model(input_ids, padding_mask)\nhf_output = hf_model(input_ids, attention_mask=padding_mask).last_hidden_state\ncustom_output[0, 0, :5], hf_output[0, 0, :5]\n
custom_model.eval() hf_model.eval() sentence = \"Hello, World!\" tokenized_sentence = bert_tokenizer(sentence, return_tensors='pt') input_ids = tokenized_sentence['input_ids'] padding_mask = tokenized_sentence['attention_mask'] custom_output = custom_model(input_ids, padding_mask) hf_output = hf_model(input_ids, attention_mask=padding_mask).last_hidden_state custom_output[0, 0, :5], hf_output[0, 0, :5] Out[7]: (tensor([-0.0781, 0.1587, 0.0400, -0.1986, -0.3442], grad_fn=<SliceBackward0>),\n tensor([-0.0781, 0.1587, 0.0400, -0.1986, -0.3442], grad_fn=<SliceBackward0>))
In\u00a0[8]: Copied! torch.allclose(custom_output, hf_output, atol=1e-5)\n
torch.allclose(custom_output, hf_output, atol=1e-5) Out[8]: True
"},{"location":"coding/dl-from-scratch/custom_transformer/","title":"Custom transformer","text":"In\u00a0[\u00a0]: Copied! import torch\n
import torch In\u00a0[\u00a0]: Copied! class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadAttention, self).__init__()\n self.d_model = d_model\n self.num_heads = num_heads\n if d_model % num_heads != 0:\n raise ValueError(\"d_model must be divisible by num_heads\")\n\n self.d_k = d_model // num_heads\n self.sqrt_d_k = self.d_k ** 0.5\n\n self.W_Q = torch.nn.Linear(d_model, d_model)\n self.W_K = torch.nn.Linear(d_model, d_model)\n self.W_V = torch.nn.Linear(d_model, d_model)\n self.W_O = torch.nn.Linear(d_model, d_model)\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n # x_q: (N, L_Q, D), x_k: (N, L_KV, D), x_v: (N, L_KV, D)\n # padding_mask: (N, L_KV), attention_mask: (L_Q, L_KV)\n N, L_Q, D = x_q.size()\n _, L_KV, _ = x_k.size()\n Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)\n K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n score = torch.einsum('nihd,njhd->nijh', Q, K) / self.sqrt_d_k\n # score: (N, L_Q, L_KV, num_heads)\n # Apply attention mask\n if attention_mask is not None:\n score = score.masked_fill(\n attention_mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf')\n )\n # Apply padding mask\n if padding_mask is not None:\n score = score.masked_fill(\n padding_mask.reshape(N, 1, L_KV, 1) == 0, float('-inf')\n )\n score = torch.nn.functional.softmax(score, dim=2)\n value = torch.einsum(\n 'nijh,njhd->nihd', score, V\n ).reshape(N, L_Q, self.d_model)\n return self.W_O(value)\n
class MultiHeadAttention(torch.nn.Module): def __init__(self, d_model: int, num_heads: int): super(MultiHeadAttention, self).__init__() self.d_model = d_model self.num_heads = num_heads if d_model % num_heads != 0: raise ValueError(\"d_model must be divisible by num_heads\") self.d_k = d_model // num_heads self.sqrt_d_k = self.d_k ** 0.5 self.W_Q = torch.nn.Linear(d_model, d_model) self.W_K = torch.nn.Linear(d_model, d_model) self.W_V = torch.nn.Linear(d_model, d_model) self.W_O = torch.nn.Linear(d_model, d_model) def forward( self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None ) -> torch.Tensor: # x_q: (N, L_Q, D), x_k: (N, L_KV, D), x_v: (N, L_KV, D) # padding_mask: (N, L_KV), attention_mask: (L_Q, L_KV) N, L_Q, D = x_q.size() _, L_KV, _ = x_k.size() Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k) K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k) V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k) score = torch.einsum('nihd,njhd->nijh', Q, K) / self.sqrt_d_k # score: (N, L_Q, L_KV, num_heads) # Apply attention mask if attention_mask is not None: score = score.masked_fill( attention_mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf') ) # Apply padding mask if padding_mask is not None: score = score.masked_fill( padding_mask.reshape(N, 1, L_KV, 1) == 0, float('-inf') ) score = torch.nn.functional.softmax(score, dim=2) value = torch.einsum( 'nijh,njhd->nihd', score, V ).reshape(N, L_Q, self.d_model) return self.W_O(value) In\u00a0[\u00a0]: Copied! class MultiHeadSelfAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadSelfAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n return super().forward(x, x, x, padding_mask, attention_mask)\n
class MultiHeadSelfAttention(MultiHeadAttention): def __init__(self, d_model: int, num_heads: int): super(MultiHeadSelfAttention, self).__init__(d_model, num_heads) def forward( self, x: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None ) -> torch.Tensor: return super().forward(x, x, x, padding_mask, attention_mask) In\u00a0[\u00a0]: Copied! class MultiHeadCrossAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadCrossAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x_q: torch.Tensor, x_kv: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n return super().forward(x_q, x_kv, x_kv, padding_mask, attention_mask)\n
class MultiHeadCrossAttention(MultiHeadAttention): def __init__(self, d_model: int, num_heads: int): super(MultiHeadCrossAttention, self).__init__(d_model, num_heads) def forward( self, x_q: torch.Tensor, x_kv: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None ) -> torch.Tensor: return super().forward(x_q, x_kv, x_kv, padding_mask, attention_mask) In\u00a0[\u00a0]: Copied! ACT2FN = {\n 'relu': torch.nn.ReLU,\n 'gelu': torch.nn.GELU,\n}\n
ACT2FN = { 'relu': torch.nn.ReLU, 'gelu': torch.nn.GELU, } In\u00a0[\u00a0]: Copied! class FFN(torch.nn.Module):\n def __init__(self, input_dim: int, hidden_dim: int, activation: str = 'relu'):\n super(FFN, self).__init__()\n self.fc1 = torch.nn.Linear(input_dim, hidden_dim)\n self.fc2 = torch.nn.Linear(hidden_dim, input_dim)\n self.act = ACT2FN[activation]()\n\n def forward(self, x):\n return self.fc2(self.act(self.fc1(x)))\n
class FFN(torch.nn.Module): def __init__(self, input_dim: int, hidden_dim: int, activation: str = 'relu'): super(FFN, self).__init__() self.fc1 = torch.nn.Linear(input_dim, hidden_dim) self.fc2 = torch.nn.Linear(hidden_dim, input_dim) self.act = ACT2FN[activation]() def forward(self, x): return self.fc2(self.act(self.fc1(x))) In\u00a0[\u00a0]: Copied! class EncoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(EncoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim, activation)\n self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n def forward(\n self, x, padding_mask: torch.Tensor | None = None,\n src_mask: torch.Tensor | None = None\n ):\n x = x + self.dropout1(self.attention(x, padding_mask, src_mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.ffn(x))\n x = self.norm2(x)\n\n return x\n
class EncoderLayer(torch.nn.Module): def __init__( self, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6, activation: str = 'relu' ): super(EncoderLayer, self).__init__() if ffn_dim is None: ffn_dim = input_dim * 4 self.attention = MultiHeadSelfAttention(input_dim, num_heads) self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout1 = torch.nn.Dropout(dropout) self.ffn = FFN(input_dim, ffn_dim, activation) self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout2 = torch.nn.Dropout(dropout) def forward( self, x, padding_mask: torch.Tensor | None = None, src_mask: torch.Tensor | None = None ): x = x + self.dropout1(self.attention(x, padding_mask, src_mask)) x = self.norm1(x) x = x + self.dropout2(self.ffn(x)) x = self.norm2(x) return x In\u00a0[\u00a0]: Copied! class Encoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(Encoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n EncoderLayer(\n input_dim, num_heads, ffn_dim,\n dropout, layer_norm_eps, activation\n )\n for _ in range(num_layers)\n ])\n\n def forward(\n self, x, padding_mask: torch.Tensor | None = None,\n src_mask: torch.Tensor | None = None\n ):\n # x: (N, L, D)\n if src_mask is None:\n src_mask = torch.ones(x.size(1), x.size(1)).to(x.device)\n for layer in self.layers:\n x = layer(x, padding_mask, src_mask)\n return x\n
class Encoder(torch.nn.Module): def __init__( self, num_layers: int, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6, activation: str = 'relu' ): super(Encoder, self).__init__() self.layers = torch.nn.ModuleList([ EncoderLayer( input_dim, num_heads, ffn_dim, dropout, layer_norm_eps, activation ) for _ in range(num_layers) ]) def forward( self, x, padding_mask: torch.Tensor | None = None, src_mask: torch.Tensor | None = None ): # x: (N, L, D) if src_mask is None: src_mask = torch.ones(x.size(1), x.size(1)).to(x.device) for layer in self.layers: x = layer(x, padding_mask, src_mask) return x In\u00a0[\u00a0]: Copied! class DecoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(DecoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.self_attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.cross_attention = MultiHeadCrossAttention(input_dim, num_heads)\n self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim, activation)\n self.norm3 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout3 = torch.nn.Dropout(dropout)\n\n def forward(\n self, x: torch.Tensor, memory: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n memory_mask: torch.Tensor | None = None,\n tgt_mask: torch.Tensor | None = None\n ):\n\n x = x + self.dropout1(self.self_attention(x, padding_mask, tgt_mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.cross_attention(x, memory, padding_mask, memory_mask))\n x = self.norm2(x)\n\n x = x + self.dropout3(self.ffn(x))\n x = self.norm3(x)\n\n return x\n
class DecoderLayer(torch.nn.Module): def __init__( self, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6, activation: str = 'relu' ): super(DecoderLayer, self).__init__() if ffn_dim is None: ffn_dim = input_dim * 4 self.self_attention = MultiHeadSelfAttention(input_dim, num_heads) self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout1 = torch.nn.Dropout(dropout) self.cross_attention = MultiHeadCrossAttention(input_dim, num_heads) self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout2 = torch.nn.Dropout(dropout) self.ffn = FFN(input_dim, ffn_dim, activation) self.norm3 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout3 = torch.nn.Dropout(dropout) def forward( self, x: torch.Tensor, memory: torch.Tensor, padding_mask: torch.Tensor | None = None, memory_mask: torch.Tensor | None = None, tgt_mask: torch.Tensor | None = None ): x = x + self.dropout1(self.self_attention(x, padding_mask, tgt_mask)) x = self.norm1(x) x = x + self.dropout2(self.cross_attention(x, memory, padding_mask, memory_mask)) x = self.norm2(x) x = x + self.dropout3(self.ffn(x)) x = self.norm3(x) return x In\u00a0[\u00a0]: Copied! class Decoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(Decoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n DecoderLayer(\n input_dim, num_heads, ffn_dim, dropout,\n layer_norm_eps, activation\n )\n for _ in range(num_layers)\n ])\n\n def forward(\n self, x: torch.Tensor, memory: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n memory_mask: torch.Tensor | None = None,\n tgt_mask: torch.Tensor | None = None\n ):\n # x: (N, L, D)\n for layer in self.layers:\n x = layer(x, memory, padding_mask, memory_mask, tgt_mask)\n return x\n
class Decoder(torch.nn.Module): def __init__( self, num_layers: int, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6, activation: str = 'relu' ): super(Decoder, self).__init__() self.layers = torch.nn.ModuleList([ DecoderLayer( input_dim, num_heads, ffn_dim, dropout, layer_norm_eps, activation ) for _ in range(num_layers) ]) def forward( self, x: torch.Tensor, memory: torch.Tensor, padding_mask: torch.Tensor | None = None, memory_mask: torch.Tensor | None = None, tgt_mask: torch.Tensor | None = None ): # x: (N, L, D) for layer in self.layers: x = layer(x, memory, padding_mask, memory_mask, tgt_mask) return x"},{"location":"coding/dl-from-scratch/encoder-decoder/","title":"\u7f16\u7801\u5668\u200b\u4e0e\u200b\u89e3\u7801\u5668","text":"\u200b\u5728\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\uff0cVaswani\u200b\u7b49\u200b\u4eba\u200b\u63d0\u51fa\u200b\u4e86\u200b\u4e24\u79cd\u200btransformer\u200b\u67b6\u6784\u200b\uff0c\u200b\u5373\u200b\u7f16\u7801\u5668\u200b\u548c\u200b\u89e3\u7801\u5668\u200b\u3002\u200b\u7f16\u7801\u5668\u200b\u5229\u7528\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\uff0c\u200b\u5bf9\u200b\u8f93\u5165\u200b\u7684\u200b\u5e8f\u5217\u200b\u8fdb\u884c\u200b\u7f16\u7801\u200b\uff0c\u200b\u89e3\u7801\u5668\u200b\u5219\u200b\u5229\u7528\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u548c\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\uff0c\u200b\u751f\u6210\u200b\u5bf9\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002
"},{"location":"coding/dl-from-scratch/encoder-decoder/#_2","title":"\u7f16\u7801\u5668","text":"\u200b\u7f16\u7801\u5668\u200b\u7531\u200b\u591a\u4e2a\u200b\u76f8\u540c\u200b\u7684\u200b\u5c42\u200b\u7ec4\u6210\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5c42\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\u6b8b\u5dee\u200b\u8fde\u63a5\u200b\u7684\u200b\u591a\u5934\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u548c\u200b\u4e00\u4e2a\u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\u3002\u200b\u5728\u200b\u6b8b\u5dee\u200b\u8fde\u63a5\u200b\u524d\u200b\uff0c\u200b\u4f7f\u7528\u200bdropout\uff1b\u200b\u5728\u200b\u6b8b\u5dee\u200b\u8fde\u63a5\u200b\u540e\u200b\uff0c\u200b\u4f7f\u7528\u200b\u5c42\u200b\u5f52\u4e00\u5316\u200b\u6765\u200b\u9632\u6b62\u200b\u8fc7\u200b\u62df\u5408\u200b\u3002\u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\u7531\u200b\u4e24\u4e2a\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u7ec4\u6210\u200b\uff0c\u200b\u4e24\u4e2a\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u4e4b\u95f4\u200b\u901a\u5e38\u200b\u4f7f\u7528\u200bReLU\u200b\u6216\u200bGeLU\u200b\u7b49\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u3002
ACT2FN = {\n 'relu': torch.nn.ReLU,\n 'gelu': torch.nn.GELU,\n}\n\nclass FFN(torch.nn.Module):\n def __init__(self, input_dim: int, hidden_dim: int, activation: str = 'relu'):\n super(FFN, self).__init__()\n self.fc1 = torch.nn.Linear(input_dim, hidden_dim)\n self.fc2 = torch.nn.Linear(hidden_dim, input_dim)\n self.act = ACT2FN[activation]()\n\n def forward(self, x):\n return self.fc2(self.act(self.fc1(x)))\n\n\nclass EncoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(EncoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim, activation)\n self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n def forward(\n self, x, padding_mask: torch.Tensor | None = None,\n src_mask: torch.Tensor | None = None\n ):\n x = x + self.dropout1(self.attention(x, padding_mask, src_mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.ffn(x))\n x = self.norm2(x)\n\n return x\n\n\nclass Encoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(Encoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n EncoderLayer(\n input_dim, num_heads, ffn_dim,\n dropout, layer_norm_eps, activation\n )\n for _ in range(num_layers)\n ])\n\n def forward(\n self, x, padding_mask: torch.Tensor | None = None,\n src_mask: torch.Tensor | None = None\n ):\n # x: (N, L, D)\n if src_mask is None:\n src_mask = torch.ones(x.size(1), x.size(1)).to(x.device)\n for layer in self.layers:\n x = layer(x, padding_mask, src_mask)\n return x\n
"},{"location":"coding/dl-from-scratch/encoder-decoder/#_3","title":"\u89e3\u7801\u5668","text":"\u200b\u89e3\u7801\u5668\u200b\u5728\u200b\u7f16\u7801\u5668\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\uff0c\u200b\u5c06\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u7531\u200b\u53cc\u5411\u200b\u6539\u4e3a\u200b\u5355\u5411\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5728\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\u548c\u200b\u524d\u9988\u200b\u795e\u7ecf\u200b\u7f51\u7edc\u5c42\u200b\u4e4b\u95f4\u200b\u589e\u52a0\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u6b8b\u5dee\u200b\u8fde\u63a5\u200b\u7684\u200b\u591a\u5934\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u3002\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4f7f\u7528\u200b\u7f16\u7801\u5668\u200b\u7684\u200b\u8f93\u51fa\u200b\u4f5c\u4e3a\u200b\u5168\u5c40\u200b\u952e\u548c\u503c\u200b\uff0c\u200b\u89e3\u7801\u5668\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\u7684\u200b\u8f93\u51fa\u200b\u4f5c\u4e3a\u200b\u67e5\u8be2\u200b\u3002\u200b\u5728\u200b\u6b8b\u5dee\u200b\u8fde\u63a5\u200b\u524d\u540e\u200b\u4f7f\u7528\u200bdropout\u200b\u548c\u200b\u5c42\u200b\u5f52\u4e00\u5316\u200b\u3002\u200b\u6ce8\u610f\u200b\u5bf9\u4e8e\u200bdecoder-only\u200b\u7684\u200btransformer\uff0c\u200b\u6ca1\u6709\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\uff0c\u200b\u800c\u662f\u200b\u4ec5\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\u5355\u5411\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\u3002
class DecoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(DecoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.self_attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.cross_attention = MultiHeadCrossAttention(input_dim, num_heads)\n self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim, activation)\n self.norm3 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout3 = torch.nn.Dropout(dropout)\n\n def forward(\n self, x: torch.Tensor, memory: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n memory_mask: torch.Tensor | None = None,\n tgt_mask: torch.Tensor | None = None\n ):\n if tgt_mask is None:\n tgt_mask = torch.triu(\n torch.ones(x.size(1), x.size(1)), diagonal=1\n ).to(x.device)\n\n x = x + self.dropout1(self.self_attention(x, padding_mask, tgt_mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.cross_attention(x, memory, padding_mask, memory_mask))\n x = self.norm2(x)\n\n x = x + self.dropout3(self.ffn(x))\n x = self.norm3(x)\n\n return x\n\n\nclass Decoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6, activation: str = 'relu'\n ):\n super(Decoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n DecoderLayer(\n input_dim, num_heads, ffn_dim, dropout,\n layer_norm_eps, activation\n )\n for _ in range(num_layers)\n ])\n\n def forward(\n self, x: torch.Tensor, memory: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n memory_mask: torch.Tensor | None = None,\n tgt_mask: torch.Tensor | None = None\n ):\n # x: (N, L, D)\n for layer in self.layers:\n x = layer(x, memory, padding_mask, memory_mask, tgt_mask)\n return x\n
"},{"location":"coding/dl-from-scratch/encoder-decoder/#transformer","title":"transformer\u200b\u7684\u200b\u65f6\u7a7a\u200b\u590d\u6742\u5ea6","text":"\u200b\u7ed9\u5b9a\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u7684\u200b\u957f\u5ea6\u200b\\(L\\)\uff0c\u200b\u8f93\u5165\u200b\u7ef4\u5ea6\u200b\\(D\\)\uff0c\u200b\u7f16\u7801\u5668\u200b\u5c42\u6570\u200b\\(N\\)\uff0c\u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\u7684\u200b\u9690\u85cf\u200b\u5c42\u200b\u7ef4\u5ea6\u200b\\(D_{ff}\\)\uff0c\u200b\u5219\u200btransformer\u200b\u7684\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b
- \u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\uff1a\u200b\u6bcf\u5c42\u200b\u5305\u542b\u200b\u56db\u4e2a\u200b\\(D \\rightarrow D\\)\u200b\u7684\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u5305\u542b\u200b\\(D \\times D + D\\)\u200b\u4e2a\u200b\u53c2\u6570\u200b\uff08\u200b\u6743\u91cd\u200b+\u200b\u504f\u7f6e\u200b\uff09\uff0c\u200b\u5171\u200b\\(4ND(D + 1)\\)\u200b\u4e2a\u200b\u53c2\u6570\u200b\uff1b
- \u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\uff1a\u200b\u5171\u200b\\(N\\)\u200b\u5c42\u200b\uff0c\u200b\u6bcf\u5c42\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\\(D \\rightarrow D_{ff}\\)\u200b\u7684\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u548c\u200b\u4e00\u4e2a\u200b\\(D_{ff} \\rightarrow D\\)\u200b\u7684\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\uff0c\u200b\u5171\u200b\\(2NDD_{ff} + ND_{ff} + ND\\)\u200b\u4e2a\u200b\u53c2\u6570\u200b\uff1b
- \u200b\u5c42\u200b\u5f52\u4e00\u5316\u200b\uff1a\u200b\u6bcf\u5c42\u200b\u7f16\u7801\u5668\u200b\u5305\u542b\u200b\u4e24\u4e2a\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5f52\u4e00\u5316\u200b\u5305\u542b\u200b\u4e24\u4e2a\u200b\\(D\\)\u200b\u7ef4\u200b\u7684\u200b\u7f29\u653e\u200b\u53c2\u6570\u200b\u548c\u200b\u504f\u7f6e\u200b\u53c2\u6570\u200b\uff0c\u200b\u5171\u200b\\(4ND\\)\u200b\u4e2a\u200b\u53c2\u6570\u200b\u3002
\u200b\u56e0\u6b64\u200b\uff0ctransformer\u200b\u7684\u200b\u603b\u53c2\u200b\u6570\u91cf\u200b\u4e3a\u200b\\(4ND(D + 1) + 2NDD_{ff} + ND_{ff} + ND + 2ND\\)\u3002\u200b\u5728\u200bVaswani\u200b\u7b49\u200b\u4eba\u200b\u7684\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\uff0c\\(D_{ff} = 4D\\)\uff0c\u200b\u5219\u200btransformer\u200b\u7684\u200b\u53c2\u200b\u6570\u91cf\u200b\u4e3a\u200b\\(12ND^2 + 13ND\\)\u3002\u200b\u89e3\u7801\u5668\u200b\u6bd4\u200b\u7f16\u7801\u5668\u200b\u591a\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\uff08\\(4ND(D + 1)\\)\uff09\u200b\u548c\u200b1\u200b\u4e2a\u200b\u5f52\u4e00\u5316\u200b\u5c42\u200b\uff08\\(2ND\\)\uff09\uff0c\u200b\u56e0\u6b64\u200b\u89e3\u7801\u5668\u200b\u7684\u200b\u53c2\u200b\u6570\u91cf\u200b\u4e3a\u200b\\(16ND^2 + 19ND\\)\u3002
\u200b\u77e9\u9635\u200b\u8fd0\u7b97\u200b\\(\\bbR^{m\\times n}\\times \\bbR^{n\\times p} \\rightarrow \\bbR^{m\\times p}\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(mnp)\\)\uff0c\u200b\u9010\u6b65\u200b\u5206\u6790\u200btransformer\u200b\u7684\u200b\u8ba1\u7b97\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u5ffd\u7565\u200b\u52a0\u6cd5\u200b\u548c\u200b\u5f52\u4e00\u5316\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\uff1a
- \u200b\u7ebf\u6027\u53d8\u6362\u200b\uff1a\\(\\bbR^{L\\times D}\\times \\bbR^{D\\times D} \\rightarrow \\bbR^{L\\times D}\\)\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(LD^2)\\)\uff1b
- \u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\uff1a\\(\\bbR^{L\\times D}\\times \\bbR^{D\\times L}\\rightarrow \\bbR^{L\\times L}\\)\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(L^2D)\\)\uff1b
- \u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\uff1a\\(\\bbR^{L\\times D}\\times \\bbR^{D\\times D_{ff}}\\rightarrow \\bbR^{L\\times D_{ff}}\\)\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(LDD_{ff})\\)\u3002\u200b\u6309\u7167\u200b\\(D_{ff} = 4D\\)\uff0c\u200b\u5219\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(4LD^2) = O(LD^2)\\)\u3002
\\(D\\)\u200b\u4e3a\u200b\u5e38\u6570\u200b\uff0c\u200b\u6a21\u578b\u200b\u5171\u200b\u53e0\u52a0\u200b\\(N\\)\u200b\u5c42\u200b\u4e32\u884c\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u56e0\u6b64\u200btransformer\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(NL^2D)\\)\u3002
"},{"location":"coding/dl-from-scratch/llama-2/","title":"\u5b9e\u73b0\u200bLlama-2","text":"\u200b\u5728\u200b\u672c\u8282\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200bLlama-2\u200b\u6a21\u578b\u200b\u3002
In\u00a0[1]: Copied! import functools\n\nimport torch\nimport transformers\n
import functools import torch import transformers Llama\u200b\u4f7f\u7528\u200bRoPE\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u3002\u200b\u6ce8\u610f\u200b\u6b64\u5904\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u548c\u200bRoFormer\u200b\u4e2d\u200b\u5b9e\u73b0\u200b\u7684\u200b\u4e0d\u540c\u200b\uff0cRoFormer\u200b\u5c06\u200b\u76f8\u90bb\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5143\u7d20\u200b\u5206\u4e3a\u200b\u4e00\u7ec4\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u800c\u200bLlamaRope\u200b\u662f\u200b\u5c06\u200b\u5411\u91cf\u200b\u5206\u4e3a\u200b\u524d\u540e\u200b\u4e24\u6bb5\u200b\uff0c\u200b\u524d\u540e\u200b\u4e24\u6bb5\u200b\u76f8\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u5206\u4e3a\u200b\u4e00\u7ec4\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\u64cd\u4f5c\u200b\u3002
In\u00a0[2]: Copied! class RoPE(torch.nn.Module):\n def __init__(self, d_model: int, theta: int | float = 10000):\n super(RoPE, self).__init__()\n self.d_model = d_model\n self.theta = theta ** -(torch.arange(0, d_model, 2) / d_model)\n\n @functools.lru_cache(maxsize=None)\n def _forward_l(self, L: int) -> torch.Tensor:\n # Use lru_cache to avoid redundant computation for the same L\n\n D = self.d_model\n pos = torch.einsum(\n 'l,d->ld',\n torch.arange(L), self.theta\n ) # [L, D / 2]\n\n # 0 paired with d // 2, 1 paired with d // 2 + 1, ...\n cos = torch.cos(pos).repeat([1, 2])\n sin = torch.sin(pos)\n\n # Here we do not use efficient method, but construct a rotary matrix\n result = torch.zeros(L, D, D)\n result = torch.diagonal_scatter(result, cos, dim1=1, dim2=2)\n result = torch.diagonal_scatter(result, sin, dim1=1, dim2=2, offset=-D // 2)\n result = torch.diagonal_scatter(result, -sin, dim1=1, dim2=2, offset=D // 2)\n return result\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n # x: [N, L, H, D]\n _, L, _, D = x.size()\n rot_matrix = self._forward_l(L).to(x.device) # [L, D, D]\n return torch.einsum('lde,nlhe->nlhd', rot_matrix, x)\n
class RoPE(torch.nn.Module): def __init__(self, d_model: int, theta: int | float = 10000): super(RoPE, self).__init__() self.d_model = d_model self.theta = theta ** -(torch.arange(0, d_model, 2) / d_model) @functools.lru_cache(maxsize=None) def _forward_l(self, L: int) -> torch.Tensor: # Use lru_cache to avoid redundant computation for the same L D = self.d_model pos = torch.einsum( 'l,d->ld', torch.arange(L), self.theta ) # [L, D / 2] # 0 paired with d // 2, 1 paired with d // 2 + 1, ... cos = torch.cos(pos).repeat([1, 2]) sin = torch.sin(pos) # Here we do not use efficient method, but construct a rotary matrix result = torch.zeros(L, D, D) result = torch.diagonal_scatter(result, cos, dim1=1, dim2=2) result = torch.diagonal_scatter(result, sin, dim1=1, dim2=2, offset=-D // 2) result = torch.diagonal_scatter(result, -sin, dim1=1, dim2=2, offset=D // 2) return result def forward(self, x: torch.Tensor) -> torch.Tensor: # x: [N, L, H, D] _, L, _, D = x.size() rot_matrix = self._forward_l(L).to(x.device) # [L, D, D] return torch.einsum('lde,nlhe->nlhd', rot_matrix, x) RoPE\u200b\u662f\u200b\u5728\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u5206\u5934\u200b\u540e\u200b\u624d\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\u3002\u200b\u5e76\u4e14\u200b\uff0cLlama\u200b\u7684\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u4e2d\u200b\u4e0d\u200b\u5305\u542b\u200b\u504f\u7f6e\u200b\u3002
In\u00a0[3]: Copied! class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int, rope: RoPE):\n super(MultiHeadAttention, self).__init__()\n self.d_model = d_model\n self.num_heads = num_heads\n if d_model % num_heads != 0:\n raise ValueError(\"d_model must be divisible by num_heads\")\n\n self.d_k = d_model // num_heads\n self.sqrt_d_k = self.d_k ** 0.5\n self.rope = rope\n\n self.W_Q = torch.nn.Linear(d_model, d_model, bias=False)\n self.W_K = torch.nn.Linear(d_model, d_model, bias=False)\n self.W_V = torch.nn.Linear(d_model, d_model, bias=False)\n self.W_O = torch.nn.Linear(d_model, d_model, bias=False)\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n # x_q: (N, L_Q, D), x_k: (N, L_KV, D), x_v: (N, L_KV, D)\n # padding_mask: (N, L_KV), attention_mask: (L_Q, L_KV)\n N, L_Q, D = x_q.size()\n _, L_KV, _ = x_k.size()\n Q = self.rope(self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k))\n K = self.rope(self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k))\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n score = torch.einsum('nihd,njhd->nijh', Q, K) / self.sqrt_d_k\n # score: (N, L_Q, L_KV, num_heads)\n # Apply attention mask\n if attention_mask is not None:\n score = score.masked_fill(\n attention_mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf')\n )\n # Apply padding mask\n if padding_mask is not None:\n score = score.masked_fill(\n padding_mask.reshape(N, 1, L_KV, 1) == 0, float('-inf')\n )\n score = torch.nn.functional.softmax(score, dim=2)\n value = torch.einsum(\n 'nijh,njhd->nihd', score, V\n ).reshape(N, L_Q, self.d_model)\n return self.W_O(value)\n\n\nclass MultiHeadSelfAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int, rope=RoPE):\n super(MultiHeadSelfAttention, self).__init__(d_model, num_heads, rope)\n\n def forward(\n self, x: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n return super().forward(x, x, x, padding_mask, attention_mask)\n
class MultiHeadAttention(torch.nn.Module): def __init__(self, d_model: int, num_heads: int, rope: RoPE): super(MultiHeadAttention, self).__init__() self.d_model = d_model self.num_heads = num_heads if d_model % num_heads != 0: raise ValueError(\"d_model must be divisible by num_heads\") self.d_k = d_model // num_heads self.sqrt_d_k = self.d_k ** 0.5 self.rope = rope self.W_Q = torch.nn.Linear(d_model, d_model, bias=False) self.W_K = torch.nn.Linear(d_model, d_model, bias=False) self.W_V = torch.nn.Linear(d_model, d_model, bias=False) self.W_O = torch.nn.Linear(d_model, d_model, bias=False) def forward( self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None ) -> torch.Tensor: # x_q: (N, L_Q, D), x_k: (N, L_KV, D), x_v: (N, L_KV, D) # padding_mask: (N, L_KV), attention_mask: (L_Q, L_KV) N, L_Q, D = x_q.size() _, L_KV, _ = x_k.size() Q = self.rope(self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)) K = self.rope(self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)) V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k) score = torch.einsum('nihd,njhd->nijh', Q, K) / self.sqrt_d_k # score: (N, L_Q, L_KV, num_heads) # Apply attention mask if attention_mask is not None: score = score.masked_fill( attention_mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf') ) # Apply padding mask if padding_mask is not None: score = score.masked_fill( padding_mask.reshape(N, 1, L_KV, 1) == 0, float('-inf') ) score = torch.nn.functional.softmax(score, dim=2) value = torch.einsum( 'nijh,njhd->nihd', score, V ).reshape(N, L_Q, self.d_model) return self.W_O(value) class MultiHeadSelfAttention(MultiHeadAttention): def __init__(self, d_model: int, num_heads: int, rope=RoPE): super(MultiHeadSelfAttention, self).__init__(d_model, num_heads, rope) def forward( self, x: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None ) -> torch.Tensor: return super().forward(x, x, x, padding_mask, attention_mask) \u200b\u5728\u200b\u524d\u9988\u200b\u7f51\u7edc\u200b\u90e8\u5206\u200b\uff0cLlama\u200b\u4f7f\u7528\u200bSwiglu\u200b\u4f5c\u4e3a\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u3002\u200b\u6b64\u200b\u90e8\u5206\u200b\u540c\u6837\u200b\u4e0d\u200b\u4f7f\u7528\u200b\u504f\u7f6e\u200b
In\u00a0[4]: Copied! class FFN(torch.nn.Module):\n def __init__(self, input_dim: int, hidden_dim: int):\n super(FFN, self).__init__()\n self.fc1 = torch.nn.Linear(input_dim, hidden_dim, bias=False)\n self.fc2 = torch.nn.Linear(hidden_dim, input_dim, bias=False)\n self.gate = torch.nn.Linear(input_dim, hidden_dim, bias=False)\n self.act = torch.nn.SiLU()\n\n def forward(self, x):\n return self.fc2(self.act(self.gate(x)) * self.fc1(x))\n
class FFN(torch.nn.Module): def __init__(self, input_dim: int, hidden_dim: int): super(FFN, self).__init__() self.fc1 = torch.nn.Linear(input_dim, hidden_dim, bias=False) self.fc2 = torch.nn.Linear(hidden_dim, input_dim, bias=False) self.gate = torch.nn.Linear(input_dim, hidden_dim, bias=False) self.act = torch.nn.SiLU() def forward(self, x): return self.fc2(self.act(self.gate(x)) * self.fc1(x)) Llama\u200b\u4f7f\u7528\u200bRMSNorm\u200b\u4f5c\u4e3a\u200bLayerNorm\u3002
In\u00a0[5]: Copied! class RMSNorm(torch.nn.Module):\n def __init__(self, dim: int, eps: float = 1e-8):\n super(RMSNorm, self).__init__()\n self.weight = torch.nn.Parameter(torch.ones(dim))\n self.eps = eps\n\n def forward(self, x: torch.Tensor):\n return x / torch.sqrt(torch.mean(x ** 2, dim=-1, keepdim=True) + self.eps) * self.weight\n
class RMSNorm(torch.nn.Module): def __init__(self, dim: int, eps: float = 1e-8): super(RMSNorm, self).__init__() self.weight = torch.nn.Parameter(torch.ones(dim)) self.eps = eps def forward(self, x: torch.Tensor): return x / torch.sqrt(torch.mean(x ** 2, dim=-1, keepdim=True) + self.eps) * self.weight Llama\u200b\u4f7f\u7528\u200bPre-norm\uff0c\u200b\u5373\u5148\u200b\u8fdb\u884c\u200bnorm\uff0c\u200b\u518d\u200b\u8fdb\u884c\u200battention/FFN\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u6700\u540e\u200b\u76f8\u52a0\u200b\u3002\u200b\u636e\u6b64\u200b\u53ef\u4ee5\u200b\u6784\u5efa\u200b\u51fa\u200bLlamaDecoder\u200b\u7684\u200b\u57fa\u672c\u200b\u7ed3\u6784\u200b\u3002
In\u00a0[6]: Copied! class LlamaDecoder(torch.nn.Module):\n def __init__(\n self, d_model: int, num_heads: int, rope: RoPE, hidden_dim: int, layernorm_eps: float\n ):\n super().__init__()\n self.norm1 = RMSNorm(d_model, layernorm_eps)\n self.attention = MultiHeadSelfAttention(d_model, num_heads, rope)\n self.norm2 = RMSNorm(d_model, layernorm_eps)\n self.ffn = FFN(d_model, hidden_dim)\n\n def forward(self, x: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None):\n hidden = x\n hidden += self.attention(self.norm1(hidden), padding_mask, attention_mask)\n hidden += self.ffn(self.norm2(hidden))\n return hidden\n
class LlamaDecoder(torch.nn.Module): def __init__( self, d_model: int, num_heads: int, rope: RoPE, hidden_dim: int, layernorm_eps: float ): super().__init__() self.norm1 = RMSNorm(d_model, layernorm_eps) self.attention = MultiHeadSelfAttention(d_model, num_heads, rope) self.norm2 = RMSNorm(d_model, layernorm_eps) self.ffn = FFN(d_model, hidden_dim) def forward(self, x: torch.Tensor, padding_mask: torch.Tensor | None = None, attention_mask: torch.Tensor | None = None): hidden = x hidden += self.attention(self.norm1(hidden), padding_mask, attention_mask) hidden += self.ffn(self.norm2(hidden)) return hidden In\u00a0[7]: Copied! class LlamaModel(torch.nn.Module):\n def __init__(\n self, config: transformers.LlamaConfig\n ):\n super().__init__()\n self.embedding = torch.nn.Embedding(config.vocab_size, config.hidden_size)\n self.rope = RoPE(\n config.hidden_size // config.num_attention_heads,\n config.rope_theta\n )\n self.layers = torch.nn.ModuleList([\n LlamaDecoder(\n config.hidden_size,\n config.num_attention_heads,\n self.rope,\n config.intermediate_size,\n config.rms_norm_eps\n )\n for _ in range(config.num_hidden_layers)\n ])\n self.norm = RMSNorm(config.hidden_size)\n self.lm_head = torch.nn.Linear(config.hidden_size, config.vocab_size, bias=False)\n\n def forward(\n self, input_ids: torch.Tensor,\n padding_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n hidden = self.embedding(input_ids)\n attention_mask = 1 - torch.triu(\n torch.ones(hidden.size(1), hidden.size(1)), diagonal=1\n ).to(hidden.device)\n for layer in self.layers:\n hidden = layer(hidden, padding_mask, attention_mask)\n hidden = self.norm(hidden)\n hidden = self.lm_head(hidden)\n return hidden\n
class LlamaModel(torch.nn.Module): def __init__( self, config: transformers.LlamaConfig ): super().__init__() self.embedding = torch.nn.Embedding(config.vocab_size, config.hidden_size) self.rope = RoPE( config.hidden_size // config.num_attention_heads, config.rope_theta ) self.layers = torch.nn.ModuleList([ LlamaDecoder( config.hidden_size, config.num_attention_heads, self.rope, config.intermediate_size, config.rms_norm_eps ) for _ in range(config.num_hidden_layers) ]) self.norm = RMSNorm(config.hidden_size) self.lm_head = torch.nn.Linear(config.hidden_size, config.vocab_size, bias=False) def forward( self, input_ids: torch.Tensor, padding_mask: torch.Tensor | None = None ) -> torch.Tensor: hidden = self.embedding(input_ids) attention_mask = 1 - torch.triu( torch.ones(hidden.size(1), hidden.size(1)), diagonal=1 ).to(hidden.device) for layer in self.layers: hidden = layer(hidden, padding_mask, attention_mask) hidden = self.norm(hidden) hidden = self.lm_head(hidden) return hidden In\u00a0[8]: Copied! llama_config = transformers.AutoConfig.from_pretrained('meta-llama/Llama-2-7b-hf')\nllama = LlamaModel(llama_config)\n
llama_config = transformers.AutoConfig.from_pretrained('meta-llama/Llama-2-7b-hf') llama = LlamaModel(llama_config) /usr/local/lib/python3.10/dist-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n warnings.warn(\n
\u200b\u52a0\u8f7d\u200bHuggingface\u200b\u63d0\u4f9b\u200b\u7684\u200bLlama\u200b\u6a21\u578b\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5c06\u200b\u9884\u200b\u8bad\u7ec3\u200b\u7684\u200bLlama\u200b\u53c2\u6570\u200b\u590d\u5236\u5230\u200b\u5b9e\u73b0\u200b\u7684\u200b\u6a21\u578b\u200b\u4e2d\u200b\u3002
In\u00a0[9]: Copied! hf_llama = transformers.LlamaForCausalLM.from_pretrained('meta-llama/Llama-2-7b-hf')\n\ndef load_params(custom_model: LlamaModel, hf_model: transformers.LlamaForCausalLM):\n layer_pairs = [\n (custom_model.embedding, hf_model.model.embed_tokens),\n (custom_model.lm_head, hf_model.lm_head),\n (custom_model.norm, hf_model.model.norm)\n ]\n for custom_layer, hf_layer in zip(custom_model.layers, hf_model.model.layers):\n layer_pairs.extend([\n (custom_layer.norm1, hf_layer.input_layernorm),\n (custom_layer.norm2, hf_layer.post_attention_layernorm),\n (custom_layer.attention.W_Q, hf_layer.self_attn.q_proj),\n (custom_layer.attention.W_K, hf_layer.self_attn.k_proj),\n (custom_layer.attention.W_V, hf_layer.self_attn.v_proj),\n (custom_layer.attention.W_O, hf_layer.self_attn.o_proj),\n (custom_layer.ffn.gate, hf_layer.mlp.gate_proj),\n (custom_layer.ffn.fc1, hf_layer.mlp.up_proj),\n (custom_layer.ffn.fc2, hf_layer.mlp.down_proj)\n ])\n for custom_layer, hf_layer in layer_pairs:\n custom_layer.weight.data = hf_layer.weight.data.clone().detach()\n return custom_model\n\nllama = load_params(llama, hf_llama)\n
hf_llama = transformers.LlamaForCausalLM.from_pretrained('meta-llama/Llama-2-7b-hf') def load_params(custom_model: LlamaModel, hf_model: transformers.LlamaForCausalLM): layer_pairs = [ (custom_model.embedding, hf_model.model.embed_tokens), (custom_model.lm_head, hf_model.lm_head), (custom_model.norm, hf_model.model.norm) ] for custom_layer, hf_layer in zip(custom_model.layers, hf_model.model.layers): layer_pairs.extend([ (custom_layer.norm1, hf_layer.input_layernorm), (custom_layer.norm2, hf_layer.post_attention_layernorm), (custom_layer.attention.W_Q, hf_layer.self_attn.q_proj), (custom_layer.attention.W_K, hf_layer.self_attn.k_proj), (custom_layer.attention.W_V, hf_layer.self_attn.v_proj), (custom_layer.attention.W_O, hf_layer.self_attn.o_proj), (custom_layer.ffn.gate, hf_layer.mlp.gate_proj), (custom_layer.ffn.fc1, hf_layer.mlp.up_proj), (custom_layer.ffn.fc2, hf_layer.mlp.down_proj) ]) for custom_layer, hf_layer in layer_pairs: custom_layer.weight.data = hf_layer.weight.data.clone().detach() return custom_model llama = load_params(llama, hf_llama) Loading checkpoint shards: 0%| | 0/2 [00:00<?, ?it/s]
\u200b\u52a0\u8f7d\u200btokenizer\u200b\u5e76\u200b\u751f\u6210\u200b\u8f93\u5165\u200b\u6570\u636e\u200b\uff0c\u200b\u6ce8\u610f\u200bLlama-2\u200b\u6ca1\u6709\u200bpadding token\uff0c\u200b\u9700\u8981\u200b\u624b\u52a8\u200b\u8bbe\u7f6e\u200b\u3002
In\u00a0[10]: Copied! llama_tokenizer = transformers.LlamaTokenizer.from_pretrained('meta-llama/Llama-2-7b-hf')\nllama_tokenizer.pad_token = llama_tokenizer.eos_token\ntokenized_sentence = llama_tokenizer([\n 'User: Hello Llama! How are you?\\nAssistant:',\n 'User: Hello World!\\nAssistant:'\n], return_tensors='pt', padding=True)\ninput_ids = tokenized_sentence['input_ids']\npadding_mask = tokenized_sentence['attention_mask']\n
llama_tokenizer = transformers.LlamaTokenizer.from_pretrained('meta-llama/Llama-2-7b-hf') llama_tokenizer.pad_token = llama_tokenizer.eos_token tokenized_sentence = llama_tokenizer([ 'User: Hello Llama! How are you?\\nAssistant:', 'User: Hello World!\\nAssistant:' ], return_tensors='pt', padding=True) input_ids = tokenized_sentence['input_ids'] padding_mask = tokenized_sentence['attention_mask'] \u200b\u6839\u636e\u200b\u8f93\u5165\u200b\u6570\u636e\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u6bcf\u5c42\u200b\u6a21\u578b\u200b\u7684\u200b\u8f93\u51fa\u200b\u3002
In\u00a0[11]: Copied! llama_layers_output = hf_llama(input_ids, attention_mask=padding_mask, output_hidden_states=True)\n
llama_layers_output = hf_llama(input_ids, attention_mask=padding_mask, output_hidden_states=True) \u200b\u4ee5\u4e0b\u200b\u5bf9\u200b\u8f93\u51fa\u200b\u7ed3\u679c\u200b\u8fdb\u884c\u200b\u9a8c\u8bc1\u200b\u3002\u200b\u9996\u5148\u200b\u9a8c\u8bc1\u200bembedding\u200b\u5c42\u200b\u7684\u200b\u8f93\u51fa\u200b\u3002
In\u00a0[12]: Copied! llama_layers_output.hidden_states[0]\nhidden = llama.embedding(input_ids)\nattention_mask = 1 - torch.triu(\n torch.ones(hidden.size(1), hidden.size(1)), diagonal=1\n).to(device=hidden.device)\n\n# Hidden state 1 equivalent to embedding output\ntorch.allclose(\n llama_layers_output.hidden_states[0],\n hidden\n)\n
llama_layers_output.hidden_states[0] hidden = llama.embedding(input_ids) attention_mask = 1 - torch.triu( torch.ones(hidden.size(1), hidden.size(1)), diagonal=1 ).to(device=hidden.device) # Hidden state 1 equivalent to embedding output torch.allclose( llama_layers_output.hidden_states[0], hidden ) Out[12]: True
\u200b\u9a8c\u8bc1\u200b\u6bcf\u200b\u4e00\u5c42\u200bdecoder\u200b\u7684\u200b\u8f93\u51fa\u200b\uff0c\u200b\u6700\u540e\u200b\u4e00\u5c42\u200bdecoder\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u51fa\u73b0\u200b\u4e0d\u540c\u200b\u3002
In\u00a0[13]: Copied! # Verify layer outputs\nlayer_results = []\nfor i in range(llama_config.num_hidden_layers - 1):\n hidden = llama.layers[i](hidden, padding_mask, attention_mask)\n layer_results.append(torch.allclose(\n llama_layers_output.hidden_states[i + 1], hidden, atol=1e-4\n ))\nall(layer_results), all(layer_results[:-1])\n
# Verify layer outputs layer_results = [] for i in range(llama_config.num_hidden_layers - 1): hidden = llama.layers[i](hidden, padding_mask, attention_mask) layer_results.append(torch.allclose( llama_layers_output.hidden_states[i + 1], hidden, atol=1e-4 )) all(layer_results), all(layer_results[:-1]) Out[13]: (False, True)
\u200b\u9a8c\u8bc1\u200bLM-head\u200b\u7684\u200b\u8f93\u51fa\u200b\u3002
In\u00a0[14]: Copied! # Verify output logits\nlogits = llama(input_ids, padding_mask)\nhf_logits = llama_layers_output.logits\ntorch.allclose(logits, hf_logits, atol=1e-4)\n
# Verify output logits logits = llama(input_ids, padding_mask) hf_logits = llama_layers_output.logits torch.allclose(logits, hf_logits, atol=1e-4) Out[14]: True
\u200b\u5c1d\u8bd5\u200b\u5bf9\u200b\u8f93\u51fa\u200b\u7684\u200b\u5355\u8bcd\u200b\u8fdb\u884c\u200b\u89e3\u7801\u200b\u3002
In\u00a0[15]: Copied! # Decode the output tokens\nmax_prob_tokens = logits[0, -1].topk(5).indices.tolist()\nfor _ in max_prob_tokens:\n print(llama_tokenizer.decode(_))\n
# Decode the output tokens max_prob_tokens = logits[0, -1].topk(5).indices.tolist() for _ in max_prob_tokens: print(llama_tokenizer.decode(_)) I\nHello\nFine\nHi\nOh\n
In\u00a0[16]: Copied! del hf_llama\ndel llama_layers_output\ndel hf_logits\nimport gc\ngc.collect()\n
del hf_llama del llama_layers_output del hf_logits import gc gc.collect() Out[16]: 21
In\u00a0[17]: Copied! def complete_ids(model: LlamaModel, input_ids: torch.Tensor):\n assert input_ids.size(0) == 1\n\n next_token = model(input_ids, torch.ones_like(input_ids))[0, -1, :].topk(1).indices[0].item()\n return next_token\n\ndef complete_string(model: LlamaModel, tokenizer: transformers.LlamaTokenizer, prompt: str, max_length: int):\n model.eval()\n gc.collect()\n tokenized_sentence = tokenizer([prompt], return_tensors='pt')['input_ids'].tolist()\n next_token = None\n print(tokenizer.decode(tokenized_sentence[0]))\n num_tokens = 0\n\n while next_token != tokenizer.eos_token_id and num_tokens <= max_length:\n num_tokens += 1\n next_token = complete_ids(model, torch.tensor(tokenized_sentence))\n tokenized_sentence[0].append(next_token)\n print(tokenizer.decode(tokenized_sentence[0]))\n\n gc.collect()\n\n return num_tokens\n
def complete_ids(model: LlamaModel, input_ids: torch.Tensor): assert input_ids.size(0) == 1 next_token = model(input_ids, torch.ones_like(input_ids))[0, -1, :].topk(1).indices[0].item() return next_token def complete_string(model: LlamaModel, tokenizer: transformers.LlamaTokenizer, prompt: str, max_length: int): model.eval() gc.collect() tokenized_sentence = tokenizer([prompt], return_tensors='pt')['input_ids'].tolist() next_token = None print(tokenizer.decode(tokenized_sentence[0])) num_tokens = 0 while next_token != tokenizer.eos_token_id and num_tokens <= max_length: num_tokens += 1 next_token = complete_ids(model, torch.tensor(tokenized_sentence)) tokenized_sentence[0].append(next_token) print(tokenizer.decode(tokenized_sentence[0])) gc.collect() return num_tokens In\u00a0[18]: Copied! import time\nquery = 'User: Given two numbers, 13.11 and 13.8, which is larger?\\nAssistant:'\n\nstart_time = time.time()\nnum_tokens = complete_string(llama, llama_tokenizer, query, 10)\nend_time = time.time()\n\ntime_span = end_time - start_time\nprint(f'Predicted {num_tokens} in {time_span:.2f} seconds, {num_tokens / time_span:.2f} tokens/s')\n
import time query = 'User: Given two numbers, 13.11 and 13.8, which is larger?\\nAssistant:' start_time = time.time() num_tokens = complete_string(llama, llama_tokenizer, query, 10) end_time = time.time() time_span = end_time - start_time print(f'Predicted {num_tokens} in {time_span:.2f} seconds, {num_tokens / time_span:.2f} tokens/s') <s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant:\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is \n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 1\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 13\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 13.\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 13.8\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 13.8.\n<s> User: Given two numbers, 13.11 and 13.8, which is larger?\nAssistant: The larger number is 13.8.\n\nPredicted 11 in 37.42 seconds, 0.29 tokens/s\n
"},{"location":"coding/dl-from-scratch/llama-2/","title":"\u6a21\u578b\u200b\u5b9e\u73b0\u200b\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/","title":"\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/","title":"\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/#ffn","title":"FFN\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/#layernorm","title":"LayerNorm\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/#decoder-layer","title":"Decoder Layer\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/#llama","title":"Llama\u200b\u6a21\u578b\u200b\u6784\u5efa\u200b\u00b6","text":""},{"location":"coding/dl-from-scratch/llama-2/","title":"\u6a21\u578b\u200b\u9a8c\u8bc1\u200b\u00b6","text":"\u200b\u9996\u5148\u200b\uff0c\u200b\u4ece\u200bLlama-2-7b-hf
\u200b\u4e2d\u200b\u52a0\u8f7d\u200b\u6a21\u578b\u200b\u914d\u7f6e\u200b\uff0c\u200b\u5e76\u200b\u6839\u636e\u200b\u914d\u7f6e\u200b\u521d\u59cb\u5316\u200b\u6a21\u578b\u200b
"},{"location":"coding/dl-from-scratch/llama-2/","title":"\u6a21\u578b\u200b\u63a8\u7406\u200b\u00b6","text":"\u200b\u5728\u200b\u63a8\u7406\u200b\u9636\u6bb5\u200b\uff0c\u200b\u6a21\u578b\u200b\u6839\u636e\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u9884\u6d4b\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5355\u8bcd\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5c06\u200b\u5176\u200b\u52a0\u5165\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u3002\u200b\u91cd\u590d\u200b\u8fd9\u4e2a\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u76f4\u5230\u200b\u51fa\u73b0\u200b\u7ed3\u675f\u200btoken\u3002
"},{"location":"coding/dl-from-scratch/llm-inference/","title":"\u5927\u200b\u6a21\u578b\u200b\u63a8\u7406","text":"\u200b\u5728\u200b\u63a8\u7406\u200b\u9636\u6bb5\u200b\uff0c\u200b\u5927\u200b\u6a21\u578b\u200b\u6839\u636e\u200b\u8f93\u5165\u200b\u7684\u200b\u6587\u672c\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u9884\u6d4b\u200b\u8f93\u5165\u200b\u6587\u672c\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u8bcd\u200b\uff0c\u200b\u76f4\u5230\u200b\u9884\u6d4b\u51fa\u200b\u7ed3\u675f\u200b\u7b26\u53f7\u200b\u4e3a\u6b62\u200b\u3002\u200b\u4e0d\u8fc7\u200b\uff0c\u200b\u5728\u200b\u9884\u200b\u8bad\u7ec3\u200b\u9636\u6bb5\u200b\u4e2d\u200b\uff0c\u200b\u4e0d\u200b\u5305\u542b\u200b\u5bf9\u200bbos\uff08begin of sentence\uff09\u200b\u548c\u200beos\uff08end of sentence\uff09\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002\u200b\u6240\u4ee5\u200b\uff0c\u200b\u5982\u679c\u200b\u4f7f\u7528\u200b\u57fa\u5ea7\u200b\u6a21\u578b\u200b\uff0c\u200b\u6a21\u578b\u200b\u4f1a\u200b\u4e0d\u65ad\u200b\u8f93\u51fa\u200btoken\u3002
"},{"location":"coding/dl-from-scratch/llm-inference/#kv-cache","title":"KV-cache","text":"\u200b\u628a\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u91cd\u65b0\u200b\u8f93\u51fa\u200bLLM\uff0c\u200b\u9884\u6d4b\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5355\u8bcd\u200b\u63a8\u7406\u200b\u6d41\u7a0b\u200b\u7684\u200b\u8ba1\u7b97\u200b\u6548\u7387\u200b\u975e\u5e38\u4f4e\u200b\uff0c\u200b\u539f\u56e0\u200b\u5728\u4e8e\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u9884\u6d4b\u200b\u90fd\u200b\u9700\u8981\u200b\u5bf9\u200b\u6574\u4e2a\u200b\u5e8f\u5217\u200b\u8ba1\u7b97\u200b\u6ce8\u610f\u529b\u200b\u5f97\u5206\u200b\u3002\u200b\u7136\u800c\u200b\uff0c\u200b\u7531\u4e8e\u200b\u6bcf\u200b\u4e00\u4e2a\u200btoken\u200b\u7684\u200b\u8868\u793a\u200b\u53ea\u200b\u4f9d\u8d56\u4e8e\u200b\u524d\u9762\u200b\u7684\u200btoken\uff0c\u200b\u5728\u200b\u63a8\u7406\u200b\u9636\u6bb5\u200b\uff0c\u200b\u6211\u4eec\u200b\u4e0d\u5fc5\u200b\u91cd\u7b97\u200b\u524d\u8fb9\u200b\u7684\u200btoken\uff0c\u200b\u53ea\u200b\u9700\u8981\u200b\u5b58\u50a8\u200b\u524d\u8fb9\u200b\u7684\u200btoken\u200b\u7684\u200bKV\u200b\u8868\u793a\u200b\u5373\u53ef\u200b\u3002\u200b\u53ea\u200b\u9700\u7528\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200btoken\u200b\u7684\u200bQ\u200b\u8ba1\u7b97\u200b\u6ce8\u610f\u529b\u200b\u5373\u53ef\u200b\u5f97\u5230\u200b\u5bf9\u4e0b\u200b\u4e00\u4e2a\u200btoken\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002\u200b\u8fd9\u79cd\u200b\u6280\u672f\u200b\u5373\u200b\u79f0\u4e3a\u200bKV\u200b\u7f13\u5b58\u200b\u3002\u200b\u5305\u542b\u200bKV\u200b\u7f13\u5b58\u200b\u7684\u200b\u63a8\u7406\u200b\u8fc7\u7a0b\u200b\u5206\u4e3a\u200b\u4e24\u4e2a\u200b\u9636\u6bb5\u200b\uff0c\u200b\u5373\u200b\u7f13\u5b58\u200b\u586b\u5145\u200b\uff08prefill\uff09\u200b\u9636\u6bb5\u200b\u548c\u200b\u89e3\u7801\u200b\uff08decode\uff09\u200b\u9636\u6bb5\u200b\u3002
\u200b\u4e3a\u4f55\u200b\u53ea\u200b\u9700\u8981\u200bKV-cache\u200b\u800c\u200b\u4e0d\u200b\u9700\u8981\u200bQ-cache
\u200b\u5047\u8bbe\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u7ecf\u8fc7\u200b\\(QKV\\)\u200b\u8ba1\u7b97\u200b\u540e\u200b\u7684\u200b\u5e8f\u5217\u200b\u4e3a\u200b\\(S^Q, S^K, S^V\\)\uff0c\u200b\u5e76\u4e14\u200b\u53ef\u4ee5\u200b\u62c6\u200b\u5206\u4e3a\u200b\u5217\u200b\u5411\u91cf\u200b\u8868\u793a\u200b\uff1a
\\[ \\begin{aligned} S^Q &= \\begin{bmatrix} Q_1 & Q_2 & \\cdots & Q_n \\end{bmatrix} \\\\ S^K &= \\begin{bmatrix} K_1 & K_2 & \\cdots & K_n \\end{bmatrix} \\\\ S^V &= \\begin{bmatrix} V_1 & V_2 & \\cdots & V_n \\end{bmatrix} \\] \u200b\u6ce8\u610f\u529b\u200b\u5f97\u5206\u200b\u77e9\u9635\u200b\u4e3a\u200b
\\[ \\begin{bmatrix} Q_1K_1 & Q_1K_2 & \\cdots & Q_1K_n \\\\ Q_2K_1 & Q_2K_2 & \\cdots & Q_2K_n \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ Q_nK_1 & Q_nK_2 & \\cdots & Q_nK_n \\] \u200b\u7531\u4e8e\u200bdecoder\u200b\u7684\u200bcausal mask\u200b\u9650\u5236\u200b\uff0c\u200b\u6700\u7ec8\u200b\u8ba1\u7b97\u200b\u7684\u200b\u8868\u793a\u200b\u4e3a\u200b
\\[ \\begin{aligned} O_1 &= \\sum_{i=1}^1 \\text{softmax}(Q_1K_i)V_i \\\\ O_2 &= \\sum_{i=1}^2 \\text{softmax}(Q_2K_i)V_i \\\\ \\end{aligned} \\] \u200b\u4e5f\u200b\u5373\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u8868\u793a\u200b\uff0c\u200b\u53ea\u200b\u4f9d\u8d56\u200b\u8be5\u200b\u4f4d\u7f6e\u200b\u7684\u200bQ\uff0c\u200b\u548c\u200b\u8be5\u200b\u4f4d\u7f6e\u200b\u53ca\u200b\u4e4b\u524d\u200b\u7684\u200bK\u200b\u548c\u200bV\u3002\u200b\u56e0\u6b64\u200b\u9884\u6d4b\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5355\u8bcd\u200b\u65f6\u200b\uff0c\u200b\u4e0d\u200b\u9700\u8981\u200b\u91cd\u65b0\u200b\u8ba1\u7b97\u200bKV\uff0c\u200b\u5c06\u200bKV\u200b\u5b58\u50a8\u200b\u4e0b\u6765\u200b\u5373\u53ef\u200b\u3002
\u200b\u5c06\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u8f93\u5165\u200bLLM\u200b\u65f6\u200b\uff0c\u200b\u9996\u5148\u200b\u8fdb\u884c\u200b\u7f13\u5b58\u200b\u586b\u5145\u200b\uff0c\u200b\u4fdd\u5b58\u200b\u4e0b\u200b\u6240\u6709\u200b\u5c42\u200b\u7684\u200bKV-cache\uff0c\u200b\u7136\u540e\u200b\u8fdb\u884c\u200b\u89e3\u7801\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u9884\u6d4b\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5355\u8bcd\u200b\uff0c\u200b\u5e76\u200b\u8bb0\u5f55\u200b\u9884\u6d4b\u200b\u5355\u8bcd\u200b\u7684\u200bKV\u200b\u8868\u793a\u200b\u3002\u200b\u5bf9\u4e8e\u200bdecoder\u200b\u7684\u200b\u6bcf\u200b\u4e00\u5c42\u200b\uff0c\u200b\u90fd\u200b\u9700\u8981\u200b\u4fdd\u5b58\u200b\u4e00\u4e2a\u200bKV-cache\uff0c\u200b\u6bcf\u200b\u4e00\u5c42\u200bcache\u200b\u7684\u200b\u5927\u5c0f\u200b\u4e3a\u200b\\(2\\times N\\times L\\times D\\)\u3002\u200b\u5bf9\u4e8e\u200b\u957f\u200b\u5e8f\u5217\u200b\uff0cKV-cache\u200b\u7684\u200b\u5927\u5c0f\u200b\u4f1a\u200b\u975e\u5e38\u200b\u5927\u200b\u3002
"},{"location":"coding/dl-from-scratch/loss/","title":"\u635f\u5931\u200b\u51fd\u6570","text":"\u200b\u635f\u5931\u200b\u51fd\u6570\u200b\u662f\u200b\u7528\u6765\u200b\u8bc4\u4ef7\u200b\u6a21\u578b\u200b\u9884\u6d4b\u503c\u200b\u4e0e\u200b\u771f\u5b9e\u200b\u503c\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5dee\u5f02\u200b\u7684\u200b\u51fd\u6570\u200b\u3002\u200b\u7136\u540e\u200b\u901a\u8fc7\u200b\u4f18\u5316\u200b\u7b97\u6cd5\u200b\u6765\u200b\u8c03\u6574\u200b\u6a21\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u635f\u5931\u200b\u51fd\u6570\u200b\u7684\u200b\u503c\u200b\u6700\u5c0f\u200b\u3002
"},{"location":"coding/dl-from-scratch/loss/#_2","title":"\u5747\u65b9\u200b\u8bef\u5dee","text":"\u200b\u5747\u65b9\u200b\u8bef\u5dee\u200b\uff08Mean Squared Error, MSE\uff09\u200b\u662f\u200b\u56de\u5f52\u200b\u4efb\u52a1\u200b\u4e2d\u200b\u6700\u200b\u5e38\u7528\u200b\u7684\u200b\u635f\u5931\u200b\u51fd\u6570\u200b\u3002\u200b\u5b83\u200b\u8ba1\u7b97\u200b\u7684\u200b\u662f\u200b\u9884\u6d4b\u503c\u200b\u4e0e\u200b\u771f\u5b9e\u200b\u503c\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5e73\u65b9\u5dee\u200b\u7684\u200b\u5747\u503c\u200b\u3002
\\[ \\begin{aligned} L(y, t) &= \\frac{1}{2} \\sum_{i=1}^{n} (y_i - t_i)^2 \\\\ \\frac{\\partial L}{\\partial y_i} &= y_i - t_i \\end{aligned} \\] \u200b\u5176\u4e2d\u200b\uff0c\\(y\\) \u200b\u662f\u200b\u6a21\u578b\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b\uff0c\\(t\\) \u200b\u662f\u200b\u771f\u5b9e\u200b\u503c\u200b\uff0c\\(n\\) \u200b\u662f\u200b\u6837\u672c\u200b\u6570\u91cf\u200b\u3002
def mse(y: torch.Tensor, t: torch.Tensor) -> torch.Tensor:\n return 0.5 * torch.sum((y - t) ** 2)\n\nclass MSELoss(torch.nn.Module):\n def __init__(self):\n super(MSELoss, self).__init__()\n\n def forward(self, y: torch.Tensor, t: torch.Tensor) -> torch.Tensor:\n return mse(y, t)\n
"},{"location":"coding/dl-from-scratch/loss/#_3","title":"\u4ea4\u53c9\u200b\u71b5","text":"\u200b\u4ea4\u53c9\u200b\u71b5\u200b\uff08Cross Entropy\uff09\u200b\u662f\u200b\u591a\u200b\u5206\u7c7b\u200b\u4efb\u52a1\u200b\u4e2d\u200b\u6700\u200b\u5e38\u7528\u200b\u7684\u200b\u635f\u5931\u200b\u51fd\u6570\u200b\u3002\u200b\u5b83\u200b\u8ba1\u7b97\u200b\u7684\u200b\u662f\u200b\u6a21\u578b\u200b\u8f93\u51fa\u200b\u503c\u200b\u4e0e\u200b\u771f\u5b9e\u200b\u503c\u200b\u4e4b\u95f4\u200b\u7684\u200b\u4ea4\u53c9\u200b\u71b5\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bKL\u200b\u6563\u5ea6\u200b\u63a8\u5bfc\u200b\u5f97\u5230\u200b\u3002
\\[ \\begin{aligned} KL(p||q) &= -\\sum_{i=1}^{n} p_i (\\log q_i - \\log p_i) \\\\ &= -\\sum_{i=1}^{n} p_i \\log q_i + \\sum_{i=1}^{n} p_i \\log p_i \\\\ &= H(p, q) - H(p) \\end{aligned} \\] \u200b\u5176\u4e2d\u200b\uff0c\\(p\\) \u200b\u662f\u200b\u771f\u5b9e\u200b\u6982\u7387\u5206\u5e03\u200b\uff0c\\(q\\) \u200b\u662f\u200b\u6a21\u578b\u200b\u8f93\u51fa\u200b\u6982\u7387\u5206\u5e03\u200b\uff0c\\(H(p)\\)\u200b\u8868\u793a\u200b\u771f\u5b9e\u200b\u5206\u5e03\u200b\\(p\\)\u200b\u7684\u200b\u71b5\u200b\uff0c\u200b\u4e3a\u200b\u5e38\u6570\u200b\u3002\u200b\u5f53\u200b\u8f93\u51fa\u200b\u5206\u5e03\u200b\\(q\\)\u200b\u4e0e\u200b\u771f\u5b9e\u200b\u5206\u5e03\u200b\\(p\\)\u200b\u76f8\u8fd1\u200b\u65f6\u200b\uff0cKL\u200b\u6563\u5ea6\u503c\u200b\u8d8a\u200b\u5c0f\u200b\uff0c\u200b\u4ea4\u53c9\u200b\u71b5\u200b\\(-\\sum_{i=1}^{n} p_i \\log q_i\\)\u200b\u503c\u200b\u4e5f\u200b\u8d8a\u200b\u5c0f\u200b\u3002
\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b\u7684\u200b\u662f\u200b\uff0c\u200b\u5728\u200bPyTorch\u200b\u4e2d\u200b\uff0ctorch.nn.CrossEntropyLoss
\u200b\u51fd\u6570\u200b\u7684\u200b\u8f93\u5165\u200b\u662f\u200b\u6a21\u578b\u200b\u7684\u200b\u8f93\u51fa\u200b\u503c\u200b\u548c\u200b\u771f\u5b9e\u200b\u6807\u7b7e\u200b\uff0c\u200b\u4e0d\u200b\u9700\u8981\u200b\u5bf9\u200b\u8f93\u51fa\u200b\u503c\u200b\u8fdb\u884c\u200bsoftmax\u200b\u64cd\u4f5c\u200b\u3002
def cross_entropy(score: torch.Tensor, label: torch.Tensor) -> torch.Tensor:\n # label: [N], score: [N, C]\n score = torch.softmax(score, dim=-1)\n label_logits = score[torch.arange(score.size(0)), label]\n return -torch.sum(torch.log(label_logits))\n\nclass CrossEntropyLoss(torch.nn.Module):\n def __init__(self):\n super(CrossEntropyLoss, self).__init__()\n\n def forward(self, score: torch.Tensor, label: torch.Tensor) -> torch.Tensor:\n return cross_entropy(score, label)\n
"},{"location":"coding/dl-from-scratch/mlp/","title":"\u591a\u5c42\u200b\u611f\u77e5\u673a","text":"\u200b\u591a\u5c42\u200b\u611f\u77e5\u673a\u200b\uff08Multilayer Perceptron, MLP\uff09\u200b\u662f\u200b\u6df1\u5ea6\u200b\u5b66\u4e60\u200b\u7684\u200b\u57fa\u7840\u200b\uff0c\u200b\u4e5f\u200b\u662f\u200b\u6700\u200b\u7b80\u5355\u200b\u7684\u200b\u6df1\u5ea6\u200b\u5b66\u4e60\u200b\u6a21\u578b\u200b\u4e4b\u4e00\u200b\uff0c\u200b\u7531\u200b\u7ebf\u6027\u53d8\u6362\u200b\u548c\u200b\u975e\u7ebf\u6027\u200b\u7684\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u7ec4\u6210\u200b\u3002\u200b\u591a\u5c42\u200b\u611f\u77e5\u673a\u200b\u7684\u200b\u7f51\u7edc\u7ed3\u6784\u200b\u662f\u200b\u7531\u200b\u8f93\u5165\u200b\u5c42\u200b\u3001\u200b\u591a\u4e2a\u200b\u9690\u85cf\u200b\u5c42\u200b\u548c\u200b\u8f93\u51fa\u200b\u5c42\u200b\u7ec4\u6210\u200b\uff0c\u200b\u5176\u4e2d\u200b\u9690\u85cf\u200b\u5c42\u200b\u7684\u200b\u795e\u7ecf\u5143\u200b\u6570\u91cf\u200b\u548c\u200b\u5c42\u6570\u200b\u53ef\u4ee5\u200b\u81ea\u7531\u200b\u8bbe\u5b9a\u200b\u3002
"},{"location":"coding/dl-from-scratch/mlp/#_2","title":"\u7ebf\u6027\u53d8\u6362","text":"\u200b\u7ebf\u6027\u53d8\u6362\u200b\u662f\u200b\u591a\u5c42\u200b\u611f\u77e5\u673a\u200b\u7684\u200b\u57fa\u7840\u200b\uff0c\u200b\u5b83\u200b\u662f\u200b\u7531\u200b\u8f93\u5165\u200b\u5c42\u5230\u200b\u9690\u85cf\u200b\u5c42\u200b\u548c\u200b\u8f93\u51fa\u200b\u5c42\u200b\u7684\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u7ec4\u6210\u200b\u3002\u200b\u7ebf\u6027\u53d8\u6362\u200b\u7684\u200b\u6570\u5b66\u200b\u8868\u8fbe\u5f0f\u200b\u4e3a\u200b\uff1a
\\[ y = Wx + b \\] \u200b\u5176\u4e2d\u200b \\(W\\) \u200b\u662f\u200b\u6743\u91cd\u200b\u77e9\u9635\u200b\uff0c\\(x\\) \u200b\u662f\u200b\u8f93\u5165\u200b\u5411\u91cf\u200b\uff0c\\(b\\) \u200b\u662f\u200b\u504f\u7f6e\u200b\u5411\u91cf\u200b\uff0c\\(y\\) \u200b\u662f\u200b\u8f93\u51fa\u200b\u5411\u91cf\u200b\u3002
class Linear(torch.nn.Module):\n def __init__(self, in_dim: int, out_dim: int):\n super(Linear, self).__init__()\n self.in_dim = in_dim\n self.out_dim = out_dim\n self.weight = torch.nn.Parameter(torch.randn(out_dim, in_dim))\n self.bias = torch.nn.Parameter(torch.randn(out_dim))\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n return torch.einsum(\"ij,j->i\", self.weight, x) + self.bias\n
\u200b\u53cd\u5411\u200b\u4f20\u64ad\u200b\u4e2d\u200b\uff0c\u200b\u68af\u5ea6\u200b\u8ba1\u7b97\u516c\u5f0f\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} \\frac{\\partial y}{\\partial W} &= x \\\\ \\frac{\\partial y}{\\partial b} &= 1 \\end{aligned} \\]"},{"location":"coding/dl-from-scratch/normalization/","title":"\u5f52\u4e00\u5316","text":"\u200b\u5f52\u4e00\u5316\u200b\u662f\u200b\u6307\u200b\u5c06\u200b\u6570\u636e\u200b\u6309\u7167\u200b\u6bd4\u4f8b\u200b\u7f29\u653e\u200b\uff0c\u200b\u6539\u53d8\u200b\u5176\u200b\u5206\u5e03\u200b\u3002\u200b\u6309\u7167\u200b\u5f52\u4e00\u5316\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u4e0d\u540c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u4ee5\u4e0b\u200b\u51e0\u79cd\u200b\uff1a
- \u200b\u6837\u672c\u200b\u5f52\u4e00\u5316\u200b\uff08Batch Normalization\uff09\uff1a\u200b\u5bf9\u200b\u6bcf\u4e2a\u200b\u7279\u5f81\u200b\u8fdb\u884c\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u901a\u5e38\u200b\u7528\u4e8e\u200b\u56fe\u50cf\u200b\u6570\u636e\u200b\\(B \\times C \\times H \\times W\\)\uff0c\u200b\u5728\u200b\u540c\u4e00\u200b\\(C\\)\u200b\u7ef4\u5ea6\u200b\u4e0a\u200b\u8ba1\u7b97\u200b\u5747\u503c\u200b\u548c\u200b\u65b9\u5dee\u200b\u3002
- \u200b\u5c42\u200b\u5f52\u4e00\u5316\u200b\uff08Layer Normalization\uff09\uff1a\u200b\u5bf9\u200b\u6bcf\u4e2a\u200b\u6837\u672c\u200b\u8fdb\u884c\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u901a\u5e38\u200b\u7528\u4e8e\u200b\u5e8f\u5217\u200b\u6570\u636e\u200b\\(B\\times L \\times D\\)\uff0c\u200b\u5728\u200b\u540c\u4e00\u200b\\(B\\)\u200b\u7ef4\u5ea6\u200b\u4e0a\u200b\u8ba1\u7b97\u200b\u5747\u503c\u200b\u548c\u200b\u65b9\u5dee\u200b\u3002
- \u200b\u5b9e\u4f8b\u200b\u5f52\u4e00\u5316\u200b\uff08Instance Normalization\uff09\uff1a\u200b\u5bf9\u200b\u6bcf\u4e2a\u200b\u6837\u672c\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u7279\u5f81\u200b\u7ef4\u5ea6\u200b\u8fdb\u884c\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u5728\u200b\u540c\u4e00\u200b\\(B\\times C\\)\u200b\u7ef4\u5ea6\u200b\u4e0a\u200b\u8ba1\u7b97\u200b\u5747\u503c\u200b\u548c\u200b\u65b9\u5dee\u200b\u3002
- \u200b\u5206\u7ec4\u200b\u5f52\u4e00\u5316\u200b\uff08Group Normalization\uff09\uff1a\u200b\u5bf9\u200b\u6bcf\u4e2a\u200b\u6837\u672c\u200b\u4e2d\u200b\u7684\u200b\u7279\u5f81\u200b\u5206\u6210\u200b\u82e5\u5e72\u7ec4\u200b\u540e\u200b\uff0c\u200b\u5728\u200b\u540c\u200b\u4e00\u7ec4\u200b\u5185\u200b\u8fdb\u884c\u200b\u5f52\u4e00\u5316\u200b\u3002
\u200b\u5f52\u4e00\u5316\u200b\u7684\u200b\u65b9\u5f0f\u200b\u4e3a\u200b
\\[ x' = \\frac{x - \\mu}{\\sigma} \\times \\gamma + \\beta \\] \u200b\u5176\u4e2d\u200b\\(\\mu, \\sigma\\)\u200b\u5206\u522b\u200b\u4e3a\u200b\u6837\u672c\u5747\u503c\u200b\u548c\u200b\u6807\u51c6\u5dee\u200b\uff0c\\(\\gamma, \\beta\\)\u200b\u4e3a\u200b\u53ef\u200b\u5b66\u4e60\u200b\u7684\u200b\u91cd\u200b\u7f29\u653e\u200b\u53c2\u6570\u200b\u3002\u200b\u7ed9\u5b9a\u200b\u7279\u5f81\u200b\u7ef4\u5ea6\u200b\\(d\\)\uff0c\u200b\u5f52\u4e00\u5316\u200b\u5c42\u200b\u7684\u200b\u53c2\u200b\u6570\u91cf\u200b\u4e3a\u200b\\(2d\\)\u3002
"},{"location":"coding/dl-from-scratch/normalization/#rmsnorm","title":"RMSNorm","text":"Zhang\u200b\u7b49\u200b\u4eba\u200b\u5728\u200bLN\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\u63d0\u51fa\u200b\u4e86\u200bRMSNorm\uff0c\u200b\u76f8\u6bd4\u200b\u4e8e\u200bLN\uff0cRMSNorm\u200b\u4e0d\u200b\u9700\u8981\u200b\u8ba1\u7b97\u200b\u5747\u503c\u200b\u548c\u200b\u65b9\u5dee\u200b\uff0c\u200b\u800c\u662f\u200b\u76f4\u63a5\u200b\u4f7f\u7528\u200b\u5747\u200b\u65b9\u6839\u200b\u4f5c\u4e3a\u200b\u5f52\u4e00\u5316\u200b\u7684\u200b\u6807\u51c6\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5728\u200b\u91cd\u200b\u7f29\u653e\u200b\u9636\u6bb5\u200b\u5220\u53bb\u200b\u4e86\u200b\u504f\u7f6e\u200b\\(\\beta\\)\u3002
\\[ x' = \\frac{x}{\\sqrt{\\frac{1}{N} \\sum_{i=1}^{N} x_i^2}} \\times \\gamma \\] class RMSNorm(torch.nn.Module):\n def __init__(self, dim: int, eps=1e-8):\n super(RMSNorm, self).__init__()\n self.gamma = torch.nn.Parameter(torch.ones(dim))\n self.eps = eps\n\n def forward(self, x: torch.Tensor):\n return x / torch.sqrt(torch.mean(x ** 2, dim=-1, keepdim=True) + self.eps) * self.gamma\n
"},{"location":"coding/dl-from-scratch/positional-embedding/","title":"\u4f4d\u7f6e\u200b\u7f16\u7801","text":"Attention\u200b\u673a\u5236\u200b\u867d\u7136\u200b\u80fd\u200b\u6355\u6349\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u4e0d\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u4f9d\u8d56\u200b\u5173\u7cfb\u200b\uff0c\u200b\u4f46\u662f\u200b\u65e0\u6cd5\u200b\u533a\u5206\u200b\u4e0d\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\u200b\u4e3a\u4e86\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\uff0cTransformer\u200b\u6a21\u578b\u200b\u5f15\u5165\u200b\u4e86\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff08Positional Encoding\uff09\u3002
"},{"location":"coding/dl-from-scratch/positional-embedding/#_2","title":"\u7edd\u5bf9\u200b\u4f4d\u7f6e\u200b\u7f16\u7801","text":"\u200b\u7edd\u5bf9\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u662f\u200bTransformer\u200b\u6a21\u578b\u200b\u4e2d\u200b\u6700\u65e9\u200b\u5f15\u5165\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u65b9\u5f0f\u200b\uff0c\u200b\u5176\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u4e3a\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u4f4d\u7f6e\u200b\u5206\u914d\u200b\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u7684\u200b\u5411\u91cf\u200b\uff0c\u200b\u5c06\u200b\u8fd9\u4e2a\u200b\u5411\u91cf\u200b\u548c\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u76f8\u52a0\u200b\u5f97\u5230\u200b\u6700\u7ec8\u200b\u5e8f\u5217\u200b\u7684\u200b\u8868\u793a\u200b\u3002\u200b\u5982\u200bBERT\u200b\u6a21\u578b\u200b\uff0c\u200b\u9650\u5236\u200b\u4e86\u200b\u5e8f\u5217\u200b\u7684\u200b\u6700\u5927\u200b\u957f\u5ea6\u200b\u4e3a\u200b512\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u56fa\u5b9a\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff0c\u200b\u5c06\u200b\u6bcf\u4e2a\u200b\u4f4d\u7f6e\u200b\u6620\u5c04\u200b\u5230\u200b\u4e00\u4e2a\u200b\u53ef\u200b\u5b66\u4e60\u200b\u7684\u200b\u5411\u91cf\u200b\u3002
class AbsolutePE(torch.nn.Module):\n def __init__(self, max_len: int, d_model: int):\n super(AbsolutePE, self).__init__()\n self.pe = torch.nn.Embedding(max_len, d_model)\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n # x: [N, L]\n pos = torch.arange(x.size(1), device=x.device).unsqueeze(0)\n return self.pe(pos) # [1, L, D], can be broadcasted to [N, L, D]\n
\u200b\u6b64\u7c7b\u200b\u65b9\u6cd5\u200b\u7684\u200b\u7f3a\u70b9\u200b\u662f\u200b\u65e0\u6cd5\u200b\u5904\u7406\u200b\u8d85\u8fc7\u200b\u6700\u5927\u200b\u957f\u5ea6\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5ffd\u89c6\u200b\u4e86\u200b\u5143\u7d20\u200b\u4e4b\u95f4\u200b\u7684\u200b\u76f8\u5bf9\u200b\u4f4d\u7f6e\u200b\u5173\u7cfb\u200b\u3002
"},{"location":"coding/dl-from-scratch/positional-embedding/#_3","title":"\u6b63\u5f26\u200b\u4f4d\u7f6e\u200b\u7f16\u7801","text":"Vaswani\u200b\u7b49\u200b\u4eba\u200b\u63d0\u51fa\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\u6b63\u5f26\u200b\u51fd\u6570\u200b\u548c\u200b\u4e00\u4e2a\u200b\u4f59\u5f26\u200b\u51fd\u6570\u200b\uff0c\u200b\u5176\u200b\u6570\u5b66\u200b\u8868\u8fbe\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} PE_{(pos, 2i)} &= \\sin(pos / 10000^{2i / d_{\\text{model}}}) \\\\ PE_{(pos, 2i + 1)} &= \\cos(pos / 10000^{2i / d_{\\text{model}}}) \\\\ \\end{aligned} \\] \u200b\u5176\u4e2d\u200b\uff0c\\(pos\\)\u200b\u8868\u793a\u200b\u4f4d\u7f6e\u200b\uff0c\\(i\\)\u200b\u8868\u793a\u200b\u7ef4\u5ea6\u200b\uff0c\\(d_{\\text{model}}\\)\u200b\u8868\u793a\u200b\u6a21\u578b\u200b\u7684\u200b\u7ef4\u5ea6\u200b\uff0c\u200b\u8f93\u51fa\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u76f4\u63a5\u200b\u4e0e\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u76f8\u52a0\u200b\u5f97\u5230\u200b\u6700\u7ec8\u200b\u8868\u793a\u200b\u3002\u200b\u6b63\u5f26\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u4e0d\u200b\u9700\u8981\u200b\u989d\u5916\u200b\u8fdb\u884c\u200b\u5b66\u4e60\u200b\u3002Vaswani\u200b\u7684\u200b\u5b9e\u9a8c\u200b\u8868\u660e\u200b\uff0c\u200b\u56fa\u5b9a\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u548c\u200b\u53ef\u200b\u5b66\u4e60\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\u5728\u200b\u6027\u80fd\u200b\u4e0a\u200b\u6ca1\u6709\u200b\u663e\u8457\u200b\u5dee\u5f02\u200b\u3002
class SinusoidPE(torch.nn.Module):\n def __init__(self, d_model: int):\n super(SinusoidPE, self).__init__()\n self.d_model = d_model\n\n def _denominator(self, device: torch.device) -> torch.Tensor:\n return 10000 ** (torch.arange(0, self.d_model, device=device) / self.d_model)\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n # x: [N, L]\n pos = torch.arange(x.size(1), device=x.device).unsqueeze(0) # [1, L]\n pos = pos.unsqueeze(-1) / self._denominator(x.device) # [1, L, D]\n pos[:, :, 0::2] = torch.sin(pos[:, :, 0::2])\n pos[:, :, 1::2] = torch.cos(pos[:, :, 1::2])\n return pos # [1, L, D], can be broadcasted to [N, L, D]\n
"},{"location":"coding/dl-from-scratch/positional-embedding/#_4","title":"\u65cb\u8f6c\u200b\u4f4d\u7f6e\u200b\u7f16\u7801","text":"Su\u200b\u7b49\u200b\u4eba\u200b\u63d0\u51fa\u200b\u7684\u200b\u65cb\u8f6c\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff08Rotary Positional Embedding\uff0cRoPE\uff09\u3002\u200b\u7f16\u7801\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u901a\u8fc7\u200b\u65cb\u8f6c\u200b\u77e9\u9635\u200b\u5c06\u200b\u4f4d\u7f6e\u200b\u4fe1\u606f\u200b\u5d4c\u5165\u200b\u5230\u200b\u7279\u5f81\u200b\u7a7a\u95f4\u200b\u4e2d\u200b\uff0c\u200b\u4ece\u800c\u200b\u4f7f\u200b\u6a21\u578b\u200b\u80fd\u591f\u200b\u5b66\u4e60\u200b\u5230\u200b\u4f4d\u7f6e\u200b\u4fe1\u606f\u200b\u3002
\\[ f_{q, k} \\bsx_m = \\bsR_{\\Theta, m}^d W_{q, k} \\bsx_m \\] \u200b\u5176\u4e2d\u200b\uff0c\\(\\bsR_{\\Theta, m}\\)\u200b\u4e3a\u200b\u65cb\u8f6c\u200b\u77e9\u9635\u200b\uff0c\u200b\u5c06\u200b\u5411\u91cf\u200b\u6bcf\u200b\u4e24\u4e2a\u200b\u5206\u91cf\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\u3002
\\[ \\begin{aligned} \\bsR^k_{\\Theta, m} &= \\begin{bmatrix} \\cos(m\\theta_k) & -\\sin(m\\theta_k) \\\\ \\sin(m\\theta_k) & \\cos(m\\theta_k) \\end{bmatrix} \\\\ \\bsR_{\\Theta, m} &= \\begin{bmatrix} \\bsR^1_{\\Theta, m} & 0 & \\cdots & 0 \\\\ 0 & \\bsR^2_{\\Theta, m} & \\cdots & 0 \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ 0 & 0 & \\cdots & \\bsR^{d / 2}_{\\Theta, m} \\end{bmatrix}_{d\\times d} \\end{aligned} \\] \u200b\u6ce8\u610f\u200b\uff0c\\(m\\)\u200b\u4e3a\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\(1, \\ldots, L\\)\uff0c\\(k\\)\u200b\u4e3a\u200b\u7ef4\u5ea6\u200b\u4e0b\u6807\u200b\uff0c\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\(1, \\ldots, d / 2\\)\u3002\u200b\u6700\u7ec8\u200b\u7684\u200b\u65cb\u8f6c\u200b\u64cd\u4f5c\u200b\u5c06\u200b\u6bcf\u4e2a\u200b\u4f4d\u7f6e\u200b\\(m\\)\u200b\u7684\u200b\u5411\u91cf\u200b\\(\\bsx_m\\)\u200b\u5e94\u7528\u200b\u65cb\u8f6c\u200b\u77e9\u9635\u200b\\(\\bsR_{\\Theta, m}\\)\uff0c\u200b\u5f97\u5230\u200b\u65b0\u200b\u7684\u200b\u5411\u91cf\u200b\u3002
import functools\n\nclass RoPE(torch.nn.Module):\n def __init__(self, d_model: int, theta: int | float = 10000):\n super(RoPE, self).__init__()\n self.d_model = d_model\n self.theta = theta ** -(torch.arange(0, d_model, 2) / d_model)\n\n @functools.lru_cache(maxsize=None)\n def _forward_l(self, L: int) -> torch.Tensor:\n # Use lru_cache to avoid redundant computation for the same L\n\n D = self.d_model\n pos = torch.einsum(\n 'l,d->ld',\n torch.arange(L), self.theta\n ) # [L, D / 2]\n\n # Major diagonal is cos, cos, ..., cos; D elements\n cos = torch.cos(pos).repeat_interleave(2)\n # Minor diagonal is sin, 0, sin, 0, ..., sin; D - 1 elements\n sin = torch.stack([\n torch.sin(pos), torch.zeros_like(pos), dim=-1\n ]).reshape(L, D)[:, :-1]\n\n result = torch.zeros(L, D, D)\n result = torch.diagonal_scatter(result, cos, dim1=1, dim2=2)\n result = torch.diagonal_scatter(result, sin, dim1=1, dim2=2, offset=-1)\n result = torch.diagonal_scatter(result, -sin, dim1=1, dim2=2, offset=1)\n return result\n\n def forward(self, x: torch.Tensor) -> torch.Tensor:\n # x: [N, L, H, D]\n _, L, _, D = x.size()\n rot_matrix = self._forward_l(L).to(x.device) # [L, D, D]\n return torch.einsum('lde,nlhe->nlhd', rot_matrix, x)\n
\u200b\u548c\u200b\u5176\u4ed6\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u65b9\u5f0f\u200b\u4e0d\u540c\u200b\uff0cRoPE\u200b\u5728\u200bQKV\u200b\u53d8\u6362\u200b\u540e\u200b\u8fdb\u884c\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u5bf9\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u7684\u200b\u5b9e\u73b0\u200b\u8fdb\u884c\u200b\u4fee\u6539\u200b\u3002
class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int, rope: RoPE | None = None):\n ...\n\n self.rope = rope\n\n ...\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n padding_mask: torch.Tensor | None = None,\n attention_mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n ...\n\n if self.rope is not None:\n Q = self.rope(self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k))\n K = self.rope(self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k))\n else:\n Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)\n K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n ...\n
\u200b\u4e3a\u4e86\u200b\u8ba1\u7b97\u200b\u65b9\u4fbf\u200b\uff0cLlama\u200b\u7b49\u200b\u90e8\u5206\u200b\u6a21\u578b\u200b\u7684\u200bRoPE\u200b\u5c06\u200b\u8f93\u5165\u200b\u5411\u91cf\u200b\u5206\u4e3a\u200b\u524d\u540e\u200b\u4e24\u6bb5\u200b\uff0c\u200b\u524d\u540e\u200b\u4e24\u6bb5\u200b\u76f8\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u5206\u4e3a\u200b\u4e00\u7ec4\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u800c\u200b\u4e0d\u662f\u200b\u5c06\u200b\u6574\u4e2a\u200b\u5411\u91cf\u200b\u6309\u7167\u200b\u76f8\u90bb\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5143\u7d20\u200b\u5206\u4e3a\u200b\u4e00\u7ec4\u200b\u8fdb\u884c\u200b\u65cb\u8f6c\u200b\u3002
"},{"location":"coding/dl-from-scratch/transformer-variants/","title":"Transformer\u200b\u53d8\u79cd","text":"Transformer\u200b\u53d8\u79cd\u200b\u4e3b\u8981\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u51e0\u79cd\u200b\uff1a
- \u200b\u6539\u53d8\u200btransformer\u200b\u7684\u200b\u6ce8\u610f\u529b\u200b\u8ba1\u7b97\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5982\u200bLinformer\u3001Reformer\u200b\u7b49\u200b\uff1b
- \u200b\u6539\u53d8\u200btransformer\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u65b9\u5f0f\u200b\uff1b
- \u200b\u6539\u53d8\u200btransformer\u200b\u7684\u200b\u5f52\u4e00\u5316\u200b\u5c42\u200b\uff1b
- \u200b\u6539\u53d8\u200btransformer\u200b\u7684\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\uff1b
- \u200b\u90e8\u5206\u200b\u8bed\u8a00\u200b\u6a21\u578b\u200b\uff08\u200b\u5982\u200bLlama\uff09\u200b\u4f7f\u7528\u200b\u7684\u200b\u7ebf\u6027\u200b\u5c42\u4e0d\u5e26\u200b\u504f\u7f6e\u200b\uff1b
- \u200b\u6539\u53d8\u200btransformer\u200b\u5f52\u4e00\u5316\u200b\u5c42\u200b\u7684\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u662f\u200b\u5148\u200b\u5f52\u4e00\u5316\u200b\u518d\u200b\u52a0\u200b\u6b8b\u5dee\u200b\uff08Pre-Norm\uff09\uff0c\u200b\u8fd8\u662f\u200b\u5148\u52a0\u200b\u6b8b\u5dee\u200b\u518d\u200b\u5f52\u4e00\u5316\u200b\uff08Post-Norm\uff09\u3002
"},{"location":"coding/dl-from-scratch/transformer-variants/#bert","title":"BERT","text":"BERT\u200b\u7684\u200b\u7ed3\u6784\u200b\u7279\u70b9\u200b\u4e3a\u200b\uff1a
- encoder-only\uff0c\u200b\u5373\u200b\u4f7f\u7528\u200bBidirectional self-attention\uff1b
- \u200b\u4f7f\u7528\u200b\u7edd\u5bf9\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff1b
"},{"location":"coding/dl-from-scratch/transformer-variants/#llama","title":"Llama","text":"Llama\u200b\u7684\u200b\u7ed3\u6784\u200b\u7279\u70b9\u200b\u4e3a\u200b\uff1a
- decoder-only\uff0c\u200b\u5373\u200b\u4f7f\u7528\u200bCausal self-attention\uff1b
- \u200b\u5168\u90e8\u200b\u4f7f\u7528\u200b\u4e0d\u5e26\u200b\u504f\u7f6e\u200b\u7684\u200b\u7ebf\u6027\u200b\u5c42\u200b\uff1b
- \u200b\u5728\u200bFFN\u200b\u4e2d\u200b\u4f7f\u7528\u200bSiLU\u200b\u914d\u5408\u200b\u95e8\u63a7\u200b\uff1b
- \u200b\u4f7f\u7528\u200bRoPE\u200b\u4f4d\u7f6e\u200b\u7f16\u7801\u200b\uff1b
- \u200b\u4f7f\u7528\u200bRMSNorm\u200b\u5f52\u4e00\u5316\u200b\u5c42\u200b\u3002\u200b\u5f52\u4e00\u5316\u200b\u65b9\u5f0f\u200b\u4e3a\u200bpre-norm\uff0c\u200b\u5373\u5148\u200b\u8fdb\u884c\u200b\u5f52\u4e00\u5316\u200b\uff0c\u200b\u518d\u200b\u8fdb\u884c\u200b\u6ce8\u610f\u529b\u200b\u6216\u8005\u200b\u5168\u200b\u8fde\u63a5\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u7136\u540e\u200b\u52a0\u200b\u6b8b\u5dee\u200b\u3002
"},{"location":"coding/dl-from-scratch/transformer/","title":"\u5b9e\u73b0\u200btransformer","text":"In\u00a0[1]: Copied! import torch\n
import torch \u200b\u9996\u5148\u200b\u5b9e\u73b0\u200b\u591a\u5934\u200b\u6ce8\u610f\u529b\u200b\u673a\u5236\u200b\u3002
In\u00a0[2]: Copied! class MultiHeadAttention(torch.nn.Module):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadAttention, self).__init__()\n self.d_model = d_model\n self.num_heads = num_heads\n if d_model % num_heads != 0:\n raise ValueError(\"d_model must be divisible by num_heads\")\n\n self.d_k = d_model // num_heads\n self.sqrt_d_k = self.d_k ** 0.5\n\n self.W_Q = torch.nn.Linear(d_model, d_model)\n self.W_K = torch.nn.Linear(d_model, d_model)\n self.W_V = torch.nn.Linear(d_model, d_model)\n self.W_O = torch.nn.Linear(d_model, d_model)\n\n def forward(\n self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor,\n mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n N, L_Q, D = x_q.size()\n _, L_KV, _ = x_k.size()\n Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k)\n K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k)\n V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k)\n\n score = torch.einsum(\"nihd,njhd->nijh\", Q, K) / self.sqrt_d_k\n if mask is not None:\n # mask: (L, L)\n score = score.masked_fill(\n mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf')\n )\n score = torch.nn.functional.softmax(score, dim=2)\n value = torch.einsum(\"nijh,njhd->nihd\", score, V).reshape(N, L_Q, self.d_model)\n return self.W_O(value)\n\n\nclass MultiHeadSelfAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadSelfAttention, self).__init__(d_model, num_heads)\n\n def forward(self, x: torch.Tensor, mask: torch.Tensor | None = None) -> torch.Tensor:\n return super().forward(x, x, x, mask)\n\n\nclass MultiHeadCrossAttention(MultiHeadAttention):\n def __init__(self, d_model: int, num_heads: int):\n super(MultiHeadCrossAttention, self).__init__(d_model, num_heads)\n\n def forward(\n self, x_q: torch.Tensor, x_kv: torch.Tensor,\n mask: torch.Tensor | None = None\n ) -> torch.Tensor:\n return super().forward(x_q, x_kv, x_kv, mask)\n
class MultiHeadAttention(torch.nn.Module): def __init__(self, d_model: int, num_heads: int): super(MultiHeadAttention, self).__init__() self.d_model = d_model self.num_heads = num_heads if d_model % num_heads != 0: raise ValueError(\"d_model must be divisible by num_heads\") self.d_k = d_model // num_heads self.sqrt_d_k = self.d_k ** 0.5 self.W_Q = torch.nn.Linear(d_model, d_model) self.W_K = torch.nn.Linear(d_model, d_model) self.W_V = torch.nn.Linear(d_model, d_model) self.W_O = torch.nn.Linear(d_model, d_model) def forward( self, x_q: torch.Tensor, x_k: torch.Tensor, x_v: torch.Tensor, mask: torch.Tensor | None = None ) -> torch.Tensor: N, L_Q, D = x_q.size() _, L_KV, _ = x_k.size() Q = self.W_Q(x_q).reshape(N, L_Q, self.num_heads, self.d_k) K = self.W_K(x_k).reshape(N, L_KV, self.num_heads, self.d_k) V = self.W_V(x_v).reshape(N, L_KV, self.num_heads, self.d_k) score = torch.einsum(\"nihd,njhd->nijh\", Q, K) / self.sqrt_d_k if mask is not None: # mask: (L, L) score = score.masked_fill( mask.reshape(1, L_Q, L_KV, 1) == 0, float('-inf') ) score = torch.nn.functional.softmax(score, dim=2) value = torch.einsum(\"nijh,njhd->nihd\", score, V).reshape(N, L_Q, self.d_model) return self.W_O(value) class MultiHeadSelfAttention(MultiHeadAttention): def __init__(self, d_model: int, num_heads: int): super(MultiHeadSelfAttention, self).__init__(d_model, num_heads) def forward(self, x: torch.Tensor, mask: torch.Tensor | None = None) -> torch.Tensor: return super().forward(x, x, x, mask) class MultiHeadCrossAttention(MultiHeadAttention): def __init__(self, d_model: int, num_heads: int): super(MultiHeadCrossAttention, self).__init__(d_model, num_heads) def forward( self, x_q: torch.Tensor, x_kv: torch.Tensor, mask: torch.Tensor | None = None ) -> torch.Tensor: return super().forward(x_q, x_kv, x_kv, mask) \u200b\u524d\u9988\u200b\u795e\u7ecf\u7f51\u7edc\u200b\u7531\u200b\u4e24\u4e2a\u200b\u5168\u200b\u8fde\u63a5\u200b\u5c42\u200b\u548c\u200bReLU\u200b\u6fc0\u6d3b\u200b\u51fd\u6570\u200b\u7ec4\u6210\u200b
In\u00a0[3]: Copied! class FFN(torch.nn.Module):\n def __init__(self, input_dim: int, hidden_dim: int):\n super(FFN, self).__init__()\n self.fc1 = torch.nn.Linear(input_dim, hidden_dim)\n self.fc2 = torch.nn.Linear(hidden_dim, input_dim)\n self.relu = torch.nn.ReLU()\n\n def forward(self, x):\n return self.fc2(self.relu(self.fc1(x)))\n
class FFN(torch.nn.Module): def __init__(self, input_dim: int, hidden_dim: int): super(FFN, self).__init__() self.fc1 = torch.nn.Linear(input_dim, hidden_dim) self.fc2 = torch.nn.Linear(hidden_dim, input_dim) self.relu = torch.nn.ReLU() def forward(self, x): return self.fc2(self.relu(self.fc1(x))) \u200b\u7f16\u7801\u5668\u200b\u5c42\u200b\u7531\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200bc\u200b\u5c42\u200b\u548c\u200b\u524d\u9988\u200b\u795e\u7ecf\u200b\u7f51\u7edc\u5c42\u200b\u7ec4\u6210\u200b\uff0c\u200b\u4e00\u4e2a\u200b\u7f16\u7801\u5668\u200b\u7531\u200b\u591a\u4e2a\u200b\u8fd9\u6837\u200b\u7684\u200b\u5c42\u200b\u4e32\u8054\u200b\u7ec4\u6210\u200b
In\u00a0[4]: Copied! class EncoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6\n ):\n super(EncoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim)\n self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n def forward(self, x, mask):\n x = x + self.dropout1(self.attention(x, mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.ffn(x))\n x = self.norm2(x)\n\n return x\n\n\nclass Encoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1,\n layer_norm_eps: float = 1e-6\n ):\n super(Encoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n EncoderLayer(input_dim, num_heads, ffn_dim, dropout, layer_norm_eps)\n for _ in range(num_layers)\n ])\n\n def forward(self, x, mask):\n # x: (N, L, D)\n for layer in self.layers:\n x = layer(x, mask)\n return x\n
class EncoderLayer(torch.nn.Module): def __init__( self, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6 ): super(EncoderLayer, self).__init__() if ffn_dim is None: ffn_dim = input_dim * 4 self.attention = MultiHeadSelfAttention(input_dim, num_heads) self.norm1 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout1 = torch.nn.Dropout(dropout) self.ffn = FFN(input_dim, ffn_dim) self.norm2 = torch.nn.LayerNorm(input_dim, layer_norm_eps) self.dropout2 = torch.nn.Dropout(dropout) def forward(self, x, mask): x = x + self.dropout1(self.attention(x, mask)) x = self.norm1(x) x = x + self.dropout2(self.ffn(x)) x = self.norm2(x) return x class Encoder(torch.nn.Module): def __init__( self, num_layers: int, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6 ): super(Encoder, self).__init__() self.layers = torch.nn.ModuleList([ EncoderLayer(input_dim, num_heads, ffn_dim, dropout, layer_norm_eps) for _ in range(num_layers) ]) def forward(self, x, mask): # x: (N, L, D) for layer in self.layers: x = layer(x, mask) return x \u200b\u89e3\u7801\u5668\u200b\u5c42\u200b\u7531\u200b\u81ea\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\uff0c\u200b\u4ea4\u53c9\u200b\u6ce8\u610f\u529b\u200b\u5c42\u200b\u548c\u200b\u524d\u9988\u200b\u795e\u7ecf\u200b\u7f51\u7edc\u5c42\u200b\u7ec4\u6210\u200b\u3002
In\u00a0[5]: Copied! class DecoderLayer(torch.nn.Module):\n def __init__(\n self, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1\n ):\n super(DecoderLayer, self).__init__()\n\n if ffn_dim is None:\n ffn_dim = input_dim * 4\n\n self.self_attention = MultiHeadSelfAttention(input_dim, num_heads)\n self.norm1 = torch.nn.LayerNorm(input_dim)\n self.dropout1 = torch.nn.Dropout(dropout)\n\n self.cross_attention = MultiHeadCrossAttention(input_dim, num_heads)\n self.norm2 = torch.nn.LayerNorm(input_dim)\n self.dropout2 = torch.nn.Dropout(dropout)\n\n self.ffn = FFN(input_dim, ffn_dim)\n self.norm3 = torch.nn.LayerNorm(input_dim)\n self.dropout3 = torch.nn.Dropout(dropout)\n\n def forward(\n self, x: torch.Tensor, memory: torch.Tensor, tgt_mask: torch.Tensor | None = None\n ):\n\n x = x + self.dropout1(self.self_attention(x, tgt_mask))\n x = self.norm1(x)\n\n x = x + self.dropout2(self.cross_attention(x, memory))\n x = self.norm2(x)\n\n x = x + self.dropout3(self.ffn(x))\n x = self.norm3(x)\n\n return x\n\n\nclass Decoder(torch.nn.Module):\n def __init__(\n self, num_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1\n ):\n super(Decoder, self).__init__()\n\n self.layers = torch.nn.ModuleList([\n DecoderLayer(input_dim, num_heads, ffn_dim, dropout)\n for _ in range(num_layers)\n ])\n\n def forward(self, x, memory, tgt_mask):\n # x: (N, L, D)\n for layer in self.layers:\n x = layer(x, memory, tgt_mask)\n return x\n
class DecoderLayer(torch.nn.Module): def __init__( self, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1 ): super(DecoderLayer, self).__init__() if ffn_dim is None: ffn_dim = input_dim * 4 self.self_attention = MultiHeadSelfAttention(input_dim, num_heads) self.norm1 = torch.nn.LayerNorm(input_dim) self.dropout1 = torch.nn.Dropout(dropout) self.cross_attention = MultiHeadCrossAttention(input_dim, num_heads) self.norm2 = torch.nn.LayerNorm(input_dim) self.dropout2 = torch.nn.Dropout(dropout) self.ffn = FFN(input_dim, ffn_dim) self.norm3 = torch.nn.LayerNorm(input_dim) self.dropout3 = torch.nn.Dropout(dropout) def forward( self, x: torch.Tensor, memory: torch.Tensor, tgt_mask: torch.Tensor | None = None ): x = x + self.dropout1(self.self_attention(x, tgt_mask)) x = self.norm1(x) x = x + self.dropout2(self.cross_attention(x, memory)) x = self.norm2(x) x = x + self.dropout3(self.ffn(x)) x = self.norm3(x) return x class Decoder(torch.nn.Module): def __init__( self, num_layers: int, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1 ): super(Decoder, self).__init__() self.layers = torch.nn.ModuleList([ DecoderLayer(input_dim, num_heads, ffn_dim, dropout) for _ in range(num_layers) ]) def forward(self, x, memory, tgt_mask): # x: (N, L, D) for layer in self.layers: x = layer(x, memory, tgt_mask) return x Transformer\u200b\u6a21\u578b\u200b\u7531\u200b\u7f16\u7801\u5668\u200b\u548c\u200b\u89e3\u7801\u5668\u200b\u7ec4\u6210\u200b\uff0c\u200b\u7f16\u7801\u5668\u200b\u5904\u7406\u200b\u6e90\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5c06\u200b\u7f16\u7801\u200b\u540e\u200b\u7684\u200b\u5e8f\u5217\u200b\u8f93\u5165\u200b\u5230\u200b\u89e3\u7801\u5668\u200b\u4e2d\u200b\uff0c\u200b\u89e3\u7801\u5668\u200b\u751f\u6210\u200b\u76ee\u6807\u200b\u5e8f\u5217\u200b\u3002
In\u00a0[6]: Copied! class CustomTransformer(torch.nn.Module):\n def __init__(\n self, num_layers: int, num_decoder_layers: int, input_dim: int, num_heads: int,\n ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6\n ):\n super(CustomTransformer, self).__init__()\n self.encoder = Encoder(num_layers, input_dim, num_heads, ffn_dim, dropout, layer_norm_eps)\n self.decoder = Decoder(num_decoder_layers, input_dim, num_heads, ffn_dim, dropout)\n\n def forward(self, src, tgt, src_mask: torch.Tensor | None = None, tgt_mask: torch.Tensor | None = None):\n memory = self.encoder(src, src_mask)\n return self.decoder(tgt, memory, tgt_mask)\n
class CustomTransformer(torch.nn.Module): def __init__( self, num_layers: int, num_decoder_layers: int, input_dim: int, num_heads: int, ffn_dim: int | None = None, dropout: float = 0.1, layer_norm_eps: float = 1e-6 ): super(CustomTransformer, self).__init__() self.encoder = Encoder(num_layers, input_dim, num_heads, ffn_dim, dropout, layer_norm_eps) self.decoder = Decoder(num_decoder_layers, input_dim, num_heads, ffn_dim, dropout) def forward(self, src, tgt, src_mask: torch.Tensor | None = None, tgt_mask: torch.Tensor | None = None): memory = self.encoder(src, src_mask) return self.decoder(tgt, memory, tgt_mask) \u200b\u5c06\u200bPyTorch\u200b\u5185\u90e8\u200b\u5b9e\u73b0\u200b\u7684\u200bTransformer\u200b\u6743\u91cd\u200b\u590d\u5236\u5230\u200b\u5b9e\u73b0\u200b\u7684\u200bTransformer\u200b\u4e2d\u200b\u3002
In\u00a0[7]: Copied! def _attn_load_from_torch(\n custom_attn: MultiHeadAttention, torch_attn: torch.nn.MultiheadAttention\n):\n embed_dim = custom_attn.d_model\n\n def split_qkv(weight, embed_dim):\n return weight[:embed_dim], weight[embed_dim: 2 * embed_dim], weight[2 * embed_dim:3 * embed_dim]\n custom_attn.W_Q.weight.data, \\\n custom_attn.W_K.weight.data, \\\n custom_attn.W_V.weight.data = split_qkv(\n torch_attn.in_proj_weight.data, embed_dim\n )\n\n custom_attn.W_Q.bias.data, \\\n custom_attn.W_K.bias.data, \\\n custom_attn.W_V.bias.data = split_qkv(\n torch_attn.in_proj_bias.data, embed_dim\n )\n\n custom_attn.W_O.weight.data = torch_attn.out_proj.weight.data\n custom_attn.W_O.bias.data = torch_attn.out_proj.bias.data\n\n return custom_attn\n\n\ndef load_from_torch(\n custom_transformer: CustomTransformer, torch_transformer: torch.nn.Transformer\n):\n for custom_layer, torch_layer in zip(\n [*custom_transformer.encoder.layers, *custom_transformer.decoder.layers],\n [*torch_transformer.encoder.layers, *torch_transformer.decoder.layers],\n ):\n\n if hasattr(custom_layer, 'cross_attention'):\n # Decoder\n custom_layer.self_attention = _attn_load_from_torch(\n custom_layer.self_attention, torch_layer.self_attn\n )\n custom_layer.cross_attention = _attn_load_from_torch(\n custom_layer.cross_attention, torch_layer.multihead_attn\n )\n else:\n # Encoder\n custom_layer.attention = _attn_load_from_torch(\n custom_layer.attention, torch_layer.self_attn\n )\n\n layer_pairs = [\n (custom_layer.norm1, torch_layer.norm1),\n (custom_layer.ffn.fc1, torch_layer.linear1),\n (custom_layer.ffn.fc2, torch_layer.linear2),\n (custom_layer.norm2, torch_layer.norm2)\n ]\n for custom, torch in layer_pairs:\n custom.weight.data = torch.weight.data\n custom.bias.data = torch.bias.data\n return custom_transformer\n
def _attn_load_from_torch( custom_attn: MultiHeadAttention, torch_attn: torch.nn.MultiheadAttention ): embed_dim = custom_attn.d_model def split_qkv(weight, embed_dim): return weight[:embed_dim], weight[embed_dim: 2 * embed_dim], weight[2 * embed_dim:3 * embed_dim] custom_attn.W_Q.weight.data, \\ custom_attn.W_K.weight.data, \\ custom_attn.W_V.weight.data = split_qkv( torch_attn.in_proj_weight.data, embed_dim ) custom_attn.W_Q.bias.data, \\ custom_attn.W_K.bias.data, \\ custom_attn.W_V.bias.data = split_qkv( torch_attn.in_proj_bias.data, embed_dim ) custom_attn.W_O.weight.data = torch_attn.out_proj.weight.data custom_attn.W_O.bias.data = torch_attn.out_proj.bias.data return custom_attn def load_from_torch( custom_transformer: CustomTransformer, torch_transformer: torch.nn.Transformer ): for custom_layer, torch_layer in zip( [*custom_transformer.encoder.layers, *custom_transformer.decoder.layers], [*torch_transformer.encoder.layers, *torch_transformer.decoder.layers], ): if hasattr(custom_layer, 'cross_attention'): # Decoder custom_layer.self_attention = _attn_load_from_torch( custom_layer.self_attention, torch_layer.self_attn ) custom_layer.cross_attention = _attn_load_from_torch( custom_layer.cross_attention, torch_layer.multihead_attn ) else: # Encoder custom_layer.attention = _attn_load_from_torch( custom_layer.attention, torch_layer.self_attn ) layer_pairs = [ (custom_layer.norm1, torch_layer.norm1), (custom_layer.ffn.fc1, torch_layer.linear1), (custom_layer.ffn.fc2, torch_layer.linear2), (custom_layer.norm2, torch_layer.norm2) ] for custom, torch in layer_pairs: custom.weight.data = torch.weight.data custom.bias.data = torch.bias.data return custom_transformer \u200b\u901a\u8fc7\u200b\u4ee3\u7801\u200b\u9a8c\u8bc1\u200b\u5b9e\u73b0\u200b\u7684\u200bTransformer\u200b\u6a21\u578b\u200b\u7684\u200b\u6b63\u786e\u6027\u200b\u3002
In\u00a0[8]: Copied! transformer_config = {\n 'num_layers': 6,\n 'num_decoder_layers': 6,\n 'input_dim': 512,\n 'num_heads': 8,\n 'ffn_dim': 2048,\n 'dropout': 0.1,\n 'layer_norm_eps': 1e-6\n}\n\ncustom_transformer = CustomTransformer(**transformer_config)\ntorch_transformer = torch.nn.Transformer(\n d_model=transformer_config['input_dim'],\n nhead=transformer_config['num_heads'],\n num_encoder_layers=transformer_config['num_layers'],\n num_decoder_layers=transformer_config['num_decoder_layers'],\n dim_feedforward=transformer_config['ffn_dim'],\n dropout=transformer_config['dropout'],\n batch_first=True\n)\ncustom_transformer = load_from_torch(custom_transformer, torch_transformer)\ncustom_transformer.eval()\ntorch_transformer.eval()\n\nsrc = torch.randn(32, 10, transformer_config['input_dim'])\ntgt = torch.randn(32, 20, transformer_config['input_dim'])\ntgt_mask = 1 - torch.triu(torch.ones(20, 20), diagonal=1)\n\ncustom_output = custom_transformer(src, tgt, tgt_mask=tgt_mask)\ntorch_output = torch_transformer(src, tgt, tgt_mask=tgt_mask, tgt_is_causal=True)\ncustom_output[0, 0, :5], torch_output[0, 0, :5]\n
transformer_config = { 'num_layers': 6, 'num_decoder_layers': 6, 'input_dim': 512, 'num_heads': 8, 'ffn_dim': 2048, 'dropout': 0.1, 'layer_norm_eps': 1e-6 } custom_transformer = CustomTransformer(**transformer_config) torch_transformer = torch.nn.Transformer( d_model=transformer_config['input_dim'], nhead=transformer_config['num_heads'], num_encoder_layers=transformer_config['num_layers'], num_decoder_layers=transformer_config['num_decoder_layers'], dim_feedforward=transformer_config['ffn_dim'], dropout=transformer_config['dropout'], batch_first=True ) custom_transformer = load_from_torch(custom_transformer, torch_transformer) custom_transformer.eval() torch_transformer.eval() src = torch.randn(32, 10, transformer_config['input_dim']) tgt = torch.randn(32, 20, transformer_config['input_dim']) tgt_mask = 1 - torch.triu(torch.ones(20, 20), diagonal=1) custom_output = custom_transformer(src, tgt, tgt_mask=tgt_mask) torch_output = torch_transformer(src, tgt, tgt_mask=tgt_mask, tgt_is_causal=True) custom_output[0, 0, :5], torch_output[0, 0, :5] Out[8]: (tensor([ 0.6672, 0.4102, -0.2145, 1.8782, 0.4108], grad_fn=<SliceBackward0>),\n tensor([ 0.6672, 0.4102, -0.2145, 1.8781, 0.4108], grad_fn=<SliceBackward0>))
In\u00a0[9]: Copied! torch.allclose(custom_output, torch_output, atol=1e-4)\n
torch.allclose(custom_output, torch_output, atol=1e-4) Out[9]: True
"},{"location":"coding/dsa/","title":"\u6570\u636e\u7ed3\u6784","text":"\u200b\u4ee5\u4e0b\u200b\u6574\u7406\u200b\u4e86\u200b\u9093\u4fca\u8f89\u200b\u8001\u5e08\u200b\u300a\u200b\u6570\u636e\u7ed3\u6784\u200b\u300b\u200b\u8bfe\u7a0b\u200b\u7684\u200b\u5185\u5bb9\u200b\uff1a
- \u200b\u5411\u91cf\u200b\u4e0e\u200b\u5217\u8868\u200b
"},{"location":"coding/dsa/vector-and-list/","title":"\u5411\u91cf\u200b\u4e0e\u200b\u5217\u8868","text":"\u200b\u4e3b\u8981\u200b\u7684\u200b\u57fa\u7840\u200b\u7ebf\u6027\u200b\u6570\u636e\u7ed3\u6784\u200b\u662f\u200b\u5411\u91cf\u200b\u4e0e\u200b\u5217\u8868\u200b\u3002\u200b\u5728\u200b\u672c\u5408\u200b\u96c6\u4e2d\u200b\uff0c\u200b\u5411\u91cf\u200b\u6307\u4ee5\u200b\u6570\u7ec4\u200b\u65b9\u5f0f\u200b\u7ec4\u5408\u200b\u5e76\u200b\u5c01\u88c5\u200b\u901a\u7528\u200b\u62bd\u8c61\u200b\u63a5\u53e3\u200b\u7684\u200b\u6570\u636e\u7c7b\u578b\u200b\uff1b\u200b\u5217\u8868\u200b\u6307\u4ee5\u200b\u94fe\u8868\u200b\u65b9\u5f0f\u200b\u7ec4\u5408\u200b\u5e76\u200b\u5c01\u88c5\u200b\u901a\u7528\u200b\u62bd\u8c61\u200b\u63a5\u53e3\u200b\u7684\u200b\u6570\u636e\u7c7b\u578b\u200b\u3002
\u200b\u8f83\u4e3a\u200b\u9ad8\u7ea7\u200b\u7684\u200b\u6570\u636e\u7ed3\u6784\u200b\u2014\u2014\u200b\u6808\u200b\u4e0e\u200b\u961f\u5217\u200b\u5efa\u7acb\u200b\u5728\u200b\u5411\u91cf\u200b\u4e0e\u200b\u5217\u8868\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\u3002\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4e00\u4e9b\u200b\u53d7\u9650\u5236\u200b\u7684\u200b\u64cd\u4f5c\u200b\u63a5\u53e3\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_2","title":"\u7ebf\u6027\u200b\u6570\u636e\u7ed3\u6784","text":"\u200b\u5bf9\u4e8e\u200b\u57fa\u7840\u200b\u7684\u200b\u7ebf\u6027\u200b\u6570\u636e\u7ed3\u6784\u200b\uff0c\u200b\u4ee5\u4e0b\u200b\u7684\u200b\u63a5\u53e3\u200b\u53ef\u4ee5\u200b\u89c6\u4e3a\u200b\u901a\u7528\u200b\uff1a
\u200b\u64cd\u4f5c\u200b \u200b\u63cf\u8ff0\u200b \u200b\u901a\u7528\u6027\u200b size()
\u200b\u83b7\u53d6\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u6570\u76ee\u200b get()
\u200b\u83b7\u53d6\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u503c\u200b set()
\u200b\u4fee\u6539\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u503c\u200b insert()
\u200b\u5411\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u4f4d\u7f6e\u200b\u63d2\u5165\u200b\u5143\u7d20\u200b remove()
\u200b\u79fb\u9664\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b traverse()
\u200b\u904d\u5386\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\uff0c\u200b\u5e76\u200b\u6267\u884c\u200b\u67d0\u200b\u64cd\u4f5c\u200b find()
\u200b\u5728\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u67e5\u627e\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u4f4d\u7f6e\u200b search()
\u200b\u5728\u200b\u6709\u5e8f\u200b\u7684\u200b\u7ed3\u6784\u200b\u4e2d\u200b\u67e5\u627e\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u4f4d\u7f6e\u200b \u200b\u8981\u6c42\u200b\u6709\u5e8f\u200b sort()
\u200b\u6392\u5e8f\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b \u200b\u8981\u6c42\u200b\u91cd\u8f7d\u200b<
\u200b\u548c\u200b>
\u200b\u8fd0\u7b97\u7b26"},{"location":"coding/dsa/vector-and-list/#_3","title":"\u5411\u91cf","text":"\u200b\u5728\u200b\u5411\u91cf\u200b\u4e2d\u200b\uff0c\u200b\u6570\u636e\u200b\u5728\u200b\u5185\u5b58\u200b\u4e2d\u200b\u8fde\u7eed\u200b\u5b58\u50a8\u200b\uff0c\u200b\u5373\u200b\u4e0b\u6807\u200b\u76f8\u90bb\u200b\u7684\u200b\u6570\u636e\u200b\u5728\u200b\u5185\u5b58\u200b\u4e2d\u200b\u76f8\u90bb\u200b\u3002C/C++\u200b\u8bed\u8a00\u200b\u4e2d\u200b\u7684\u200b\u6570\u7ec4\u200b\u6570\u636e\u7ed3\u6784\u200b\u53ef\u4ee5\u200b\u89c6\u4e3a\u200b\u7b80\u5355\u200b\u7684\u200b\u5411\u91cf\u200b\u3002\u200b\u4f46\u200b\u6570\u7ec4\u200b\u4e0d\u200b\u63d0\u4f9b\u200b\u63d2\u5165\u200b\u3001\u200b\u5220\u9664\u200b\u7b49\u200b\u5177\u4f53\u200b\u7684\u200b\u64cd\u4f5c\u200b\u63a5\u53e3\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u7a0b\u5e8f\u4ee3\u7801\u200b\u4e2d\u200b\u624b\u52a8\u200b\u5b9e\u73b0\u200b\u3002\u200b\u5c06\u200b\u6570\u7ec4\u200b\u5c01\u88c5\u200b\u6210\u7c7b\u200b\u53ef\u4ee5\u200b\u63d0\u4f9b\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u64cd\u4f5c\u200b\u63a5\u53e3\u200b\uff0c\u200b\u5e76\u4e14\u200b\u4fdd\u8bc1\u6570\u636e\u200b\u88ab\u200b\u5408\u6cd5\u200b\u5730\u200b\u8bbf\u95ee\u200b\u53ca\u200b\u4fee\u6539\u200b\u3002
\u200b\u5411\u91cf\u200b\u662f\u200b\u6570\u7ec4\u200b\u7684\u200b\u62bd\u8c61\u200b\u6cdb\u5316\u200b\u3001\u200b\u652f\u6301\u200b\u6240\u6709\u200b\u6570\u7ec4\u200b\u7684\u200b\u529f\u80fd\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u5143\u7d20\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u7edf\u4e00\u200b\u7684\u200b\u64cd\u4f5c\u200b\u63a5\u53e3\u200b\u3002
C++\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u6a21\u677f\u200b\u7c7b\u200b\u7684\u200b\u529f\u80fd\u200b\u7528\u6765\u200b\u9488\u5bf9\u200b\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u5143\u7d20\u200b\u63d0\u4f9b\u200b\u76f8\u540c\u200b\u7684\u200b\u529f\u80fd\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u67d0\u4e2a\u200bADT\uff08\u200b\u4ee5\u200b\u5411\u91cf\u200b\u4e3a\u4f8b\u200b\uff09\uff0c\u200b\u5176\u200b\u5c5e\u6027\u200b\u548c\u200b\u63a5\u53e3\u200b\u7684\u200b\u7ec4\u7ec7\u200b\u65b9\u5f0f\u200b\u53ef\u200b\u9075\u5faa\u200b\u5982\u4e0b\u200b\u89c4\u5219\u200b\uff1a
template <typename T> class Vector { //\u200b\u5411\u91cf\u200b\u6a21\u677f\u200b\u7c7b\u200b\nprivate: Rank _size; int _capacity; T* _elem; //\u200b\u89c4\u6a21\u200b\u3001\u200b\u5bb9\u91cf\u200b\u3001\u200b\u6570\u636e\u200b\u533a\u200b\nprotected:\n/* ... \u200b\u5185\u90e8\u200b\u51fd\u6570\u200b */\npublic:\n/* ... \u200b\u6784\u9020\u51fd\u6570\u200b */\n/* ... \u200b\u6790\u6784\u200b\u51fd\u6570\u200b */\n/* ... \u200b\u53ea\u8bfb\u200b\u63a5\u53e3\u200b */\n/* ... \u200b\u53ef\u200b\u5199\u200b\u63a5\u53e3\u200b */\n/* ... \u200b\u904d\u5386\u200b\u63a5\u53e3\u200b */\n};\n
\u200b\u901a\u8fc7\u200b\u5bf9\u200b[]
\u200b\u8fd0\u7b97\u7b26\u200b\u8fdb\u884c\u200b\u91cd\u8f7d\u200b\uff0c\u200b\u5411\u91cf\u200b\u548c\u200b\u5217\u8868\u200b\u652f\u6301\u200b\u6570\u7ec4\u200b\u98ce\u683c\u200b\u7684\u200b\u8bbf\u95ee\u200b\u65b9\u5f0f\u200b\u3002
\u200b\u5177\u4f53\u200b\u4ee3\u7801\u200b\u53ef\u4ee5\u200b\u53c2\u89c1\u200b\uff1a
\u200b\u5411\u91cf\u200b\u6a21\u677f\u200b\u7c7b\u200b\u58f0\u660e\u200b /******************************************************************************************\n* Data Structures in C++\n* ISBN: 7-302-33064-6 & 7-302-33065-3 & 7-302-29652-2 & 7-302-26883-3\n* Junhui DENG, deng@tsinghua.edu.cn\n* Computer Science & Technology, Tsinghua University\n* Copyright (c) 2003-2020. All rights reserved.\n******************************************************************************************/\n\ntypedef int Rank; //\u200b\u79e9\u200b\n#define DEFAULT_CAPACITY 3 //\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u521d\u59cb\u200b\u5bb9\u91cf\u200b\uff08\u200b\u5b9e\u9645\u200b\u5e94\u7528\u200b\u4e2d\u200b\u53ef\u200b\u8bbe\u7f6e\u200b\u4e3a\u200b\u66f4\u200b\u5927\u200b\uff09\n\ntemplate <typename T> class Vector { //\u200b\u5411\u91cf\u200b\u6a21\u677f\u200b\u7c7b\u200b\nprotected:\n Rank _size; int _capacity; T* _elem; //\u200b\u89c4\u6a21\u200b\u3001\u200b\u5bb9\u91cf\u200b\u3001\u200b\u6570\u636e\u200b\u533a\u200b\n void copyFrom ( T const* A, Rank lo, Rank hi ); //\u200b\u590d\u5236\u200b\u6570\u7ec4\u200b\u533a\u95f4\u200bA[lo, hi)\n void expand(); //\u200b\u7a7a\u95f4\u200b\u4e0d\u8db3\u200b\u65f6\u200b\u6269\u5bb9\u200b\n void shrink(); //\u200b\u88c5\u586b\u200b\u56e0\u5b50\u200b\u8fc7\u200b\u5c0f\u65f6\u200b\u538b\u7f29\u200b\n bool bubble ( Rank lo, Rank hi ); //\u200b\u626b\u63cf\u200b\u4ea4\u6362\u200b\n void bubbleSort ( Rank lo, Rank hi ); //\u200b\u8d77\u6ce1\u200b\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\n Rank max ( Rank lo, Rank hi ); //\u200b\u9009\u53d6\u200b\u6700\u5927\u200b\u5143\u7d20\u200b\n void selectionSort ( Rank lo, Rank hi ); //\u200b\u9009\u62e9\u200b\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\n void merge ( Rank lo, Rank mi, Rank hi ); //\u200b\u5f52\u5e76\u200b\u7b97\u6cd5\u200b\n void mergeSort ( Rank lo, Rank hi ); //\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\n void heapSort ( Rank lo, Rank hi ); //\u200b\u5806\u6392\u5e8f\u200b\uff08\u200b\u7a0d\u540e\u200b\u7ed3\u5408\u200b\u5b8c\u5168\u200b\u5806\u200b\u8bb2\u89e3\u200b\uff09\n Rank partition ( Rank lo, Rank hi ); //\u200b\u8f74\u70b9\u200b\u6784\u9020\u200b\u7b97\u6cd5\u200b\n void quickSort ( Rank lo, Rank hi ); //\u200b\u5feb\u901f\u200b\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\n void shellSort ( Rank lo, Rank hi ); //\u200b\u5e0c\u5c14\u200b\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\npublic:\n// \u200b\u6784\u9020\u51fd\u6570\u200b\n Vector ( int c = DEFAULT_CAPACITY, int s = 0, T v = 0 ) //\u200b\u5bb9\u91cf\u200b\u4e3a\u200bc\u3001\u200b\u89c4\u6a21\u200b\u4e3a\u200bs\u3001\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u521d\u59cb\u200b\u4e3a\u200bv\n { _elem = new T[_capacity = c]; for ( _size = 0; _size < s; _elem[_size++] = v ); } //s<=c\n Vector ( T const* A, Rank n ) { copyFrom ( A, 0, n ); } //\u200b\u6570\u7ec4\u200b\u6574\u4f53\u200b\u590d\u5236\u200b\n Vector ( T const* A, Rank lo, Rank hi ) { copyFrom ( A, lo, hi ); } //\u200b\u533a\u95f4\u200b\n Vector ( Vector<T> const& V ) { copyFrom ( V._elem, 0, V._size ); } //\u200b\u5411\u91cf\u200b\u6574\u4f53\u200b\u590d\u5236\u200b\n Vector ( Vector<T> const& V, Rank lo, Rank hi ) { copyFrom ( V._elem, lo, hi ); } //\u200b\u533a\u95f4\u200b\n// \u200b\u6790\u6784\u200b\u51fd\u6570\u200b\n ~Vector() { delete [] _elem; } //\u200b\u91ca\u653e\u200b\u5185\u90e8\u7a7a\u95f4\u200b\n// \u200b\u53ea\u8bfb\u200b\u8bbf\u95ee\u200b\u63a5\u53e3\u200b\n Rank size() const { return _size; } //\u200b\u89c4\u6a21\u200b\n bool empty() const { return !_size; } //\u200b\u5224\u7a7a\u200b\n Rank find ( T const& e ) const { return find ( e, 0, _size ); } //\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u6574\u4f53\u200b\u67e5\u627e\u200b\n Rank find ( T const& e, Rank lo, Rank hi ) const; //\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u533a\u95f4\u200b\u67e5\u627e\u200b\n Rank search ( T const& e ) const //\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u6574\u4f53\u200b\u67e5\u627e\u200b\n { return ( 0 >= _size ) ? -1 : search ( e, 0, _size ); }\n Rank search ( T const& e, Rank lo, Rank hi ) const; //\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u533a\u95f4\u200b\u67e5\u627e\u200b\n// \u200b\u53ef\u200b\u5199\u8bbf\u95ee\u200b\u63a5\u53e3\u200b\n T& operator[] ( Rank r ); //\u200b\u91cd\u8f7d\u200b\u4e0b\u6807\u200b\u64cd\u4f5c\u7b26\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7c7b\u4f3c\u200b\u4e8e\u200b\u6570\u7ec4\u200b\u5f62\u5f0f\u200b\u5f15\u7528\u200b\u5404\u200b\u5143\u7d20\u200b\n const T& operator[] ( Rank r ) const; //\u200b\u4ec5\u9650\u4e8e\u200b\u505a\u53f3\u503c\u200b\u7684\u200b\u91cd\u8f7d\u200b\u7248\u672c\u200b\n Vector<T> & operator= ( Vector<T> const& ); //\u200b\u91cd\u8f7d\u200b\u8d4b\u503c\u200b\u64cd\u4f5c\u7b26\u200b\uff0c\u200b\u4ee5\u4fbf\u200b\u76f4\u63a5\u200b\u514b\u9686\u200b\u5411\u91cf\u200b\n T remove ( Rank r ); //\u200b\u5220\u9664\u200b\u79e9\u4e3a\u200br\u200b\u7684\u200b\u5143\u7d20\u200b\n int remove ( Rank lo, Rank hi ); //\u200b\u5220\u9664\u200b\u79e9\u5728\u200b\u533a\u95f4\u200b[lo, hi)\u200b\u4e4b\u5185\u200b\u7684\u200b\u5143\u7d20\u200b\n Rank insert ( Rank r, T const& e ); //\u200b\u63d2\u5165\u200b\u5143\u7d20\u200b\n Rank insert ( T const& e ) { return insert ( _size, e ); } //\u200b\u9ed8\u8ba4\u200b\u4f5c\u4e3a\u200b\u672b\u200b\u5143\u7d20\u200b\u63d2\u5165\u200b\n void sort ( Rank lo, Rank hi ); //\u200b\u5bf9\u200b[lo, hi)\u200b\u6392\u5e8f\u200b\n void sort() { sort ( 0, _size ); } //\u200b\u6574\u4f53\u200b\u6392\u5e8f\u200b\n void unsort ( Rank lo, Rank hi ); //\u200b\u5bf9\u200b[lo, hi)\u200b\u7f6e\u4e71\u200b\n void unsort() { unsort ( 0, _size ); } //\u200b\u6574\u4f53\u200b\u7f6e\u4e71\u200b\n int deduplicate(); //\u200b\u65e0\u5e8f\u200b\u53bb\u200b\u91cd\u200b\n int uniquify(); //\u200b\u6709\u5e8f\u200b\u53bb\u200b\u91cd\u200b\n// \u200b\u904d\u5386\u200b\n void traverse ( void (* ) ( T& ) ); //\u200b\u904d\u5386\u200b\uff08\u200b\u4f7f\u7528\u200b\u51fd\u6570\u6307\u9488\u200b\uff0c\u200b\u53ea\u8bfb\u200b\u6216\u200b\u5c40\u90e8\u6027\u200b\u4fee\u6539\u200b\uff09\n template <typename VST> void traverse ( VST& ); //\u200b\u904d\u5386\u200b\uff08\u200b\u4f7f\u7528\u200b\u51fd\u6570\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u53ef\u200b\u5168\u5c40\u6027\u200b\u4fee\u6539\u200b\uff09\n}; //Vector\n
Reference"},{"location":"coding/dsa/vector-and-list/#_4","title":"\u63d2\u5165","text":"\u200b\u5411\u91cf\u200b\u7684\u200b\u63d2\u5165\u200b\u64cd\u4f5c\u200b\u5206\u4e3a\u200b\u4e09\u6b65\u200b\uff1a
- \u200b\u68c0\u67e5\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u4e0e\u200b\u8f93\u5165\u200b\u4e0b\u200b\u6807\u7684\u200b\u5408\u6cd5\u6027\u200b\uff0c\u200b\u5fc5\u8981\u200b\u65f6\u200b\u6539\u53d8\u200b\u5411\u91cf\u200b\u7684\u200b\u957f\u5ea6\u200b\u4ee5\u200b\u5bb9\u7eb3\u200b\u8be5\u200b\u5143\u7d20\u200b
- \u200b\u5f53\u200b\u8f93\u5165\u200b\u4e0b\u6807\u200b\u4e0d\u662f\u200b\u5411\u91cf\u200b\u7684\u200b\u672b\u5c3e\u200b\u65f6\u200b\uff0c\u200b\u79fb\u52a8\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u5728\u200b\u5bf9\u5e94\u200b\u4f4d\u7f6e\u200b\u817e\u51fa\u200b\u7a7a\u95f4\u200b
- \u200b\u5c06\u200b\u6570\u636e\u200b\u5199\u5165\u200b\u5411\u91cf\u200b\u4e2d\u200b
\u200b\u5728\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u968f\u673a\u200b\u4f4d\u7f6e\u200b\u63d2\u5165\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u6539\u53d8\u200b\u5411\u91cf\u200b\u957f\u5ea6\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u65f6\u95f4\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)\uff0c\u200b\u79fb\u52a8\u200b\u5143\u7d20\u200b\u4ee5\u200b\u817e\u51fa\u200b\u7a7a\u95f4\u200b\u7684\u200b\u671f\u671b\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)\uff0c\u200b\u5199\u5165\u200b\u6570\u636e\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(1)\\)\uff0c\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)
"},{"location":"coding/dsa/vector-and-list/#_5","title":"\u53ef\u200b\u6269\u5145\u200b\u5411\u91cf","text":"\u200b\u5411\u91cf\u200b\u7684\u200b\u7a7a\u95f4\u200b\u662f\u200b\u6709\u9650\u200b\u7684\u200b\uff08\u200b\u5373\u200b\u4e3a\u200b\u5411\u91cf\u200b\u672c\u8eab\u200b\u7684\u200b\u957f\u5ea6\u200b\uff09\uff0c\u200b\u82e5\u5f53\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u4e0d\u8db3\u200b\u65f6\u4e3a\u200b\u5411\u91cf\u200b\u91cd\u65b0\u5206\u914d\u200b\u4e00\u5757\u200b\u66f4\u957f\u200b\u7684\u200b\u5185\u5b58\u200b\uff0c\u200b\u5c06\u200b\u539f\u200b\u6570\u636e\u200b\u590d\u5236\u5230\u200b\u65b0\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u4e2d\u4ee5\u200b\u5b9e\u73b0\u200b\u5bb9\u91cf\u200b\u7684\u200b\u6269\u589e\u200b\uff0c\u200b\u5219\u200b\u5411\u91cf\u200b\u7684\u200b\u7a7a\u95f4\u200b\u53ef\u4ee5\u200b\u8fd1\u4f3c\u200b\u89c6\u4e3a\u200b\u65e0\u9650\u200b\u3002\u200b\u4e00\u822c\u200b\u5b58\u5728\u200b\u4e24\u79cd\u200b\u6269\u5145\u200b\u7b97\u6cd5\u200b\uff1a
- \u200b\u5f53\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u4e0d\u8db3\u200b\u65f6\u200b\uff0c\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u589e\u52a0\u200b\u4e00\u4e2a\u200b\u5e38\u91cf\u200b\\(I\\)
- \u200b\u5f53\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u4e0d\u8db3\u200b\u65f6\u200b\uff0c\u200b\u5411\u91cf\u200b\u7a7a\u95f4\u200b\u4e58\u4ee5\u200b\u4e00\u5b9a\u200b\u500d\u6570\u200b\\(k\\)\uff08\u200b\u901a\u5e38\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\\(k=2\\)\uff09
\u200b\u5bf9\u4e8e\u200b\u521d\u59cb\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(0\\)\u200b\u7684\u200b\u5411\u91cf\u200b\uff0c\u200b\u8003\u5bdf\u200b\u63d2\u5165\u200b\\(n\\gg 2\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\u4e0b\u200b\u4e24\u79cd\u200b\u6269\u5145\u200b\u7b97\u6cd5\u200b\u7684\u200b\u8c03\u7528\u200b\u6b21\u6570\u200b\u3002\u200b\u9012\u589e\u200b\u7b56\u7565\u200b\u4e0b\u200b\u63d2\u5165\u200b\u7b2c\u200b\\(mI+1, (m\\in \\mathbb N)\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\u65f6\u200b\u9700\u8981\u200b\u8fdb\u884c\u200b\u6269\u5145\u200b\uff0c\u200b\u603b\u200b\u7684\u200b\u8c03\u7528\u200b\u6b21\u6570\u200b\u4e3a\u200b\\(\\frac{n}{I}\\)\uff0c\u200b\u5373\u200b\\(\\mathcal O(n)\\)\u3002\u200b\u500d\u589e\u200b\u7b56\u7565\u200b\u4e0b\u200b\u63d2\u5165\u200b\u7b2c\u200b\\(1, 2, 3, 5\\dots 2^m+1, (m\\in \\mathbb N)\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\u65f6\u200b\u9700\u8981\u200b\u8fdb\u884c\u200b\u6269\u5145\u200b\uff0c\u200b\u603b\u200b\u7684\u200b\u8c03\u7528\u200b\u6b21\u6570\u200b\u4e3a\u200b\\(\\mathcal O(\\log n)\\)\u3002
\u200b\u590d\u5236\u200b\u6570\u636e\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)\uff0c\u200b\u56e0\u6b64\u200b\u9012\u589e\u200b\u7b56\u7565\u200b\u6bcf\u6b21\u200b\u6269\u5bb9\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u65f6\u95f4\u200b\u4e3a\u200b\\(0, I, 2I, \\dots\\)\uff0c\u200b\u5171\u200b\u9700\u8981\u200b\u6269\u5bb9\u200b\\(\\frac nI\\)\u200b\u6b21\u200b\uff0c\u200b\u6269\u5bb9\u200b\u64cd\u4f5c\u200b\u7684\u200b\u603b\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n^2)\\)\u3002\u200b\u6bcf\u6b21\u200b\u63d2\u5165\u200b\u64cd\u4f5c\u200b\u5206\u644a\u200b\\(\\mathcal O(n)\\)\u3002\u200b\u500d\u589e\u200b\u7b56\u7565\u200b\u6bcf\u6b21\u200b\u6269\u5bb9\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u65f6\u95f4\u200b\u4e3a\u200b\\(0, 1, 2, \\dots n\\)\uff0c\u200b\u5171\u200b\u9700\u8981\u200b\u6269\u5bb9\u200b\\(\\log n\\)\u200b\u6b21\u200b\u3002\u200b\u6269\u5bb9\u200b\u64cd\u4f5c\u200b\u7684\u200b\u603b\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)\uff0c\u200b\u6bcf\u6b21\u200b\u63d2\u5165\u200b\u64cd\u4f5c\u200b\u5206\u644a\u200b\\(\\mathcal O(1)\\)\u3002
\u200b\u4f46\u200b\u500d\u589e\u200b\u7b56\u7565\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u7a7a\u95f4\u200b\u6d6a\u8d39\u200b\uff0c\u200b\u5177\u4f53\u8868\u73b0\u200b\u4e3a\u200b\u5411\u91cf\u200b\u7684\u200b\u88c5\u8f7d\u200b\u56e0\u5b50\u200b\u8f83\u200b\u4f4e\u200b\u3002\u200b\u63d2\u5165\u200b\u5927\u91cf\u200b\u5143\u7d20\u200b\u65f6\u200b\uff0c\u200b\u500d\u589e\u200b\u7b56\u7565\u200b\u7684\u200b\u88c5\u8f7d\u200b\u56e0\u5b50\u200b\u53ea\u80fd\u200b\u4fdd\u8bc1\u200b\\(> 50\\)\uff0c\u200b\u800c\u200b\u9012\u589e\u200b\u7b56\u7565\u200b\u7684\u200b\u88c5\u8f7d\u200b\u56e0\u5b50\u200b\u53ef\u4ee5\u200b\u4fdd\u8bc1\u200b\u5728\u200b\\(1\\)\u200b\u5de6\u53f3\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_6","title":"\u5220\u9664","text":"\u200b\u5411\u91cf\u200b\u7684\u200b\u5220\u9664\u200b\u64cd\u4f5c\u200b\u4e3b\u8981\u200b\u4e3a\u200b\u533a\u95f4\u200b\u5220\u9664\u200b\u4e0e\u200b\u5355\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u5220\u9664\u200b\u3002\u200b\u5176\u4e2d\u200b\u540e\u8005\u200b\u53ef\u4ee5\u200b\u89c6\u4e3a\u200b\u524d\u8005\u200b\u7684\u200b\u7279\u6b8a\u200b\u60c5\u51b5\u200b\u3002\u200b\u5220\u9664\u200b\u64cd\u4f5c\u200b\u4e0d\u200b\u9700\u8981\u200b\u6267\u884c\u200b\u989d\u5916\u200b\u7684\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u53ea\u200b\u9700\u8981\u200b\u5c06\u200b\u5220\u9664\u200b\u533a\u95f4\u200b\u540e\u200b\u7684\u200b\u5143\u7d20\u200b\u5411\u524d\u200b\u79fb\u52a8\u200b\uff0c\u200b\u8986\u76d6\u200b\u5220\u9664\u200b\u533a\u95f4\u200b\u5185\u200b\u7684\u200b\u6570\u636e\u200b\u5e76\u200b\u66f4\u65b0\u200b\u64cd\u4f5c\u200b\u7ed3\u675f\u200b\u540e\u200b\u5411\u91cf\u200b\u7684\u200b\u957f\u5ea6\u200b\u5373\u53ef\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u53ef\u200b\u6269\u5145\u200b\u5411\u91cf\u200b\uff0c\u200b\u5220\u9664\u200b\u540e\u200b\u5e94\u5bf9\u200b\u5411\u91cf\u200b\u7684\u200b\u88c5\u586b\u200b\u56e0\u5b50\u200b\u8fdb\u884c\u200b\u68c0\u67e5\u200b\uff0c\u200b\u5728\u200b\u5fc5\u8981\u200b\u65f6\u200b\u6536\u7f29\u200b\u5411\u91cf\u200b\u3002
\u200b\u5982\u679c\u200b\u591a\u6b21\u200b\u8c03\u7528\u200b\u5220\u9664\u200b\u5355\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u63a5\u53e3\u200b\u5b9e\u73b0\u200b\u533a\u95f4\u200b\u5220\u9664\u200b\uff0c\u200b\u7531\u4e8e\u200b\u6bcf\u6b21\u200b\u5220\u9664\u200b\u90fd\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u4e00\u6b21\u200b\u6570\u636e\u200b\u7684\u200b\u79fb\u52a8\u200b\uff0c\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n^2)\\)
\u200b\u5220\u9664\u200b\u64cd\u4f5c\u200b\u9700\u8981\u200b\u5bf9\u200b\u5220\u9664\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5408\u6cd5\u6027\u200b\u8fdb\u884c\u200b\u68c0\u9a8c\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_7","title":"\u67e5\u627e","text":"\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u4e0e\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u67e5\u627e\u200b\u65b9\u6cd5\u200b\u4e0d\u540c\u200b\uff0c\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e5f\u200b\u4e0d\u540c\u200b\u3002\u200b\u5177\u4f53\u200b\u800c\u8a00\u200b\uff0c\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u987a\u5e8f\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u989d\u5916\u200b\u7684\u200b\u4fe1\u606f\u200b\uff0c\u200b\u4ece\u800c\u200b\u4f7f\u5f97\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u67e5\u627e\u200b\u64cd\u4f5c\u200b\u80fd\u591f\u200b\u5728\u200b\\(\\log n\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u5185\u200b\u5b8c\u6210\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_8","title":"\u987a\u5e8f\u200b\u67e5\u627e","text":"\u200b\u987a\u5e8f\u200b\u67e5\u627e\u200b\u64cd\u4f5c\u200b\u5047\u8bbe\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u7c7b\u578b\u5b9a\u4e49\u200b\u4e86\u200b==
\u200b\u8fd0\u7b97\u7b26\u200b\u4e0e\u200b!=
\u200b\u8fd0\u7b97\u7b26\u200b\u3002
\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u67e5\u627e\u200b\u53ea\u200b\u9700\u8981\u200b\u4ece\u200b\u5411\u91cf\u200b\u7684\u200b\u5f00\u5934\u200b\u4f9d\u6b21\u200b\u5bf9\u6bd4\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u4e0e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\uff0c\u200b\u5f53\u200b\u5143\u7d20\u200b\u76f8\u540c\u200b\u65f6\u200b\u8fd4\u56de\u200b\u5373\u53ef\u200b\u3002\u200b\u5e73\u5747\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)
"},{"location":"coding/dsa/vector-and-list/#_9","title":"\u4e8c\u5206\u200b\u67e5\u627e","text":"\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u67e5\u627e\u200b\u64cd\u4f5c\u200b\u5047\u8bbe\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u7c7b\u578b\u5b9a\u4e49\u200b\u7c7b\u200b==
\u200b\u8fd0\u7b97\u7b26\u200b\u3001!=
\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u56e0\u6b64\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u67e5\u627e\u200b\u65b9\u6cd5\u200b\u7ebf\u6027\u200b\u67e5\u627e\u200b\u3002\u200b\u82e5\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u5143\u7d20\u200b\u7c7b\u578b\u5b9a\u4e49\u200b\u4e86\u200b\u6bd4\u8f83\u200b\u8fd0\u7b97\u7b26\u200b<
\u200b\u4e0e\u200b>
\uff0c\u200b\u5219\u200b\u57fa\u4e8e\u200b\u6bd4\u8f83\u200b\u7684\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u964d\u200b\u81f3\u200b\\(\\mathcal O(\\log n)\\)\u3002
\u200b\u51cf\u800c\u6cbb\u200b\u4e4b\u200b\u662f\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u3002\u200b\u8003\u8651\u200b\u66f4\u200b\u4e00\u822c\u200b\u7684\u200b\u901a\u7528\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5728\u200b\\(\\lambda \\cdot n (0\\leq \\lambda\\leq 1)\\)\u200b\u5904\u8bbe\u200b\u4e3a\u8f74\u70b9\u200b\u3002\u200b\u6bcf\u6b21\u200b\u6bd4\u8f83\u200b\u5f53\u524d\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7684\u200b\u8f74\u70b9\u200b\\(B\\)\u200b\u4e0e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\\(A\\)\u3002\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u5bf9\u8f74\u70b9\u200b\u7684\u200b\u6bd4\u8f83\u200b\u6709\u200b\u4e09\u79cd\u200b\u53ef\u80fd\u200b\u7684\u200b\u7ed3\u679c\u200b\uff0c\u200b\u5047\u8bbe\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u6309\u7167\u200b\u5347\u5e8f\u200b\u6392\u5e8f\u200b\uff0c\u200b\u5219\u200b\uff1a
- \\(A<B\\)\uff0c\u200b\u8868\u793a\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u53ea\u200b\u53ef\u80fd\u200b\u51fa\u73b0\u200b\u5728\u200b\u8f74\u70b9\u200b\u5de6\u4fa7\u200b\uff0c\u200b\u5c06\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7f29\u5c0f\u200b\u81f3\u200b\u5de6\u534a\u200b\u90e8\u5206\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u67e5\u627e\u200b\u8fc7\u7a0b\u200b\uff1b
- \\(A=B\\)\uff0c\u200b\u8868\u793a\u200b\u8f74\u70b9\u200b\u5904\u200b\u51fa\u73b0\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\uff0c\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200b\u4e2d\u70b9\u200b\u7684\u200b\u4e0b\u6807\u200b\u5373\u53ef\u200b\uff1b
- \\(B<A\\)\uff0c\u200b\u8868\u793a\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u53ea\u200b\u53ef\u80fd\u200b\u51fa\u73b0\u200b\u5728\u200b\u8f74\u70b9\u200b\u53f3\u4fa7\u200b\uff0c\u200b\u5c06\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7f29\u5c0f\u200b\u81f3\u200b\u53f3\u534a\u200b\u90e8\u5206\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u67e5\u627e\u200b\u8fc7\u7a0b\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\uff0c\u200b\u8f74\u70b9\u200b\u4e3a\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7684\u200b\u4e2d\u70b9\u200b\uff0c\u200b\u5373\u200b\\(\\lambda = 0.5\\)\u3002
1234567891011
\u200b\u4f46\u200b\u8be5\u200b\u7248\u672c\u200b\u7684\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u6709\u200b\u591a\u79cd\u200b\u610f\u5916\u200b\u60c5\u5f62\u200b\uff0c\u200b\u5982\u200b\uff1a
- \u200b\u5411\u91cf\u200b\u4e2d\u200b\u627e\u200b\u4e0d\u5230\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\uff1b
- \u200b\u5411\u91cf\u200b\u4e2d\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u5b58\u5728\u200b\u591a\u4e2a\u200b\u3002
\u200b\u6b64\u65f6\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u7684\u200b\u7ed3\u679c\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u552f\u4e00\u200b\u3002\u200b\u7ea6\u5b9a\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7b97\u6cd5\u200b\u8fd4\u56de\u200b\u4e0d\u200b\u5927\u4e8e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002
\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u901a\u8fc7\u200b\u5c3d\u53ef\u80fd\u51cf\u5c11\u200b\u9012\u5f52\u200b\u6df1\u5ea6\u200b\u7684\u200b\u65b9\u5f0f\u200b\u51cf\u5c11\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\uff0c\u200b\u7531\u6b64\u200b\uff0c\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u9012\u5f52\u200b\u7684\u200b\u4e0d\u540c\u200b\u5206\u652f\u200b\u5e94\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u671f\u671b\u200b\u65f6\u95f4\u200b\u6d88\u8017\u200b\uff08\u200b\u5373\u200b\u8f6c\u5411\u200b\u6210\u672c\u200b\uff09\u3002\u200b\u6b64\u5904\u200b\u7684\u200b\u201c\u200b\u4e8c\u5206\u200b\u201d\u200b\u53ea\u662f\u200b\u5728\u200b\u6570\u7ec4\u200b\u533a\u95f4\u200b\u7684\u200b\u610f\u4e49\u200b\u4e0a\u200b\u4e8c\u7b49\u200b\u5206\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u8bed\u53e5\u200b\uff1a
if (A > B)\n // statement\nelse if (A < B)\n // statement\nelse\n // statement\n
\u200b\u5de6\u53f3\u4e24\u4e2a\u200b\u8df3\u8f6c\u200b\u4f4d\u4e8e\u200b\u4e0d\u540c\u200b\u7684\u200b\u5206\u652f\u200b\uff0c\u200b\u9700\u8981\u200b\u8fdb\u884c\u200b\u6bd4\u8f83\u200b\u7684\u200b\u6b21\u6570\u200b\u4e0d\u540c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u65f6\u95f4\u200b\u5728\u200b\u4e25\u683c\u200b\u610f\u4e49\u200b\u4e0a\u200b\u662f\u200b\u4e0d\u540c\u200b\u7684\u200b\u3002\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u6539\u53d8\u200b\u8f74\u70b9\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u5c06\u200b\u540c\u4e00\u200b\u9012\u5f52\u200b\u6df1\u5ea6\u200b\u4e0b\u200b\u6bd4\u8f83\u200b\u7684\u200b\u671f\u671b\u200b\u6b21\u6570\u200b\u8c03\u6574\u200b\u4e3a\u200b\u76f8\u540c\u200b\uff0c\u200b\u4ece\u800c\u200b\u964d\u4f4e\u200b\u5e73\u5747\u200b\u67e5\u627e\u200b\u957f\u5ea6\u200b\uff0c\u200b\u5728\u200b\u5e38\u200b\u7cfb\u6570\u200b\u7a0b\u5ea6\u200b\u4e0a\u200b\u5bf9\u200b\u7b97\u6cd5\u200b\u8fdb\u884c\u200b\u4f18\u5316\u200b\u3002
+1+2n\u03bbn(1 -\u03bb)\u00b7n
\u200b\u8bbe\u200b\u7b97\u6cd5\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\alpha(\\lambda) \\log n\\)\uff0c\u200b\u5219\u200b\uff1a
- \u200b\u5de6\u4fa7\u200b\u5b50\u200b\u95ee\u9898\u200b\u6d88\u8017\u200b\u7684\u200b\u65f6\u95f4\u200b\u7b49\u4e8e\u200b\u5224\u65ad\u200b\u6d88\u8017\u200b\u7684\u200b\u65f6\u95f4\u200b\u53ca\u200b\u89e3\u51b3\u200b\u5b50\u200b\u95ee\u9898\u200b\u6d88\u8017\u200b\u7684\u200b\u65f6\u95f4\u200b\uff0c\u200b\u5373\u200b\uff1a\\(\\lambda (1 + \\alpha(\\lambda) \\log (\\lambda n))\\)
- \u200b\u540c\u7406\u200b\uff0c\u200b\u53f3\u4fa7\u200b\u5b50\u200b\u95ee\u9898\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\uff1a\\((1 - \\lambda)(2+\\alpha(\\lambda)\\log((1-\\lambda)n))\\)
\u200b\u5f97\u200b\\(\\alpha(\\lambda) = \\frac{\\ln 2(\\lambda - 2)}{\\lambda \\cdot\\ln\\lambda+(1-\\lambda)\\cdot\\ln(1-\\lambda)}\\)
\u200b\u5f53\u200b\\(\\lambda=\\frac{\\sqrt 5-1}{2}\\approx 0.618\\)\u200b\u65f6\u200b\uff0c\\(\\alpha(\\lambda)\\)\u200b\u53d6\u200b\u6700\u5c0f\u503c\u200b\u3002
\u200b\u6d88\u9664\u200b\u4e0d\u200b\u5bf9\u79f0\u200b\u7684\u200b\u53e6\u200b\u4e00\u79cd\u200b\u65b9\u5f0f\u200b\u662f\u200b\u5c06\u200b\u4e09\u79cd\u200b\u6bd4\u8f83\u200b\u7ed3\u679c\u200b\u53d8\u4e3a\u200b\u4e24\u79cd\u200b\uff0c\u200b\u4ece\u800c\u200b\u4e00\u6b21\u200b\u6bd4\u8f83\u200b\u5373\u53ef\u200b\u8fdb\u884c\u200b\u5212\u5206\u200b\u3002\u200b\u8bb0\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u4e3a\u200b\\(A\\)\uff0c\u200b\u8f74\u70b9\u200b\u4e3a\u200b\\(B\\)\uff0c\u200b\u5219\u200b\uff1a
- \\(A<B\\)\uff1a\u200b\u5728\u200b\u8f74\u70b9\u200b\u5de6\u4fa7\u200b\u7684\u200b\u533a\u95f4\u200b\u4e2d\u200b\u67e5\u627e\u200b
- \\(A\\geq B\\)\uff1a\u200b\u5728\u200b\u8f74\u70b9\u200b\u53f3\u4fa7\u200b \uff08\u200b\u5305\u542b\u200b\u8f74\u70b9\u200b\uff09 \u200b\u7684\u200b\u533a\u95f4\u200b\u4e2d\u200b\u67e5\u627e\u200b
- \u200b\u5f53\u200b\u533a\u95f4\u200b\u957f\u5ea6\u200b\u7f29\u51cf\u200b\u4e3a\u200b1\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u67e5\u627e\u200b\u8fc7\u7a0b\u200b\u7ed3\u675f\u200b\u3002
\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u6700\u7ec8\u200b\u5b9e\u73b0\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b /******************************************************************************************\n* Data Structures in C++\n* ISBN: 7-302-33064-6 & 7-302-33065-3 & 7-302-29652-2 & 7-302-26883-3\n* Junhui DENG, deng@tsinghua.edu.cn\n* Computer Science & Technology, Tsinghua University\n* Copyright (c) 2003-2020. All rights reserved.\n******************************************************************************************/\n\n// \u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7b97\u6cd5\u200b\uff08\u200b\u7248\u672c\u200bC\uff09\uff1a\u200b\u5728\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u533a\u95f4\u200b[lo, hi)\u200b\u5185\u200b\u67e5\u627e\u200b\u5143\u7d20\u200be\uff0c0 <= lo <= hi <= _size\ntemplate <typename T> static Rank binSearch ( T* S, T const& e, Rank lo, Rank hi ) {\n while ( lo < hi ) { //\u200b\u6bcf\u6b65\u200b\u8fed\u4ee3\u200b\u4ec5\u200b\u9700\u200b\u505a\u200b\u4e00\u6b21\u200b\u6bd4\u8f83\u200b\u5224\u65ad\u200b\uff0c\u200b\u6709\u200b\u4e24\u4e2a\u200b\u5206\u652f\u200b\n Rank mi = ( lo + hi ) >> 1; //\u200b\u4ee5\u4e2d\u70b9\u200b\u4e3a\u8f74\u70b9\u200b\uff08\u200b\u533a\u95f4\u200b\u5bbd\u5ea6\u200b\u7684\u200b\u6298\u534a\u200b\uff0c\u200b\u7b49\u6548\u4e8e\u200b\u5bbd\u5ea6\u200b\u4e4b\u200b\u6570\u503c\u200b\u8868\u793a\u200b\u7684\u200b\u53f3\u79fb\u200b\uff09\n ( e < S[mi] ) ? hi = mi : lo = mi + 1; //\u200b\u7ecf\u200b\u6bd4\u8f83\u200b\u540e\u200b\u786e\u5b9a\u200b\u6df1\u5165\u200b[lo, mi)\u200b\u6216\u200b(mi, hi)\n } //\u200b\u6210\u529f\u200b\u67e5\u627e\u200b\u4e0d\u80fd\u200b\u63d0\u524d\u200b\u7ec8\u6b62\u200b\n return lo - 1; //\u200b\u5faa\u73af\u200b\u7ed3\u675f\u200b\u65f6\u200b\uff0clo\u200b\u4e3a\u200b\u5927\u4e8e\u200be\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u6700\u5c0f\u200b\u79e9\u200b\uff0c\u200b\u6545\u200blo - 1\u200b\u5373\u200b\u4e0d\u200b\u5927\u4e8e\u200be\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u6700\u5927\u200b\u79e9\u200b\n} //\u200b\u6709\u200b\u591a\u4e2a\u200b\u547d\u4e2d\u200b\u5143\u7d20\u200b\u65f6\u200b\uff0c\u200b\u603b\u80fd\u200b\u4fdd\u8bc1\u200b\u8fd4\u56de\u200b\u79e9\u200b\u6700\u5927\u8005\u200b\uff1b\u200b\u67e5\u627e\u200b\u5931\u8d25\u200b\u65f6\u200b\uff0c\u200b\u80fd\u591f\u200b\u8fd4\u56de\u200b\u5931\u8d25\u200b\u7684\u200b\u4f4d\u7f6e\u200b\n
Reference"},{"location":"coding/dsa/vector-and-list/#_10","title":"\u63d2\u503c\u200b\u67e5\u627e","text":"\u200b\u5047\u8bbe\u200b\u533a\u95f4\u200b\u5185\u200b\u5143\u7d20\u200b\u5206\u5e03\u200b\u7684\u200b\u89c4\u5f8b\u200b\u5df2\u77e5\u200b\uff0c\u200b\u6839\u636e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u5728\u200b\u8be5\u200b\u5206\u5e03\u200b\u4e2d\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u63a8\u65ad\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u5728\u200b\u533a\u95f4\u200b\u7684\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u4ee5\u6b64\u200b\u786e\u5b9a\u200b\u5212\u5206\u200b\u7684\u200b\u8f74\u70b9\u200b\u4f4d\u7f6e\u200b\u3002
\u200b\u5047\u8bbe\u200b\u533a\u95f4\u200b\u5185\u200b\u5143\u7d20\u200b\u670d\u4ece\u200b\u72ec\u7acb\u200b\u7684\u200b\u5e73\u5747\u200b\u5206\u5e03\u200b\uff0c\u200b\u5219\u200b\u6bcf\u6b21\u200b\u67e5\u627e\u200b\u5e73\u5747\u200b\u4f7f\u5f97\u200b\u533a\u95f4\u200b\u7f29\u51cf\u200b\u81f3\u200b\u539f\u6765\u200b\u7684\u200b\\(\\sqrt n\\)\uff0c\u200b\u5e73\u5747\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(\\log\\log n)\\)\u3002
"},{"location":"coding/dsa/vector-and-list/#_11","title":"\u53bb\u200b\u91cd","text":"\u200b\u5bf9\u4e8e\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\uff0c\u200b\u53bb\u200b\u91cd\u200b\u64cd\u4f5c\u200b\u53ef\u4ee5\u200b\u5728\u200b\u7ebf\u6027\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u5185\u200b\u5b8c\u6210\u200b\uff0c\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u53bb\u200b\u91cd\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n^2)\\)
"},{"location":"coding/dsa/vector-and-list/#_12","title":"\u65e0\u5e8f\u200b\u5411\u91cf","text":"\u200b\u4f7f\u7528\u200b\u6307\u9488\u200b\u6807\u8bb0\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u5df2\u7ecf\u200b\u5b8c\u6210\u200b\u53bb\u200b\u91cd\u200b\u7684\u200b\u90e8\u5206\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u672a\u53bb\u200b\u91cd\u200b\u90e8\u5206\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u5728\u200b\u672a\u200b\u53bb\u200b\u91cd\u200b\u90e8\u5206\u200b\u7684\u200b\u540e\u200b\u534a\u200b\u90e8\u5206\u200b\u4e2d\u200b\u67e5\u627e\u200b\u662f\u5426\u200b\u5b58\u5728\u200b\u76f8\u540c\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u5982\u679c\u200b\u627e\u5230\u200b\u76f8\u540c\u200b\u7684\u200b\u5143\u7d20\u200b\u5219\u200b\u5220\u9664\u200b\u3002\u200b\u5b8c\u6210\u200b\u67e5\u627e\u200b\u540e\u200b\u6307\u9488\u200b\u540e\u79fb\u200b\uff0c\u200b\u5c06\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u6807\u8bb0\u200b\u4e3a\u200b\u5df2\u7ecf\u200b\u5b8c\u6210\u200b\u53bb\u200b\u91cd\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_13","title":"\u6709\u5e8f\u200b\u5411\u91cf","text":"\u200b\u4f7f\u7528\u200b\u53cc\u200b\u6307\u9488\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u4e00\u4e2a\u200b\u6307\u9488\u200b\\(P\\)\u200b\u6807\u8bb0\u200b\u5df2\u53bb\u200b\u91cd\u200b\u90e8\u5206\u200b\u7684\u200b\u7ed3\u5c3e\u200b\uff0c\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u6307\u9488\u200b\\(Q\\)\u200b\u6807\u8bb0\u200b\u672a\u53bb\u200b\u91cd\u200b\u90e8\u5206\u200b\u7684\u200b\u5f00\u5934\u200b\uff0c\u200b\u521d\u59cb\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\\(P\\)\u200b\u4f4d\u4e8e\u200b\u5411\u91cf\u200b\u7b2c\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u4e14\u200b\\(P+1=Q\\)\u3002\u200b\u5f53\u200b\\(P\\)\u200b\u6307\u5411\u200b\u7684\u200b\u5bf9\u8c61\u200b\u4e0e\u200b\\(Q\\)\u200b\u6307\u5411\u200b\u7684\u200b\u5bf9\u8c61\u200b\u76f8\u540c\u200b\u65f6\u200b\uff0c\\(Q\\)\u200b\u9012\u589e\u200b\u800c\u200b\\(P\\)\u200b\u4e0d\u200b\u79fb\u52a8\u200b\uff0c\u200b\u5426\u5219\u200b\u5c06\u200b\\(Q\\)\u200b\u5904\u200b\u7684\u200b\u5143\u7d20\u200b\u590d\u5236\u5230\u200b\\(P+1\\)\u200b\u5904\u200b\uff0c\u200b\u4e24\u200b\u6307\u9488\u200b\u540c\u65f6\u200b\u9012\u589e\u200b\u3002
33355558815333555588153355555881535555588815355558881515
"},{"location":"coding/dsa/vector-and-list/#_14","title":"\u6392\u5e8f","text":"\u200b\u6b64\u5904\u200b\u4ecb\u7ecd\u200b\u5bf9\u200b\u5411\u91cf\u200b\u7684\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u4e0e\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\uff0c\u200b\u5176\u4ed6\u200b\u6392\u5e8f\u200b\u65b9\u5f0f\u200b\u5c06\u200b\u5728\u200b\u4ee5\u540e\u200b\u8fdb\u884c\u200b\u4ecb\u7ecd\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_15","title":"\u5192\u6ce1\u6392\u5e8f","text":"\u200b\u5bf9\u4e8e\u200b\u6570\u5217\u200b\\(\\{a_1, \\cdots, a_n\\}\\)\uff0c\u200b\u82e5\u200b\\(a_i>a_{i+1}\\)\uff0c\u200b\u79f0\u200b\\((a_i, a_{i+1})\\)\u200b\u4e3a\u200b\u4e00\u5bf9\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u3002\u200b\u5426\u5219\u200b\u79f0\u4e3a\u200b\u987a\u5e8f\u200b\u5bf9\u200b\u3002\u200b\u5219\u200b\u6709\u5e8f\u200b\u6570\u5217\u200b\u4e2d\u200b\u4e0d\u200b\u5b58\u5728\u200b\u9006\u5e8f\u200b\u5bf9\u200b\uff0c\u200b\u65e0\u5e8f\u200b\u6570\u5217\u200b\u4e2d\u200b\u81f3\u5c11\u200b\u6709\u200b\u4e00\u4e2a\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u3002\u200b\u5982\u679c\u200b\u80fd\u591f\u200b\u901a\u8fc7\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u7684\u200b\u4ea4\u6362\u200b\u4f7f\u5f97\u200b\u6570\u5217\u200b\u4e2d\u200b\u6240\u6709\u200b\u7684\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u8f6c\u4e3a\u200b\u987a\u5e8f\u200b\uff0c\u200b\u5373\u53ef\u200b\u5b8c\u6210\u200b\u5bf9\u200b\u6570\u7ec4\u200b\u7684\u200b\u6392\u5e8f\u200b\u3002\u200b\u8fd9\u662f\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u7b97\u6cd5\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u3002
- \u200b\u8bbe\u200b\u5411\u91cf\u200b\uff08\u200b\u6570\u7ec4\u200b\uff09\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(n\\)\uff0c\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u4e0b\u6807\u200b\u4e3a\u200b\\([0,n)\\)
- \u200b\u6bcf\u200b\u4e00\u6b21\u200b\u626b\u63cf\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u4e2d\u200b\u7684\u200b\u76f8\u90bb\u200b\u6570\u636e\u200b\uff0c\u200b\u82e5\u200b\u4e3a\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u5219\u200b\u4ea4\u6362\u200b\u4e4b\u200b
- \u200b\u626b\u63cf\u200b\u7ed3\u675f\u200b\u540e\u200b\uff0c\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u6700\u5927\u200b\u5143\u7d20\u200b\u79fb\u52a8\u200b\u5230\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u672b\u5c3e\u200b\uff0c\u200b\u5373\u200b\u4e3a\u200b\u5df2\u200b\u6392\u5e8f\u200b
- \u200b\u4e00\u8d9f\u200b\u626b\u63cf\u200b\u540e\u200b\u5c06\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u672b\u5c3e\u200b\u5143\u7d20\u200b\u5212\u5165\u200b\u5df2\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u3002
- \u200b\u91cd\u590d\u200b\u626b\u63cf\u200b\uff0c\u200b\u76f4\u5230\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u957f\u5ea6\u200b\u7f29\u5c0f\u200b\u4e3a\u200b0\uff0c\u200b\u5373\u200b\u5b8c\u6210\u200b\u6392\u5e8f\u200b\u3002
\u200b\u63d0\u524d\u200b\u7ec8\u6b62\u200b\uff1a\u200b\u82e5\u200b\u67d0\u6b21\u200b\u626b\u63cf\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u6ca1\u6709\u200b\u53d1\u751f\u200b\u4ea4\u6362\u200b\uff0c\u200b\u8bf4\u660e\u200b\u5f85\u200b\u6392\u5e8f\u200b\u533a\u6bb5\u200b\u5df2\u7ecf\u200b\u6709\u5e8f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u63d0\u524d\u7ed3\u675f\u200b\u7b97\u6cd5\u200b
\u200b\u7531\u4e8e\u200b\u63d0\u524d\u200b\u7ec8\u6b62\u200b\u7684\u200b\u5b58\u5728\u200b\uff0c\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u5728\u200b\u6700\u597d\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)\uff0c\u200b\u5bf9\u5e94\u200b\u8f93\u5165\u200b\u6570\u636e\u200b\u5df2\u7ecf\u200b\u6709\u5e8f\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\u200b\u5e73\u5747\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n^2)\\)\u3002
\u200b\u5728\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u4e2d\u200b\uff0c\u200b\u76f8\u7b49\u200b\u7684\u200b\u5143\u7d20\u200b\u4e0d\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u9006\u5e8f\u200b\u5bf9\u200b\u3002\u200b\u5982\u679c\u200b\u5c06\u200b\u76f8\u7b49\u200b\u7684\u200b\u5143\u7d20\u200b\u89c6\u4e3a\u200b\u9006\u5e8f\u200b\u5bf9\u200b\uff0c\u200b\u5192\u6ce1\u6392\u5e8f\u200b\u5c06\u200b\u5931\u53bb\u200b\u7a33\u5b9a\u6027\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_16","title":"\u5f52\u5e76\u200b\u6392\u5e8f","text":"\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\u91c7\u7528\u200b\u5206\u800c\u6cbb\u4e4b\u200b\u7684\u200b\u65b9\u6cd5\u200b\u5bf9\u200b\u6570\u7ec4\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\uff0c\u200b\u5176\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u9012\u5f52\u200b\u3002\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\u7684\u200b\u7b97\u6cd5\u200b\u8fc7\u7a0b\u200b\u4e3b\u8981\u200b\u5206\u4e3a\u200b\u4e09\u6b65\u200b\uff1a
- \u201c\u200b\u5206\u200b\u201d\uff1a\u200b\u5c06\u200b\u5411\u91cf\u200b\u5212\u5206\u200b\u4e3a\u200b\u4e24\u4e2a\u200b\uff08\u200b\u8fd1\u4f3c\u200b\uff09\u200b\u7b49\u957f\u200b\u7684\u200b\u90e8\u5206\u200b\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(1)\\)
- \u201c\u200b\u6cbb\u200b\u201d\uff1a\u200b\u5bf9\u200b\u4e24\u200b\u90e8\u5206\u200b\u5206\u522b\u200b\u8fdb\u884c\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\uff08\u200b\u5df2\u77e5\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(1\\)\u200b\u7684\u200b\u5411\u91cf\u200b\u662f\u200b\u6709\u5e8f\u200b\u5411\u91cf\u200b\uff09\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(2\\times T(n/2)\\)
- \u201c\u200b\u5408\u200b\u201d\uff1a\u200b\u5c06\u200b\u6392\u5e8f\u200b\u540e\u200b\u7684\u200b\u4e24\u200b\u90e8\u5206\u200b\u5408\u5e76\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u6709\u5e8f\u200b\u7684\u200b\u6574\u4f53\u200b\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)
- \u200b\u7b97\u6cd5\u200b\u6574\u4f53\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n\\log n)\\)\uff0c\u200b\u5373\u4f7f\u200b\u662f\u200b\u5728\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u6709\u5e8f\u200b\u6216\u200b\u63a5\u8fd1\u200b\u6709\u5e8f\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u3002\u200b\u5f52\u5e76\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)
\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b template <typename T> void Vector<T>::mergeSort( Rank lo, Rank hi ) {\n if ( hi - lo < 2 ) return; //\u200b\u5355\u200b\u5143\u7d20\u200b\u533a\u95f4\u200b\u81ea\u7136\u200b\u6709\u5e8f\u200b\uff0c\u200b\u5426\u5219\u200b...\n int mi = (lo + hi) >> 1; //\u200b\u4ee5\u4e2d\u70b9\u200b\u4e3a\u754c\u200b\n mergeSort( lo, mi ); //\u200b\u5bf9\u200b\u524d\u534a\u6bb5\u200b\u6392\u5e8f\u200b\n mergeSort( mi, hi ); //\u200b\u5bf9\u200b\u540e\u534a\u6bb5\u200b\u6392\u5e8f\u200b\n merge( lo, mi, hi ); //\u200b\u5f52\u5e76\u200b\n}\n
Reference \u200b\u5f52\u5e76\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u5373\u200b\u6309\u200b\u987a\u5e8f\u200b\u904d\u5386\u200b\u4e24\u200b\u90e8\u5206\u200b\uff0c\u200b\u5c06\u200b\u6700\u5c0f\u200b\u7684\u200b\u5199\u5165\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u3002
\u200b\u5b9e\u9645\u200b\u6267\u884c\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\uff0c\u200b\u53ea\u200b\u9700\u200b\u5c06\u200b\u6570\u7ec4\u200b\u7684\u200b\u524d\u534a\u90e8\u200b\u5206\u200b\u590d\u5236\u200b\u4e00\u4efd\u200b\uff0c\u200b\u7136\u540e\u200b\u8fdb\u884c\u200b\u5408\u5e76\u200b\u5373\u53ef\u200b\u3002
- \u200b\u82e5\u200b\u524d\u534a\u90e8\u200b\u5206\u200b\u63d0\u524d\u7ed3\u675f\u200b\uff0c\u200b\u7531\u4e8e\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u7684\u200b\u540e\u200b\u534a\u200b\u90e8\u5206\u200b\u4e0e\u200b\u539f\u200b\u6570\u7ec4\u200b\u7684\u200b\u540e\u200b\u534a\u200b\u90e8\u5206\u200b\u91cd\u5408\u200b\uff0c\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u81ea\u52a8\u200b\u6210\u4e3a\u200b\u6709\u5e8f\u200b
- \u200b\u82e5\u540e\u200b\u534a\u200b\u90e8\u5206\u200b\u63d0\u524d\u7ed3\u675f\u200b\uff0c\u200b\u5c06\u200b\u524d\u534a\u90e8\u200b\u5206\u200b\u5269\u4f59\u200b\u7684\u200b\u6570\u636e\u200b\u590d\u5236\u5230\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u540e\u200b\u534a\u200b\u90e8\u5206\u200b\u5bf9\u5e94\u200b\u4f4d\u7f6e\u200b\u5373\u53ef\u200b
\u200b\u5982\u4e0b\u200b\u56fe\u200b\uff1a
\u200b\u82e5\u200b\u5728\u200b\u5f52\u5e76\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u76f8\u540c\u200b\u5143\u7d20\u200b\uff0c\u200b\u5de6\u4fa7\u200b\u7684\u200b\u5143\u7d20\u200b\u4f18\u5148\u200b\u5f52\u5165\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u4fdd\u8bc1\u200b\u5f52\u5e76\u200b\u6392\u5e8f\u200b\u7684\u200b\u7a33\u5b9a\u6027\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_17","title":"\u4f4d\u200b\u56fe","text":"\u200b\u4f4d\u56fe\u200b\u662f\u200b\u5176\u4e2d\u200b\u5143\u7d20\u200b\u53ea\u80fd\u200b\u53d6\u200b0/1\u200b\u7684\u200b\u5411\u91cf\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u6709\u9650\u200b\u7684\u200b\u6574\u6570\u200b\u96c6\u5408\u200b\\(U\\)\uff0c\u200b\u4f4d\u200b\u56fe\u200b\u6784\u5efa\u200b\u4e86\u200b\\(U\\)\u200b\u7684\u200b\u5b50\u96c6\u200b\\(S\\)\uff0c\u200b\u5176\u4e2d\u200b\\(k\\in S\\)\u200b\u7b49\u4ef7\u200b\u4e8e\u4f4d\u200b\u56fe\u4e2d\u200b\u4e0b\u6807\u200b\u4e3a\u200b\\(k\\)\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u53d6\u503c\u200b\u4e3a\u200b\\(1\\)\u3002\u200b\u4f4d\u200b\u56fe\u200b\u63d0\u4f9b\u200b\u4e86\u200bset()
\u3001get()
\u3001clear()
\u200b\u4e09\u4e2a\u200b\u63a5\u53e3\u200b\uff0c\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u4e8e\u4f4d\u200b\u56fe\u200b\u7684\u200b\u5199\u5165\u200b\u3001\u200b\u67e5\u8be2\u200b\u3001\u200b\u6e05\u9664\u200b\u64cd\u4f5c\u200b\u3002
byte11010011
\u200b\u57fa\u4e8e\u200b\u4f4d\u200b\u8fd0\u7b97\u200b\u7684\u200b\u5b9e\u73b0\u200b\u5982\u4e0b\u200b\uff1a
\u200b\u4f4d\u200b\u56fe\u200b\u65b9\u6cd5\u200b\u5b9e\u73b0\u200b bool test( int k ) { return M[ k >> 3 ] & ( 0x80 >> (k & 0x07) ); }\nvoid set( int k ) { expand( k ); M[ k >> 3 ] |= ( 0x80 >> (k & 0x07) ); }\nvoid clear( int k ) { expand( k ); M[ k >> 3 ] &= ~( 0x80 >> (k & 0x07) ); }\n
Reference \u200b\u8bfb\u53d6\u200b\u5b57\u8282\u200b\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u4f4d\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b&
\u200b\u8fd0\u7b97\u7b26\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u5411\u200b\u5b57\u8282\u200b\u4e2d\u200b\u8bbe\u7f6e\u200b\u67d0\u4e2a\u200b\u4f4d\u4e3a\u200b\\(1\\)\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b|=
\u200b\u8fd0\u7b97\u7b26\u200b\u5b9e\u73b0\u200b\u3002
\u200b\u4f4d\u56fe\u200b\u7684\u200b\u5e94\u7528\u200b\u573a\u666f\u200b\uff1a
- \u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u53bb\u200b\u91cd\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u501f\u52a9\u200b\u4f4d\u200b\u56fe\u200b\u53ef\u4ee5\u200b\u5728\u200b\\(O(n)\\)\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u5185\u200b\u5b8c\u6210\u200b\uff0c\u200b\u540c\u65f6\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u5b8c\u6210\u200b\u76f8\u5e94\u200b\u7684\u200b\u6392\u5e8f\u200b\u64cd\u4f5c\u200b\u3002
- \u200b\u8d28\u6570\u200b\u8ba1\u7b97\u200b\uff1aEratosthenes\u200b\u7b5b\u200b
"},{"location":"coding/dsa/vector-and-list/#_18","title":"\u5feb\u901f\u200b\u521d\u59cb\u5316","text":"\u200b\u5728\u200b\u4e25\u683c\u200b\u610f\u4e49\u200b\u4e0a\u200b\u8bb2\u200b\uff0c\u200b\u5373\u4f7f\u200b\u8c03\u7528\u200bmemset()
\u200b\u51fd\u6570\u200b\uff0c\u200b\u4f4d\u56fe\u200b\u7684\u200b\u521d\u59cb\u5316\u200b\uff08\u200b\u6e05\u7a7a\u200b\uff09\u200b\u4e5f\u200b\u9700\u8981\u200b\\(\\mathcal O(n)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u3002\u200b\u501f\u52a9\u200b\u6821\u9a8c\u200b\u73af\u200b\u7ed3\u6784\u200b\u53ef\u4ee5\u200b\u5c06\u4f4d\u200b\u56fe\u200b\u7684\u200b\u521d\u59cb\u5316\u200b\u590d\u6742\u5ea6\u200b\u7531\u200b\\(\\mathcal O(n)\\)\u200b\u63d0\u9ad8\u200b\u5230\u200b\\(\\mathcal O(1)\\)\uff08\u200b\u4f46\u200b\u76f8\u5e94\u200b\u5730\u200b\uff0c\u200b\u4f4d\u56fe\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u4f4d\u200b\u9700\u8981\u200b\u4e24\u4e2a\u200bint
\u200b\u7c7b\u578b\u200b\u5373\u200b64\u200b\u5b57\u8282\u200b\u8fdb\u884c\u200b\u5b58\u50a8\u200b\uff0c\u200b\u9020\u6210\u200b\u7a7a\u95f4\u200b\u7684\u200b\u5927\u91cf\u200b\u6d6a\u8d39\u200b\uff09\u3002
\u200b\u5c06\u4f4d\u200b\u56fe\u200b\u7684\u200b\u6570\u7ec4\u200b\u62c6\u200b\u5206\u4e3a\u200bA[]
\u3001B[]
\u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u7b2c\u200bk
\u200b\u4f4d\u200b\uff0c\u200b\u6ee1\u8db3\u200b\uff1a
\u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u6784\u6210\u200b\u4e86\u200b\u76f8\u4e92\u200b\u6821\u9a8c\u200b\u7684\u200b\u5173\u7cfb\u200b\uff0c\u200b\u6309\u7167\u200b\u4e0b\u6807\u200b\u67e5\u8be2\u200b\uff0c\u200b\u7b26\u5408\u200b\u6821\u9a8c\u200b\u6761\u4ef6\u200b\u7684\u200b\u4e0b\u6807\u200b\u5b58\u50a8\u200b\u7684\u200b\u4f4d\u4e3a\u200b1
\uff0c\u200b\u5426\u5219\u200b\u4e3a\u200b0
\u3002
0AB0112512234567
\u200b\u53cc\u200b\u6570\u7ec4\u200b\u6a21\u5f0f\u200b\u4e0b\u200b\uff0c\u200b\u6570\u7ec4\u200bB
\u200b\u4e3a\u200b\u7c7b\u4f3c\u200b\u4e8e\u6808\u200b\u7684\u200b\u7ed3\u6784\u200b\uff0c\u200b\u4ece\u200b\u5f00\u5934\u200b\u9010\u6e10\u200b\u5411\u200b\u540e\u200b\u5ef6\u4f38\u200b\uff0c\u200b\u7ef4\u62a4\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200btop
\u200b\u8bb0\u5f55\u200bB
\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u6570\u91cf\u200b\u3002\u200b\u6570\u7ec4\u200bA
\u200b\u968f\u673a\u200b\u8bbf\u95ee\u200b\u3002
set(k)
\uff1a\u200b\u5728\u200b\u6570\u7ec4\u200bB
\u200b\u4e2d\u200b\u8ffd\u52a0\u200b\u4e00\u4e2a\u200b\u503c\u4e3a\u200bk
\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u5728\u200bA[k]
\u200b\u4e2d\u200b\u5b58\u50a8\u200bB
\u200b\u4e2d\u200b\u5bf9\u5e94\u200b\u5143\u7d20\u200b\u7684\u200b\u4e0b\u6807\u200b\uff1b get(k)
\uff1a\u200b\u82e5\u200bB[A[k]] == k
\u200b\u4e14\u200bA[k]
\u200b\u5c0f\u4e8e\u200b\u6808\u9876\u200b\u4f4d\u7f6e\u200b\u5219\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5426\u5219\u200b\u4e3a\u200b\u5047\u200b\uff1b clear()
\uff1a\u200b\u6e05\u7a7a\u200b\u6570\u7ec4\u200bB
\uff0c\u200b\u5373\u5c06\u200btop
\u200b\u7f6e\u200b0
\u3002 remove(k)
\uff1a\u200b\u5148\u200b\u5c06\u200bA-B
\u200b\u6821\u9a8c\u200b\u73af\u4e2d\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u5bf9\u200b\uff08\u200b\u5bf9\u5e94\u200bB[top - 1]
\uff09\u200b\u590d\u5236\u5230\u200bB[A[k]]
\u200b\u7684\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u518d\u200btop--
\u200b\u5220\u9664\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u3002
\u201c\u200b\u6821\u9a8c\u200b\u73af\u200b\u201d\u200b\u4f4d\u56fe\u200b\u7684\u200b\u5b9e\u73b0\u200b\uff1a
\u200b\u4f4d\u200b\u56fe\u200b void set(int k)\n{\n A[k] = top;\n B[top++] = A[k];\n}\nint get(int k)\n{\n return B[A[k]] == k && A[k] < top;\n}\nvoid remove(int k)\n{\n A[B[--top]] = k;\n B[k] = B[top];\n}\nvoid clear(int k)\n{\n top = 0;\n}\n
"},{"location":"coding/dsa/vector-and-list/#_19","title":"\u5217\u8868","text":"\u200b\u5411\u91cf\u200b\u662f\u200b\u9759\u6001\u200b\u7684\u200b\u6570\u636e\u7ed3\u6784\u200b\uff0c\u200b\u4e00\u6b21\u200b\u53ea\u80fd\u200b\u5206\u914d\u200b\u56fa\u5b9a\u200b\u957f\u5ea6\u200b\u7684\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u5411\u91cf\u200b\u7684\u200b\u6269\u589e\u200b\u9700\u8981\u200b\u5206\u914d\u200b\u4e00\u5757\u200b\u65b0\u200b\u7684\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u7136\u540e\u200b\u5c06\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u590d\u5236\u5230\u200b\u65b0\u200b\u7684\u200b\u5411\u91cf\u200b\u4e2d\u200b\u3002\u200b\u800c\u200b\u5217\u8868\u200b\u4e0e\u200b\u4e4b\u200b\u4e0d\u540c\u200b\uff0c\u200b\u5217\u8868\u200b\u7684\u200b\u5143\u7d20\u200b\u53ef\u4ee5\u200b\u52a8\u6001\u5206\u914d\u200b\uff0c\u200b\u5217\u8868\u200b\u7684\u200b\u6269\u589e\u200b\u53ea\u200b\u9700\u8981\u200b\u5206\u914d\u200b\u6269\u589e\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u7a7a\u95f4\u200b\u5373\u53ef\u200b\u3002
\u200b\u5217\u8868\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u6392\u5217\u200b\u4e0e\u200b\u5217\u8868\u200b\u5143\u7d20\u200b\u5728\u200b\u5185\u5b58\u200b\u4e2d\u200b\u7684\u200b\u6392\u5217\u200b\u987a\u5e8f\u200b\u6ca1\u6709\u200b\u5fc5\u7136\u200b\u7684\u200b\u5173\u7cfb\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u5143\u7d20\u200b\u5728\u200b\u903b\u8f91\u200b\u4e0a\u200b\u5f62\u6210\u200b\u4e00\u4e2a\u200b\u5e8f\u5217\u200b\u3002\u200b\u5217\u8868\u200b\u7684\u200b\u5143\u7d20\u200b\u53c8\u79f0\u200b\u8282\u70b9\u200b\uff0c\u200b\u76f8\u90bb\u200b\u7684\u200b\u8282\u70b9\u200b\u4e92\u79f0\u200b\u524d\u9a71\u200b\u4e0e\u200b\u540e\u7ee7\u200b\u3002\u200b\u6ca1\u6709\u200b\u524d\u9a71\u200b\u7684\u200b\u8282\u70b9\u200b\u79f0\u4e3a\u200b\u9996\u200b\u8282\u70b9\u200b\uff0c\u200b\u6ca1\u6709\u200b\u540e\u7ee7\u200b\u7684\u200b\u8282\u70b9\u200b\u79f0\u4e3a\u200b\u5c3e\u200b\u8282\u70b9\u200b\u3002\u200b\u8282\u70b9\u200b\u9700\u8981\u200b\u989d\u5916\u200b\u7684\u200b\u7a7a\u95f4\u200b\u8bb0\u5f55\u200b\u76f8\u90bb\u200b\u8282\u70b9\u200b\u7684\u200b\u5730\u5740\u200b\u4ee5\u200b\u6784\u5efa\u200b\u903b\u8f91\u200b\u4e0a\u200b\u7684\u200b\u987a\u5e8f\u200b\u5173\u7cfb\u200b\u3002
\u200b\u8fd9\u79cd\u200b\u65b9\u6cd5\u200b\u7684\u200b\u7f3a\u70b9\u200b\u5728\u4e8e\u200b\u5217\u8868\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u4e0d\u80fd\u200b\u76f4\u63a5\u200b\u6309\u7167\u200b\u4e0b\u6807\u200b\u8fdb\u884c\u200b\u8bbf\u95ee\u200b\uff0c\u200b\u53ea\u80fd\u200b\u4ece\u200b\u5217\u8868\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u5f00\u59cb\u200b\uff0c\u200b\u4f9d\u5e8f\u200b\u8bbf\u95ee\u200b\u8282\u70b9\u200b\u76f4\u5230\u200b\u8bbf\u95ee\u200b\u5230\u200b\u5bf9\u5e94\u200b\u4e0b\u200b\u6807\u7684\u200b\u8282\u70b9\u200b\uff0c\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(n)\\)
"},{"location":"coding/dsa/vector-and-list/#_20","title":"\u8282\u70b9\u200b\u7c7b\u578b","text":"\u200b\u4e3a\u200b\u5b9e\u73b0\u200b\u5217\u8868\u200b\u7684\u200b\u5404\u9879\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u8282\u70b9\u200b\u7c7b\u578b\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200b\u4ee5\u4e0b\u200b\u63a5\u53e3\u200b\uff1a
- \u200b\u83b7\u53d6\u200b\u4e0e\u200b\u8bbe\u7f6e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u524d\u9a71\u200b
- \u200b\u83b7\u53d6\u200b\u4e0e\u200b\u8bbe\u7f6e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u540e\u7ee7\u200b
- \u200b\u83b7\u53d6\u200b\u4e0e\u200b\u8bbe\u7f6e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u53d6\u503c\u200b
- \u200b\u63d2\u5165\u200b\u524d\u9a71\u200b\u8282\u70b9\u200b
- \u200b\u63d2\u5165\u200b\u540e\u7ee7\u200b\u8282\u70b9\u200b
\u200b\u6ce8\u610f\u200b\uff1a \u200b\u53cc\u5411\u200b\u94fe\u8868\u200b\u5728\u200b\u5b9e\u73b0\u200b\u65f6\u6709\u200b\u6f5c\u5728\u200b\u7684\u200b\u6570\u636e\u200b\u4e0d\u200b\u4e00\u81f4\u200b\u7684\u200b\u98ce\u9669\u200b\u3002\uff08\u200b\u524d\u9a71\u200b\u8282\u70b9\u200b\u7684\u200b\u540e\u7ee7\u200b\u4e0d\u200b\u7b49\u4e8e\u200b\u540e\u7ee7\u200b\u8282\u70b9\u200b\u7684\u200b\u524d\u9a71\u200b\uff09
\u200b\u5982\u4e0b\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u7c7b\u200b\u7684\u200b\u793a\u4f8b\u200b\u63a5\u53e3\u200b\uff0c\u200b\u6ca1\u6709\u200b\u5305\u542b\u200b\u63a5\u53e3\u200b\u7684\u200b\u5177\u4f53\u200b\u5b9e\u73b0\u200b\u3002
\u200b\u5217\u8868\u200b\u8282\u70b9\u200b\u7c7b\u200b /******************************************************************************************\n * Data Structures in C++\n * ISBN: 7-302-33064-6 & 7-302-33065-3 & 7-302-29652-2 & 7-302-26883-3\n * Junhui DENG, deng@tsinghua.edu.cn\n * Computer Science & Technology, Tsinghua University\n * Copyright (c) 2003-2020. All rights reserved.\n ******************************************************************************************/\n\ntypedef int Rank; //\u200b\u79e9\u200b\n#define ListNodePosi(T) ListNode<T>* //\u200b\u5217\u8868\u200b\u8282\u70b9\u200b\u4f4d\u7f6e\u200b\n\ntemplate <typename T> struct ListNode { //\u200b\u5217\u8868\u200b\u8282\u70b9\u200b\u6a21\u677f\u200b\u7c7b\u200b\uff08\u200b\u4ee5\u200b\u53cc\u5411\u200b\u94fe\u8868\u200b\u5f62\u5f0f\u200b\u5b9e\u73b0\u200b\uff09\n// \u200b\u6210\u5458\u200b\n T data; ListNodePosi(T) pred; ListNodePosi(T) succ; //\u200b\u6570\u503c\u200b\u3001\u200b\u524d\u9a71\u200b\u3001\u200b\u540e\u7ee7\u200b\n// \u200b\u6784\u9020\u51fd\u6570\u200b\n ListNode() {} //\u200b\u9488\u5bf9\u200bheader\u200b\u548c\u200btrailer\u200b\u7684\u200b\u6784\u9020\u200b\n ListNode ( T e, ListNodePosi(T) p = NULL, ListNodePosi(T) s = NULL )\n : data ( e ), pred ( p ), succ ( s ) {} //\u200b\u9ed8\u8ba4\u200b\u6784\u9020\u200b\u5668\u200b\n// \u200b\u64cd\u4f5c\u200b\u63a5\u53e3\u200b\n ListNodePosi(T) insertAsPred ( T const& e ); //\u200b\u7d27\u9760\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u4e4b\u524d\u200b\u63d2\u5165\u200b\u65b0\u200b\u8282\u70b9\u200b\n ListNodePosi(T) insertAsSucc ( T const& e ); //\u200b\u7d27\u968f\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u4e4b\u540e\u200b\u63d2\u5165\u200b\u65b0\u200b\u8282\u70b9\u200b\n};\n
Reference"},{"location":"coding/dsa/vector-and-list/#_21","title":"\u63d2\u5165\u200b\u4e0e\u200b\u5220\u9664","text":"\u200b\u5411\u200b\u5217\u8868\u200b\u4e2d\u200b\u63d2\u5165\u200b\u6570\u636e\u200b\u9700\u8981\u200b\u5982\u4e0b\u200b\u8fc7\u7a0b\u200b\uff1a
- \u200b\u5b9a\u4f4d\u200b\u5230\u200b\u8282\u70b9\u200b
- \u200b\u5206\u914d\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u8282\u70b9\u200b
- \u200b\u66f4\u65b0\u200b\u8282\u70b9\u200b\u4e4b\u95f4\u200b\u7684\u200b\u6307\u9488\u200b\uff0c\u200b\u5c06\u200b\u65b0\u200b\u8282\u70b9\u200b\u4e0e\u200b\u5176\u4ed6\u200b\u8282\u70b9\u200b\u76f8\u8fde\u63a5\u200b
\u200b\u5220\u9664\u200b\u8fc7\u7a0b\u200b\u662f\u200b\u63d2\u5165\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u53cd\u5411\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u66f4\u65b0\u200b\u8282\u70b9\u200b\u4e4b\u95f4\u200b\u6307\u9488\u200b\uff0c\u200b\u5c06\u200b\u5220\u9664\u200b\u8282\u70b9\u200b\u6392\u9664\u200b\u5728\u5916\u200b\u5373\u53ef\u200b\u3002
"},{"location":"coding/dsa/vector-and-list/#_22","title":"\u67e5\u627e\u200b\u4e0e\u200b\u53bb\u200b\u91cd","text":"\u200b\u65e0\u5e8f\u200b\u5217\u8868\u200b\u7684\u200b\u67e5\u627e\u200b\u4e0e\u200b\u53bb\u200b\u91cd\u200b\u64cd\u4f5c\u200b\u4e0e\u200b\u65e0\u5e8f\u200b\u5411\u91cf\u200b\u7684\u200b\u67e5\u627e\u200b\u4e0e\u200b\u53bb\u200b\u91cd\u200b\u64cd\u4f5c\u200b\u7684\u200b\u57fa\u672c\u601d\u8def\u200b\u76f8\u540c\u200b\uff0c\u200b\u6b64\u5904\u200b\u4e0d\u518d\u200b\u8d58\u8ff0\u200b\u3002
\u200b\u6709\u200b\u5e8f\u5217\u8868\u200b\u7684\u200b\u67e5\u627e\u200b\u4e0d\u80fd\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u800c\u200b\u53ea\u80fd\u200b\u987a\u5e8f\u200b\u67e5\u627e\u200b\u3002
\u200b\u6709\u200b\u5e8f\u5217\u8868\u200b\u7684\u200b\u53bb\u200b\u91cd\u200b\uff1a\u200b\u53cd\u590d\u200b\u8003\u5bdf\u200b\u76f8\u90bb\u200b\u7684\u200b\u8282\u70b9\u200b\uff0c\u200b\u82e5\u200b\u8282\u70b9\u200b\u76f8\u540c\u200b\uff0c\u200b\u5219\u200b\u5220\u9664\u200b\u540e\u8fb9\u200b\u7684\u200b\u8282\u70b9\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u8003\u5bdf\u200b\uff0c\u200b\u5426\u5219\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u5411\u200b\u540e\u200b\u79fb\u52a8\u200b\uff0c\u200b\u91cd\u590d\u200b\u8003\u5bdf\u200b\u8fc7\u7a0b\u200b\u3002\u200b\u76f4\u5230\u200b\u5217\u8868\u200b\u5230\u8fbe\u200b\u7ed3\u5c3e\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u7ed3\u675f\u200b\u3002
"},{"location":"coding/leetcode/","title":"Leetcode \u200b\u9898\u76ee","text":"\u200b\u6309\u200b\u6807\u7b7e\u200b\u5206\u7c7b\u200b\u7684\u200b\u9898\u76ee\u200b\u5217\u8868\u200b\u53ef\u4ee5\u200b\u53c2\u89c1\u200b\u8fd9\u91cc\u200b
\u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 1. \u200b\u4e24\u6570\u200b\u4e4b\u200b\u548c\u200b 2. \u200b\u4e24\u200b\u6570\u200b\u76f8\u52a0\u200b 3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b 7. \u200b\u6574\u6570\u200b\u53cd\u8f6c\u200b 8. \u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u6574\u6570\u200b (atoi) 9. \u200b\u56de\u6587\u200b\u6570\u200b 11. \u200b\u76db\u200b\u6700\u591a\u6c34\u200b\u7684\u200b\u5bb9\u5668\u200b 13. \u200b\u7f57\u9a6c\u6570\u5b57\u200b\u8f6c\u200b\u6574\u6570\u200b 14. \u200b\u6700\u957f\u200b\u516c\u5171\u200b\u524d\u7f00\u200b 17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b 19. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u7684\u200b\u5012\u6570\u7b2c\u200b N \u200b\u4e2a\u200b\u7ed3\u70b9\u200b 20. \u200b\u6709\u6548\u200b\u7684\u200b\u62ec\u53f7\u200b 21. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u94fe\u8868\u200b 22. \u200b\u62ec\u53f7\u200b\u751f\u6210\u200b 23. \u200b\u5408\u5e76\u200bK\u200b\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868\u200b 24. \u200b\u4e24\u200b\u4e24\u200b\u4ea4\u6362\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b 25. K \u200b\u4e2a\u200b\u4e00\u7ec4\u200b\u7ffb\u8f6c\u200b\u94fe\u8868\u200b 26. \u200b\u5220\u9664\u200b\u6709\u5e8f\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u91cd\u590d\u200b\u9879\u200b 27. \u200b\u79fb\u9664\u200b\u5143\u7d20\u200b 28. \u200b\u5b9e\u73b0\u200b strStr() 35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b 36. \u200b\u6709\u6548\u200b\u7684\u200b\u6570\u72ec\u200b 37. \u200b\u89e3\u6570\u200b\u72ec\u200b 38. \u200b\u5916\u89c2\u200b\u6570\u5217\u200b 42. \u200b\u63a5\u200b\u96e8\u6c34\u200b 43. \u200b\u5b57\u7b26\u4e32\u200b\u76f8\u4e58\u200b 46. \u200b\u5168\u200b\u6392\u5217\u200b 48. \u200b\u65cb\u8f6c\u200b\u56fe\u50cf\u200b 50. Pow(x, n) 53. \u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c\u200b 55. \u200b\u8df3\u8dc3\u200b\u6e38\u620f\u200b 56. \u200b\u5408\u5e76\u200b\u533a\u95f4\u200b 59. \u200b\u87ba\u65cb\u200b\u77e9\u9635\u200b II 61. \u200b\u65cb\u8f6c\u200b\u94fe\u8868\u200b 62. \u200b\u4e0d\u540c\u200b\u8def\u5f84\u200b 64. \u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 66. \u200b\u52a0\u4e00\u200b 69. x \u200b\u7684\u200b\u5e73\u65b9\u6839\u200b 70. \u200b\u722c\u697c\u68af\u200b 73. \u200b\u77e9\u9635\u200b\u7f6e\u200b\u96f6\u200b 74. \u200b\u641c\u7d22\u200b\u4e8c\u7ef4\u200b\u77e9\u9635\u200b 75. \u200b\u989c\u8272\u200b\u5206\u7c7b\u200b 78. \u200b\u5b50\u96c6\u200b 79. \u200b\u5355\u8bcd\u200b\u641c\u7d22\u200b 87. \u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b 88. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u6570\u7ec4\u200b 90. \u200b\u5b50\u96c6\u200b II 92. \u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b II 98. \u200b\u9a8c\u8bc1\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b 101. \u200b\u5bf9\u79f0\u200b\u4e8c\u53c9\u6811\u200b 102. \u200b\u4e8c\u53c9\u6811\u200b\u7684\u200b\u5c42\u5e8f\u200b\u904d\u5386\u200b 115. \u200b\u4e0d\u540c\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b 118. \u200b\u6768\u8f89\u4e09\u89d2\u200b 119. \u200b\u6768\u8f89\u4e09\u89d2\u200b II 120. \u200b\u4e09\u89d2\u5f62\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 121. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b 122. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b II 125. \u200b\u9a8c\u8bc1\u200b\u56de\u6587\u200b\u4e32\u200b 136. \u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u7684\u200b\u6570\u5b57\u200b 150. \u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u6c42\u503c\u200b 155. \u200b\u6700\u5c0f\u200b\u6808\u200b 189. \u200b\u65cb\u8f6c\u200b\u6570\u7ec4\u200b 198. \u200b\u6253\u5bb6\u52ab\u820d\u200b 204. \u200b\u8ba1\u6570\u200b\u8d28\u6570\u200b 206. \u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b 217. \u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b 234. \u200b\u56de\u6587\u200b\u94fe\u8868\u200b 237. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b 242. \u200b\u6709\u6548\u200b\u7684\u200b\u5b57\u6bcd\u200b\u5f02\u4f4d\u200b\u8bcd\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570\u200b 341. \u200b\u6241\u5e73\u5316\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u8fed\u4ee3\u200b\u5668\u200b 344. \u200b\u53cd\u8f6c\u200b\u5b57\u7b26\u4e32\u200b 350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II 368. \u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b 377. \u200b\u7ec4\u5408\u200b\u603b\u548c\u200b \u2163 384. \u200b\u6253\u4e71\u200b\u6570\u7ec4\u200b 387. \u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u5b57\u7b26\u200b 403. \u200b\u9752\u86d9\u200b\u8fc7\u6cb3\u200b 433. \u200b\u6700\u5c0f\u200b\u57fa\u56e0\u200b\u53d8\u5316\u200b 488. \u200b\u7956\u739b\u200b\u6e38\u620f\u200b 509. \u200b\u6590\u6ce2\u200b\u90a3\u200b\u5951\u6570\u200b 779. \u200b\u7b2c\u200bK\u200b\u4e2a\u200b\u8bed\u6cd5\u200b\u7b26\u53f7\u200b 781. \u200b\u68ee\u6797\u200b\u4e2d\u200b\u7684\u200b\u5154\u5b50\u200b 917. \u200b\u4ec5\u4ec5\u200b\u53cd\u8f6c\u200b\u5b57\u6bcd\u200b 1006. \u200b\u7b28\u200b\u9636\u4e58\u200b 1011. \u200b\u5728\u200b D \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u5305\u88f9\u200b\u7684\u200b\u80fd\u529b\u200b 1283. \u200b\u4f7f\u200b\u7ed3\u679c\u200b\u4e0d\u200b\u8d85\u8fc7\u200b\u9608\u503c\u200b\u7684\u200b\u6700\u5c0f\u200b\u9664\u6570\u200b 1300. \u200b\u8f6c\u53d8\u200b\u6570\u7ec4\u200b\u540e\u200b\u6700\u200b\u63a5\u8fd1\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u6570\u7ec4\u200b\u548c\u200b 1603. \u200b\u8bbe\u8ba1\u200b\u505c\u8f66\u200b\u7cfb\u7edf\u200b 1835. \u200b\u6240\u6709\u200b\u6570\u5bf9\u200b\u6309\u4f4d\u200b\u4e0e\u200b\u7ed3\u679c\u200b\u7684\u200b\u5f02\u6216\u200b\u548c"},{"location":"coding/leetcode/1/","title":"1. \u200b\u4e24\u6570\u200b\u4e4b\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/1/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200bnums
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u503c\u200btarget
\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u5728\u200b\u8be5\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u627e\u51fa\u200b\u548c\u200b\u4e3a\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u90a3\u200b\u00a0\u200b\u4e24\u4e2a\u200b\u00a0\u200b\u6574\u6570\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u4ed6\u4eec\u200b\u7684\u200b\u6570\u7ec4\u200b\u4e0b\u6807\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u6bcf\u79cd\u200b\u8f93\u5165\u200b\u53ea\u4f1a\u200b\u5bf9\u5e94\u200b\u4e00\u4e2a\u200b\u7b54\u6848\u200b\u3002\u200b\u4f46\u662f\u200b\uff0c\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u540c\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u4e0d\u80fd\u200b\u4f7f\u7528\u200b\u4e24\u904d\u200b\u3002
\u200b\u793a\u4f8b\u200b:
\u200b\u7ed9\u5b9a\u200b nums = [2, 7, 11, 15], target = 9\n\n\u200b\u56e0\u4e3a\u200b nums[0] + nums[1] = 2 + 7 = 9\n\u200b\u6240\u4ee5\u200b\u8fd4\u56de\u200b [0, 1]\n
Reference
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/1/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a
\u200b\u5c06\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u5b58\u50a8\u200b\u5728\u200b\u54c8\u5e0c\u200b\u8868\u4e2d\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u5728\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u67e5\u627e\u200b\u76ee\u6807\u503c\u200b\u4e0e\u200b\u5f53\u524d\u200b\u503c\u4e4b\u5dee\u200b\u662f\u5426\u200b\u5728\u200b\u54c8\u5e0c\u200b\u8868\u4e2d\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\n#define MAX(a, b) (a > b ? a : b)\n#define MIN(a, b) (a < b ? a : b)\nstruct cell\n{\n int value;\n int flag;\n};\nint* twoSum(int* nums, int numsSize, int target, int* returnSize){\n *returnSize = 2;\n int i = 0, mapSize = numsSize * 2, cur, *ret = malloc(sizeof(int) * 2), targetval, j = 0;\n struct cell *hashMap = (struct cell *)memset(malloc(sizeof(struct cell) * mapSize), 0, sizeof(struct cell) * mapSize);\n for (i = 0; i < numsSize; i++)\n {\n cur = (nums[i] > 0 ? nums[i] : -nums[i]) % mapSize;\n while(hashMap[cur].flag != 0 && hashMap[cur].value != nums[i])\n {\n cur++;\n cur = cur == mapSize ? 0 : cur;\n }\n if (hashMap[cur].flag == 0)\n hashMap[cur].value = nums[i];\n hashMap[cur].flag++;\n }\n for (i = 0; i < numsSize; i++)\n {\n targetval = target - nums[i];\n cur = (targetval > 0 ? targetval : -targetval) % mapSize;\n while(hashMap[cur].flag != 0 && hashMap[cur].value != targetval)\n {\n cur++;\n cur = cur == mapSize ? 0 : cur;\n }\n if (hashMap[cur].value == targetval)\n {\n for (j = 0; j < numsSize; j++)\n if (nums[j] == targetval && j != i)\n break;\n if (j != numsSize)\n break;\n }\n }\n ret[0] = MIN(i, j);\n ret[1] = MAX(i, j);\n if (nums[i] + nums[j] == target)\n return ret;\n *returnSize = 0;\n return NULL;\n}\n
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/1006/","title":"1006. \u200b\u7b28\u200b\u9636\u4e58","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/1006/#_1","title":"\u9898\u76ee","text":"\u200b\u901a\u5e38\u200b\uff0c\u200b\u6b63\u6574\u6570\u200b n
\u200b\u7684\u200b\u9636\u4e58\u200b\u662f\u200b\u6240\u6709\u200b\u5c0f\u4e8e\u200b\u6216\u200b\u7b49\u4e8e\u200b n
\u200b\u7684\u200b\u6b63\u6574\u6570\u200b\u7684\u200b\u4e58\u79ef\u200b\u3002\u200b\u4f8b\u5982\u200b\uff0cfactorial(10) = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
\u3002
\u200b\u76f8\u53cd\u200b\uff0c\u200b\u6211\u4eec\u200b\u8bbe\u8ba1\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u7b28\u200b\u9636\u4e58\u200b clumsy
\uff1a\u200b\u5728\u200b\u6574\u6570\u200b\u7684\u200b\u9012\u51cf\u200b\u5e8f\u5217\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u4ee5\u200b\u4e00\u4e2a\u200b\u56fa\u5b9a\u200b\u987a\u5e8f\u200b\u7684\u200b\u64cd\u4f5c\u7b26\u200b\u5e8f\u5217\u200b\u6765\u200b\u4f9d\u6b21\u200b\u66ff\u6362\u200b\u539f\u6709\u200b\u7684\u200b\u4e58\u6cd5\u200b\u64cd\u4f5c\u7b26\u200b\uff1a\u200b\u4e58\u6cd5\u200b(*)\uff0c\u200b\u9664\u6cd5\u200b(/)\uff0c\u200b\u52a0\u6cd5\u200b(+)\u200b\u548c\u200b\u51cf\u6cd5\u200b(-)\u3002
\u200b\u4f8b\u5982\u200b\uff0cclumsy(10) = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1
\u3002\u200b\u7136\u800c\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u8fd0\u7b97\u200b\u4ecd\u7136\u200b\u4f7f\u7528\u200b\u901a\u5e38\u200b\u7684\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u200b\u987a\u5e8f\u200b\uff1a\u200b\u6211\u4eec\u200b\u5728\u200b\u4efb\u4f55\u200b\u52a0\u200b\u3001\u200b\u51cf\u200b\u6b65\u9aa4\u200b\u4e4b\u524d\u200b\u6267\u884c\u200b\u6240\u6709\u200b\u7684\u200b\u4e58\u6cd5\u200b\u548c\u200b\u9664\u6cd5\u200b\u6b65\u9aa4\u200b\uff0c\u200b\u5e76\u4e14\u200b\u6309\u200b\u4ece\u5de6\u5230\u53f3\u200b\u5904\u7406\u200b\u4e58\u6cd5\u200b\u548c\u200b\u9664\u6cd5\u200b\u6b65\u9aa4\u200b\u3002
\u200b\u53e6\u5916\u200b\uff0c\u200b\u6211\u4eec\u200b\u4f7f\u7528\u200b\u7684\u200b\u9664\u6cd5\u200b\u662f\u200b\u5730\u677f\u200b\u9664\u6cd5\u200b\uff08floor division\uff09\uff0c\u200b\u6240\u4ee5\u200b\u00a010 * 9 / 8
\u00a0\u200b\u7b49\u4e8e\u200b\u00a011
\u3002\u200b\u8fd9\u200b\u4fdd\u8bc1\u200b\u7ed3\u679c\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u3002
\u200b\u5b9e\u73b0\u200b\u4e0a\u9762\u200b\u5b9a\u4e49\u200b\u7684\u200b\u7b28\u200b\u51fd\u6570\u200b\uff1a\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b N
\uff0c\u200b\u5b83\u200b\u8fd4\u56de\u200b N
\u200b\u7684\u200b\u7b28\u200b\u9636\u4e58\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a4\n\u200b\u8f93\u51fa\u200b\uff1a7\n\u200b\u89e3\u91ca\u200b\uff1a7 = 4 * 3 / 2 + 1\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1a10\n\u200b\u8f93\u51fa\u200b\uff1a12\n\u200b\u89e3\u91ca\u200b\uff1a12 = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= N <= 10000
-2^31 <= answer <= 2^31 - 1
\uff08\u200b\u7b54\u6848\u200b\u4fdd\u8bc1\u200b\u7b26\u5408\u200b 32
\u200b\u4f4d\u200b\u6574\u6570\u200b\u3002\uff09
Reference
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/1006/#_2","title":"\u9898\u89e3","text":"\u200b\u5bf9\u200b\u8ba1\u7b97\u200b\u8fc7\u7a0b\u200b\u8fdb\u884c\u200b\u6a21\u62df\u200b\u5373\u53ef\u200b\uff1a
int clumsy(int N){\n int ret = 0, i = N;\n bool flag = true, minus = false;\n for (i = N; i > 0;)\n {\n if (flag)\n {\n if (i >= 3)\n ret += (minus ? -1 : 1) * i * (i - 1) / (i - 2);\n else if (i == 2)\n ret += (minus ? -1 : 1) * i * (i - 1);\n else if (i == 1)\n ret += (minus ? -1 : 1) * i;\n i -= 3;\n }\n else\n ret += i--;\n flag = !flag;\n minus = true;\n }\n return ret;\n}\n
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/101/","title":"101. \u200b\u5bf9\u79f0\u200b\u4e8c\u53c9\u6811","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/101/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u4e8c\u53c9\u6811\u200b\uff0c\u200b\u68c0\u67e5\u200b\u5b83\u200b\u662f\u5426\u662f\u200b\u955c\u50cf\u200b\u5bf9\u79f0\u200b\u7684\u200b\u3002
\u200b\u4f8b\u5982\u200b\uff0c\u200b\u4e8c\u53c9\u6811\u200b[1,2,2,3,4,4,3]
\u200b\u662f\u200b\u5bf9\u79f0\u200b\u7684\u200b\u3002
1\n / \\\n 2 2\n / \\ / \\\n3 4 4 3\n
\u200b\u4f46\u662f\u200b\u4e0b\u9762\u200b\u8fd9\u4e2a\u200b[1,2,2,null,3,null,3]
\u200b\u5219\u200b\u4e0d\u662f\u200b\u955c\u50cf\u200b\u5bf9\u79f0\u200b\u7684\u200b:
1\n / \\\n 2 2\n \\ \\\n 3 3\n
\u200b\u8fdb\u9636\u200b\uff1a
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u8fd0\u7528\u200b\u9012\u5f52\u200b\u548c\u200b\u8fed\u4ee3\u200b\u4e24\u79cd\u200b\u65b9\u6cd5\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\u5417\u200b\uff1f
Reference
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/101/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u9012\u5f52\u200b\u5224\u65ad\u200b\u4e24\u4e2a\u200b\u6839\u200b\u8282\u70b9\u200b\u662f\u5426\u200b\u6210\u200b\u955c\u50cf\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for a binary tree node.\n * struct TreeNode {\n * int val;\n * struct TreeNode *left;\n * struct TreeNode *right;\n * };\n */\nbool isMirrored(struct TreeNode *root1, struct TreeNode *root2)\n{\n if (!root1 || !root2)\n return root1 == root2;\n if (root1->val != root2->val)\n return false;\n return isMirrored(root1->left, root2->right) && isMirrored(root2->left, root1->right);\n}\n\nbool isSymmetric(struct TreeNode* root){\n if (root == NULL)\n return true;\n return isMirrored(root->left, root->right);\n}\n
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/1011/","title":"1011. \u200b\u5728\u200b D \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u5305\u88f9\u200b\u7684\u200b\u80fd\u529b","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1011/#_1","title":"\u9898\u76ee","text":"\u200b\u4f20\u9001\u5e26\u200b\u4e0a\u200b\u7684\u200b\u5305\u88f9\u200b\u5fc5\u987b\u200b\u5728\u200b D
\u200b\u5929\u5185\u200b\u4ece\u200b\u4e00\u4e2a\u200b\u6e2f\u53e3\u200b\u8fd0\u9001\u200b\u5230\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u6e2f\u53e3\u200b\u3002
\u200b\u4f20\u9001\u5e26\u200b\u4e0a\u200b\u7684\u200b\u7b2c\u200b i
\u00a0\u200b\u4e2a\u200b\u5305\u88f9\u200b\u7684\u200b\u91cd\u91cf\u200b\u4e3a\u200b\u00a0weights[i]
\u3002\u200b\u6bcf\u200b\u4e00\u5929\u200b\uff0c\u200b\u6211\u4eec\u200b\u90fd\u200b\u4f1a\u200b\u6309\u200b\u7ed9\u51fa\u200b\u91cd\u91cf\u200b\u7684\u200b\u987a\u5e8f\u200b\u5f80\u200b\u4f20\u9001\u5e26\u200b\u4e0a\u200b\u88c5\u8f7d\u200b\u5305\u88f9\u200b\u3002\u200b\u6211\u4eec\u200b\u88c5\u8f7d\u200b\u7684\u200b\u91cd\u91cf\u200b\u4e0d\u4f1a\u200b\u8d85\u8fc7\u200b\u8239\u200b\u7684\u200b\u6700\u5927\u200b\u8fd0\u8f7d\u200b\u91cd\u91cf\u200b\u3002
\u200b\u8fd4\u56de\u200b\u80fd\u200b\u5728\u200b D
\u200b\u5929\u5185\u200b\u5c06\u200b\u4f20\u9001\u5e26\u200b\u4e0a\u200b\u7684\u200b\u6240\u6709\u200b\u5305\u88f9\u200b\u9001\u8fbe\u200b\u7684\u200b\u8239\u200b\u7684\u200b\u6700\u4f4e\u200b\u8fd0\u8f7d\u200b\u80fd\u529b\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aweights = [1,2,3,4,5,6,7,8,9,10], D = 5\n\u200b\u8f93\u51fa\u200b\uff1a15\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u8239\u8236\u200b\u6700\u4f4e\u200b\u8f7d\u91cd\u200b 15 \u200b\u5c31\u200b\u80fd\u591f\u200b\u5728\u200b 5 \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u6240\u6709\u200b\u5305\u88f9\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a\n\u200b\u7b2c\u200b 1 \u200b\u5929\u200b\uff1a1, 2, 3, 4, 5\n\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\uff1a6, 7\n\u200b\u7b2c\u200b 3 \u200b\u5929\u200b\uff1a8\n\u200b\u7b2c\u200b 4 \u200b\u5929\u200b\uff1a9\n\u200b\u7b2c\u200b 5 \u200b\u5929\u200b\uff1a10\n\n\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u8d27\u7269\u200b\u5fc5\u987b\u200b\u6309\u7167\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u987a\u5e8f\u200b\u88c5\u8fd0\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4f7f\u7528\u200b\u8f7d\u91cd\u200b\u80fd\u529b\u200b\u4e3a\u200b 14 \u200b\u7684\u200b\u8239\u8236\u200b\u5e76\u200b\u5c06\u200b\u5305\u88c5\u200b\u5206\u6210\u200b (2, 3, 4, 5), (1, 6, 7), (8), (9), (10) \u200b\u662f\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u7684\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aweights = [3,2,2,4,1,4], D = 3\n\u200b\u8f93\u51fa\u200b\uff1a6\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u8239\u8236\u200b\u6700\u4f4e\u200b\u8f7d\u91cd\u200b 6 \u200b\u5c31\u200b\u80fd\u591f\u200b\u5728\u200b 3 \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u6240\u6709\u200b\u5305\u88f9\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a\n\u200b\u7b2c\u200b 1 \u200b\u5929\u200b\uff1a3, 2\n\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\uff1a2, 4\n\u200b\u7b2c\u200b 3 \u200b\u5929\u200b\uff1a1, 4\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1aweights = [1,2,3,1,1], D = 4\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u7b2c\u200b 1 \u200b\u5929\u200b\uff1a1\n\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\uff1a2\n\u200b\u7b2c\u200b 3 \u200b\u5929\u200b\uff1a3\n\u200b\u7b2c\u200b 4 \u200b\u5929\u200b\uff1a1, 1\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= D <= weights.length <= 50000
1 <= weights[i] <= 500
Reference
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1011/#_2","title":"\u9898\u89e3","text":"\u200b\u8bbe\u200b\u5217\u8868\u200b\u4e3a\u200b\\(A=\\{a_i\\}_n\\)\uff0c\u200b\u5219\u200b\u6700\u7ec8\u200b\u7ed3\u679c\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\([\\max_{i} \\{a_i\\}, \\sum_{i} a_i]\\)\u3002\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u5728\u200b\u533a\u95f4\u200b\u4e2d\u200b\u67e5\u627e\u200b\u80fd\u591f\u200b\u6ee1\u8db3\u200b\u5728\u200b\\(D\\)\u200b\u5929\u200b\u5185\u200b\u8fd0\u8f93\u200b\u5168\u90e8\u200b\u5305\u88f9\u200b\u7684\u200b\u6700\u5c0f\u200b\u8f7d\u91cd\u200b\u3002
\u200b\u6709\u5173\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u8be6\u7ec6\u200b\u8ba8\u8bba\u200b\uff0c\u200b\u8bf7\u200b\u53c2\u89c1\u200b35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b
#define MAX(x, y) ((x) > (y) ? (x) : (y))\n\nbool verify(int *weights, int weightsSize, int D, int limit)\n{\n int i = 0, ub = limit;\n for (i = 0; i < weightsSize; i++)\n {\n if (weights[i] > ub)\n {\n D--;\n ub = limit;\n }\n ub -= weights[i];\n if (D <= 0)\n return false;\n }\n return true;\n}\n\nint bSearch(int *weights, int weightsSize, int D, int lo, int hi)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (verify(weights, weightsSize, D, mid))\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo;\n}\n\nint shipWithinDays(int* weights, int weightsSize, int D) {\n int i = 0, sum = 0, max = 0;\n printf(\"%d\", verify(weights, weightsSize, D, 6));\n for (i = 0; i < weightsSize; i++)\n {\n sum += weights[i];\n max = MAX(max, weights[i]);\n }\n return bSearch(weights, weightsSize, D, max, sum);\n}\n
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/102/","title":"102. \u200b\u4e8c\u53c9\u6811\u200b\u7684\u200b\u5c42\u5e8f\u200b\u904d\u5386","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6811","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/102/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u4e8c\u53c9\u6811\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8fd4\u56de\u200b\u5176\u200b\u6309\u200b \u200b\u5c42\u5e8f\u200b\u904d\u5386\u200b \u200b\u5f97\u5230\u200b\u7684\u200b\u8282\u70b9\u200b\u503c\u200b\u3002 \uff08\u200b\u5373\u200b\u9010\u5c42\u200b\u5730\u200b\uff0c\u200b\u4ece\u5de6\u5230\u53f3\u200b\u8bbf\u95ee\u200b\u6240\u6709\u200b\u8282\u70b9\u200b\uff09\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u4e8c\u53c9\u6811\u200b\uff1a[3,9,20,null,null,15,7]
,
3\n / \\\n 9 20\n / \\\n 15 7\n
\u200b\u8fd4\u56de\u200b\u5176\u200b\u5c42\u6b21\u200b\u904d\u5386\u200b\u7ed3\u679c\u200b\uff1a
[\n [3],\n [9,20],\n [15,7]\n]\n
Reference
","tags":["\u6811","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/102/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u7b2c\u4e00\u5c42\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u5373\u6839\u200b\u8282\u70b9\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u518d\u5c42\u5e8f\u200b\u904d\u5386\u200b\u5de6\u5b50\u200b\u6811\u200b\u548c\u200b\u53f3\u5b50\u200b\u6811\u200b\uff0c\u200b\u5408\u5e76\u200b\u540c\u5c42\u200b\u7684\u200b\u7ed3\u679c\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for a binary tree node.\n * struct TreeNode {\n * int val;\n * struct TreeNode *left;\n * struct TreeNode *right;\n * };\n */\n/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\n#define MAX(x, y) (x > y ? x : y)\nint *merge(int *leftBranch, int leftSize, int *rightBranch, int rightSize, int *returnSize)\n{\n *returnSize = leftSize + rightSize;\n int *ret = (int *)malloc(sizeof(int) * (leftSize + rightSize));\n if (leftSize != 0)\n {\n memcpy(ret, leftBranch, sizeof(int) * leftSize);\n free(leftBranch);\n }\n if (rightSize != 0)\n {\n memcpy(ret + leftSize, rightBranch, sizeof(int) * rightSize);\n free(rightBranch);\n }\n return ret;\n}\nint** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){\n if (root == NULL)\n {\n *returnSize = 0;\n *returnColumnSizes = NULL;\n return NULL;\n }\n int leftBranchSize = 0, *leftColumnSizes = NULL, **leftBranch = levelOrder(root->left, &leftBranchSize, &leftColumnSizes),\n rightBranchSize = 0, *rightColumnSizes = NULL, **rightBranch = levelOrder(root->right, &rightBranchSize, &rightColumnSizes);\n *returnSize = 1 + MAX(leftBranchSize, rightBranchSize);\n int **ret = (int **)malloc(sizeof(int *) * *returnSize), *returnCols = (int *)malloc(sizeof(int) * *returnSize), i = 0;\n *returnColumnSizes = returnCols;\n *returnCols = 1;\n *ret = malloc(sizeof(int));\n **ret = root->val;\n for (i = 1; i < *returnSize; i++)\n {\n if (i <= leftBranchSize && i <= rightBranchSize)\n ret[i] = merge(leftBranch[i - 1], leftColumnSizes[i - 1], rightBranch[i - 1], rightColumnSizes[i - 1], returnCols + i);\n else if (i <= leftBranchSize)\n ret[i] = merge(leftBranch[i-1], leftColumnSizes[i-1], NULL, 0, returnCols + i);\n else if (i <= rightBranchSize)\n ret[i] = merge(NULL, 0, rightBranch[i-1], rightColumnSizes[i-1], returnCols + i);\n }\n free(leftBranch);\n free(rightBranch);\n free(leftColumnSizes);\n free(rightColumnSizes);\n return ret;\n}\n
","tags":["\u6811","\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/11/","title":"11. \u200b\u76db\u200b\u6700\u591a\u6c34\u200b\u7684\u200b\u5bb9\u5668","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/11/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b n
\u200b\u4e2a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b a_1\uff0ca_2\uff0c...\uff0ca_n
\uff0c\u200b\u6bcf\u4e2a\u200b\u6570\u200b\u4ee3\u8868\u200b\u5750\u6807\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u70b9\u200b\u00a0(i,\u00a0a_i)
\u3002\u200b\u5728\u200b\u5750\u6807\u200b\u5185\u200b\u753b\u200b n
\u200b\u6761\u200b\u5782\u76f4\u7ebf\u200b\uff0c\u200b\u5782\u76f4\u7ebf\u200b i
\u00a0\u200b\u7684\u200b\u4e24\u4e2a\u200b\u7aef\u70b9\u200b\u5206\u522b\u200b\u4e3a\u200b\u00a0(i,\u00a0a_i)
\u200b\u548c\u200b (i, 0)
\u3002\u200b\u627e\u51fa\u200b\u5176\u4e2d\u200b\u7684\u200b\u4e24\u6761\u7ebf\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u5b83\u4eec\u200b\u4e0e\u200b\u00a0x
\u00a0\u200b\u8f74\u200b\u5171\u540c\u200b\u6784\u6210\u200b\u7684\u200b\u5bb9\u5668\u200b\u53ef\u4ee5\u200b\u5bb9\u7eb3\u200b\u6700\u591a\u200b\u7684\u200b\u6c34\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u503e\u659c\u200b\u5bb9\u5668\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a[1,8,6,2,5,4,8,3,7]\n\u200b\u8f93\u51fa\u200b\uff1a49 \n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u56fe\u4e2d\u200b\u5782\u76f4\u7ebf\u200b\u4ee3\u8868\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b [1,8,6,2,5,4,8,3,7]\u3002\u200b\u5728\u200b\u6b64\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u5bb9\u5668\u200b\u80fd\u591f\u200b\u5bb9\u7eb3\u200b\u6c34\u200b\uff08\u200b\u8868\u793a\u200b\u4e3a\u200b\u84dd\u8272\u200b\u90e8\u5206\u200b\uff09\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u4e3a\u200b\u00a049\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aheight = [1,1]\n\u200b\u8f93\u51fa\u200b\uff1a1\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1aheight = [4,3,2,1,4]\n\u200b\u8f93\u51fa\u200b\uff1a16\n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1aheight = [1,2,1]\n\u200b\u8f93\u51fa\u200b\uff1a2\n
\u200b\u63d0\u793a\u200b\uff1a
n = height.length
- 2 <= n <= 3 * 104
- 0 <= height[i] <= 3 * 104
Reference
","tags":["\u6570\u5b66","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/11/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u53cc\u200b\u6307\u9488\u200b\u6cd5\u200b\uff0c\u200b\u4e24\u4e2a\u200b\u6307\u9488\u200b\u5206\u522b\u200b\u6307\u5411\u200b\u76db\u6c34\u200b\u533a\u57df\u200b\u7684\u200b\u8fb9\u754c\u200b\u3002\u200b\u6bcf\u6b21\u200b\u5faa\u73af\u200b\u5c06\u200b\u8f83\u200b\u4f4e\u200b\u7684\u200b\u8fb9\u754c\u200b\u5411\u200b\u4e2d\u95f4\u200b\u6536\u7f29\u200b\uff0c\u200b\u5e76\u200b\u5c1d\u8bd5\u200b\u66f4\u65b0\u200b\u6700\u5927\u200b\u7684\u200b\u76db\u6c34\u200b\u533a\u57df\u200b\u3002
#define MIN(x, y) (x < y ? x : y)\n#define MAX(x, y) (x > y ? x : y)\nint maxArea(int* height, int heightSize){\n int left = 0, right = heightSize - 1,\n ret = (right - left) * MIN(height[left], height[right]), cur;\n while (left < right)\n {\n if (height[left] < height[right])\n left++;\n else\n right--;\n cur = (right - left) * MIN(height[left], height[right]);\n ret = MAX(cur, ret);\n }\n return ret;\n}\n
","tags":["\u6570\u5b66","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/115/","title":"115. \u200b\u4e0d\u540c\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/115/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b s
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b t
\uff0c\u200b\u8ba1\u7b97\u200b\u5728\u200b s
\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b\u4e2d\u200b t
\u200b\u51fa\u73b0\u200b\u7684\u200b\u4e2a\u6570\u200b\u3002
\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u4e00\u4e2a\u200b \u200b\u5b50\u200b\u5e8f\u5217\u200b \u200b\u662f\u200b\u6307\u200b\uff0c\u200b\u901a\u8fc7\u200b\u5220\u9664\u200b\u4e00\u4e9b\u200b\uff08\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u5220\u9664\u200b\uff09\u200b\u5b57\u7b26\u200b\u4e14\u200b\u4e0d\u200b\u5e72\u6270\u200b\u5269\u4f59\u200b\u5b57\u7b26\u200b\u76f8\u5bf9\u200b\u4f4d\u7f6e\u200b\u6240\u200b\u7ec4\u6210\u200b\u7684\u200b\u65b0\u200b\u5b57\u7b26\u4e32\u200b\u3002\uff08\u200b\u4f8b\u5982\u200b\uff0c\"ACE\"
\u00a0\u200b\u662f\u200b\u00a0\"ABCDE\"
\u00a0\u200b\u7684\u200b\u4e00\u4e2a\u200b\u5b50\u200b\u5e8f\u5217\u200b\uff0c\u200b\u800c\u200b\u00a0\"AEC\"
\u00a0\u200b\u4e0d\u662f\u200b\uff09
\u200b\u9898\u76ee\u200b\u6570\u636e\u200b\u4fdd\u8bc1\u200b\u7b54\u6848\u200b\u7b26\u5408\u200b 32 \u200b\u4f4d\u200b\u5e26\u7b26\u53f7\u200b\u6574\u6570\u200b\u8303\u56f4\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"rabbbit\", t = \"rabbit\"\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u5982\u4e0b\u200b\u56fe\u200b\u6240\u793a\u200b, \u200b\u6709\u200b 3 \u200b\u79cd\u200b\u53ef\u4ee5\u200b\u4ece\u200b s \u200b\u4e2d\u200b\u5f97\u5230\u200b \"rabbit\" \u200b\u7684\u200b\u65b9\u6848\u200b\u3002\n(\u200b\u4e0a\u200b\u7bad\u5934\u200b\u7b26\u53f7\u200b ^ \u200b\u8868\u793a\u200b\u9009\u53d6\u200b\u7684\u200b\u5b57\u6bcd\u200b)\nrabbbit\n^^^^ ^^\nrabbbit\n^^ ^^^^\nrabbbit\n^^^ ^^^\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"babgbag\", t = \"bag\"\n\u200b\u8f93\u51fa\u200b\uff1a5\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u5982\u4e0b\u200b\u56fe\u200b\u6240\u793a\u200b, \u200b\u6709\u200b 5 \u200b\u79cd\u200b\u53ef\u4ee5\u200b\u4ece\u200b s \u200b\u4e2d\u200b\u5f97\u5230\u200b \"bag\" \u200b\u7684\u200b\u65b9\u6848\u200b\u3002 \n(\u200b\u4e0a\u200b\u7bad\u5934\u200b\u7b26\u53f7\u200b ^ \u200b\u8868\u793a\u200b\u9009\u53d6\u200b\u7684\u200b\u5b57\u6bcd\u200b)\nbabgbag\n^^ ^\nbabgbag\n^^ ^\nbabgbag\n^ ^^\nbabgbag\n ^ ^^\nbabgbag\n ^^^\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= s.length, t.length <= 1000
s
\u200b\u548c\u200b t
\u200b\u7531\u200b\u82f1\u6587\u5b57\u6bcd\u200b\u7ec4\u6210\u200b
Reference
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/115/#_2","title":"\u9898\u89e3","text":"\u200b\u89e3\u9898\u200b\u601d\u8def\u200b\uff1a\u200b\u8bbe\u200b\\(f(x, y)\\)\u200b\u4e3a\u200b\u5b57\u7b26\u4e32\u200b\\(x\\)\u200b\u4e2d\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u5b57\u7b26\u4e32\u200b\\(y\\)\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b\u3002\u200b\u5e76\u4e14\u200b\u4f7f\u7528\u200b\\(x + 1\\)\u200b\u8868\u793a\u200b\u5b57\u7b26\u4e32\u200b\\(x\\)\u200b\u4ece\u200b\u7b2c\u4e8c\u4e2a\u200b\u5b57\u7b26\u200b\u5f00\u59cb\u200b\u7684\u200b\u5b50\u4e32\u200b\u3002
\u200b\u5219\u200b\uff1a
- \u200b\u5f53\u200b\\(x, y\\)\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u4e0d\u200b\u540c\u65f6\u200b\uff0c\u200b\u6709\u200b\\(f(x, y) = f(x + 1, y)\\)
- \u200b\u5f53\u200b\\(x, y\\)\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u5339\u914d\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(f(x, y) = f(x + 1, y + 1) + f(x + 1, y)\\)
\u200b\u7279\u6b8a\u200b\u5730\u200b\uff0c\u200b\u5f53\u200b\\(y\\)\u200b\u4e3a\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u65f6\u200b\uff0c\u200b\u8bf4\u660e\u200b\u5b57\u7b26\u4e32\u200b\u5339\u914d\u200b\u7ed3\u675f\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u4e00\u4e2a\u200b\u5339\u914d\u200b\u6210\u529f\u200b\u7684\u200b\u5b50\u4e32\u200b\uff0c\u200b\u56e0\u6b64\u200b\\(f(x, \\varnothing) = 1\\)\u3002\u200b\u5f53\u200b\\(x\\)\u200b\u4e3a\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u4e14\u200b\\(y\\)\u200b\u4e0d\u4e3a\u200b\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u65f6\u200b\uff0c\u200b\u8bf4\u660e\u200b\u5b57\u7b26\u4e32\u200b\u5339\u914d\u200b\u5931\u8d25\u200b\uff0c\\(f(\\varnothing, y) = \\left\\{\\begin{aligned}&0 &y\\not = \\varnothing \\\\ & 1 &y=\\varnothing\\end{aligned}\\right .\\)\u3002
\u200b\u7531\u6b64\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u521d\u6b65\u200b\u5f97\u51fa\u200b\u9012\u5f52\u200b\u4ee3\u7801\u200b\uff1a
int numDistinct(char * s, char * t){\n if (!*t)\n return 1;\n if (!*s)\n return 0;\n int ret = 0;\n if (*s == *t)\n ret += numDistinct(s + 1, t + 1);\n ret += numDistinct(s + 1, t);\n return ret;\n}\n
\u200b\u5982\u200b\u4e0a\u200b\u4ee3\u7801\u200b\u4f1a\u200b\u9020\u6210\u200b\u8d85\u65f6\u200b\uff0c\u200b\u539f\u56e0\u200b\u662f\u200b\u9012\u5f52\u200b\u65f6\u200b\u51fa\u73b0\u200b\u4e86\u200b\u5206\u652f\u200b\u5bfc\u81f4\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(2^n\\)\u3002\u200b\u4f7f\u7528\u200b\u6570\u7ec4\u200b\u5b58\u50a8\u200b\u5386\u53f2\u200b\u7ed3\u679c\u200b\u53ef\u4ee5\u200b\u907f\u514d\u200b\u9012\u5f52\u200b\u4ea7\u751f\u200b\u5206\u652f\u200b\uff0c\u200b\u4f18\u5316\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\uff1a
int cached(char *s, char *t, int x, int y, int **buffer) {\n int ret = 0;\n if (!*t)\n ret = 1;\n else if (!*s)\n ret = 0;\n else\n {\n if (buffer[x][y] >= 0)\n return buffer[x][y];\n if (*s == *t)\n ret += cached(s + 1, t + 1, x + 1, y + 1, buffer);\n ret += cached(s + 1, t, x + 1, y, buffer);\n buffer[x][y] = ret;\n }\n return ret;\n}\nint numDistinct(char * s, char * t){\n int x = strlen(s), y = strlen(t);\n int *_buffer = (int *)malloc(sizeof(int) * x * y);\n int **buffer = (int **)malloc(sizeof(int *) * x);\n for (int i = 0; i < x; i++)\n buffer[i] = _buffer + i * y;\n memset(_buffer, 0xff, sizeof(int) * x * y);\n return cached(s, t, 0, 0, buffer);\n}\n
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/118/","title":"118. \u200b\u6768\u8f89\u4e09\u89d2","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/118/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200bnumRows\uff0c\u200b\u751f\u6210\u200b\u6768\u8f89\u4e09\u89d2\u200b\u7684\u200b\u524d\u200bnumRows\u200b\u884c\u200b\u3002
\u200b\u5728\u200b\u6768\u8f89\u4e09\u89d2\u200b\u4e2d\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u6570\u662f\u200b\u5b83\u200b\u5de6\u4e0a\u65b9\u200b\u548c\u200b\u53f3\u4e0a\u65b9\u200b\u7684\u200b\u6570\u200b\u7684\u200b\u548c\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b: 5\n\u200b\u8f93\u51fa\u200b:\n[\n [1],\n [1,1],\n [1,2,1],\n [1,3,3,1],\n [1,4,6,4,1]\n]\n
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/118/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6839\u636e\u200b\u6768\u8f89\u4e09\u89d2\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u901a\u8fc7\u200b\u9012\u5f52\u200b\u9010\u884c\u200b\u6784\u9020\u200b\u51fa\u200b\u6bcf\u200b\u4e00\u884c\u200b\u7684\u200b\u503c\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\nint **generate(int numRows, int *returnSize, int **returnColumnSizes)\n{\n *returnSize = numRows;\n if (numRows == 0)\n return NULL;\n if (numRows == 1)\n {\n *returnColumnSizes = (int *)malloc(sizeof(int));\n **returnColumnSizes = 1;\n int **ret = (int **)malloc(sizeof(int *));\n *ret = (int *)malloc(sizeof(int));\n **ret = 1;\n return ret;\n }\n int retSize = 0,\n *oldRetColSizes = NULL,\n **rec = generate(numRows - 1, &retSize, &oldRetColSizes), \n i = 0;\n **ret = (int **)memcpy(malloc(sizeof(int *) * numRows), rec, (numRows - 1) * sizeof(int *));\n *newRetColSizes = memcpy((int *)malloc(sizeof(int) * numRows), oldRetColSizes, (numRows - 1) * sizeof(int));\n *tempArray = (int *)malloc(sizeof(int) * numRows);\n\n free(oldRetColSizes);\n free(rec);\n\n newRetColSizes[numRows - 1] = numRows;\n for (i = 1; i < numRows - 1; i++)\n tempArray[i] = *(ret[numRows - 2] + i) + *(ret[numRows - 2] + i - 1);\n tempArray[0] = 1;\n tempArray[numRows - 1] = 1;\n ret[numRows - 1] = tempArray;\n\n *returnColumnSizes = newRetColSizes;\n return ret;\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/119/","title":"119. \u200b\u6768\u8f89\u4e09\u89d2\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/119/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u975e\u8d1f\u200b\u7d22\u5f15\u200b\\(k\\)\uff0c\u200b\u5176\u4e2d\u200b\\(k\\leq33\\)\uff0c\u200b\u8fd4\u56de\u200b\u6768\u8f89\u4e09\u89d2\u200b\u7684\u200b\u7b2c\u200b\\(k\\) \u200b\u884c\u200b\u3002
\u200b\u5728\u200b\u6768\u8f89\u4e09\u89d2\u200b\u4e2d\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u6570\u662f\u200b\u5b83\u200b\u5de6\u4e0a\u65b9\u200b\u548c\u200b\u53f3\u4e0a\u65b9\u200b\u7684\u200b\u6570\u200b\u7684\u200b\u548c\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b: 3\n\u200b\u8f93\u51fa\u200b: [1,3,3,1]\n
\u200b\u8fdb\u9636\u200b\uff1a \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u4f18\u5316\u200b\u4f60\u200b\u7684\u200b\u7b97\u6cd5\u200b\u5230\u200b\\(O(k)\\)\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u5417\u200b\uff1f
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/119/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5f53\u524d\u200b\u884c\u200b\u7684\u200b\u7ed3\u679c\u200b\u4ec5\u200b\u4f9d\u8d56\u4e8e\u200b\u4e0a\u200b\u4e00\u884c\u200b\u7684\u200b\u7ed3\u679c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\nvoid recur(int rowIndex, int *Filling)\n{\n if (rowIndex <= 1)\n return;\n recur(rowIndex - 1, Filling);\n for (int i = rowIndex - 1; i > 0; i--)\n Filling[i] += Filling[i - 1];\n}\n\nint* getRow(int rowIndex, int* returnSize){\n *returnSize = rowIndex + 1;\n int *ret = (int *)memset(malloc(sizeof(int) * *returnSize), 0, sizeof(int) * *returnSize);\n ret[0] = 1;\n recur(*returnSize, ret);\n return ret;\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/120/","title":"120. \u200b\u4e09\u89d2\u5f62\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/120/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u4e09\u89d2\u5f62\u200b\uff0c\u200b\u627e\u51fa\u200b\u81ea\u9876\u5411\u4e0b\u200b\u7684\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b\u3002\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u53ea\u80fd\u200b\u79fb\u52a8\u200b\u5230\u200b\u4e0b\u200b\u4e00\u884c\u200b\u4e2d\u200b\u76f8\u90bb\u200b\u7684\u200b\u7ed3\u70b9\u200b\u4e0a\u200b\u3002
\u200b\u76f8\u90bb\u200b\u7684\u200b\u7ed3\u70b9\u200b \u200b\u5728\u200b\u8fd9\u91cc\u200b\u6307\u200b\u7684\u200b\u662f\u200b \u200b\u4e0b\u6807\u200b
\u200b\u4e0e\u200b \u200b\u4e0a\u200b\u4e00\u5c42\u200b\u7ed3\u70b9\u200b\u4e0b\u6807\u200b
\u200b\u76f8\u540c\u200b\u6216\u8005\u200b\u7b49\u4e8e\u200b \u200b\u4e0a\u200b\u4e00\u5c42\u200b\u7ed3\u70b9\u200b\u4e0b\u6807\u200b + 1
\u200b\u7684\u200b\u4e24\u4e2a\u200b\u7ed3\u70b9\u200b\u3002
\u200b\u4f8b\u5982\u200b\uff0c\u200b\u7ed9\u5b9a\u200b\u4e09\u89d2\u5f62\u200b\uff1a
[\n [2],\n [3,4],\n [6,5,7],\n [4,1,8,3]\n]\n
\u200b\u81ea\u9876\u5411\u4e0b\u200b\u7684\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b\u4e3a\u200b11
\uff08\u200b\u5373\u200b\uff0c2\u00a0+\u00a03\u00a0+\u00a05\u00a0+\u00a01\u00a0= 11\uff09\u3002
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u5982\u679c\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u53ea\u200b\u4f7f\u7528\u200b\\(O(n)\\)\u200b\u7684\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\uff08\\(n\\)\u200b\u4e3a\u200b\u4e09\u89d2\u5f62\u200b\u7684\u200b\u603b\u884c\u200b\u6570\u200b\uff09\u200b\u6765\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\uff0c\u200b\u90a3\u4e48\u200b\u4f60\u200b\u7684\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u5f88\u200b\u52a0\u5206\u200b\u3002
Reference
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/120/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\uff0c\u200b\u4f7f\u7528\u200b\u4e09\u89d2\u5f62\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u5b58\u653e\u200b\u6700\u5c0f\u200b\u7684\u200b\u548c\u200b\uff0c\u200b\u4ece\u200b\u4e0b\u200b\u5f80\u200b\u4e0a\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
#define MIN(x, y) (x < y ? x : y)\nint minimumTotal(int **triangle, int triangleSize, int *triangleColSize)\n{\n if (!triangleSize)\n return 0;\n int *dp1 = triangle[triangleSize - 1], i = 0, j = 0;\n for (i = triangleSize - 1; i > 0; i--)\n for (j = 0; j < triangleColSize[i - 1]; j++)\n dp1[j] = triangle[i - 1][j] + MIN(dp1[j], dp1[j + 1]);\n return dp1[0];\n}\n
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/121/","title":"121. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/121/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5b83\u200b\u7684\u200b\u7b2c\u200b\u00a0i \u200b\u4e2a\u200b\u5143\u7d20\u200b\u662f\u200b\u4e00\u652f\u200b\u7ed9\u5b9a\u200b\u80a1\u7968\u200b\u7b2c\u200b i \u200b\u5929\u200b\u7684\u200b\u4ef7\u683c\u200b\u3002
\u200b\u5982\u679c\u200b\u4f60\u200b\u6700\u200b\u591a\u53ea\u200b\u5141\u8bb8\u200b\u5b8c\u6210\u200b\u4e00\u7b14\u200b\u4ea4\u6613\u200b\uff08\u200b\u5373\u200b\u4e70\u5165\u200b\u548c\u200b\u5356\u51fa\u200b\u4e00\u652f\u200b\u80a1\u7968\u200b\u4e00\u6b21\u200b\uff09\uff0c\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u7b97\u6cd5\u200b\u6765\u200b\u8ba1\u7b97\u200b\u4f60\u200b\u6240\u80fd\u200b\u83b7\u53d6\u200b\u7684\u200b\u6700\u5927\u200b\u5229\u6da6\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u5728\u200b\u4e70\u5165\u200b\u80a1\u7968\u200b\u524d\u200b\u5356\u51fa\u200b\u80a1\u7968\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [7,1,5,3,6,4]\n\u200b\u8f93\u51fa\u200b: 5\n\u200b\u89e3\u91ca\u200b: \u200b\u5728\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 1\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u4e70\u5165\u200b\uff0c\u200b\u5728\u200b\u7b2c\u200b 5 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 6\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u5356\u51fa\u200b\uff0c\u200b\u6700\u5927\u200b\u5229\u6da6\u200b = 6-1 = 5 \u3002\n \u200b\u6ce8\u610f\u200b\u5229\u6da6\u200b\u4e0d\u80fd\u200b\u662f\u200b 7-1 = 6, \u200b\u56e0\u4e3a\u200b\u5356\u51fa\u200b\u4ef7\u683c\u200b\u9700\u8981\u200b\u5927\u4e8e\u200b\u4e70\u5165\u200b\u4ef7\u683c\u200b\uff1b\u200b\u540c\u65f6\u200b\uff0c\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u5728\u200b\u4e70\u5165\u200b\u524d\u200b\u5356\u51fa\u200b\u80a1\u7968\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: [7,6,4,3,1]\n\u200b\u8f93\u51fa\u200b: 0\n\u200b\u89e3\u91ca\u200b: \u200b\u5728\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\u4e0b\u200b, \u200b\u6ca1\u6709\u200b\u4ea4\u6613\u200b\u5b8c\u6210\u200b, \u200b\u6240\u4ee5\u200b\u6700\u5927\u200b\u5229\u6da6\u200b\u4e3a\u200b 0\u3002\n
Reference
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/121/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u627e\u51fa\u200b\u76f8\u5dee\u200b\u6700\u5927\u200b\u7684\u200b\u6ee1\u8db3\u200b\\(a_i < a_j\\)\u200b\u4e14\u200b\\(i < j\\)\u200b\u7684\u200b\u4e24\u4e2a\u200b\u6570\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int maxProfit(int* prices, int pricesSize){\n int max = 0, i = pricesSize - 1, value = 0, profit = 0;\n for (; i>=0; i--)\n {\n if (prices[i] > value)\n value = prices[i];\n else\n profit = value - prices[i];\n max = max > profit ? max : profit;\n }\n return max;\n}\n
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/122/","title":"122. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u8d2a\u5fc3\u7b97\u6cd5","\u6570\u7ec4"]},{"location":"coding/leetcode/122/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5b83\u200b\u7684\u200b\u7b2c\u200b\u00a0i \u200b\u4e2a\u200b\u5143\u7d20\u200b\u662f\u200b\u4e00\u652f\u200b\u7ed9\u5b9a\u200b\u80a1\u7968\u200b\u7b2c\u200b i \u200b\u5929\u200b\u7684\u200b\u4ef7\u683c\u200b\u3002
\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u7b97\u6cd5\u200b\u6765\u200b\u8ba1\u7b97\u200b\u4f60\u200b\u6240\u80fd\u200b\u83b7\u53d6\u200b\u7684\u200b\u6700\u5927\u200b\u5229\u6da6\u200b\u3002\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5c3d\u53ef\u80fd\u200b\u5730\u200b\u5b8c\u6210\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u4ea4\u6613\u200b\uff08\u200b\u591a\u6b21\u200b\u4e70\u5356\u200b\u4e00\u652f\u200b\u80a1\u7968\u200b\uff09\u3002
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u540c\u65f6\u200b\u53c2\u4e0e\u200b\u591a\u7b14\u200b\u4ea4\u6613\u200b\uff08\u200b\u4f60\u200b\u5fc5\u987b\u200b\u5728\u200b\u518d\u6b21\u200b\u8d2d\u4e70\u200b\u524d\u200b\u51fa\u552e\u200b\u6389\u200b\u4e4b\u524d\u200b\u7684\u200b\u80a1\u7968\u200b\uff09\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [7,1,5,3,6,4]\n\u200b\u8f93\u51fa\u200b: 7\n\u200b\u89e3\u91ca\u200b: \u200b\u5728\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 1\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u4e70\u5165\u200b\uff0c\u200b\u5728\u200b\u7b2c\u200b 3 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 5\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u5356\u51fa\u200b, \u200b\u8fd9\u7b14\u200b\u4ea4\u6613\u6240\u200b\u80fd\u200b\u83b7\u5f97\u200b\u5229\u6da6\u200b = 5-1 = 4 \u3002\n\u00a0 \u200b\u968f\u540e\u200b\uff0c\u200b\u5728\u200b\u7b2c\u200b 4 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 3\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u4e70\u5165\u200b\uff0c\u200b\u5728\u200b\u7b2c\u200b 5 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 6\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u5356\u51fa\u200b, \u200b\u8fd9\u7b14\u200b\u4ea4\u6613\u6240\u200b\u80fd\u200b\u83b7\u5f97\u200b\u5229\u6da6\u200b = 6-3 = 3 \u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: [1,2,3,4,5]\n\u200b\u8f93\u51fa\u200b: 4\n\u200b\u89e3\u91ca\u200b: \u200b\u5728\u200b\u7b2c\u200b 1 \u200b\u5929\u200b\uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 1\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u4e70\u5165\u200b\uff0c\u200b\u5728\u200b\u7b2c\u200b 5 \u200b\u5929\u200b \uff08\u200b\u80a1\u7968\u4ef7\u683c\u200b = 5\uff09\u200b\u7684\u200b\u65f6\u5019\u200b\u5356\u51fa\u200b, \u200b\u8fd9\u7b14\u200b\u4ea4\u6613\u6240\u200b\u80fd\u200b\u83b7\u5f97\u200b\u5229\u6da6\u200b = 5-1 = 4 \u3002\n\u00a0 \u200b\u6ce8\u610f\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u5728\u200b\u7b2c\u200b 1 \u200b\u5929\u200b\u548c\u200b\u7b2c\u200b 2 \u200b\u5929\u200b\u63a5\u8fde\u200b\u8d2d\u4e70\u200b\u80a1\u7968\u200b\uff0c\u200b\u4e4b\u540e\u200b\u518d\u200b\u5c06\u200b\u5b83\u4eec\u200b\u5356\u51fa\u200b\u3002\n\u00a0 \u200b\u56e0\u4e3a\u200b\u8fd9\u6837\u200b\u5c5e\u4e8e\u200b\u540c\u65f6\u200b\u53c2\u4e0e\u200b\u4e86\u200b\u591a\u7b14\u200b\u4ea4\u6613\u200b\uff0c\u200b\u4f60\u200b\u5fc5\u987b\u200b\u5728\u200b\u518d\u6b21\u200b\u8d2d\u4e70\u200b\u524d\u200b\u51fa\u552e\u200b\u6389\u200b\u4e4b\u524d\u200b\u7684\u200b\u80a1\u7968\u200b\u3002\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a
\u200b\u8f93\u5165\u200b: [7,6,4,3,1]\n\u200b\u8f93\u51fa\u200b: 0\n\u200b\u89e3\u91ca\u200b: \u200b\u5728\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\u4e0b\u200b, \u200b\u6ca1\u6709\u200b\u4ea4\u6613\u200b\u5b8c\u6210\u200b, \u200b\u6240\u4ee5\u200b\u6700\u5927\u200b\u5229\u6da6\u200b\u4e3a\u200b 0\u3002\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= prices.length <= 3 * 10 ^ 4
0 <= prices[i]\u00a0<= 10 ^ 4
Reference
","tags":["\u8d2a\u5fc3\u7b97\u6cd5","\u6570\u7ec4"]},{"location":"coding/leetcode/122/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a
- \u200b\u5f53\u200b\u6570\u7ec4\u200b\u957f\u5ea6\u200b\u4e3a\u200b1\u200b\u65f6\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u83b7\u53d6\u200b\u4efb\u4f55\u200b\u5229\u6da6\u200b\uff0c\u200b\u8fd4\u56de\u200b
0
\uff1b - \u200b\u4ece\u200b\u6570\u7ec4\u200b\u672b\u5c3e\u200b\u5f00\u59cb\u200b\u641c\u7d22\u200b\u7b2c\u4e00\u4e2a\u200b\u80fd\u200b\u76c8\u5229\u200b\u7684\u200b\u70b9\u200b\uff0c\u200b\u5219\u200b\u6700\u5927\u200b\u5229\u6da6\u200b\u4e3a\u200b\u672c\u6b21\u200b\u76c8\u5229\u200b\u4e0e\u200b\u4e4b\u524d\u200b\u6700\u5927\u200b\u76c8\u5229\u200b\u4e4b\u200b\u548c\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int maxProfit(int* prices, int pricesSize){\n if (pricesSize < 2)\n return 0;\n int *cur = prices + pricesSize - 1, currentVal = *cur, len = pricesSize;\n while(cur > prices)\n {\n if (*cur < *(cur - 1))\n break;\n len--;\n cur--;\n }\n return (currentVal - *cur) + maxProfit(prices, len - 1);\n}\n
","tags":["\u8d2a\u5fc3\u7b97\u6cd5","\u6570\u7ec4"]},{"location":"coding/leetcode/125/","title":"125. \u200b\u9a8c\u8bc1\u200b\u56de\u6587\u200b\u4e32","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/125/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u9a8c\u8bc1\u200b\u5b83\u200b\u662f\u5426\u662f\u200b\u56de\u6587\u200b\u4e32\u200b\uff0c\u200b\u53ea\u200b\u8003\u8651\u200b\u5b57\u6bcd\u200b\u548c\u200b\u6570\u5b57\u200b\u5b57\u7b26\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5ffd\u7565\u200b\u5b57\u6bcd\u200b\u7684\u200b\u5927\u5c0f\u5199\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a \u200b\u672c\u9898\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u5c06\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\u6709\u6548\u200b\u7684\u200b\u56de\u6587\u200b\u4e32\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: \"A man, a plan, a canal: Panama\"\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: \"race a car\"\n\u200b\u8f93\u51fa\u200b: false\n
Reference
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/125/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u53cc\u200b\u6307\u9488\u200b\u6cd5\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b\uff0c\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b\u5982\u4e0b\u200b\u7279\u6b8a\u200b\u60c5\u51b5\u200b
- \u200b\u9700\u8981\u200b\u5ffd\u7565\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b26\u53f7\u200b\u800c\u200b\u53ea\u200b\u8003\u8651\u200b\u5b57\u6bcd\u200b\u548c\u200b\u6570\u5b57\u200b
- \u200b\u5927\u5c0f\u5199\u200b\u7684\u200bASCII\u200b\u6570\u503c\u200b\u76f8\u5dee\u200b32\uff0c\u200b\u4f46\u200bASCII\u200b\u6570\u503c\u200b\u76f8\u5dee\u200b32\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u5927\u5c0f\u5199\u200b\u5173\u7cfb\u200b\uff0c\u200b\u5982\u200b
'0'
(48)\u200b\u4e0e\u200b'P'
(80)
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
bool isText(char s)\n{\n return (s >= 'A' && s <= 'Z') || (s >= 'a' && s <= 'z') || (s >= '0' && s <= '9');\n}\nbool isSame(char s1, char s2)\n{\n return (s1 == s2) || (s2 >= 'A' && s1 - s2 == 32) || (s1 >= 'A' && s2 - s1 == 32);\n}\nbool isPalindrome(char * s){\n int len = strlen(s), head = 0, tail = len - 1;\n while (head < len && !isText(s[head]))\n head++;\n while (tail >= 0 && !isText(s[tail]))\n tail--;\n while(tail > head && head < len && tail >= 0)\n {\n if (!isSame(s[head], s[tail]))\n return false;\n head++;\n tail--;\n while (!isText(s[head]))\n head++;\n while (!isText(s[tail]))\n tail--;\n }\n return true;\n}\n
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/1283/","title":"1283. \u200b\u4f7f\u200b\u7ed3\u679c\u200b\u4e0d\u200b\u8d85\u8fc7\u200b\u9608\u503c\u200b\u7684\u200b\u6700\u5c0f\u200b\u9664\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1283/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u00a0nums
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\u00a0threshold
\u00a0\uff0c\u200b\u4f60\u200b\u9700\u8981\u200b\u9009\u62e9\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\u4f5c\u4e3a\u200b\u9664\u6570\u200b\uff0c\u200b\u7136\u540e\u200b\u5c06\u200b\u6570\u7ec4\u200b\u91cc\u200b\u6bcf\u4e2a\u200b\u6570\u90fd\u200b\u9664\u4ee5\u200b\u5b83\u200b\uff0c\u200b\u5e76\u200b\u5bf9\u200b\u9664\u6cd5\u200b\u7ed3\u679c\u200b\u6c42\u548c\u200b\u3002
\u200b\u8bf7\u200b\u4f60\u200b\u627e\u51fa\u200b\u80fd\u591f\u200b\u4f7f\u200b\u4e0a\u8ff0\u200b\u7ed3\u679c\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b\u9608\u503c\u200b\u00a0threshold
\u00a0\u200b\u7684\u200b\u9664\u6570\u200b\u4e2d\u200b \u200b\u6700\u5c0f\u200b \u200b\u7684\u200b\u90a3\u4e2a\u200b\u3002
\u200b\u6bcf\u4e2a\u200b\u6570\u200b\u9664\u4ee5\u200b\u9664\u6570\u200b\u540e\u200b\u90fd\u200b\u5411\u4e0a\u200b\u53d6\u6574\u200b\uff0c\u200b\u6bd4\u65b9\u8bf4\u200b 7/3 = 3 \uff0c 10/2 = 5 \u3002
\u200b\u9898\u76ee\u200b\u4fdd\u8bc1\u200b\u4e00\u5b9a\u200b\u6709\u89e3\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,5,9], threshold = 6\n\u200b\u8f93\u51fa\u200b\uff1a5\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5982\u679c\u200b\u9664\u6570\u200b\u4e3a\u200b 1 \uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u548c\u200b\u4e3a\u200b 17 \uff081+2+5+9\uff09\u3002\n\u200b\u5982\u679c\u200b\u9664\u6570\u200b\u4e3a\u200b 4 \uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u548c\u200b\u4e3a\u200b 7 (1+1+2+3) \u3002\u200b\u5982\u679c\u200b\u9664\u6570\u200b\u4e3a\u200b 5 \uff0c\u200b\u548c\u200b\u4e3a\u200b 5 (1+1+1+2)\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [2,3,5,7,11], threshold = 11\n\u200b\u8f93\u51fa\u200b\uff1a3\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [19], threshold = 5\n\u200b\u8f93\u51fa\u200b\uff1a4\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 5 * 10^4
1 <= nums[i] <= 10^6
nums.length <=\u00a0threshold <= 10^6
Reference
","tags":["\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1283/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u627e\u5230\u200b\u6700\u5c0f\u200b\u7684\u200b\u9664\u6570\u200b
\u200b\u5982\u679c\u200b\u7ed3\u679c\u200b\u5927\u4e8e\u200bthreshold
\uff0c\u200b\u8bf4\u660e\u200b\u9664\u6570\u200b\u8fc7\u200b\u5c0f\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u53f3\u4fa7\u200b\u67e5\u627e\u200b\uff0c\u200b\u5426\u5219\u200b\u5728\u200b\u5de6\u4fa7\u200b\u67e5\u627e\u200b
bool test(int *nums, int numsSize, int threshold, int x)\n{\n if (!x)\n return INT_MAX;\n int ret = 0, i = 0;\n for (i = 0; i < numsSize; i++)\n ret += (nums[i] + x - 1) / x;\n return ret <= threshold;\n}\n\nint bSearch(int *nums, int numsSize, int threshold, int lo, int hi)\n{\n if (hi - lo == 1)\n return hi;\n int mid = (hi + lo) >> 1;\n if (!test(nums, numsSize, threshold, mid))\n return bSearch(nums, numsSize, threshold, mid, hi);\n else\n return bSearch(nums, numsSize, threshold, lo, mid);\n}\n\nint smallestDivisor(int* nums, int numsSize, int threshold){\n int max = 0, i = 0;\n for (i = 0; i < numsSize; i++)\n if (max < nums[i])\n max = nums[i];\n return bSearch(nums, numsSize, threshold, 0, max);\n}\n
class Solution:\n def bSearch(self, nums: List[int], threshold: int, lo: int, hi: int) -> int:\n if hi - lo == 1:\n return hi\n mid = (lo + hi) >> 1\n return self.bSearch(nums, threshold, lo, mid) \\\n if sum([math.ceil(_ / mid) for _ in nums]) <= threshold \\\n else self.bSearch(nums, threshold, mid, hi)\n def smallestDivisor(self, nums: List[int], threshold: int) -> int:\n return self.bSearch(nums, threshold, 0, max(nums));\n
","tags":["\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/13/","title":"13. \u200b\u7f57\u9a6c\u6570\u5b57\u200b\u8f6c\u200b\u6574\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/13/#_1","title":"\u9898\u76ee","text":"\u200b\u7f57\u9a6c\u6570\u5b57\u200b\u5305\u542b\u200b\u4ee5\u4e0b\u200b\u4e03\u79cd\u200b\u5b57\u7b26\u200b:I
\uff0cV
\uff0cX
\uff0cL
\uff0cC
\uff0cD
\u200b\u548c\u200bM
\u3002
\u200b\u5b57\u7b26\u200b \u200b\u6570\u503c\u200b\nI 1\nV 5\nX 10\nL 50\nC 100\nD 500\nM 1000\n
\u200b\u4f8b\u5982\u200b\uff0c \u200b\u7f57\u9a6c\u6570\u5b57\u200b 2 \u200b\u5199\u200b\u505a\u200bII
\u00a0\uff0c\u200b\u5373\u200b\u4e3a\u200b\u4e24\u4e2a\u200b\u5e76\u5217\u200b\u7684\u200b 1\u300212 \u200b\u5199\u200b\u505a\u200bXII
\u00a0\uff0c\u200b\u5373\u200b\u4e3a\u200bX
\u00a0+\u00a0II
\u3002 27 \u200b\u5199\u200b\u505a\u200bXXVII
, \u200b\u5373\u200b\u4e3a\u200b\u00a0XX
\u00a0+\u00a0V
\u00a0+\u00a0II
\u3002 \u200b\u901a\u5e38\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u7f57\u9a6c\u6570\u5b57\u200b\u4e2d\u5c0f\u200b\u7684\u200b\u6570\u5b57\u200b\u5728\u200b\u5927\u200b\u7684\u200b\u6570\u5b57\u200b\u7684\u200b\u53f3\u8fb9\u200b\u3002\u200b\u4f46\u200b\u4e5f\u200b\u5b58\u5728\u200b\u7279\u4f8b\u200b\uff0c\u200b\u4f8b\u5982\u200b 4 \u200b\u4e0d\u5199\u200b\u505a\u200bIIII
\uff0c\u200b\u800c\u662f\u200bIV
\u3002\u200b\u6570\u5b57\u200b 1 \u200b\u5728\u200b\u6570\u5b57\u200b 5 \u200b\u7684\u200b\u5de6\u8fb9\u200b\uff0c\u200b\u6240\u200b\u8868\u793a\u200b\u7684\u200b\u6570\u200b\u7b49\u4e8e\u200b\u5927\u6570\u200b 5 \u200b\u51cf\u5c0f\u200b\u6570\u200b 1 \u200b\u5f97\u5230\u200b\u7684\u200b\u6570\u503c\u200b 4 \u3002\u200b\u540c\u6837\u200b\u5730\u200b\uff0c\u200b\u6570\u5b57\u200b 9 \u200b\u8868\u793a\u200b\u4e3a\u200bIX
\u3002\u200b\u8fd9\u4e2a\u200b\u7279\u6b8a\u200b\u7684\u200b\u89c4\u5219\u200b\u53ea\u200b\u9002\u7528\u200b\u4e8e\u200b\u4ee5\u4e0b\u200b\u516d\u79cd\u200b\u60c5\u51b5\u200b\uff1a
I
\u200b\u53ef\u4ee5\u200b\u653e\u5728\u200b\u00a0V
\u00a0(5) \u200b\u548c\u200b\u00a0X
\u00a0(10) \u200b\u7684\u200b\u5de6\u8fb9\u200b\uff0c\u200b\u6765\u200b\u8868\u793a\u200b 4 \u200b\u548c\u200b 9\u3002 X
\u200b\u53ef\u4ee5\u200b\u653e\u5728\u200b\u00a0L
\u00a0(50) \u200b\u548c\u200b\u00a0C
\u00a0(100) \u200b\u7684\u200b\u5de6\u8fb9\u200b\uff0c\u200b\u6765\u200b\u8868\u793a\u200b 40 \u200b\u548c\u200b\u00a090\u3002\u00a0 C
\u200b\u53ef\u4ee5\u200b\u653e\u5728\u200b\u00a0D
\u00a0(500) \u200b\u548c\u200b\u00a0M
\u00a0(1000) \u200b\u7684\u200b\u5de6\u8fb9\u200b\uff0c\u200b\u6765\u200b\u8868\u793a\u200b\u00a0400 \u200b\u548c\u200b\u00a0900\u3002 \u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u7f57\u9a6c\u6570\u5b57\u200b\uff0c\u200b\u5c06\u200b\u5176\u200b\u8f6c\u6362\u6210\u200b\u6574\u6570\u200b\u3002\u200b\u8f93\u5165\u200b\u786e\u4fdd\u200b\u5728\u200b 1\u00a0\u200b\u5230\u200b 3999 \u200b\u7684\u200b\u8303\u56f4\u200b\u5185\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b:\u00a0\"III\"\n\u200b\u8f93\u51fa\u200b: 3\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b:\u00a0\"IV\"\n\u200b\u8f93\u51fa\u200b: 4\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a
\u200b\u8f93\u5165\u200b:\u00a0\"IX\"\n\u200b\u8f93\u51fa\u200b: 9\n
\u200b\u793a\u4f8b\u200b\u00a04\uff1a
\u200b\u8f93\u5165\u200b:\u00a0\"LVIII\"\n\u200b\u8f93\u51fa\u200b: 58\n\u200b\u89e3\u91ca\u200b: L = 50, V= 5, III = 3.\n
\u200b\u793a\u4f8b\u200b\u00a05\uff1a
\u200b\u8f93\u5165\u200b:\u00a0\"MCMXCIV\"\n\u200b\u8f93\u51fa\u200b: 1994\n\u200b\u89e3\u91ca\u200b: M = 1000, CM = 900, XC = 90, IV = 4.\n
\u200b\u63d0\u793a\u200b\uff1a
\u200b\u9898\u76ee\u200b\u6240\u200b\u7ed9\u200b\u6d4b\u8bd5\u7528\u4f8b\u200b\u7686\u200b\u7b26\u5408\u200b\u7f57\u9a6c\u6570\u5b57\u200b\u4e66\u5199\u200b\u89c4\u5219\u200b\uff0c\u200b\u4e0d\u4f1a\u200b\u51fa\u73b0\u200b\u8de8\u4f4d\u200b\u7b49\u200b\u60c5\u51b5\u200b\u3002
IC
\u200b\u548c\u200bIM
\u200b\u8fd9\u6837\u200b\u7684\u200b\u4f8b\u5b50\u200b\u5e76\u200b\u4e0d\u200b\u7b26\u5408\u200b\u9898\u76ee\u200b\u8981\u6c42\u200b\uff0c49 \u200b\u5e94\u8be5\u200b\u5199\u4f5c\u200bXLIX
\uff0c999 \u200b\u5e94\u8be5\u200b\u5199\u4f5c\u200b CMXCIX
\u3002
\u200b\u5173\u4e8e\u200b\u7f57\u9a6c\u6570\u5b57\u200b\u7684\u200b\u8be6\u5c3d\u200b\u4e66\u5199\u200b\u89c4\u5219\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u53c2\u8003\u200b\u7f57\u9a6c\u6570\u5b57\u200b - Mathematics\u3002
Reference
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/13/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u9010\u4f4d\u200b\u5904\u7406\u200b\u5373\u53ef\u200b\uff0c\u200b\u6ce8\u610f\u200b\u5c0f\u200b\u7684\u200b\u6570\u5b57\u200b\u5728\u200b\u5927\u200b\u7684\u200b\u6570\u5b57\u200b\u5de6\u8fb9\u200b\u7684\u200b\u7279\u6b8a\u200b\u60c5\u51b5\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int romanToInt(char * s){\n char *cur = s;\n int ret = 0;\n while(*cur)\n {\n switch(*cur)\n {\n case 'I':\n if (*(cur + 1) == 'V' || *(cur + 1) == 'X')\n ret -= 1;\n else\n ret += 1;\n break;\n case 'V':\n ret += 5;\n break;\n case 'X':\n if (*(cur + 1) == 'L' || *(cur + 1) == 'C')\n ret -= 10;\n else\n ret += 10;\n break;\n case 'L':\n ret += 50;\n break;\n case 'C':\n if (*(cur + 1) == 'D' || *(cur + 1) == 'M')\n ret -= 100;\n else\n ret += 100;\n break;\n case 'M':\n ret += 500;\n case 'D':\n ret += 500;\n }\n cur++;\n }\n return ret;\n}\n
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/1300/","title":"1300. \u200b\u8f6c\u53d8\u200b\u6570\u7ec4\u200b\u540e\u200b\u6700\u200b\u63a5\u8fd1\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u6570\u7ec4\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1300/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u00a0arr
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u503c\u200b\u00a0target
\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u00a0value
\u00a0\uff0c\u200b\u4f7f\u5f97\u200b\u5c06\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u6240\u6709\u200b\u5927\u4e8e\u200b\u00a0value
\u200b\u7684\u200b\u503c\u200b\u53d8\u6210\u200b\u00a0value
\u200b\u540e\u200b\uff0c\u200b\u6570\u7ec4\u200b\u7684\u200b\u548c\u200b\u6700\u200b\u63a5\u8fd1\u200b target
\uff08\u200b\u6700\u200b\u63a5\u8fd1\u200b\u8868\u793a\u200b\u4e24\u8005\u200b\u4e4b\u5dee\u200b\u7684\u200b\u7edd\u5bf9\u503c\u200b\u6700\u5c0f\u200b\uff09\u3002
\u200b\u5982\u679c\u200b\u6709\u200b\u591a\u79cd\u200b\u4f7f\u5f97\u200b\u548c\u200b\u6700\u200b\u63a5\u8fd1\u200b\u00a0target
\u00a0\u200b\u7684\u200b\u65b9\u6848\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8fd4\u56de\u200b\u8fd9\u4e9b\u200b\u6574\u6570\u200b\u4e2d\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\u3002
\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u7b54\u6848\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u00a0arr
\u200b\u4e2d\u200b\u7684\u200b\u6570\u5b57\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aarr = [4,9,3], target = 10\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5f53\u200b\u9009\u62e9\u200b value \u200b\u4e3a\u200b 3 \u200b\u65f6\u200b\uff0c\u200b\u6570\u7ec4\u200b\u4f1a\u200b\u53d8\u6210\u200b [3, 3, 3]\uff0c\u200b\u548c\u200b\u4e3a\u200b 9 \uff0c\u200b\u8fd9\u200b\u662f\u200b\u6700\u200b\u63a5\u8fd1\u200b target \u200b\u7684\u200b\u65b9\u6848\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aarr = [2,3,5], target = 10\n\u200b\u8f93\u51fa\u200b\uff1a5\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1aarr = [60864,25176,27249,21296,20204], target = 56803\n\u200b\u8f93\u51fa\u200b\uff1a11361\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= arr.length <= 10^4
1 <= arr[i], target <= 10^5
Reference
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/1300/#_2","title":"\u9898\u89e3","text":"\u200b\u5728\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\\((lo, hi)\\)\u200b\u4e2d\u200b\u786e\u5b9a\u200b\u4e09\u7b49\u5206\u200b\u70b9\u200b\\(x_1, x_2 (x_1 < x_2)\\)\uff0c\u200b\u5206\u522b\u200b\u8ba1\u7b97\u200b\u4e24\u4e2a\u200b\u4e09\u7b49\u5206\u200b\u70b9\u5904\u200b\u7684\u200b\u5dee\u503c\u200b\u3002\u200b\u8bbe\u200b\\(f(x)\\)\u200b\u4e3a\u200b\u5c06\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5927\u4e8e\u200b\\(x\\)\u200b\u7684\u200b\u6570\u503c\u200b\u8f6c\u53d8\u200b\u4e3a\u200b\\(x\\)\u200b\u540e\u200b\u6570\u7ec4\u200b\u6c42\u548c\u200b\u4e0e\u200b\u76ee\u6807\u503c\u200b\u4e4b\u5dee\u200b\u7684\u200b\u7edd\u5bf9\u503c\u200b\u3002
- \u200b\u5f53\u200b\\(f(x_1) < f(x_2)\\)\u200b\u65f6\u200b\uff0c\u200b\u5c06\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7f29\u51cf\u200b\u4e3a\u200b\\((lo, x_2)\\)
- \u200b\u5f53\u200b\\(f(x_1) > f(x_2)\\)\u200b\u65f6\u200b\uff0c\u200b\u5c06\u200b\u5f85\u67e5\u200b\u533a\u95f4\u200b\u7f29\u51cf\u200b\u4e3a\u200b\\((x_1, hi)\\)
\\(f(x)\\)\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b+\u200b\u9884\u5904\u7406\u200b\u5728\u200b\\(\\mathcal O(\\log N)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u5185\u200b\u8ba1\u7b97\u200b\u5b8c\u6210\u200b\u3002\u200b\u9884\u5904\u7406\u200b\u9700\u8981\u200b\u82b1\u8d39\u200b\\(\\mathcal O(N)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u3002\u200b\u6392\u5e8f\u200b\u9700\u8981\u200b\u82b1\u8d39\u200b\\(\\mathcal O(N\\log N)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u3002\u200b\u9700\u8981\u200b\\(\\mathcal O(\\log N)\\)\u200b\u6b21\u200b\u4e09\u5206\u200b\u67e5\u627e\u200b\u3002\u200b\u56e0\u6b64\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(N\\log N)\\)\uff08\u200b\u9884\u5904\u7406\u200b\u9636\u6bb5\u200b\uff09
#define ABS(x) ((x) > 0 ? (x) : -(x))\n\nint cmp(const void *a, const void *b)\n{\n return *((int *)a) - *((int *)b);\n}\n\nint bSearch(int *arr, int target, int lo, int hi)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (arr[mid] < target)\n lo = mid + 1;\n else\n hi = mid;\n }\n return lo - 1;\n}\n\nint test(int *arr, int arrSize, int target, int val, int *presum)\n{\n int i = bSearch(arr, val, 0, arrSize), ret = val * (arrSize - i - 1) - target;\n if (i >= 0)\n ret += presum[i];\n return ABS(ret);\n}\n\nint tSearch(int *arr, int arrSize, int target, int lo, int hi, int *presum)\n{\n int left, right;\n while (hi - lo > 2)\n {\n left = (2 * lo + hi) / 3;\n right = (2 * hi + lo) / 3;\n if (test(arr, arrSize, target, left, presum) <= test(arr, arrSize, target, right, presum))\n hi = right;\n else\n lo = left;\n }\n return (2 * hi + lo) / 3;\n}\n\nint findBestValue(int* arr, int arrSize, int target){\n int i = 0, presum[arrSize];\n qsort(arr, arrSize, sizeof(int), cmp);\n presum[0] = arr[0];\n for (i = 1; i < arrSize; i++)\n presum[i] = presum[i - 1] + arr[i];\n\n return tSearch(arr, arrSize, target, -1, arr[arrSize - 1] + 1, presum);\n}\n
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/136/","title":"136. \u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u7684\u200b\u6570\u5b57","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u4f4d\u8fd0\u7b97","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/136/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u975e\u7a7a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\uff0c\u200b\u9664\u4e86\u200b\u67d0\u4e2a\u200b\u5143\u7d20\u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u4ee5\u5916\u200b\uff0c\u200b\u5176\u4f59\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u5747\u200b\u51fa\u73b0\u200b\u4e24\u6b21\u200b\u3002\u200b\u627e\u51fa\u200b\u90a3\u4e2a\u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e86\u200b\u4e00\u6b21\u200b\u7684\u200b\u5143\u7d20\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u4f60\u200b\u7684\u200b\u7b97\u6cd5\u200b\u5e94\u8be5\u200b\u5177\u6709\u200b\u7ebf\u6027\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u3002 \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u4f7f\u7528\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\u6765\u200b\u5b9e\u73b0\u200b\u5417\u200b\uff1f
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [2,2,1]\n\u200b\u8f93\u51fa\u200b: 1\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b: [4,1,2,1,2]\n\u200b\u8f93\u51fa\u200b: 4\n
Reference
","tags":["\u4f4d\u8fd0\u7b97","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/136/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5f02\u6216\u200b\u8fd0\u7b97\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \u200b\u4ea4\u6362\u5f8b\u200b\uff1a
a ^ b = b ^ a
- \u200b\u7ed3\u5408\u5f8b\u200b\uff1a
(a ^ b) ^ c = a ^ (b ^ c)
- \u200b\u82e5\u200b
a ^ b = c
\uff0c\u200b\u5219\u200ba ^ c = b
\u3001b ^ c = a
a ^ a = 0
\u200b\u6839\u636e\u200b\u6027\u8d28\u200b1\u30012\uff0c\u200b\u5f02\u6216\u200b\u8fd0\u7b97\u200b\u7684\u200b\u7ed3\u679c\u200b\u4e0e\u200b\u53c2\u4e0e\u200b\u8fd0\u7b97\u200b\u7684\u200b\u6240\u6709\u200b\u6570\u503c\u200b\u7684\u200b\u6392\u5217\u200b\u987a\u5e8f\u200b\u65e0\u5173\u200b\u3002\u200b\u6839\u636e\u200b\u6027\u8d28\u200b3\u30014\uff0c\u200b\u76f8\u540c\u200b\u6574\u6570\u200b\u7684\u200b\u5f02\u6216\u200b\u503c\u4e3a\u200b0\uff0c0\u200b\u4e0e\u200b\u4efb\u4f55\u200b\u6570\u200b\u5f02\u6216\u200b\u4ecd\u4e3a\u200b\u8be5\u6570\u200b\u3002\u200b\u56e0\u6b64\u200b\u5c06\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5404\u200b\u5143\u7d20\u200b\u8fdb\u884c\u200b\u6309\u4f4d\u200b\u5f02\u6216\u200b\uff0c\u200b\u5f97\u5230\u200b\u7684\u200b\u7ed3\u679c\u200b\u5373\u200b\u4e3a\u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u7684\u200b\u6570\u503c\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int singleNumber(int* nums, int numsSize){\n int ret = 0, i = 0;\n for (i = 0; i < numsSize; i++)\n ret ^= nums[i];\n return ret;\n}\n
","tags":["\u4f4d\u8fd0\u7b97","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/14/","title":"14. \u200b\u6700\u957f\u200b\u516c\u5171\u200b\u524d\u7f00","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/14/#_1","title":"\u9898\u76ee","text":"\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u6765\u200b\u67e5\u627e\u200b\u5b57\u7b26\u4e32\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u6700\u957f\u200b\u516c\u5171\u200b\u524d\u7f00\u200b\u3002
\u200b\u5982\u679c\u200b\u4e0d\u200b\u5b58\u5728\u200b\u516c\u5171\u200b\u524d\u7f00\u200b\uff0c\u200b\u8fd4\u56de\u200b\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\"\"
\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b: [\"flower\",\"flow\",\"flight\"]\n\u200b\u8f93\u51fa\u200b: \"fl\"\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b: [\"dog\",\"racecar\",\"car\"]\n\u200b\u8f93\u51fa\u200b: \"\"\n\u200b\u89e3\u91ca\u200b: \u200b\u8f93\u5165\u200b\u4e0d\u200b\u5b58\u5728\u200b\u516c\u5171\u200b\u524d\u7f00\u200b\u3002\n
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u6240\u6709\u200b\u8f93\u5165\u200b\u53ea\u200b\u5305\u542b\u200b\u5c0f\u5199\u5b57\u6bcd\u200ba-z
\u3002
Reference
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/14/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5728\u200b\u6bd4\u8f83\u200b\u524d\u7f00\u200b\u65f6\u200b\u53ea\u200b\u9700\u8981\u200b\u5c06\u200b\u524d\u200b n \u200b\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u516c\u5171\u200b\u524d\u7f00\u200b\u4e0e\u200b\u7b2c\u200b n+1 \u200b\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u8fdb\u884c\u200b\u6bd4\u8f83\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
char *compareTwo(char *str1, char *str2)\n{\n char *cur1 = str1, *cur2 = str2, *ret = NULL;\n int len = 0;\n while (*cur1 && *cur2)\n {\n if (*cur1 != *cur2)\n break;\n else\n len++;\n cur1++;\n cur2++;\n }\n ret = (char *)memset(malloc(sizeof(char) * (len + 1)), 0, sizeof(char) * (len + 1));\n return memcpy(ret, str1, sizeof(char) * len);\n}\n\nchar * longestCommonPrefix(char ** strs, int strsSize){\n if (strsSize == 0)\n return memset(malloc(sizeof(char)), 0, sizeof(char));\n if (strsSize == 1)\n return strs[0];\n if (strsSize == 2)\n return compareTwo(strs[0], strs[1]);\n int rec_size = (strsSize + 1) >> 1, i = 0;\n char **rec = (char **)memset(malloc(sizeof(char *) * rec_size), 0, sizeof(char *) * rec_size);\n for (i = 0; i < strsSize >> 1; i++)\n rec[i] = compareTwo(strs[2 * i], strs[2 * i + 1]);\n if (strsSize & 1)\n rec[rec_size - 1] = strs[strsSize - 1];\n return longestCommonPrefix(rec, rec_size);\n}\n
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/150/","title":"150. \u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u6c42\u503c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6808"]},{"location":"coding/leetcode/150/#_1","title":"\u9898\u76ee","text":"\u200b\u6839\u636e\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u793a\u6cd5\u200b\uff0c\u200b\u6c42\u200b\u8868\u8fbe\u5f0f\u200b\u7684\u200b\u503c\u200b\u3002
\u200b\u6709\u6548\u200b\u7684\u200b\u7b97\u7b26\u200b\u5305\u62ec\u200b+
\u3001-
\u3001*
\u3001/
\u3002\u200b\u6bcf\u4e2a\u200b\u8fd0\u7b97\u200b\u5bf9\u8c61\u200b\u53ef\u4ee5\u200b\u662f\u200b\u6574\u6570\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a
- \u200b\u6574\u6570\u200b\u9664\u6cd5\u200b\u53ea\u200b\u4fdd\u7559\u200b\u6574\u6570\u200b\u90e8\u5206\u200b\u3002
- \u200b\u7ed9\u5b9a\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u603b\u662f\u200b\u6709\u6548\u200b\u7684\u200b\u3002\u200b\u6362\u53e5\u8bdd\u8bf4\u200b\uff0c\u200b\u8868\u8fbe\u5f0f\u200b\u603b\u4f1a\u200b\u5f97\u51fa\u200b\u6709\u6548\u200b\u6570\u503c\u200b\u4e14\u200b\u4e0d\u200b\u5b58\u5728\u200b\u9664\u6570\u200b\u4e3a\u200b
0
\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b\uff1atokens = [\"2\",\"1\",\"+\",\"3\",\"*\"]\n\u200b\u8f93\u51fa\u200b\uff1a9\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8be5\u200b\u7b97\u5f0f\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u5e38\u89c1\u200b\u7684\u200b\u4e2d\u7f00\u200b\u7b97\u672f\u200b\u8868\u8fbe\u5f0f\u200b\u4e3a\u200b\uff1a((2 + 1) * 3) = 9\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b\uff1atokens = [\"4\",\"13\",\"5\",\"/\",\"+\"]\n\u200b\u8f93\u51fa\u200b\uff1a6\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8be5\u200b\u7b97\u5f0f\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u5e38\u89c1\u200b\u7684\u200b\u4e2d\u7f00\u200b\u7b97\u672f\u200b\u8868\u8fbe\u5f0f\u200b\u4e3a\u200b\uff1a(4 + (13 / 5)) = 6\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a
\u200b\u8f93\u5165\u200b\uff1atokens = [\"10\",\"6\",\"9\",\"3\",\"+\",\"-11\",\"*\",\"/\",\"*\",\"17\",\"+\",\"5\",\"+\"]\n\u200b\u8f93\u51fa\u200b\uff1a22\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u8be5\u200b\u7b97\u5f0f\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u5e38\u89c1\u200b\u7684\u200b\u4e2d\u7f00\u200b\u7b97\u672f\u200b\u8868\u8fbe\u5f0f\u200b\u4e3a\u200b\uff1a\n ((10 * (6 / ((9 + 3) * -11))) + 17) + 5\n= ((10 * (6 / (12 * -11))) + 17) + 5\n= ((10 * (6 / -132)) + 17) + 5\n= ((10 * 0) + 17) + 5\n= (0 + 17) + 5\n= 17 + 5\n= 22\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= tokens.length <= 10^4
tokens[i]
\u200b\u8981\u4e48\u200b\u662f\u200b\u4e00\u4e2a\u200b\u7b97\u7b26\u200b\uff08\"+\"
\u3001\"-\"
\u3001\"*\"
\u200b\u6216\u200b \"/\"
\uff09\uff0c\u200b\u8981\u4e48\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5728\u200b\u8303\u56f4\u200b [-200, 200]
\u200b\u5185\u200b\u7684\u200b\u6574\u6570\u200b
\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\uff1a
\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u662f\u200b\u4e00\u79cd\u200b\u540e\u7f00\u200b\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u6240\u8c13\u200b\u540e\u7f00\u200b\u5c31\u662f\u6307\u200b\u7b97\u7b26\u200b\u5199\u200b\u5728\u200b\u540e\u9762\u200b\u3002
\u200b\u5e73\u5e38\u200b\u4f7f\u7528\u200b\u7684\u200b\u7b97\u5f0f\u200b\u5219\u200b\u662f\u200b\u4e00\u79cd\u200b\u4e2d\u7f00\u200b\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u5982\u200b ( 1 + 2 ) * ( 3 + 4 )
\u3002 \u200b\u8be5\u200b\u7b97\u5f0f\u200b\u7684\u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u5199\u6cd5\u200b\u4e3a\u200b ( ( 1 2 + ) ( 3 4 + ) * )
\u3002 \u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u4e3b\u8981\u200b\u6709\u200b\u4ee5\u4e0b\u200b\u4e24\u4e2a\u200b\u4f18\u70b9\u200b\uff1a
\u200b\u53bb\u6389\u200b\u62ec\u53f7\u200b\u540e\u200b\u8868\u8fbe\u5f0f\u200b\u65e0\u200b\u6b67\u4e49\u200b\uff0c\u200b\u4e0a\u200b\u5f0f\u200b\u5373\u4fbf\u200b\u5199\u6210\u200b 1 2 + 3 4 + *
\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4f9d\u636e\u200b\u6b21\u5e8f\u200b\u8ba1\u7b97\u200b\u51fa\u200b\u6b63\u786e\u200b\u7ed3\u679c\u200b\u3002 \u200b\u9002\u5408\u200b\u7528\u6808\u200b\u64cd\u4f5c\u200b\u8fd0\u7b97\u200b\uff1a\u200b\u9047\u5230\u200b\u6570\u5b57\u200b\u5219\u200b\u5165\u6808\u200b\uff1b\u200b\u9047\u5230\u200b\u7b97\u7b26\u200b\u5219\u200b\u53d6\u51fa\u200b\u6808\u9876\u200b\u4e24\u4e2a\u200b\u6570\u5b57\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u5e76\u200b\u5c06\u200b\u7ed3\u679c\u200b\u538b\u5165\u200b\u6808\u200b\u4e2d\u200b\u3002
Reference
","tags":["\u6808"]},{"location":"coding/leetcode/150/#_2","title":"\u9898\u89e3","text":"\u200b\u6839\u636e\u200b\u9898\u76ee\u200b\u4e2d\u200b\u7684\u200b\u63d0\u793a\u200b\u5373\u53ef\u200b\uff1a
\u200b\u9002\u5408\u200b\u7528\u6808\u200b\u64cd\u4f5c\u200b\u8fd0\u7b97\u200b\uff1a\u200b\u9047\u5230\u200b\u6570\u5b57\u200b\u5219\u200b\u5165\u6808\u200b\uff1b\u200b\u9047\u5230\u200b\u7b97\u7b26\u200b\u5219\u200b\u53d6\u51fa\u200b\u6808\u9876\u200b\u4e24\u4e2a\u200b\u6570\u5b57\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u5e76\u200b\u5c06\u200b\u7ed3\u679c\u200b\u538b\u5165\u200b\u6808\u200b\u4e2d\u200b\u3002
struct ListNode *getNode(int val, struct ListNode *next)\n{\n struct ListNode *ret = (struct ListNode *)malloc(sizeof(struct ListNode));\n ret->val = val;\n ret->next = next;\n return ret;\n}\nstruct ListNode *operand(struct ListNode *Stack, char operand)\n{\n struct ListNode *cur1 = Stack, *cur2 = Stack->next, *temp = cur2->next;\n int ret;\n switch (operand)\n {\n case '+':\n ret = cur1->val + cur2->val;\n break;\n case '-':\n ret = cur2->val - cur1->val;\n break;\n case '*':\n ret = cur1->val * cur2->val;\n break;\n case '/':\n ret = cur2->val / cur1->val;\n break;\n }\n free(cur1);\n free(cur2);\n return getNode(ret, temp);\n}\nint evalRPN(char ** tokens, int tokensSize){\n struct ListNode *Stack = NULL;\n int i = 0;\n char *cur;\n for (i = 0; i < tokensSize; i++)\n {\n cur = tokens[i];\n if (*cur >= '0' && *cur <= '9' || strlen(cur) > 1)\n Stack = getNode(atoi(cur), Stack);\n else\n Stack = operand(Stack, *cur);\n }\n return Stack->val;\n}\n
","tags":["\u6808"]},{"location":"coding/leetcode/155/","title":"155. \u200b\u6700\u5c0f\u200b\u6808","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/155/#_1","title":"\u9898\u76ee","text":"\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u652f\u6301\u200b push
\uff0cpop
\uff0ctop
\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u5e76\u200b\u80fd\u200b\u5728\u200b\u5e38\u6570\u200b\u65f6\u95f4\u200b\u5185\u200b\u68c0\u7d22\u200b\u5230\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b\u7684\u200b\u6808\u200b\u3002
push(x)
\u2014\u2014 \u200b\u5c06\u200b\u5143\u7d20\u200b x \u200b\u63a8\u5165\u200b\u6808\u4e2d\u200b\u3002 pop()
\u00a0\u2014\u2014 \u200b\u5220\u9664\u200b\u6808\u9876\u200b\u7684\u200b\u5143\u7d20\u200b\u3002 top()
\u00a0\u2014\u2014 \u200b\u83b7\u53d6\u200b\u6808\u9876\u200b\u5143\u7d20\u200b\u3002 getMin()
\u2014\u2014 \u200b\u68c0\u7d22\u200b\u6808\u4e2d\u200b\u7684\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b\uff1a\n[\"MinStack\",\"push\",\"push\",\"push\",\"getMin\",\"pop\",\"top\",\"getMin\"]\n[[],[-2],[0],[-3],[],[],[],[]]\n\n\u200b\u8f93\u51fa\u200b\uff1a\n[null,null,null,null,-3,null,0,-2]\n\n\u200b\u89e3\u91ca\u200b\uff1a\nMinStack minStack = new MinStack();\nminStack.push(-2);\nminStack.push(0);\nminStack.push(-3);\nminStack.getMin(); --> \u200b\u8fd4\u56de\u200b -3.\nminStack.pop();\nminStack.top(); --> \u200b\u8fd4\u56de\u200b 0.\nminStack.getMin(); --> \u200b\u8fd4\u56de\u200b -2.\n
\u200b\u63d0\u793a\u200b\uff1a
pop
\u3001top
\u200b\u548c\u200b getMin
\u200b\u64cd\u4f5c\u200b\u603b\u662f\u200b\u5728\u200b \u200b\u975e\u7a7a\u6808\u200b \u200b\u4e0a\u200b\u8c03\u7528\u200b\u3002
Reference
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/155/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u4e24\u4e2a\u200b\u57df\u200b\u5206\u522b\u200b\u5b58\u50a8\u200b\u5f53\u524d\u200b\u6570\u503c\u200b\u548c\u200b\u5f53\u524d\u200b\u6808\u4e2d\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
#define MIN(x, y) (x < y ? x : y)\nstruct cell\n{\n int val;\n int curMin;\n};\ntypedef struct {\n struct cell values[10000];\n int top;\n} MinStack;\n/** initialize your data structure here. */\nMinStack *minStackCreate() \n{\n return (MinStack *)memset(malloc(sizeof(MinStack)), 0, sizeof(MinStack));\n}\nvoid minStackPush(MinStack* obj, int x)\n{\n obj->values[obj->top].val = x;\n obj->values[obj->top].curMin = obj->top > 0 ? MIN(x, obj->values[obj->top - 1].curMin) : x;\n obj->top++;\n}\nvoid minStackPop(MinStack *obj)\n{\n obj->top--;\n}\nint minStackTop(MinStack* obj)\n{\n return obj->values[obj->top - 1].val;\n}\nint minStackGetMin(MinStack* obj)\n{\n return obj->values[obj->top - 1].curMin;\n}\nvoid minStackFree(MinStack* obj)\n{\n free(obj);\n}\n/**\n * Your MinStack struct will be instantiated and called as such:\n * MinStack* obj = minStackCreate();\n * minStackPush(obj, x);\n\n * minStackPop(obj);\n\n * int param_3 = minStackTop(obj);\n\n * int param_4 = minStackGetMin(obj);\n\n * minStackFree(obj);\n*/\n
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/1603/","title":"1603. \u200b\u8bbe\u8ba1\u200b\u505c\u8f66\u200b\u7cfb\u7edf","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u8bbe\u8ba1"]},{"location":"coding/leetcode/1603/#_1","title":"\u9898\u76ee","text":"\u200b\u8bf7\u200b\u4f60\u200b\u7ed9\u200b\u4e00\u4e2a\u200b\u505c\u8f66\u573a\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u505c\u8f66\u200b\u7cfb\u7edf\u200b\u3002\u200b\u505c\u8f66\u573a\u200b\u603b\u5171\u200b\u6709\u200b\u4e09\u79cd\u200b\u4e0d\u540c\u200b\u5927\u5c0f\u200b\u7684\u200b\u8f66\u4f4d\u200b\uff1a\u200b\u5927\u200b\uff0c\u200b\u4e2d\u200b\u548c\u200b\u5c0f\u200b\uff0c\u200b\u6bcf\u79cd\u200b\u5c3a\u5bf8\u200b\u5206\u522b\u200b\u6709\u200b\u56fa\u5b9a\u200b\u6570\u76ee\u200b\u7684\u200b\u8f66\u4f4d\u200b\u3002
\u200b\u8bf7\u200b\u4f60\u200b\u5b9e\u73b0\u200b\u00a0ParkingSystem
\u00a0\u200b\u7c7b\u200b\uff1a
ParkingSystem(int big, int medium, int small)``\u00a0\u200b\u521d\u59cb\u5316\u200b\u00a0ParkingSystem\u00a0\u200b\u7c7b\u200b\uff0c\u200b\u4e09\u4e2a\u200b\u53c2\u6570\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u6bcf\u79cd\u200b\u505c\u8f66\u4f4d\u200b\u7684\u200b\u6570\u76ee\u200b\u3002
bool addCar(int carType)
\u00a0\u200b\u68c0\u67e5\u200b\u662f\u5426\u200b\u6709\u200b\u00a0carType
\u00a0\u200b\u5bf9\u5e94\u200b\u7684\u200b\u505c\u8f66\u4f4d\u200b\u3002\u00a0carType
\u00a0\u200b\u6709\u200b\u4e09\u79cd\u200b\u7c7b\u578b\u200b\uff1a\u200b\u5927\u200b\uff0c\u200b\u4e2d\u200b\uff0c\u200b\u5c0f\u200b\uff0c\u200b\u5206\u522b\u200b\u7528\u200b\u6570\u5b57\u200b\u00a01
\uff0c\u00a02
\u00a0\u200b\u548c\u200b\u00a03
\u00a0\u200b\u8868\u793a\u200b\u3002\u200b\u4e00\u8f86\u8f66\u200b\u53ea\u80fd\u200b\u505c\u200b\u5728\u200b\u00a0carType
\u00a0\u200b\u5bf9\u5e94\u200b\u5c3a\u5bf8\u200b\u7684\u200b\u505c\u8f66\u4f4d\u200b\u4e2d\u200b\u3002\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u7a7a\u8f66\u200b\u4f4d\u200b\uff0c\u200b\u8bf7\u200b\u8fd4\u56de\u200b\u00a0false
\u00a0\uff0c\u200b\u5426\u5219\u200b\u5c06\u200b\u8be5\u8f66\u200b\u505c\u5165\u200b\u8f66\u4f4d\u200b\u5e76\u200b\u8fd4\u56de\u200b\u00a0true
\u00a0\u3002\u00a0
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a\n[\"ParkingSystem\", \"addCar\", \"addCar\", \"addCar\", \"addCar\"]\n[[1, 1, 0], [1], [2], [3], [1]]\n\u200b\u8f93\u51fa\u200b\uff1a\n[null, true, true, false, false]\n
\u200b\u89e3\u91ca\u200b\uff1a
ParkingSystem parkingSystem = new ParkingSystem(1, 1, 0);\nparkingSystem.addCar(1); // \u200b\u8fd4\u56de\u200b true \uff0c\u200b\u56e0\u4e3a\u200b\u6709\u200b 1 \u200b\u4e2a\u7a7a\u200b\u7684\u200b\u5927\u200b\u8f66\u4f4d\u200b\nparkingSystem.addCar(2); // \u200b\u8fd4\u56de\u200b true \uff0c\u200b\u56e0\u4e3a\u200b\u6709\u200b 1 \u200b\u4e2a\u7a7a\u200b\u7684\u200b\u4e2d\u200b\u8f66\u4f4d\u200b\nparkingSystem.addCar(3); // \u200b\u8fd4\u56de\u200b false \uff0c\u200b\u56e0\u4e3a\u200b\u6ca1\u6709\u200b\u7a7a\u200b\u7684\u200b\u5c0f\u8f66\u200b\u4f4d\u200b\nparkingSystem.addCar(1); // \u200b\u8fd4\u56de\u200b false \uff0c\u200b\u56e0\u4e3a\u200b\u6ca1\u6709\u200b\u7a7a\u200b\u7684\u200b\u5927\u200b\u8f66\u4f4d\u200b\uff0c\u200b\u552f\u4e00\u200b\u4e00\u4e2a\u200b\u5927\u200b\u8f66\u4f4d\u200b\u5df2\u7ecf\u200b\u88ab\u200b\u5360\u636e\u200b\u4e86\u200b\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= big, medium, small <= 1000
carType
\u00a0\u200b\u53d6\u503c\u200b\u4e3a\u200b\u00a01
\uff0c\u00a02
\u00a0\u200b\u6216\u200b\u00a03
- \u200b\u6700\u591a\u4f1a\u200b\u8c03\u7528\u200b\u00a0
addCar
\u00a0\u200b\u51fd\u6570\u200b\u00a01000\u00a0\u200b\u6b21\u200b
Reference
","tags":["\u8bbe\u8ba1"]},{"location":"coding/leetcode/1603/#_2","title":"\u9898\u89e3","text":"typedef struct {\n int cars[3];\n} ParkingSystem;\n\n\nParkingSystem* parkingSystemCreate(int big, int medium, int small) {\n ParkingSystem *ret = (ParkingSystem *)malloc(sizeof(ParkingSystem));\n ret->cars[0] = big;\n ret->cars[1] = medium;\n ret->cars[2] = small;\n return ret;\n}\n\nbool parkingSystemAddCar(ParkingSystem* obj, int carType) {\n if (obj->cars[carType - 1] == 0)\n return false;\n else\n {\n obj->cars[carType - 1]--;\n return true;\n }\n}\n\nvoid parkingSystemFree(ParkingSystem* obj) {\n free(obj);\n}\n\n/**\n * Your ParkingSystem struct will be instantiated and called as such:\n * ParkingSystem* obj = parkingSystemCreate(big, medium, small);\n * bool param_1 = parkingSystemAddCar(obj, carType);\n\n * parkingSystemFree(obj);\n*/\n
","tags":["\u8bbe\u8ba1"]},{"location":"coding/leetcode/17.21/","title":"\u9762\u8bd5\u9898\u200b 17.21. \u200b\u76f4\u65b9\u56fe\u200b\u7684\u200b\u6c34\u91cf","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
"},{"location":"coding/leetcode/17.21/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u76f4\u65b9\u56fe\u200b(\u200b\u4e5f\u200b\u79f0\u200b\u67f1\u72b6\u56fe\u200b)\uff0c\u200b\u5047\u8bbe\u200b\u6709\u4eba\u200b\u4ece\u200b\u4e0a\u9762\u200b\u6e90\u6e90\u4e0d\u65ad\u200b\u5730\u200b\u5012\u6c34\u200b\uff0c\u200b\u6700\u540e\u200b\u76f4\u65b9\u56fe\u200b\u80fd\u5b58\u200b\u591a\u5c11\u200b\u6c34\u91cf\u200b?\u200b\u76f4\u65b9\u56fe\u200b\u7684\u200b\u5bbd\u5ea6\u200b\u4e3a\u200b 1
\u3002
\u200b\u4e0a\u9762\u200b\u662f\u200b\u7531\u200b\u6570\u7ec4\u200b [0,1,0,2,1,0,1,3,2,1,2,1]
\u200b\u8868\u793a\u200b\u7684\u200b\u76f4\u65b9\u56fe\u200b\uff0c\u200b\u5728\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u63a5\u200b 6
\u200b\u4e2a\u200b\u5355\u4f4d\u200b\u7684\u200b\u6c34\u200b\uff08\u200b\u84dd\u8272\u200b\u90e8\u5206\u200b\u8868\u793a\u200b\u6c34\u200b\uff09\u3002\u00a0\u200b\u611f\u8c22\u200b Marcos \u200b\u8d21\u732e\u200b\u6b64\u56fe\u200b\u3002
\u200b\u793a\u4f8b\u200b:
\u200b\u8f93\u5165\u200b: [0,1,0,2,1,0,1,3,2,1,2,1]\n\u200b\u8f93\u51fa\u200b: 6\n
Reference
\u200b\u6ce8\u200b\uff1a\u200b\u672c\u9898\u200b\u4e0e\u200b42. \u200b\u63a5\u200b\u96e8\u6c34\u200b\u76f8\u540c\u200b\u3002
"},{"location":"coding/leetcode/17.21/#_2","title":"\u9898\u89e3","text":"#define MAX(x, y) ((x) > (y) ? x : y)\n#define MIN(x, y) ((x) < (y) ? x : y)\n#define ABS(x) ((x) > 0 ? (x) : -(x))\nint trap(int* height, int heightSize){\n int highest = 0, higher = 0, highestIndex = -1, higherIndex = -1, i = 0, ret = 0;\n for (i = 0; i < heightSize; i++)\n {\n if (height[i] > highest)\n {\n higher = highest;\n higherIndex = highestIndex;\n highest = height[i];\n highestIndex = i;\n }\n else if (height[i] > higher)\n {\n higher = height[i];\n higherIndex = i;\n }\n }\n if (heightSize <= 2 || higherIndex < 0 || highestIndex < 0)\n return 0;\n ret = higher * (ABS(higherIndex - highestIndex) - 1);\n int left = MIN(higherIndex, highestIndex) + 1, right = MAX(higherIndex, highestIndex);\n for (i = left; i < right; i++)\n ret -= height[i];\n return ret + trap(height, left) + trap(height + right, heightSize - right);\n}\n
"},{"location":"coding/leetcode/17/","title":"17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52","\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/17/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u4ec5\u200b\u5305\u542b\u200b\u6570\u5b57\u200b\u00a02-9
\u00a0\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u8fd4\u56de\u200b\u6240\u6709\u200b\u5b83\u200b\u80fd\u200b\u8868\u793a\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b\u3002\u200b\u7b54\u6848\u200b\u53ef\u4ee5\u200b\u6309\u200b \u200b\u4efb\u610f\u200b\u987a\u5e8f\u200b \u200b\u8fd4\u56de\u200b\u3002
\u200b\u7ed9\u51fa\u200b\u6570\u5b57\u200b\u5230\u200b\u5b57\u6bcd\u200b\u7684\u200b\u6620\u5c04\u200b\u5982\u4e0b\u200b\uff08\u200b\u4e0e\u200b\u7535\u8bdd\u200b\u6309\u952e\u200b\u76f8\u540c\u200b\uff09\u3002\u200b\u6ce8\u610f\u200b 1 \u200b\u4e0d\u200b\u5bf9\u5e94\u200b\u4efb\u4f55\u200b\u5b57\u6bcd\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1adigits = \"23\"\n\u200b\u8f93\u51fa\u200b\uff1a[\"ad\",\"ae\",\"af\",\"bd\",\"be\",\"bf\",\"cd\",\"ce\",\"cf\"]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1adigits = \"\"\n\u200b\u8f93\u51fa\u200b\uff1a[]\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1adigits = \"2\"\n\u200b\u8f93\u51fa\u200b\uff1a[\"a\",\"b\",\"c\"]\n
\u200b\u63d0\u793a\u200b\uff1a
- 0 <= digits.length <= 4
- digits[i] \u200b\u662f\u200b\u8303\u56f4\u200b ['2', '9'] \u200b\u7684\u200b\u4e00\u4e2a\u200b\u6570\u5b57\u200b\u3002
Reference
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52","\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/17/#_2","title":"\u9898\u89e3","text":"/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\nvoid dfs(char *digits, char **ret, int *subscript, char *current, int end, char **map)\n{\n if (*digits == 0)\n {\n strcpy(ret[(*subscript)++], current);\n return;\n }\n int i = 0, target = *digits - '2';\n char *cur = map[target];\n while(*cur)\n {\n current[end] = *cur;\n dfs(digits + 1, ret, subscript, current, end + 1, map);\n cur++;\n }\n}\nchar ** letterCombinations(char * digits, int* returnSize){\n *returnSize = 1;\n char *cur = digits, len = 0, *charMap[] = {\"abc\", \"def\", \"ghi\", \"jkl\", \"mno\", \"pqrs\", \"tuv\", \"wxyz\"};\n while(*cur)\n {\n *returnSize *= (*cur == '7' || *cur == '9') ? 4 : 3;\n cur++;\n len++;\n }\n if (len == 0)\n {\n *returnSize = 0;\n return NULL;\n }\n char **ret = (char **)malloc(sizeof(char *) * *returnSize),\n *current = (char *)memset(malloc(sizeof(char) * (len + 1)), 0, sizeof(char) * (len + 1));\n for (int i = 0; i < *returnSize; i++)\n ret[i] = (int *)memset(malloc(sizeof(char) * (len + 1)), 0, sizeof(char) * (len + 1));\n int subscript = 0;\n dfs(digits, ret, &subscript, current, 0, charMap);\n return ret;\n}\n
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52","\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/1835/","title":"1835. \u200b\u6240\u6709\u200b\u6570\u5bf9\u200b\u6309\u4f4d\u200b\u4e0e\u200b\u7ed3\u679c\u200b\u7684\u200b\u5f02\u6216\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/1835/#_1","title":"\u9898\u76ee","text":"\u200b\u5217\u8868\u200b\u7684\u200b \u200b\u5f02\u6216\u200b\u548c\u200b\uff08XOR sum\uff09\u200b\u6307\u5bf9\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u8fdb\u884c\u200b\u6309\u4f4d\u200b XOR
\u200b\u8fd0\u7b97\u200b\u7684\u200b\u7ed3\u679c\u200b\u3002\u200b\u5982\u679c\u200b\u5217\u8868\u200b\u4e2d\u4ec5\u200b\u6709\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5176\u200b \u200b\u5f02\u6216\u200b\u548c\u200b \u200b\u5c31\u200b\u7b49\u4e8e\u200b\u8be5\u200b\u5143\u7d20\u200b\u3002
- \u200b\u4f8b\u5982\u200b\uff0c
[1,2,3,4]
\u200b\u7684\u200b \u200b\u5f02\u6216\u200b\u548c\u200b \u200b\u7b49\u4e8e\u200b 1 XOR 2 XOR 3 XOR 4 = 4
\uff0c\u200b\u800c\u200b [3]
\u200b\u7684\u200b \u200b\u5f02\u6216\u200b\u548c\u200b \u200b\u7b49\u4e8e\u200b 3
\u3002
\u200b\u7ed9\u200b\u4f60\u200b\u4e24\u4e2a\u200b\u4e0b\u6807\u200b \u200b\u4ece\u200b 0 \u200b\u5f00\u59cb\u200b \u200b\u8ba1\u6570\u200b\u7684\u200b\u6570\u7ec4\u200b arr1
\u200b\u548c\u200b arr2
\uff0c\u200b\u4e24\u200b\u6570\u7ec4\u200b\u5747\u200b\u7531\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u7ec4\u6210\u200b\u3002
\u200b\u6839\u636e\u200b\u6bcf\u4e2a\u200b\u00a0(i, j)
\u200b\u6570\u5bf9\u200b\uff0c\u200b\u6784\u9020\u200b\u4e00\u4e2a\u200b\u7531\u200b arr1[i] AND arr2[j]
\uff08\u200b\u6309\u4f4d\u200b AND
\u200b\u8fd0\u7b97\u200b\uff09\u200b\u7ed3\u679c\u200b\u7ec4\u6210\u200b\u7684\u200b\u5217\u8868\u200b\u3002\u200b\u5176\u4e2d\u200b 0 <= i < arr1.length
\u200b\u4e14\u200b 0 <= j < arr2.length
\u3002
\u200b\u8fd4\u56de\u200b\u4e0a\u8ff0\u200b\u5217\u8868\u200b\u7684\u200b \u200b\u5f02\u6216\u200b\u548c\u200b \u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aarr1 = [1,2,3], arr2 = [6,5]\n\u200b\u8f93\u51fa\u200b\uff1a0\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5217\u8868\u200b = [1 AND 6, 1 AND 5, 2 AND 6, 2 AND 5, 3 AND 6, 3 AND 5] = [0,1,2,0,2,1] \uff0c\n\u200b\u5f02\u6216\u200b\u548c\u200b = 0 XOR 1 XOR 2 XOR 0 XOR 2 XOR 1 = 0 \u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aarr1 = [12], arr2 = [4]\n\u200b\u8f93\u51fa\u200b\uff1a4\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5217\u8868\u200b = [12 AND 4] = [4] \uff0c\u200b\u5f02\u6216\u200b\u548c\u200b = 4 \u3002\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= arr1.length, arr2.length <= 105
0 <= arr1[i], arr2[j] <= 109
Reference
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/1835/#_2","title":"\u9898\u89e3","text":"\u200b\u8bbe\u200b\u4e24\u4e2a\u200b\u6570\u5217\u200b\\(A=\\{a_i\\}_m\\)\u200b\u4e0e\u200b\\(B=\\{b_j\\}_n\\)\uff0c\u200b\u5e76\u200b\u4f7f\u7528\u200b\u8fd0\u7b97\u7b26\u200b\\(\\otimes\\)\u200b\u8868\u793a\u200b \u200b\u5f02\u6216\u200b \u200b\u64cd\u4f5c\u200b\uff0c\u200b\u4f7f\u7528\u200b\u8fd0\u7b97\u7b26\u200b\\(\\land\\)\u200b\u8868\u793a\u200b \u200b\u4e0e\u200b \u200b\u64cd\u4f5c\u200b\uff0c\u200b\u5219\u200b\u672c\u9898\u200b\u7684\u200b\u7ed3\u679c\u200b\u4e3a\u200b\uff1a
\\[ f(A, B) = \\bigotimes_{i=1}^{m} \\bigotimes_{j=1}^n a_i\\land b_j \\] \u200b\u8003\u8651\u200b\u8868\u8fbe\u5f0f\u200b\\((a\\otimes b) \\land (a \\otimes c)\\)\uff1a
\\[ \\begin{aligned} & (a\\otimes b) \\land (a \\otimes c) \\\\ \\Leftrightarrow & ((a\\lor b)\\land (\\lnot a\\lor\\lnot b)) \\land ((a\\lor c)\\land (\\lnot a\\lor\\lnot c)) \\\\ \\Leftrightarrow & (a\\lor b)\\land (\\lnot a\\lor\\lnot b) \\land (a\\lor c)\\land (\\lnot a\\lor\\lnot c) \\\\ \\Leftrightarrow & (a\\land (b\\lor c)) \\land (a\\land (\\lnot b\\lor\\lnot c)) \\\\ \\Leftrightarrow & a\\land (b\\otimes c) \\end{aligned} \\] \u200b\u56e0\u6b64\u200b\uff0c\\(\\otimes\\)\u200b\u8fd0\u7b97\u200b\u5bf9\u200b\\(\\land\\)\u200b\u8fd0\u7b97\u200b\u6ee1\u8db3\u200b\u5206\u914d\u5f8b\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ \\begin{aligned} f(A, B) &= \\bigotimes_{i=1}^{m} \\bigotimes_{j=1}^n a_i\\land b_j \\\\ &= \\bigotimes_{i=1}^{m} \\left(a_{i}\\land\\bigotimes_{j=1}^n b_j\\right) \\\\ &= \\left(\\bigotimes_{i=1}^{m} a_i\\right)\\land\\left(\\bigotimes_{j=1}^n b_j\\right) \\end{aligned} \\] int getXORSum(int* arr1, int arr1Size, int* arr2, int arr2Size){\n int a = 0, b = 0, i = 0;\n for (i = 0; i < arr1Size; i++)\n a ^= arr1[i];\n for (i = 0; i < arr2Size; i++)\n b ^= arr2[i];\n return a & b;\n}\n
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/189/","title":"189. \u200b\u65cb\u8f6c\u200b\u6570\u7ec4","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/189/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5c06\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u00a0k\u00a0\u200b\u4e2a\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u5176\u4e2d\u200b\u00a0k\u00a0\u200b\u662f\u975e\u200b\u8d1f\u6570\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [1,2,3,4,5,6,7] \u200b\u548c\u200b k = 3\n\u200b\u8f93\u51fa\u200b: [5,6,7,1,2,3,4]\n\u200b\u89e3\u91ca\u200b:\n\u200b\u5411\u200b\u53f3\u200b\u65cb\u8f6c\u200b 1 \u200b\u6b65\u200b: [7,1,2,3,4,5,6]\n\u200b\u5411\u200b\u53f3\u200b\u65cb\u8f6c\u200b 2 \u200b\u6b65\u200b: [6,7,1,2,3,4,5]\n\u200b\u5411\u200b\u53f3\u200b\u65cb\u8f6c\u200b 3 \u200b\u6b65\u200b: [5,6,7,1,2,3,4]\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b: [-1,-100,3,99] \u200b\u548c\u200b k = 2\n\u200b\u8f93\u51fa\u200b: [3,99,-1,-100]\n\u200b\u89e3\u91ca\u200b: \n\u200b\u5411\u200b\u53f3\u200b\u65cb\u8f6c\u200b 1 \u200b\u6b65\u200b: [99,-1,-100,3]\n\u200b\u5411\u200b\u53f3\u200b\u65cb\u8f6c\u200b 2 \u200b\u6b65\u200b: [3,99,-1,-100]\n
\u200b\u8bf4\u660e\u200b\uff1a
- \u200b\u5c3d\u53ef\u80fd\u200b\u60f3\u51fa\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\uff0c\u200b\u81f3\u5c11\u200b\u6709\u200b\u4e09\u79cd\u200b\u4e0d\u540c\u200b\u7684\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\u3002
- \u200b\u8981\u6c42\u200b\u4f7f\u7528\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(O(1)\\)\u200b\u7684\u200b\u539f\u5730\u200b\u7b97\u6cd5\u200b\u3002
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/189/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5148\u200b\u53cd\u8f6c\u200b\u6574\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u518d\u200b\u4ee5\u200b\u7b2c\u200b\\(k\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\u4e3a\u754c\u200b\uff0c\u200b\u5206\u522b\u200b\u53cd\u8f6c\u200b\\(k\\)\u200b\u4e4b\u524d\u200b\u7684\u200b\u90e8\u5206\u200b\u4e0e\u200b\\(k\\)\u200b\u53ca\u200b\\(k\\)\u200b\u4e4b\u540e\u200b\u7684\u200b\u90e8\u5206\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
void Reverse(int* nums, int numsSize)\n{\n int head = 0, tail = numsSize - 1, temp = 0;\n while(tail > head)\n {\n temp = nums[head];\n nums[head] = nums[tail];\n nums[tail] = temp;\n tail--;\n head++;\n }\n}\nvoid rotate(int* nums, int numsSize, int k){\n if (numsSize < 2)\n return;\n k %= numsSize;\n Reverse(nums, numsSize);\n Reverse(nums, k);\n Reverse(nums + k, numsSize - k);\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/19/","title":"19. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u7684\u200b\u5012\u6570\u7b2c\u200bN\u200b\u4e2a\u200b\u8282\u70b9","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/19/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\uff0c\u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u7684\u200b\u5012\u6570\u7b2c\u200b\u00a0n\u00a0\u200b\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u5e76\u4e14\u200b\u8fd4\u56de\u200b\u94fe\u8868\u200b\u7684\u200b\u5934\u200b\u7ed3\u70b9\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
`` \u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b: 1->2->3->4->5, \u200b\u548c\u200b n = 2.
\u200b\u5f53\u200b\u5220\u9664\u200b\u4e86\u200b\u5012\u6570\u200b\u7b2c\u4e8c\u4e2a\u200b\u8282\u70b9\u200b\u540e\u200b\uff0c\u200b\u94fe\u8868\u200b\u53d8\u4e3a\u200b 1->2->3->5. ``
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u7ed9\u5b9a\u200b\u7684\u200b n\u00a0\u200b\u4fdd\u8bc1\u200b\u662f\u200b\u6709\u6548\u200b\u7684\u200b\u3002
\u200b\u8fdb\u9636\u200b\uff1a
\u200b\u4f60\u200b\u80fd\u200b\u5c1d\u8bd5\u200b\u4f7f\u7528\u200b\u4e00\u8d9f\u200b\u626b\u63cf\u200b\u5b9e\u73b0\u200b\u5417\u200b\uff1f
Reference
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/19/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5148\u200b\u627e\u5230\u200b\u5012\u6570\u7b2c\u200b n \u200b\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u518d\u200b\u8fdb\u884c\u200b\u5220\u9664\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode* removeNthFromEnd(struct ListNode* head, int n){\n struct ListNode *cur = head, *temp = NULL;\n int length = 1, i = 0;\n while(cur->next != NULL)\n {\n cur = cur->next;\n length++;\n }\n cur = head;\n for (i = 0; i < length - n - 1; i++)\n cur = cur->next;\n if (n == length)\n return cur->next;\n if (cur->next)\n {\n cur->next = cur->next->next;\n return head;\n }\n return NULL;\n}\n
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/198/","title":"198. \u200b\u6253\u5bb6\u52ab\u820d","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/198/#_1","title":"\u9898\u76ee","text":"\u200b\u4f60\u200b\u662f\u200b\u4e00\u4e2a\u200b\u4e13\u4e1a\u200b\u7684\u200b\u5c0f\u5077\u200b\uff0c\u200b\u8ba1\u5212\u200b\u5077\u7a83\u200b\u6cbf\u8857\u200b\u7684\u200b\u623f\u5c4b\u200b\u3002\u200b\u6bcf\u95f4\u623f\u200b\u5185\u200b\u90fd\u200b\u85cf\u6709\u200b\u4e00\u5b9a\u200b\u7684\u200b\u73b0\u91d1\u200b\uff0c\u200b\u5f71\u54cd\u200b\u4f60\u200b\u5077\u7a83\u200b\u7684\u200b\u552f\u4e00\u200b\u5236\u7ea6\u200b\u56e0\u7d20\u200b\u5c31\u662f\u200b\u76f8\u90bb\u200b\u7684\u200b\u623f\u5c4b\u200b\u88c5\u6709\u200b\u76f8\u4e92\u200b\u8fde\u901a\u200b\u7684\u200b\u9632\u76d7\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u5982\u679c\u200b\u4e24\u95f4\u200b\u76f8\u90bb\u200b\u7684\u200b\u623f\u5c4b\u200b\u5728\u200b\u540c\u4e00\u200b\u665a\u4e0a\u200b\u88ab\u200b\u5c0f\u5077\u200b\u95ef\u5165\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u62a5\u8b66\u200b\u3002
\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u4ee3\u8868\u200b\u6bcf\u4e2a\u200b\u623f\u5c4b\u200b\u5b58\u653e\u200b\u91d1\u989d\u200b\u7684\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u4f60\u200b \u200b\u4e0d\u200b\u89e6\u52a8\u200b\u8b66\u62a5\u200b\u88c5\u7f6e\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b \uff0c\u200b\u4e00\u591c\u200b\u4e4b\u5185\u200b\u80fd\u591f\u200b\u5077\u7a83\u200b\u5230\u200b\u7684\u200b\u6700\u9ad8\u200b\u91d1\u989d\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a[1,2,3,1]\n\u200b\u8f93\u51fa\u200b\uff1a4\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5077\u7a83\u200b 1 \u200b\u53f7\u200b\u623f\u5c4b\u200b (\u200b\u91d1\u989d\u200b = 1) \uff0c\u200b\u7136\u540e\u200b\u5077\u7a83\u200b 3 \u200b\u53f7\u200b\u623f\u5c4b\u200b (\u200b\u91d1\u989d\u200b = 3)\u3002\n\u00a0 \u200b\u5077\u7a83\u200b\u5230\u200b\u7684\u200b\u6700\u9ad8\u200b\u91d1\u989d\u200b = 1 + 3 = 4 \u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1a[2,7,9,3,1]\n\u200b\u8f93\u51fa\u200b\uff1a12\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5077\u7a83\u200b 1 \u200b\u53f7\u200b\u623f\u5c4b\u200b (\u200b\u91d1\u989d\u200b = 2), \u200b\u5077\u7a83\u200b 3 \u200b\u53f7\u200b\u623f\u5c4b\u200b (\u200b\u91d1\u989d\u200b = 9)\uff0c\u200b\u63a5\u7740\u200b\u5077\u7a83\u200b 5 \u200b\u53f7\u200b\u623f\u5c4b\u200b (\u200b\u91d1\u989d\u200b = 1)\u3002\n\u00a0 \u200b\u5077\u7a83\u200b\u5230\u200b\u7684\u200b\u6700\u9ad8\u200b\u91d1\u989d\u200b = 2 + 9 + 1 = 12 \u3002\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= nums.length <= 100\n0 <= nums[i] <= 400\n
Reference
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/198/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\uff0c\u200b\u4ee4\u200b\\(f(i)\\)\u200b\u8868\u793a\u200b\u524d\u200b\\(i\\)\u200b\u4e2a\u200b\u623f\u95f4\u200b\u6240\u200b\u80fd\u200b\u83b7\u53d6\u200b\u7684\u200b\u6700\u5927\u200b\u91d1\u989d\u200b\uff0c\u200b\u5219\u200b\u6709\u200b\uff1a
\\[ f(i + 1) = \\max\\left\\{f(i), a_{i + 1} + f(i - 1)\\right\\} \\] \u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
#define MAX(x, y) (x > y ? x : y)\nint rob(int* nums, int numsSize){\n if (numsSize < 2)\n return numsSize ? *nums : 0;\n int *dp = (int *)memset(malloc(sizeof(int) * (numsSize)), 0, sizeof(int) * (numsSize)), i = 0;\n dp[0] = *nums;\n dp[1] = MAX(nums[0], nums[1]);\n for (i = 2; i < numsSize; i++)\n dp[i] = MAX(dp[i-2] + nums[i], dp[i-1]);\n return dp[numsSize-1];\n}\n
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/2/","title":"2. \u200b\u4e24\u200b\u6570\u200b\u76f8\u52a0","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u9012\u5f52","\u94fe\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/2/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e24\u4e2a\u200b\u00a0\u200b\u975e\u7a7a\u200b \u200b\u7684\u200b\u94fe\u8868\u200b\uff0c\u200b\u8868\u793a\u200b\u4e24\u4e2a\u200b\u975e\u8d1f\u200b\u7684\u200b\u6574\u6570\u200b\u3002\u200b\u5b83\u4eec\u200b\u6bcf\u4f4d\u200b\u6570\u5b57\u200b\u90fd\u200b\u662f\u200b\u6309\u7167\u200b\u00a0\u200b\u9006\u5e8f\u200b\u00a0\u200b\u7684\u200b\u65b9\u5f0f\u200b\u5b58\u50a8\u200b\u7684\u200b\uff0c\u200b\u5e76\u4e14\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\u53ea\u80fd\u200b\u5b58\u50a8\u200b\u00a0\u200b\u4e00\u4f4d\u200b\u00a0\u200b\u6570\u5b57\u200b\u3002
\u200b\u8bf7\u200b\u4f60\u200b\u5c06\u200b\u4e24\u4e2a\u200b\u6570\u200b\u76f8\u52a0\u200b\uff0c\u200b\u5e76\u200b\u4ee5\u200b\u76f8\u540c\u200b\u5f62\u5f0f\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u8868\u793a\u200b\u548c\u200b\u7684\u200b\u94fe\u8868\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u9664\u4e86\u200b\u6570\u5b57\u200b 0
\u200b\u4e4b\u5916\u200b\uff0c\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u6570\u90fd\u200b\u4e0d\u4f1a\u200b\u4ee5\u200b 0
\u00a0\u200b\u5f00\u5934\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1al1 = [2,4,3], l2 = [5,6,4]\n\u200b\u8f93\u51fa\u200b\uff1a[7,0,8]\n\u200b\u89e3\u91ca\u200b\uff1a342 + 465 = 807.\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1al1 = [0], l2 = [0]\n\u200b\u8f93\u51fa\u200b\uff1a[0]\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1al1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]\n\u200b\u8f93\u51fa\u200b\uff1a[8,9,9,9,0,0,0,1]\n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u6bcf\u4e2a\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b\u6570\u5728\u200b\u8303\u56f4\u200b
[1, 100]
\u200b\u5185\u200b 0 <= Node.val <= 9
- \u200b\u9898\u76ee\u200b\u6570\u636e\u200b\u4fdd\u8bc1\u200b\u5217\u8868\u200b\u8868\u793a\u200b\u7684\u200b\u6570\u5b57\u200b\u4e0d\u200b\u542b\u200b\u524d\u5bfc\u200b\u96f6\u200b
","tags":["\u9012\u5f52","\u94fe\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/2/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u9012\u5f52\u200b\u7684\u200b\u601d\u60f3\u200b\uff0c\u200b\u5c06\u200b\u8ba1\u7b97\u200b\u52a0\u6cd5\u200b\u7684\u200b\u95ee\u9898\u200b\u5206\u89e3\u200b\u4e3a\u200b\u8ba1\u7b97\u200b\u6700\u540e\u200b\u4e00\u4f4d\u200b\u76f8\u52a0\u200b\u548c\u200b\u8ba1\u7b97\u200b\u5269\u4f59\u200b\u90e8\u5206\u200b\u76f8\u52a0\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u95ee\u9898\u200b\u3002
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode *getNode(int val, struct ListNode *next)\n{\n struct ListNode *ret = (struct ListNode *)malloc(sizeof(struct ListNode));\n ret->val = val;\n ret->next = next;\n return ret;\n}\nstruct ListNode *recur(struct ListNode *l1, struct ListNode *l2, int flag)\n{\n if (!l1)\n return flag ? recur(getNode(1, NULL), l2, 0) : l2;\n if (!l2)\n return flag ? recur(getNode(1, NULL), l1, 0) : l1;\n int ret = l1->val + l2->val + (flag ? 1 : 0);\n return getNode(ret - (ret >= 10 ? 10 : 0), recur(l1->next, l2->next, ret >= 10));\n}\nstruct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){\n return recur(l1, l2, 0);\n}\n
Reference
","tags":["\u9012\u5f52","\u94fe\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/20/","title":"20. \u200b\u6709\u6548\u200b\u7684\u200b\u62ec\u53f7","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6808","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/20/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u53ea\u200b\u5305\u62ec\u200b '('
\uff0c')'
\uff0c'{'
\uff0c'}'
\uff0c'['
\uff0c']'
\u00a0\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b s
\uff0c\u200b\u5224\u65ad\u200b\u5b57\u7b26\u4e32\u200b\u662f\u5426\u200b\u6709\u6548\u200b\u3002
\u200b\u6709\u6548\u200b\u5b57\u7b26\u4e32\u200b\u9700\u200b\u6ee1\u8db3\u200b\uff1a
- \u200b\u5de6\u200b\u62ec\u53f7\u200b\u5fc5\u987b\u200b\u7528\u200b\u76f8\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u53f3\u200b\u62ec\u53f7\u200b\u95ed\u5408\u200b\u3002
- \u200b\u5de6\u200b\u62ec\u53f7\u200b\u5fc5\u987b\u200b\u4ee5\u200b\u6b63\u786e\u200b\u7684\u200b\u987a\u5e8f\u200b\u95ed\u5408\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"()\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"()[]{}\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"(]\"\n\u200b\u8f93\u51fa\u200b\uff1afalse\n
\u200b\u793a\u4f8b\u200b\u00a04\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"([)]\"\n\u200b\u8f93\u51fa\u200b\uff1afalse\n
\u200b\u793a\u4f8b\u200b\u00a05\uff1a
\u200b\u8f93\u5165\u200b\uff1as = \"{[]}\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
Reference
","tags":["\u6808","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/20/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u6808\u200b\u6a21\u62df\u200b\u5339\u914d\u200b\u8fc7\u7a0b\u200b
- \u200b\u9047\u5230\u200b\u5de6\u200b\u62ec\u53f7\u200b\u65f6\u5165\u200b\u6808\u200b\uff1b
- \u200b\u9047\u5230\u200b\u53f3\u200b\u62ec\u53f7\u200b\u65f6\u200b\uff0c\u200b\u68c0\u67e5\u200b\u6808\u9876\u200b\u62ec\u53f7\u200b\u662f\u5426\u200b\u4e0e\u200b\u53f3\u200b\u62ec\u53f7\u200b\u5339\u914d\u200b\uff0c\u200b\u82e5\u200b\u5339\u914d\u200b\u5219\u200b\u51fa\u6808\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b
false
\uff1b - \u200b\u5b8c\u6210\u200b\u5339\u914d\u200b\u8fc7\u7a0b\u200b\u540e\u200b\u68c0\u67e5\u200b\u6808\u200b\u662f\u5426\u200b\u4e3a\u7a7a\u200b\uff0c\u200b\u82e5\u4e3a\u200b\u7a7a\u200b\u8fd4\u56de\u200b
true
\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bfalse
\u3002
bool isValid(char * s){\n int maxLen = strlen(s), top = 0;\n char *holding = malloc(sizeof(char) * maxLen), *cur = s;\n while(*cur)\n {\n switch(*cur)\n {\n case '(':\n case '[':\n case '{':\n holding[top] = *cur;\n top++;\n break;\n case ')':\n if (top == 0 || holding[top - 1] != '(')\n return false;\n top--;\n break;\n case ']':\n case '}':\n if (top == 0 || holding[top - 1] != (*cur) - 2)\n return false;\n top--;\n break;\n }\n cur++;\n }\n return !top;\n}\n
","tags":["\u6808","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/204/","title":"204. \u200b\u8ba1\u6570\u200b\u8d28\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/204/#_1","title":"\u9898\u76ee","text":"\u200b\u7edf\u8ba1\u200b\u6240\u6709\u200b\u5c0f\u4e8e\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b n \u200b\u7684\u200b\u8d28\u6570\u200b\u7684\u200b\u6570\u91cf\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b: 10\n\u200b\u8f93\u51fa\u200b: 4\n\u200b\u89e3\u91ca\u200b: \u200b\u5c0f\u4e8e\u200b 10 \u200b\u7684\u200b\u8d28\u6570\u200b\u4e00\u5171\u200b\u6709\u200b 4 \u200b\u4e2a\u200b, \u200b\u5b83\u4eec\u200b\u662f\u200b 2, 3, 5, 7 \u3002\n
Reference
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/204/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4ece\u200b2\u200b\u5f00\u59cb\u200b\uff0c\u200b\u5728\u200b\u6570\u5217\u200b\\(2, 3, \\cdots, n\\)\u200b\u4e2d\u5212\u200b\u53bb\u200b\u6240\u6709\u200b2\u200b\u7684\u200b\u500d\u6570\u200b\uff0c\u200b\u5269\u4e0b\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6ca1\u6709\u200b\u88ab\u5212\u200b\u53bb\u200b\u7684\u200b\u6570\u5b57\u200b3\u200b\u5373\u200b\u4e3a\u200b\u8d28\u6570\u200b\uff0c\u200b\u518d\u200b\u82b1\u65d7\u200b\u6240\u6709\u200b3\u200b\u7684\u200b\u500d\u6570\u200b\uff0c\u200b\u5269\u4e0b\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6ca1\u6709\u200b\u88ab\u5212\u200b\u53bb\u200b\u7684\u200b\u6570\u5b57\u200b5\u200b\u5373\u200b\u4e3a\u200b\u8d28\u6570\u200b\u3002\u200b\u91cd\u590d\u200b\u5982\u200b\u4e0a\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u76f4\u5230\u200b\u68c0\u67e5\u200b\u5b8c\u200b\u6240\u6709\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b\\(\\sqrt n\\)\u200b\u7684\u200b\u6574\u6570\u200b\uff0c\u200b\u5373\u200b\u5b8c\u6210\u200b\u3002
\u200b\u6570\u5b57\u200b\u662f\u5426\u200b\u5212\u53bb\u200b\u7684\u200b\u72b6\u6001\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u63a7\u5236\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200b\u4e00\u4e2a\u200b\u7c7b\u578b\u200b\u4e2d\u200b\u7684\u200b1\u200b\u4f4d\u200b\u8868\u793a\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int countPrimes(int n)\n{\n unsigned char *map = memset(malloc(sizeof(unsigned char) * ((n + 1 >> 3) + 1)), 0x55, sizeof(unsigned char) * ((n + 1 >> 3) + 1));\n int i = 0, j, ret = 0, sq = (int)sqrt(n), increment = 1, start = 2;\n *map = 0x51;\n for (i = 3; i <= sq; i++)\n if (!(map[i >> 3] & (unsigned char)1 << (i & 7)))\n for (j = i * 3; j <= n; j += i << 1)\n map[j >> 3] |= (unsigned char)1 << (j & 7);\n for (i = 2; i < n; i++)\n if (!(map[i >> 3] & (unsigned char)1 << (i & 7)))\n ret++;\n return ret;\n}\n
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/206/","title":"206. \u200b\u53cd\u8f6c\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/206/#_1","title":"\u9898\u76ee","text":"\u200b\u53cd\u8f6c\u200b\u4e00\u4e2a\u200b\u5355\u94fe\u200b\u8868\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b: 1->2->3->4->5->NULL\n\u200b\u8f93\u51fa\u200b: 5->4->3->2->1->NULL\n
\u200b\u8fdb\u9636\u200b\uff1a \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u8fed\u4ee3\u200b\u6216\u200b\u9012\u5f52\u200b\u5730\u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b\u3002\u200b\u4f60\u200b\u80fd\u5426\u200b\u7528\u200b\u4e24\u79cd\u200b\u65b9\u6cd5\u200b\u89e3\u51b3\u200b\u8fd9\u9053\u9898\u200b\uff1f
Reference
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/206/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u53ea\u200b\u9700\u8981\u200b\u5c06\u200b\u94fe\u8868\u200b\u7ed3\u6784\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u6307\u9488\u200b\u53cd\u8f6c\u200b\uff0c\u200b\u5373\u200b\u6307\u5411\u200b\u524d\u200b\u4e00\u200b\u8282\u70b9\u200b\u7684\u200b\u6307\u9488\u200b\u73b0\u5728\u200b\u6307\u5411\u200b\u540e\u200b\u4e00\u200b\u8282\u70b9\u200b\u3002\u200b\u5b9a\u4e49\u200b\u4e24\u4e2a\u200b\u6307\u9488\u200b\u6307\u5411\u200b\u9700\u8981\u200b\u53cd\u8f6c\u200b\u90e8\u5206\u200b\u7684\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u5c06\u200b\u540e\u200b\u4e00\u200b\u6307\u9488\u200b\u7684\u200bnext
\u200b\u57df\u200b\u6307\u5411\u200b\u524d\u200b\u4e00\u200b\u6307\u9488\u200b\u3002\u200b\u6539\u200b\u53cd\u8f6c\u200b\u64cd\u4f5c\u200b\u7834\u574f\u200b\u4e86\u200b\u540e\u200b\u4e00\u200b\u6307\u9488\u200b\u539f\u6709\u200b\u7684\u200bnext
\u200b\u57df\u200b\uff0c\u200b\u9700\u8981\u200b\u4e00\u4e2a\u200b\u989d\u5916\u200b\u7684\u200b\u6307\u9488\u200b\u7528\u4e8e\u200b\u5411\u524d\u200b\u79fb\u52a8\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\n\nstruct ListNode* reverseList(struct ListNode* head){\n if (!head || !(head->next))\n return head;\n struct ListNode *cur1 = head, *cur2 = head->next, *cur3 = cur2->next;\n head->next = NULL;\n while (cur3)\n {\n cur2->next = cur1;\n cur1 = cur2;\n cur2 = cur3;\n cur3 = cur3->next;\n }\n cur2->next = cur1;\n return cur2;\n}\n
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/21/","title":"21. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/21/#_1","title":"\u9898\u76ee","text":"\u200b\u5c06\u200b\u4e24\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868\u200b\u5408\u5e76\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b \u200b\u5347\u5e8f\u200b \u200b\u94fe\u8868\u200b\u5e76\u200b\u8fd4\u56de\u200b\u3002\u200b\u65b0\u200b\u94fe\u8868\u200b\u662f\u200b\u901a\u8fc7\u200b\u62fc\u63a5\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u4e24\u4e2a\u200b\u94fe\u8868\u200b\u7684\u200b\u6240\u6709\u200b\u8282\u70b9\u200b\u7ec4\u6210\u200b\u7684\u200b\u3002\u00a0
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b\uff1a1->2->4, 1->3->4\n\u200b\u8f93\u51fa\u200b\uff1a1->1->2->3->4->4\n
Reference
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/21/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6bd4\u8f83\u200b\u4e24\u4e2a\u200b\u94fe\u8868\u200b\u7684\u200b\u5934\u200b\u8282\u70b9\u200b\uff0c\u200b\u5c06\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u8282\u70b9\u200b\u5e76\u5165\u200b\u7ed3\u679c\u200b\u94fe\u8868\u200b\u4e2d\u200b\uff0c\u200b\u540c\u65f6\u200b\u94fe\u8868\u200b\u5934\u200b\u540e\u79fb\u200b\uff0c\u200b\u9012\u5f52\u200b\u5904\u7406\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){\n if (!l1)\n return l2;\n if (!l2)\n return l1;\n if (l1->val < l2->val)\n {\n l1->next = mergeTwoLists(l1->next, l2);\n return l1;\n }\n else\n {\n l2->next = mergeTwoLists(l1, l2->next);\n return l2;\n }\n}\n
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/217/","title":"217. \u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/217/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\uff0c\u200b\u5224\u65ad\u200b\u662f\u5426\u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\u3002
\u200b\u5982\u679c\u200b\u4efb\u610f\u200b\u4e00\u503c\u200b\u5728\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u81f3\u5c11\u200b\u4e24\u6b21\u200b\uff0c\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200btrue
\u3002\u200b\u5982\u679c\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u90fd\u200b\u4e0d\u200b\u76f8\u540c\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bfalse
\u3002\u00a0
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [1,2,3,1]\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: [1,2,3,4]\n\u200b\u8f93\u51fa\u200b: false\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a
\u200b\u8f93\u5165\u200b: [1,1,1,3,3,4,3,2,4,2]\n\u200b\u8f93\u51fa\u200b: true\n
Reference
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/217/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5c06\u200b\u6570\u7ec4\u200b\u6392\u5e8f\u200b\u540e\u200b\u68c0\u67e5\u200b\u662f\u5426\u200b\u6709\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int comp(const void *a, const void *b)\n{\n return *(int*)a - *(int*)b;\n}\nbool containsDuplicate(int* nums, int numsSize){\n if (numsSize < 2)\n return false;\n qsort(nums, numsSize, sizeof(int), comp);\n int i = 0;\n for (i = 1; i<numsSize; i++)\n if (nums[i] == nums[i - 1])\n return true;\n return false;\n}\n
","tags":["\u6570\u7ec4","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/22/","title":"22. \u200b\u62ec\u53f7\u200b\u751f\u6210","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/22/#_1","title":"\u9898\u76ee","text":"\u200b\u6570\u5b57\u200b n
\u00a0\u200b\u4ee3\u8868\u200b\u751f\u6210\u200b\u62ec\u53f7\u200b\u7684\u200b\u5bf9\u6570\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u80fd\u591f\u200b\u751f\u6210\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u5e76\u4e14\u200b \u200b\u6709\u6548\u200b\u7684\u200b \u200b\u62ec\u53f7\u200b\u7ec4\u5408\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1an = 3\n\u200b\u8f93\u51fa\u200b\uff1a[\"((()))\",\"(()())\",\"(())()\",\"()(())\",\"()()()\"]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1an = 1\n\u200b\u8f93\u51fa\u200b\uff1a[\"()\"]\n
\u200b\u63d0\u793a\u200b\uff1a
Reference
","tags":["\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/22/#_2","title":"\u9898\u89e3","text":"\u200b\u56de\u6eaf\u200b\u7b97\u6cd5\u200b
- \u200b\u5f53\u200b\u5de6\u200b\u62ec\u53f7\u200b\u6570\u91cf\u200b\u5c0f\u4e8e\u200b\u62ec\u53f7\u200b\u5bf9\u6570\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6dfb\u52a0\u200b\u5de6\u200b\u62ec\u53f7\u200b
- \u200b\u5f53\u53f3\u200b\u62ec\u53f7\u200b\u6570\u91cf\u200b\u5c0f\u4e8e\u200b\u5de6\u200b\u62ec\u53f7\u200b\u6570\u91cf\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6dfb\u52a0\u200b\u53f3\u200b\u62ec\u53f7\u200b
\u200b\u6309\u7167\u200b\u5982\u200b\u4e0a\u200b\u65b9\u6cd5\u200b\u751f\u6210\u200b\u7684\u200b\u62ec\u53f7\u200b\u7ec4\u5408\u200b\u53ef\u4ee5\u200b\u4fdd\u8bc1\u200b\u4e00\u5b9a\u200b\u662f\u200b\u6709\u6548\u200b\u7684\u200b\u3002
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\n\nvoid dfs(char *currentStr, int n, int left, int right, char **ret, int *returnSize)\n{\n if (left == n && right == n)\n {\n ret[*returnSize] = (char *)malloc(sizeof(char) * (2 * n + 1));\n strcpy(ret[*returnSize], currentStr);\n *returnSize += 1;\n return;\n }\n if (left < n)\n {\n currentStr[left + right] = '(';\n dfs(currentStr, n, left + 1, right, ret, returnSize);\n }\n if (right < left)\n {\n currentStr[left + right] = ')';\n dfs(currentStr, n, left, right + 1, ret, returnSize);\n }\n}\nchar ** generateParenthesis(int n, int* returnSize){\n const int maxLen = 10000;\n *returnSize = 0;\n char **ret = (char **)malloc(sizeof(char *) * maxLen),\n *buffer = (char *)memset(malloc(sizeof(char) * (2 * n + 1)), 0, sizeof(char) * (2 * n + 1));\n dfs(buffer, n, 0, 0, ret, returnSize);\n return ret;\n}\n
","tags":["\u5b57\u7b26\u4e32","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/23/","title":"23. \u200b\u5408\u5e76\u200bK\u200b\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u5806","\u94fe\u8868","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/23/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\u6570\u7ec4\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u94fe\u8868\u200b\u90fd\u200b\u5df2\u7ecf\u200b\u6309\u200b\u5347\u5e8f\u200b\u6392\u5217\u200b\u3002
\u200b\u8bf7\u200b\u4f60\u200b\u5c06\u200b\u6240\u6709\u200b\u94fe\u8868\u200b\u5408\u5e76\u200b\u5230\u200b\u4e00\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868\u200b\u4e2d\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5408\u5e76\u200b\u540e\u200b\u7684\u200b\u94fe\u8868\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1alists = [[1,4,5],[1,3,4],[2,6]]\n\u200b\u8f93\u51fa\u200b\uff1a[1,1,2,3,4,4,5,6]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u94fe\u8868\u200b\u6570\u7ec4\u200b\u5982\u4e0b\u200b\uff1a\n[\n 1->4->5,\n 1->3->4,\n 2->6\n]\n\u200b\u5c06\u200b\u5b83\u4eec\u200b\u5408\u5e76\u200b\u5230\u200b\u4e00\u4e2a\u200b\u6709\u5e8f\u200b\u94fe\u8868\u200b\u4e2d\u200b\u5f97\u5230\u200b\u3002\n1->1->2->3->4->4->5->6\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1alists = []\n\u200b\u8f93\u51fa\u200b\uff1a[]\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1alists = [[]]\n\u200b\u8f93\u51fa\u200b\uff1a[]\n
\u200b\u63d0\u793a\u200b\uff1a
k == lists.length
0 <= k <= 10^4
0 <= lists[i].length <= 500
-10^4 <= lists[i][j] <= 10^4
lists[i]
\u200b\u6309\u200b \u200b\u5347\u5e8f\u200b \u200b\u6392\u5217\u200b lists[i].length
\u200b\u7684\u200b\u603b\u548c\u200b\u4e0d\u200b\u8d85\u8fc7\u200b 10^4
Reference
","tags":["\u5806","\u94fe\u8868","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/23/#_2","title":"\u9898\u89e3","text":"\u200b\u6700\u200b\u76f4\u63a5\u200b\u7684\u200b\u5408\u5e76\u200b\u601d\u8def\u200b\u662f\u200b\u6309\u7167\u200b\u987a\u5e8f\u200b\u5bf9\u200b\u94fe\u8868\u200b\u8fdb\u884c\u200b\u5408\u5e76\u200b\u3002\u200b\u8003\u8651\u200b\u5230\u200b\u5408\u5e76\u200b\u540e\u200b\u94fe\u8868\u200b\u53d8\u200b\u957f\u200b\uff0c\u200b\u5e73\u5747\u200b\u6bcf\u6b21\u200b\u5408\u5e76\u200b\u9700\u8981\u200b\u82b1\u8d39\u200b\\(\\mathcal O(MN)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\uff0c\u200b\u5171\u9700\u200b\u5408\u5e76\u200b\\(\\mathcal O(M)\\)\u200b\u6b21\u200b\uff0c\u200b\u56e0\u6b64\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(M^2N)\\)
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\n\nstruct ListNode* mergeLists(struct ListNode* l1, struct ListNode* l2);\nstruct ListNode* mergeKLists(struct ListNode** lists, int listsSize){\n if (!listsSize)\n return NULL;\n struct ListNode *head = lists[0];\n for (int i = 1; i<listsSize; i++)\n {\n if (!head)\n {\n head = lists[i];\n continue;\n }\n head = mergeLists(head, lists[i]);\n }\n return head;\n}\n\nstruct ListNode* mergeLists(struct ListNode* l1, struct ListNode* l2){\n if (!l1)\n return l2;\n if (!l2)\n return l1;\n if (l1->val < l2->val)\n {\n l1->next = mergeLists(l1->next, l2);\n return l1;\n }\n else\n {\n l2->next = mergeLists(l1, l2->next);\n return l2;\n }\n}\n
\u200b\u5982\u679c\u200b\u4f7f\u7528\u200b\u4e24\u200b\u4e24\u200b\u5408\u5e76\u200b\u7684\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5408\u5e76\u200b\u64cd\u4f5c\u200b\u7684\u200b\u5e73\u5747\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u964d\u4f4e\u200b\u81f3\u200b\\(\\mathcal O(N\\log M)\\)\uff0c\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u53d8\u4e3a\u200b\\(\\mathcal O(MN\\log M)\\)\u3002
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\n\nstruct ListNode* mergeLists(struct ListNode* l1, struct ListNode* l2);\nstruct ListNode* mergeKLists(struct ListNode** lists, int listsSize){\n if (!listsSize)\n return NULL;\n else if (listsSize == 1)\n return lists[0];\n else if (listsSize == 2)\n return mergeLists(lists[0], lists[1]);\n struct ListNode *head = lists[0];\n int step = (listsSize + 1) >> 1;\n for (int i = 0; i < step; i++)\n {\n if (i + step < listsSize)\n lists[i] = mergeLists(lists[i], lists[i + step]);\n }\n return mergeKLists(lists, step);\n}\n\nstruct ListNode* mergeLists(struct ListNode* l1, struct ListNode* l2){\n if (!l1)\n return l2;\n if (!l2)\n return l1;\n if (l1->val < l2->val)\n {\n l1->next = mergeLists(l1->next, l2);\n return l1;\n }\n else\n {\n l2->next = mergeLists(l1, l2->next);\n return l2;\n }\n}\n
","tags":["\u5806","\u94fe\u8868","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/234/","title":"234. \u200b\u56de\u6587\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/234/#_1","title":"\u9898\u76ee","text":"\u200b\u8bf7\u200b\u5224\u65ad\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\u662f\u5426\u200b\u4e3a\u200b\u56de\u6587\u200b\u94fe\u8868\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: 1->2\n\u200b\u8f93\u51fa\u200b: false\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: 1->2->2->1\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u8fdb\u9636\u200b\uff1a
\u200b\u4f60\u200b\u80fd\u5426\u200b\u7528\u200b\\(O(n)\\)\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u548c\u200b\\(O(1)\\)\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u89e3\u51b3\u200b\u6b64\u9898\u200b\uff1f
Reference
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/234/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u53cd\u5e8f\u200b\u6784\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u94fe\u8868\u200b\uff0c\u200b\u6bd4\u8f83\u200b\u4e24\u4e2a\u200b\u94fe\u8868\u200b\u662f\u5426\u200b\u76f8\u540c\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode *getNode(int val, struct ListNode *next)\n{\n struct ListNode *ret = (struct ListNode *)malloc(sizeof(struct ListNode));\n ret->val = val;\n ret->next = next;\n return ret;\n}\n\nbool isPalindrome(struct ListNode* head){\n int len = 0;\n struct ListNode *reversed = NULL, *cur1 = head, *cur2 = NULL;\n while(cur1 != NULL)\n {\n reversed = getNode(cur1->val, reversed);\n cur1 = cur1->next;\n len++;\n }\n cur1 = head;\n cur2 = reversed;\n for (int i = 0; i < len / 2; i++)\n {\n if (cur1->val != cur2->val)\n return false;\n cur1 = cur1->next;\n cur2 = cur2->next;\n }\n return true;\n}\n
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/237/","title":"237. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/237/#_1","title":"\u9898\u76ee","text":"\u200b\u8bf7\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u53ef\u4ee5\u200b\u5220\u9664\u200b\u67d0\u4e2a\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7ed9\u5b9a\u200b\u7684\u200b\uff08\u200b\u975e\u200b\u672b\u5c3e\u200b\uff09\u200b\u8282\u70b9\u200b\u3002\u200b\u4f20\u5165\u200b\u51fd\u6570\u200b\u7684\u200b\u552f\u4e00\u200b\u53c2\u6570\u200b\u4e3a\u200b \u200b\u8981\u200b\u88ab\u200b\u5220\u9664\u200b\u7684\u200b\u8282\u70b9\u200b \u3002
\u200b\u73b0\u6709\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b --\u00a0head =\u00a0[4,5,1,9]\uff0c\u200b\u5b83\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b:
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [4,5,1,9], node = 5\n\u200b\u8f93\u51fa\u200b\uff1a[4,1,9]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u7ed9\u5b9a\u200b\u4f60\u200b\u94fe\u8868\u200b\u4e2d\u503c\u200b\u4e3a\u200b\u00a05\u00a0\u200b\u7684\u200b\u7b2c\u4e8c\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5728\u200b\u8c03\u7528\u200b\u4e86\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u4e4b\u540e\u200b\uff0c\u200b\u8be5\u200b\u94fe\u8868\u200b\u5e94\u53d8\u200b\u4e3a\u200b 4 -> 1 -> 9.\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [4,5,1,9], node = 1\n\u200b\u8f93\u51fa\u200b\uff1a[4,5,9]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u7ed9\u5b9a\u200b\u4f60\u200b\u94fe\u8868\u200b\u4e2d\u503c\u200b\u4e3a\u200b\u00a01\u00a0\u200b\u7684\u200b\u7b2c\u4e09\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5728\u200b\u8c03\u7528\u200b\u4e86\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u4e4b\u540e\u200b\uff0c\u200b\u8be5\u200b\u94fe\u8868\u200b\u5e94\u53d8\u200b\u4e3a\u200b 4 -> 5 -> 9.\n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u94fe\u8868\u200b\u81f3\u5c11\u200b\u5305\u542b\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\u3002
- \u200b\u94fe\u8868\u200b\u4e2d\u200b\u6240\u6709\u200b\u8282\u70b9\u200b\u7684\u200b\u503c\u200b\u90fd\u200b\u662f\u200b\u552f\u4e00\u200b\u7684\u200b\u3002
- \u200b\u7ed9\u5b9a\u200b\u7684\u200b\u8282\u70b9\u200b\u4e3a\u200b\u975e\u200b\u672b\u5c3e\u200b\u8282\u70b9\u200b\u5e76\u4e14\u200b\u4e00\u5b9a\u200b\u662f\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u6709\u6548\u200b\u8282\u70b9\u200b\u3002
- \u200b\u4e0d\u8981\u200b\u4ece\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u4e2d\u200b\u8fd4\u56de\u200b\u4efb\u4f55\u200b\u7ed3\u679c\u200b\u3002
Reference
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/237/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5c06\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u7684\u200b\u503c\u200b\u590d\u5236\u5230\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\uff0c\u200b\u7136\u540e\u200b\u5220\u53bb\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u3002\uff08\u200b\u5df2\u77e5\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u4e00\u5b9a\u200b\u4e0d\u662f\u200b\u672b\u5c3e\u200b\u8282\u70b9\u200b\uff09
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
void deleteNode(struct ListNode* node) {\n node->val = node->next->val;\n node->next = node->next->next;\n}\n
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/24/","title":"24. \u200b\u4e24\u200b\u4e24\u200b\u4ea4\u6362\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/24/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\uff0c\u200b\u4e24\u200b\u4e24\u200b\u4ea4\u6362\u200b\u5176\u4e2d\u200b\u76f8\u90bb\u200b\u7684\u200b\u8282\u70b9\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u4ea4\u6362\u200b\u540e\u200b\u7684\u200b\u94fe\u8868\u200b\u3002
\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u53ea\u662f\u200b\u5355\u7eaf\u200b\u7684\u200b\u6539\u53d8\u200b\u8282\u70b9\u200b\u5185\u90e8\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u800c\u662f\u200b\u9700\u8981\u200b\u5b9e\u9645\u200b\u7684\u200b\u8fdb\u884c\u200b\u8282\u70b9\u200b\u4ea4\u6362\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u7ed9\u5b9a\u200b 1->2->3->4, \u200b\u4f60\u200b\u5e94\u8be5\u200b\u8fd4\u56de\u200b 2->1->4->3.\n
Reference
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/24/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5148\u200b\u4ea4\u6362\u200b\u524d\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\uff0c\u200b\u518d\u200b\u9012\u5f52\u200b\u5904\u7406\u200b\u540e\u9762\u200b\u7684\u200b\u8282\u70b9\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\n\nstruct ListNode* swapPairs(struct ListNode* head){\n if (!head || !(head->next))\n return head;\n struct ListNode *temp1 = head->next, *temp2 = temp1->next;\n temp1->next = head;\n head->next = swapPairs(temp2);\n return temp1;\n}\n
","tags":["\u9012\u5f52","\u94fe\u8868"]},{"location":"coding/leetcode/242/","title":"242. \u200b\u6709\u6548\u200b\u7684\u200b\u5b57\u6bcd\u200b\u5f02\u4f4d\u200b\u8bcd","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/242/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b s \u200b\u548c\u200b t \uff0c\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u6765\u200b\u5224\u65ad\u200b t \u200b\u662f\u5426\u662f\u200b s \u200b\u7684\u200b\u5b57\u6bcd\u200b\u5f02\u4f4d\u200b\u8bcd\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b: s = \"anagram\", t = \"nagaram\"\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: s = \"rat\", t = \"car\"\n\u200b\u8f93\u51fa\u200b: false\n
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u5b57\u7b26\u4e32\u200b\u53ea\u200b\u5305\u542b\u200b\u5c0f\u5199\u5b57\u6bcd\u200b\u3002
\u200b\u8fdb\u9636\u200b\uff1a
\u200b\u5982\u679c\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u5305\u542b\u200b unicode \u200b\u5b57\u7b26\u200b\u600e\u4e48\u529e\u200b\uff1f\u200b\u4f60\u200b\u80fd\u5426\u200b\u8c03\u6574\u200b\u4f60\u200b\u7684\u200b\u89e3\u6cd5\u200b\u6765\u200b\u5e94\u5bf9\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\uff1f
Reference
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/242/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u7edf\u8ba1\u200b\u5e76\u200b\u6bd4\u8f83\u200b\u4e24\u4e2a\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u5404\u200b\u5b57\u7b26\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
bool isAnagram(char * s, char * t){\n int hashMap1[26] = {0}, hashMap2[26] = {0};\n char *cur = s;\n while(*cur)\n {\n hashMap1[*cur - 'a']++;\n cur++;\n }\n cur = t;\n while(*cur)\n {\n hashMap2[*cur - 'a']++;\n cur++;\n }\n int i = 0;\n for (i = 0; i < 26; i++)\n if (hashMap1[i] != hashMap2[i])\n return false;\n return true;\n}\n
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/25/","title":"25. K \u200b\u4e2a\u200b\u4e00\u7ec4\u200b\u7ffb\u8f6c\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/25/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\uff0c\u200b\u6bcf\u200b\u00a0k\u00a0\u200b\u4e2a\u200b\u8282\u70b9\u200b\u4e00\u7ec4\u200b\u8fdb\u884c\u200b\u7ffb\u8f6c\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8fd4\u56de\u200b\u7ffb\u8f6c\u200b\u540e\u200b\u7684\u200b\u94fe\u8868\u200b\u3002
k\u00a0\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\uff0c\u200b\u5b83\u200b\u7684\u200b\u503c\u200b\u5c0f\u4e8e\u200b\u6216\u200b\u7b49\u4e8e\u200b\u94fe\u8868\u200b\u7684\u200b\u957f\u5ea6\u200b\u3002
\u200b\u5982\u679c\u200b\u8282\u70b9\u200b\u603b\u6570\u200b\u4e0d\u662f\u200b\u00a0k\u00a0\u200b\u7684\u200b\u6574\u6570\u500d\u200b\uff0c\u200b\u90a3\u4e48\u200b\u8bf7\u200b\u5c06\u200b\u6700\u540e\u200b\u5269\u4f59\u200b\u7684\u200b\u8282\u70b9\u200b\u4fdd\u6301\u200b\u539f\u6709\u200b\u987a\u5e8f\u200b\u3002
\u200b\u8fdb\u9636\u200b\uff1a
- \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u53ea\u200b\u4f7f\u7528\u200b\u5e38\u6570\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\u7684\u200b\u7b97\u6cd5\u200b\u6765\u200b\u89e3\u51b3\u200b\u6b64\u200b\u95ee\u9898\u200b\u5417\u200b\uff1f
- \u200b\u4f60\u200b\u4e0d\u80fd\u200b\u53ea\u662f\u200b\u5355\u7eaf\u200b\u7684\u200b\u6539\u53d8\u200b\u8282\u70b9\u200b\u5185\u90e8\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u800c\u662f\u200b\u9700\u8981\u200b\u5b9e\u9645\u200b\u8fdb\u884c\u200b\u8282\u70b9\u200b\u4ea4\u6362\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1,2,3,4,5], k = 2\n\u200b\u8f93\u51fa\u200b\uff1a[2,1,4,3,5]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1,2,3,4,5], k = 3\n\u200b\u8f93\u51fa\u200b\uff1a[3,2,1,4,5]\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1,2,3,4,5], k = 1\n\u200b\u8f93\u51fa\u200b\uff1a[1,2,3,4,5]\n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1], k = 1\n\u200b\u8f93\u51fa\u200b\uff1a[1]\n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u5217\u8868\u200b\u4e2d\u200b\u8282\u70b9\u200b\u7684\u200b\u6570\u91cf\u200b\u5728\u200b\u8303\u56f4\u200b
sz
\u200b\u5185\u200b 1 <= sz <= 5000
0 <= Node.val <= 1000
1 <= k <= sz
Reference
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/25/#_2","title":"\u9898\u89e3","text":"\u200b\u904d\u5386\u200b k \u200b\u4e2a\u200b\u5143\u7d20\u200b\u540e\u200b\u5c06\u200b\u94fe\u8868\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u8bbe\u200b\u4e3a\u200bNULL
\uff0c\u200b\u6267\u884c\u200b\u53cd\u8f6c\u200b\u64cd\u4f5c\u200b\u540e\u200b\u63a5\u4e0a\u200b\u540e\u9762\u200b\u7684\u200b\u94fe\u8868\u200b\u3002
\u200b\u6ce8\u610f\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\(\\mathcal O(1)\\)\u200b\u7684\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b\u3002
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode *reverse(struct ListNode *head)\n{\n struct ListNode *prev = NULL, *cur = head, *next = head->next;\n while (next != NULL)\n {\n cur->next = prev;\n prev = cur;\n cur = next;\n next = next->next;\n }\n cur->next = prev;\n return cur;\n}\n\nstruct ListNode* reverseKGroup(struct ListNode* head, int k){\n int i = 0;\n struct ListNode *ret = NULL, *tempHead = NULL, *cur = head;\n for (i = 0; i < k - 1 && cur != NULL; i++)\n cur = cur->next;\n if (cur == NULL)\n return head;\n tempHead = cur->next;\n cur->next = NULL;\n ret = reverse(head);\n head->next = reverseKGroup(tempHead, k);\n return ret;\n}\n
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/26/","title":"26. \u200b\u5220\u9664\u200b\u6392\u5e8f\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u91cd\u590d\u200b\u9879","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/26/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6392\u5e8f\u200b\u6570\u7ec4\u200b\uff0c\u200b\u4f60\u200b\u9700\u8981\u200b\u5728\u200b\u539f\u5730\u200b\u5220\u9664\u200b\u91cd\u590d\u200b\u51fa\u73b0\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\uff0c\u200b\u8fd4\u56de\u200b\u79fb\u9664\u200b\u540e\u200b\u6570\u7ec4\u200b\u7684\u200b\u65b0\u200b\u957f\u5ea6\u200b\u3002
\u200b\u4e0d\u8981\u200b\u4f7f\u7528\u200b\u989d\u5916\u200b\u7684\u200b\u6570\u7ec4\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4f60\u200b\u5fc5\u987b\u200b\u5728\u200b\u539f\u5730\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b \u200b\u5e76\u200b\u5728\u200b\u4f7f\u7528\u200b\\(O(1)\\)\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\u7684\u200b\u6761\u4ef6\u200b\u4e0b\u200b\u5b8c\u6210\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u7ed9\u5b9a\u200b\u6570\u7ec4\u200b nums = [1,1,2], \n\n\u200b\u51fd\u6570\u200b\u5e94\u8be5\u200b\u8fd4\u56de\u200b\u65b0\u200b\u7684\u200b\u957f\u5ea6\u200b 2, \u200b\u5e76\u4e14\u200b\u539f\u200b\u6570\u7ec4\u200b nums \u200b\u7684\u200b\u524d\u200b\u4e24\u4e2a\u200b\u5143\u7d20\u200b\u88ab\u200b\u4fee\u6539\u200b\u4e3a\u200b 1, 2\u3002 \n\n\u200b\u4f60\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u8d85\u51fa\u200b\u65b0\u200b\u957f\u5ea6\u200b\u540e\u9762\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u7ed9\u5b9a\u200b nums = [0,0,1,1,1,2,2,3,3,4],\n\n\u200b\u51fd\u6570\u200b\u5e94\u8be5\u200b\u8fd4\u56de\u200b\u65b0\u200b\u7684\u200b\u957f\u5ea6\u200b 5, \u200b\u5e76\u4e14\u200b\u539f\u200b\u6570\u7ec4\u200b nums \u200b\u7684\u200b\u524d\u200b\u4e94\u4e2a\u200b\u5143\u7d20\u200b\u88ab\u200b\u4fee\u6539\u200b\u4e3a\u200b 0, 1, 2, 3, 4\u3002\n\n\u200b\u4f60\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u8d85\u51fa\u200b\u65b0\u200b\u957f\u5ea6\u200b\u540e\u9762\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\n
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u4e3a\u4ec0\u4e48\u200b\u8fd4\u56de\u200b\u6570\u503c\u200b\u662f\u200b\u6574\u6570\u200b\uff0c\u200b\u4f46\u200b\u8f93\u51fa\u200b\u7684\u200b\u7b54\u6848\u200b\u662f\u200b\u6570\u7ec4\u200b\u5462\u200b?
\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u662f\u200b\u4ee5\u200b \u300c\u200b\u5f15\u7528\u200b\u300d \u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\u7684\u200b\uff0c\u200b\u8fd9\u200b\u610f\u5473\u7740\u200b\u5728\u200b\u51fd\u6570\u200b\u91cc\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u5bf9\u4e8e\u200b\u8c03\u7528\u8005\u200b\u662f\u200b\u53ef\u89c1\u200b\u7684\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u60f3\u8c61\u200b\u5185\u90e8\u200b\u64cd\u4f5c\u200b\u5982\u4e0b\u200b:
// nums \u200b\u662f\u200b\u4ee5\u200b\u201c\u200b\u5f15\u7528\u200b\u201d\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\u7684\u200b\u3002\u200b\u4e5f\u5c31\u662f\u8bf4\u200b\uff0c\u200b\u4e0d\u200b\u5bf9\u200b\u5b9e\u53c2\u200b\u505a\u200b\u4efb\u4f55\u200b\u62f7\u8d1d\u200b\nint len = removeDuplicates(nums);\n\n// \u200b\u5728\u200b\u51fd\u6570\u200b\u91cc\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u5bf9\u4e8e\u200b\u8c03\u7528\u8005\u200b\u662f\u200b\u53ef\u89c1\u200b\u7684\u200b\u3002\n// \u200b\u6839\u636e\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u7684\u200b\u957f\u5ea6\u200b, \u200b\u5b83\u4f1a\u200b\u6253\u5370\u200b\u51fa\u200b\u6570\u7ec4\u200b\u4e2d\u8be5\u200b\u957f\u5ea6\u200b\u8303\u56f4\u200b\u5185\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u3002\nfor (int i = 0; i < len; i++) {\n\u00a0 \u00a0 print(nums[i]);\n}\n
Reference
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/26/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a
- \u200b\u5f53\u200b\u6570\u7ec4\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u65f6\u200b\uff0c\u200b\u4e0d\u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\uff1b
- \u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6307\u9488\u200b\u5206\u522b\u200b\u6307\u5411\u200b\u5220\u9664\u200b\u91cd\u590d\u200b\u503c\u540e\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u672b\u5c3e\u200b\uff0c\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u6570\u503c\u200b\u8868\u793a\u200b\u5220\u53bb\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int removeDuplicates(int* nums, int numsSize){\n if (numsSize < 2)\n return numsSize;\n int steps = 0, i = 0;\n while(i < numsSize - steps - 1)\n {\n if (steps)\n nums[i + 1] = nums[i + steps + 1];\n if (nums[i] == nums[i + steps + 1])\n steps++;\n else\n i++;\n }\n return numsSize - steps;\n}\n
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/27/","title":"27. \u200b\u79fb\u9664\u200b\u5143\u7d20","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/27/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b nums
\u00a0\u200b\u548c\u200b\u4e00\u4e2a\u200b\u503c\u200b val
\uff0c\u200b\u4f60\u200b\u9700\u8981\u200b \u200b\u539f\u5730\u200b \u200b\u79fb\u9664\u200b\u6240\u6709\u200b\u6570\u503c\u200b\u7b49\u4e8e\u200b\u00a0val
\u00a0\u200b\u7684\u200b\u5143\u7d20\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u79fb\u9664\u200b\u540e\u200b\u6570\u7ec4\u200b\u7684\u200b\u65b0\u200b\u957f\u5ea6\u200b\u3002
\u200b\u4e0d\u8981\u200b\u4f7f\u7528\u200b\u989d\u5916\u200b\u7684\u200b\u6570\u7ec4\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4f60\u200b\u5fc5\u987b\u200b\u4ec5\u200b\u4f7f\u7528\u200b O(1)
\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\u5e76\u200b \u200b\u539f\u5730\u200b \u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u3002
\u200b\u5143\u7d20\u200b\u7684\u200b\u987a\u5e8f\u200b\u53ef\u4ee5\u200b\u6539\u53d8\u200b\u3002\u200b\u4f60\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u8d85\u51fa\u200b\u65b0\u200b\u957f\u5ea6\u200b\u540e\u9762\u200b\u7684\u200b\u5143\u7d20\u200b\u3002
\u200b\u8bf4\u660e\u200b:
\u200b\u4e3a\u4ec0\u4e48\u200b\u8fd4\u56de\u200b\u6570\u503c\u200b\u662f\u200b\u6574\u6570\u200b\uff0c\u200b\u4f46\u200b\u8f93\u51fa\u200b\u7684\u200b\u7b54\u6848\u200b\u662f\u200b\u6570\u7ec4\u200b\u5462\u200b?
\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u662f\u200b\u4ee5\u200b\u300c\u200b\u5f15\u7528\u200b\u300d\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\u7684\u200b\uff0c\u200b\u8fd9\u200b\u610f\u5473\u7740\u200b\u5728\u200b\u51fd\u6570\u200b\u91cc\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u5bf9\u4e8e\u200b\u8c03\u7528\u8005\u200b\u662f\u200b\u53ef\u89c1\u200b\u7684\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u60f3\u8c61\u200b\u5185\u90e8\u200b\u64cd\u4f5c\u200b\u5982\u4e0b\u200b:
// nums \u200b\u662f\u200b\u4ee5\u200b\u201c\u200b\u5f15\u7528\u200b\u201d\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\u7684\u200b\u3002\u200b\u4e5f\u5c31\u662f\u8bf4\u200b\uff0c\u200b\u4e0d\u200b\u5bf9\u200b\u5b9e\u53c2\u200b\u4f5c\u200b\u4efb\u4f55\u200b\u62f7\u8d1d\u200b\nint len = removeElement(nums, val);\n\n// \u200b\u5728\u200b\u51fd\u6570\u200b\u91cc\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u5bf9\u4e8e\u200b\u8c03\u7528\u8005\u200b\u662f\u200b\u53ef\u89c1\u200b\u7684\u200b\u3002\n// \u200b\u6839\u636e\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u7684\u200b\u957f\u5ea6\u200b, \u200b\u5b83\u4f1a\u200b\u6253\u5370\u200b\u51fa\u200b\u6570\u7ec4\u200b\u4e2d\u200b \u200b\u8be5\u200b\u957f\u5ea6\u200b\u8303\u56f4\u200b\u5185\u200b \u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u3002\nfor (int i = 0; i < len; i++) {\n\u00a0 \u00a0 print(nums[i]);\n}\n
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [3,2,2,3], val = 3\n\u200b\u8f93\u51fa\u200b\uff1a2, nums = [2,2]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u51fd\u6570\u200b\u5e94\u8be5\u200b\u8fd4\u56de\u200b\u65b0\u200b\u7684\u200b\u957f\u5ea6\u200b 2, \u200b\u5e76\u4e14\u200b nums \u200b\u4e2d\u200b\u7684\u200b\u524d\u200b\u4e24\u4e2a\u200b\u5143\u7d20\u200b\u5747\u200b\u4e3a\u200b 2\u3002\u200b\u4f60\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u8d85\u51fa\u200b\u65b0\u200b\u957f\u5ea6\u200b\u540e\u9762\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\u200b\u4f8b\u5982\u200b\uff0c\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u7684\u200b\u65b0\u200b\u957f\u5ea6\u200b\u4e3a\u200b 2 \uff0c\u200b\u800c\u200b nums = [2,2,3,3] \u200b\u6216\u200b nums = [2,2,0,0]\uff0c\u200b\u4e5f\u200b\u4f1a\u200b\u88ab\u200b\u89c6\u4f5c\u200b\u6b63\u786e\u200b\u7b54\u6848\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [0,1,2,2,3,0,4,2], val = 2\n\u200b\u8f93\u51fa\u200b\uff1a5, nums = [0,1,4,0,3]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u51fd\u6570\u200b\u5e94\u8be5\u200b\u8fd4\u56de\u200b\u65b0\u200b\u7684\u200b\u957f\u5ea6\u200b 5, \u200b\u5e76\u4e14\u200b nums \u200b\u4e2d\u200b\u7684\u200b\u524d\u200b\u4e94\u4e2a\u200b\u5143\u7d20\u200b\u4e3a\u200b 0, 1, 3, 0, 4\u3002\u200b\u6ce8\u610f\u200b\u8fd9\u200b\u4e94\u4e2a\u200b\u5143\u7d20\u200b\u53ef\u200b\u4e3a\u200b\u4efb\u610f\u200b\u987a\u5e8f\u200b\u3002\u200b\u4f60\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u8d85\u51fa\u200b\u65b0\u200b\u957f\u5ea6\u200b\u540e\u9762\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= nums.length <= 100
0 <= nums[i] <= 50
0 <= val <= 100
Reference
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/27/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u53cc\u200b\u6307\u9488\u200b\u6cd5\u200b\uff0c\u200b\u4e24\u4e2a\u200b\u6307\u9488\u200b\u5206\u522b\u200b\u6307\u5411\u200b\uff1a
- \u200b\u5c1a\u672a\u200b\u68c0\u67e5\u200b\u8fc7\u200b\u7684\u200b\u90e8\u5206\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u5143\u7d20\u200b
- \u200b\u5df2\u7ecf\u200b\u68c0\u67e5\u200b\u8fc7\u200b\u7684\u200b\u90e8\u5206\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b
\u200b\u5f53\u200b\u4e24\u4e2a\u200b\u6307\u9488\u200b\u91cd\u5408\u200b\u65f6\u200b\u4e0d\u200b\u9700\u8981\u200b\u8fdb\u884c\u200b\u590d\u5236\u200b\u64cd\u4f5c\u200b\u3002
int removeElement(int* nums, int numsSize, int val){\n int slow = 0, fast = 0, ret = numsSize;\n if (numsSize == 0)\n return 0;\n do\n {\n if (fast > slow)\n nums[slow] = nums[fast];\n if (nums[fast] == val)\n ret--;\n else\n slow++;\n fast++;\n }\n while (fast < numsSize);\n return ret;\n}\n
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/28/","title":"28. \u200b\u5b9e\u73b0\u200b strStr()","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/28/#_1","title":"\u9898\u76ee","text":"\u200b\u5b9e\u73b0\u200bstrStr()
\u200b\u51fd\u6570\u200b\u3002
\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200bhaystack
\u200b\u5b57\u7b26\u4e32\u200b\u548c\u200b\u4e00\u4e2a\u200bneedle
\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u5728\u200bhaystack
\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u627e\u51fa\u200b needle \u200b\u5b57\u7b26\u4e32\u200b\u51fa\u73b0\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u4f4d\u7f6e\u200b (\u200b\u4ece\u200b0\u200b\u5f00\u59cb\u200b)\u3002\u200b\u5982\u679c\u200b\u4e0d\u200b\u5b58\u5728\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200b\u00a0-1\u3002
\u200b\u793a\u4f8b\u200b 1:
\u200b\u8f93\u5165\u200b: haystack = \"hello\", needle = \"ll\"\n\u200b\u8f93\u51fa\u200b: 2\n
\u200b\u793a\u4f8b\u200b 2:
\u200b\u8f93\u5165\u200b: haystack = \"aaaaa\", needle = \"bba\"\n\u200b\u8f93\u51fa\u200b: -1\n
\u200b\u8bf4\u660e\u200b:
\u200b\u5f53\u200bneedle
\u200b\u662f\u200b\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u65f6\u200b\uff0c\u200b\u6211\u4eec\u200b\u5e94\u5f53\u200b\u8fd4\u56de\u200b\u4ec0\u4e48\u200b\u503c\u200b\u5462\u200b\uff1f\u200b\u8fd9\u662f\u200b\u4e00\u4e2a\u200b\u5728\u200b\u9762\u8bd5\u200b\u4e2d\u200b\u5f88\u200b\u597d\u200b\u7684\u200b\u95ee\u9898\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u672c\u9898\u200b\u800c\u8a00\u200b\uff0c\u200b\u5f53\u200bneedle
\u200b\u662f\u200b\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u65f6\u200b\u6211\u4eec\u200b\u5e94\u5f53\u200b\u8fd4\u56de\u200b 0 \u3002\u200b\u8fd9\u200b\u4e0e\u200bC\u200b\u8bed\u8a00\u200b\u7684\u200bstrstr()
\u200b\u4ee5\u53ca\u200bJava\u200b\u7684\u200bindexOf()
\u200b\u5b9a\u4e49\u200b\u76f8\u7b26\u200b\u3002
Reference
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/28/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u66b4\u529b\u200b\u6309\u4f4d\u200b\u5339\u914d\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int strStr(char * haystack, char * needle){\n int len1 = strlen(haystack), len2 = strlen(needle), cur1 = 0, cur2 = 0, cur3 = 0, success = 1;\n if (!len2)\n return 0;\n if (len1 < len2)\n return -1;\n do\n {\n success = 1;\n if (haystack[cur1] == needle[0])\n {\n cur2 = 0;\n cur3 = 0;\n while(cur2 < len2 && cur3 + cur1 < len1 && success)\n {\n if(haystack[cur1 + cur3] != needle[cur2])\n success = 0;\n cur3++;\n cur2++;\n }\n if (success)\n return cur1;\n }\n cur1++;\n }\n while (haystack[cur1 + len2 - 1]);\n return -1;\n}\n
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/3/","title":"3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u5b57\u7b26\u4e32","Sliding Window"]},{"location":"coding/leetcode/3/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u627e\u51fa\u200b\u5176\u4e2d\u200b\u4e0d\u200b\u542b\u6709\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u00a0\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b\u00a0\u200b\u7684\u200b\u957f\u5ea6\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01:
\u200b\u8f93\u5165\u200b: s = \"abcabcbb\"\n\u200b\u8f93\u51fa\u200b: 3 \n\u200b\u89e3\u91ca\u200b: \u200b\u56e0\u4e3a\u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b\u662f\u200b \"abc\"\uff0c\u200b\u6240\u4ee5\u200b\u5176\u200b\u957f\u5ea6\u200b\u4e3a\u200b 3\u3002\n
\u200b\u793a\u4f8b\u200b 2:
\u200b\u8f93\u5165\u200b: s = \"bbbbb\"\n\u200b\u8f93\u51fa\u200b: 1\n\u200b\u89e3\u91ca\u200b: \u200b\u56e0\u4e3a\u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b\u662f\u200b \"b\"\uff0c\u200b\u6240\u4ee5\u200b\u5176\u200b\u957f\u5ea6\u200b\u4e3a\u200b 1\u3002\n
\u200b\u793a\u4f8b\u200b 3:
\u200b\u8f93\u5165\u200b: s = \"pwwkew\"\n\u200b\u8f93\u51fa\u200b: 3\n\u200b\u89e3\u91ca\u200b: \u200b\u56e0\u4e3a\u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b\u662f\u200b\u00a0\"wke\"\uff0c\u200b\u6240\u4ee5\u200b\u5176\u200b\u957f\u5ea6\u200b\u4e3a\u200b 3\u3002\n\u00a0 \u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u4f60\u200b\u7684\u200b\u7b54\u6848\u200b\u5fc5\u987b\u200b\u662f\u200b \u200b\u5b50\u4e32\u200b \u200b\u7684\u200b\u957f\u5ea6\u200b\uff0c\"pwke\"\u00a0\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5b50\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e0d\u662f\u200b\u5b50\u4e32\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 4:
\u200b\u8f93\u5165\u200b: s = \"\"\n\u200b\u8f93\u51fa\u200b: 0\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= s.length <= 5 * 104
s
\u00a0\u200b\u7531\u200b\u82f1\u6587\u5b57\u6bcd\u200b\u3001\u200b\u6570\u5b57\u200b\u3001\u200b\u7b26\u53f7\u200b\u548c\u200b\u7a7a\u683c\u200b\u7ec4\u6210\u200b
","tags":["\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u5b57\u7b26\u4e32","Sliding Window"]},{"location":"coding/leetcode/3/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b \uff1a\u200b\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u5b58\u50a8\u200b\u5404\u200b\u5b57\u6bcd\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b\uff08\u200b\u54c8\u5e0c\u200b\u8868\u200b\uff09\u3002\u200b\u5f53\u200b\u4e0d\u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5b57\u6bcd\u200b\u65f6\u200b\u6ed1\u52a8\u200b\u7a97\u53e3\u200b\u4e0d\u65ad\u200b\u5411\u200b\u53f3\u200b\u5ef6\u4f38\u200b\uff0c\u200b\u76f4\u5230\u200b\u51fa\u73b0\u200b\u91cd\u590d\u200b\u5b57\u6bcd\u200b\u6216\u200b\u5230\u8fbe\u200b\u5b57\u7b26\u4e32\u200b\u7ed3\u5c3e\u200b\u3002\u200b\u68c0\u6d4b\u200b\u5230\u200b\u91cd\u590d\u200b\u5b57\u6bcd\u200b\u540e\u200b\uff0c\u200b\u4ece\u200b\u5de6\u5411\u53f3\u200b\u6536\u7f29\u200b\u6ed1\u52a8\u200b\u7a97\u53e3\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u6536\u7f29\u200b\u90fd\u200b\u5bf9\u200b\u54c8\u5e0c\u200b\u8868\u200b\u8fdb\u884c\u200b\u66f4\u65b0\u200b\u3002\u200b\u76f4\u5230\u200b\u4e0d\u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5b57\u6bcd\u200b\u65f6\u200b\uff0c\u200b\u6ed1\u52a8\u200b\u7a97\u53e3\u200b\u624d\u200b\u505c\u6b62\u200b\u6536\u7f29\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u5411\u200b\u53f3\u200b\u5ef6\u4f38\u200b\u3002
\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b \uff1a\\(O(N)\\)
\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b \uff1a\\(O(1)\\)\uff0c\u200b\u4e0e\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u65e0\u5173\u200b\uff0c\u200b\u4f46\u200b\u4e0e\u200b\u5355\u4e2a\u200b\u5b57\u7b26\u200b\u7684\u200b\u5bbd\u5ea6\u200b\u6709\u5173\u200b\u3002
int lengthOfLongestSubstring(char * s){\n int length = 0, ret = 0;\n char hashMap[256] = {0}, *cur = s;\n while(*cur)\n {\n while(hashMap[*cur])\n {\n hashMap[*(cur - length)] -= 1;\n length--;\n }\n hashMap[*cur] = 1;\n length++;\n ret = ret > length ? ret : length;\n cur++;\n }\n return ret;\n}\n
Reference
","tags":["\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u5b57\u7b26\u4e32","Sliding Window"]},{"location":"coding/leetcode/315/","title":"315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u6392\u5e8f","\u6811\u72b6\u6570\u7ec4","\u7ebf\u6bb5\u6811","\u4e8c\u5206\u67e5\u627e","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/315/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b nums \uff0c\u200b\u6309\u200b\u8981\u6c42\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u6570\u7ec4\u200b\u00a0counts \u3002\u200b\u6570\u7ec4\u200b counts \u200b\u6709\u200b\u8be5\u200b\u6027\u8d28\u200b\uff1acounts[i]
\u200b\u7684\u200b\u503c\u200b\u662f\u200bnums[i]
\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200bnums[i]
\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u6570\u91cf\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [5,2,6,1]\n\u200b\u8f93\u51fa\u200b\uff1a[2,1,1,0] \n\u200b\u89e3\u91ca\u200b\uff1a\n5 \u200b\u7684\u200b\u53f3\u4fa7\u200b\u6709\u200b 2 \u200b\u4e2a\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5143\u7d20\u200b (2 \u200b\u548c\u200b 1)\n2 \u200b\u7684\u200b\u53f3\u4fa7\u200b\u4ec5\u200b\u6709\u200b 1 \u200b\u4e2a\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5143\u7d20\u200b (1)\n6 \u200b\u7684\u200b\u53f3\u4fa7\u200b\u6709\u200b 1 \u200b\u4e2a\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5143\u7d20\u200b (1)\n1 \u200b\u7684\u200b\u53f3\u4fa7\u200b\u6709\u200b 0 \u200b\u4e2a\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5143\u7d20\u200b\n
\u200b\u63d0\u793a\u200b\uff1a
0 <= nums.length <= 10^5
-10^4\u00a0<= nums[i] <= 10^4
Reference
","tags":["\u6392\u5e8f","\u6811\u72b6\u6570\u7ec4","\u7ebf\u6bb5\u6811","\u4e8c\u5206\u67e5\u627e","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/315/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4ece\u540e\u200b\u5f80\u524d\u200b\u6784\u9020\u200b\u4e00\u4e2a\u200b\u4e8c\u53c9\u200b\u67e5\u627e\u200b\u6811\u200b\uff0c\u200b\u5728\u200b\u4e8c\u53c9\u200b\u67e5\u627e\u200b\u6811\u4e2d\u200b\u7ef4\u62a4\u200b\u6811\u4e2d\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u6570\u5b57\u200b\u7684\u200b\u4e2a\u6570\u200b\u3002
\u200b\u4e8c\u53c9\u6811\u200b\u9700\u8981\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u57df\u200b\u7528\u4e8e\u200b\u8ba1\u7b97\u200b\u5de6\u5b50\u200b\u6811\u200b\u7684\u200b\u5143\u7d20\u200b\u603b\u6570\u200b\uff0c\u200b\u5373\u200b\u5f53\u524d\u200b\u6811\u4e2d\u200b\u6570\u503c\u200b\u5c0f\u4e8e\u200b\u8be5\u200b\u8282\u70b9\u200b\u7684\u200b\u5143\u7d20\u200b\u603b\u6570\u200b\u3002\u200b\u5b9e\u73b0\u200b\u65b9\u6cd5\u200b\u662f\u200b\u5728\u200b\u5de6\u5b50\u200b\u6811\u200b\u6dfb\u52a0\u200b\u5143\u7d20\u200b\u540e\u200b\u8be5\u57df\u200b\u7684\u200b\u503c\u200b\u589e\u52a0\u200b1\u3002
\u200b\u5728\u200b\u8282\u70b9\u200b\u7684\u200b\u53f3\u5b50\u200b\u6811\u200b\u6dfb\u52a0\u200b\u5143\u7d20\u200b\u65f6\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u548c\u200b\u8282\u70b9\u200b\u5de6\u5b50\u200b\u6811\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u8282\u70b9\u200b\u90fd\u200b\u662f\u200b\u7b26\u5408\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u8282\u70b9\u200b\u3002\u200b\u5728\u200b\u9012\u5f52\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u9700\u8981\u200b\u4f20\u9012\u200b\u4e00\u4e2a\u200b\u7528\u4f5c\u200b\u8ba1\u6570\u5668\u200b\u7684\u200b\u6307\u9488\u200b\u53c2\u6570\u200b\uff08\u200b\u8ba1\u6570\u200b\u7684\u200b\u6570\u503c\u200b\u5373\u200b\u4e3a\u200b\u6240\u6c42\u200b\u7684\u200b\u7ed3\u679c\u200b\uff09\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\nstruct TreeNode2\n{\n struct TreeNode2 *left;\n struct TreeNode2 *right;\n int val;\n int subs;\n};\n\nstruct TreeNode2 *insert(struct TreeNode2 *dest, int src, int *depth)\n{\n if (dest == NULL)\n {\n struct TreeNode2 *ret = (struct TreeNode2 *)malloc(sizeof(struct TreeNode2));\n ret->left = NULL;\n ret->right = NULL;\n ret->val = src;\n ret->subs = 0;\n return ret;\n }\n if (src > dest->val)\n {\n *depth += 1 + dest->subs;\n dest->right = insert(dest->right, src, depth);\n }\n else\n {\n dest->subs++;\n dest->left = insert(dest->left, src, depth);\n }\n return dest;\n}\n\nint *countSmaller(int *nums, int numsSize, int *returnSize)\n{\n *returnSize = numsSize;\n int *ret = (int *)memset(malloc(sizeof(int) * numsSize), 0, sizeof(int) * numsSize), i = 0;\n if (numsSize <= 1)\n return ret;\n struct TreeNode2 *tempTree = NULL;\n for (i = numsSize - 1; i >= 0; i--)\n tempTree = insert(tempTree, nums[i], ret + i);\n return ret;\n}\n
","tags":["\u6392\u5e8f","\u6811\u72b6\u6570\u7ec4","\u7ebf\u6bb5\u6811","\u4e8c\u5206\u67e5\u627e","\u5206\u6cbb\u7b97\u6cd5"]},{"location":"coding/leetcode/341/","title":"341. \u200b\u6241\u5e73\u5316\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u8fed\u4ee3\u200b\u5668","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/341/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u5d4c\u5957\u200b\u7684\u200b\u6574\u578b\u200b\u5217\u8868\u200b\u3002\u200b\u8bf7\u200b\u4f60\u200b\u8bbe\u8ba1\u200b\u4e00\u4e2a\u200b\u8fed\u4ee3\u200b\u5668\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u80fd\u591f\u200b\u904d\u5386\u200b\u8fd9\u4e2a\u200b\u6574\u578b\u200b\u5217\u8868\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u6574\u6570\u200b\u3002
\u200b\u5217\u8868\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e00\u9879\u200b\u6216\u8005\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\uff0c\u200b\u6216\u8005\u200b\u662f\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u5217\u8868\u200b\u3002\u200b\u5176\u4e2d\u200b\u5217\u8868\u200b\u7684\u200b\u5143\u7d20\u200b\u4e5f\u200b\u53ef\u80fd\u200b\u662f\u200b\u6574\u6570\u200b\u6216\u662f\u200b\u5176\u4ed6\u200b\u5217\u8868\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: [[1,1],2,[1,1]]\n\u200b\u8f93\u51fa\u200b: [1,1,2,1,1]\n\u200b\u89e3\u91ca\u200b: \u200b\u901a\u8fc7\u200b\u91cd\u590d\u200b\u8c03\u7528\u200b\u00a0next \u200b\u76f4\u5230\u200b\u00a0hasNext \u200b\u8fd4\u56de\u200b false\uff0cnext\u00a0\u200b\u8fd4\u56de\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u987a\u5e8f\u200b\u5e94\u8be5\u200b\u662f\u200b: [1,1,2,1,1]\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: [1,[4,[6]]]\n\u200b\u8f93\u51fa\u200b: [1,4,6]\n\u200b\u89e3\u91ca\u200b: \u200b\u901a\u8fc7\u200b\u91cd\u590d\u200b\u8c03\u7528\u200b\u00a0next\u00a0\u200b\u76f4\u5230\u200b\u00a0hasNext \u200b\u8fd4\u56de\u200b false\uff0cnext\u00a0\u200b\u8fd4\u56de\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u987a\u5e8f\u200b\u5e94\u8be5\u200b\u662f\u200b: [1,4,6]\u3002\n
Reference
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/341/#_2","title":"\u9898\u89e3","text":"C\u200b\u8bed\u8a00\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u94fe\u8868\u200b\uff0c\u200b\u7136\u540e\u200b\u5bf9\u200b\u94fe\u8868\u200b\u8fdb\u884c\u200b\u8fed\u4ee3\u200b\uff1a
/**\n * *********************************************************************\n * // This is the interface that allows for creating nested lists.\n * // You should not implement it, or speculate about its implementation\n * *********************************************************************\n *\n * // Return true if this NestedInteger holds a single integer, rather than a nested list.\n * bool NestedIntegerIsInteger(struct NestedInteger *);\n *\n * // Return the single integer that this NestedInteger holds, if it holds a single integer\n * // The result is undefined if this NestedInteger holds a nested list\n * int NestedIntegerGetInteger(struct NestedInteger *);\n *\n * // Return the nested list that this NestedInteger holds, if it holds a nested list\n * // The result is undefined if this NestedInteger holds a single integer\n * struct NestedInteger **NestedIntegerGetList(struct NestedInteger *);\n *\n * // Return the nested list's size that this NestedInteger holds, if it holds a nested list\n * // The result is undefined if this NestedInteger holds a single integer\n * int NestedIntegerGetListSize(struct NestedInteger *);\n * };\n */\nstruct NestedIterator {\n struct ListNode *list;\n struct ListNode *current;\n};\n\nstruct ListNode *getNode(int val, struct ListNode *next)\n{\n struct ListNode *ret = (struct ListNode *)malloc(sizeof(struct ListNode));\n ret->val = val;\n ret->next = next;\n return ret;\n}\n\nstruct ListNode *toList(struct NestedInteger *src, struct ListNode **tail)\n{\n if (NestedIntegerIsInteger(src))\n {\n struct ListNode *ret = getNode(NestedIntegerGetInteger(src), NULL);\n if (tail)\n *tail = ret;\n return ret;\n }\n else\n {\n struct NestedInteger **content = NestedIntegerGetList(src);\n struct ListNode *ret = NULL, *temp = NULL;\n int i = 0, size = NestedIntegerGetListSize(src);\n for (i = 0; i < size; i++)\n {\n if (!ret)\n ret = toList(content[i], &temp);\n else\n (*tail)->next = toList(content[i], &temp);\n if (temp)\n *tail = temp;\n }\n return ret;\n }\n}\n\nstruct NestedIterator *nestedIterCreate(struct NestedInteger** nestedList, int nestedListSize) {\n struct NestedIterator *ret = (struct NestedIterator *)malloc(sizeof(struct NestedIterator));\n ret->list = NULL;\n ret->current = NULL;\n struct ListNode *temp = NULL;\n for (int i = 0; i < nestedListSize; i++)\n {\n if (!ret->list)\n ret->list = toList(nestedList[i], &temp);\n else\n ret->current->next = toList(nestedList[i], &temp);\n ret->current = temp;\n }\n ret->current = ret->list;\n return ret;\n}\n\nbool nestedIterHasNext(struct NestedIterator *iter) {\n return iter->current;\n}\n\nint nestedIterNext(struct NestedIterator *iter) {\n int ret = iter->current->val;\n iter->current = iter->current->next;\n return ret;\n}\n\n/** Deallocates memory previously allocated for the iterator */\nvoid nestedIterFree(struct NestedIterator *iter) {\n while (iter->list)\n {\n iter->current = iter->list->next;\n free(iter->list);\n iter->list = iter->current;\n }\n free(iter);\n}\n\n/**\n * Your NestedIterator will be called like this:\n * struct NestedIterator *i = nestedIterCreate(nestedList, nestedListSize);\n * while (nestedIterHasNext(i)) printf(\"%d\\n\", nestedIterNext(i));\n * nestedIterFree(i);\n */\n
Python\u200b\u8bed\u8a00\u200b\u652f\u6301\u200byield
\u200b\u8bed\u53e5\u200b\u4e0e\u200byield from
\u200b\u8bed\u53e5\u200b\uff0c\u200b\u56e0\u6b64\u200b\u76f4\u63a5\u200b\u8fed\u4ee3\u200b\u751f\u6210\u5668\u200b\u5373\u53ef\u200b
# \"\"\"\n# This is the interface that allows for creating nested lists.\n# You should not implement it, or speculate about its implementation\n# \"\"\"\n#class NestedInteger:\n# def isInteger(self) -> bool:\n# \"\"\"\n# @return True if this NestedInteger holds a single integer, rather than a nested list.\n# \"\"\"\n#\n# def getInteger(self) -> int:\n# \"\"\"\n# @return the single integer that this NestedInteger holds, if it holds a single integer\n# Return None if this NestedInteger holds a nested list\n# \"\"\"\n#\n# def getList(self) -> [NestedInteger]:\n# \"\"\"\n# @return the nested list that this NestedInteger holds, if it holds a nested list\n# Return None if this NestedInteger holds a single integer\n# \"\"\"\n\ndef listIter(nestNode):\n for node in nestNode:\n if node.isInteger():\n yield node.getInteger()\n else:\n yield from listIter(node.getList())\n\nclass NestedIterator:\n def __init__(self, nestedList):\n self.nextvalue = 0\n self.iterator = listIter(nestedList)\n\n def next(self):\n return self.nextvalue\n\n def hasNext(self):\n try:\n self.nextvalue = next(self.iterator)\n except StopIteration:\n return False\n return True\n\n# Your NestedIterator object will be instantiated and called as such:\n# i, v = NestedIterator(nestedList), []\n# while i.hasNext(): v.append(i.next())\n
","tags":["\u6808","\u8bbe\u8ba1"]},{"location":"coding/leetcode/344/","title":"344. \u200b\u53cd\u8f6c\u200b\u5b57\u7b26\u4e32","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/344/#_1","title":"\u9898\u76ee","text":"\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u5176\u200b\u4f5c\u7528\u200b\u662f\u200b\u5c06\u200b\u8f93\u5165\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\u53cd\u8f6c\u200b\u8fc7\u6765\u200b\u3002\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u4ee5\u200b\u5b57\u7b26\u200b\u6570\u7ec4\u200b char[] \u200b\u7684\u200b\u5f62\u5f0f\u200b\u7ed9\u51fa\u200b\u3002
\u200b\u4e0d\u8981\u200b\u7ed9\u200b\u53e6\u5916\u200b\u7684\u200b\u6570\u7ec4\u200b\u5206\u914d\u200b\u989d\u5916\u200b\u7684\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4f60\u200b\u5fc5\u987b\u200b\u539f\u5730\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u3001\u200b\u4f7f\u7528\u200b O(1) \u200b\u7684\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\u89e3\u51b3\u200b\u8fd9\u4e00\u200b\u95ee\u9898\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5b57\u7b26\u200b\u90fd\u200b\u662f\u200b ASCII \u200b\u7801\u8868\u200b\u4e2d\u200b\u7684\u200b\u53ef\u200b\u6253\u5370\u200b\u5b57\u7b26\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a[\"h\",\"e\",\"l\",\"l\",\"o\"]\n\u200b\u8f93\u51fa\u200b\uff1a[\"o\",\"l\",\"l\",\"e\",\"h\"]\n
\u200b\u793a\u4f8b\u200b 2\uff1a \u200b\u8f93\u5165\u200b\uff1a[\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\n\u200b\u8f93\u51fa\u200b\uff1a[\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n
Reference
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/344/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5206\u522b\u200b\u4f7f\u7528\u200b\u4e24\u4e2a\u200b\u6307\u9488\u200b\u6307\u5411\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5f00\u5934\u200b\u4e0e\u200b\u7ed3\u5c3e\u200b\uff0c\u200b\u4ea4\u6362\u200b\u4e24\u8005\u200b\u7684\u200b\u503c\u200b\u540e\u200b\u6536\u7f29\u200b\u6307\u9488\u200b\u3002\uff08\u200b\u5de6\u200b\u6307\u9488\u200b\u53f3\u79fb\u200b\uff0c\u200b\u53f3\u200b\u6307\u9488\u200b\u5de6\u79fb\u200b\uff09
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
void reverseString(char* s, int sSize)\n{\n if (sSize <= 1)\n return;\n char temp = 0;\n temp = *s;\n *s = s[sSize - 1];\n s[sSize - 1] = temp;\n reverseString(s + 1, sSize - 2);\n}\n
","tags":["\u53cc\u6307\u9488","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/35/","title":"35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/35/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6392\u5e8f\u200b\u6570\u7ec4\u200b\u548c\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u5728\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u627e\u5230\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5176\u200b\u7d22\u5f15\u200b\u3002\u200b\u5982\u679c\u200b\u76ee\u6807\u503c\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e8e\u200b\u6570\u7ec4\u200b\u4e2d\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5b83\u200b\u5c06\u200b\u4f1a\u200b\u88ab\u200b\u6309\u200b\u987a\u5e8f\u200b\u63d2\u5165\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u65e0\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\u3002
\u200b\u793a\u4f8b\u200b 1:
\u200b\u8f93\u5165\u200b: [1,3,5,6], 5\n\u200b\u8f93\u51fa\u200b: 2\n
\u200b\u793a\u4f8b\u200b\u00a02:
\u200b\u8f93\u5165\u200b: [1,3,5,6], 2\n\u200b\u8f93\u51fa\u200b: 1\n
\u200b\u793a\u4f8b\u200b 3:
\u200b\u8f93\u5165\u200b: [1,3,5,6], 7\n\u200b\u8f93\u51fa\u200b: 4\n
\u200b\u793a\u4f8b\u200b 4:
\u200b\u8f93\u5165\u200b: [1,3,5,6], 0\n\u200b\u8f93\u51fa\u200b: 0\n
Reference
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/35/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u3002
\u200b\u8bbe\u200b\u6570\u5217\u200b\\(\\{a_i\\}\\)\u200b\u4e3a\u200b\u5347\u5e8f\u200b\u6570\u5217\u200b\uff0c\u200b\u76ee\u6807\u503c\u200b\\(b\\)\u200b\u7684\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b\\(j\\)\u200b\u6ee1\u8db3\u200b\uff1a
- \\(b \\leq a_j\\)
- \\(b > a_{j - 1}\\)
\u200b\u6ce8\u610f\u200b\u672c\u9898\u200b\u8981\u6c42\u200b\u7684\u200b\u6570\u636e\u200b\u4e0e\u200b\u666e\u901a\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u610f\u4e49\u200b\u4e0d\u540c\u200b\u3002
- \u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u8fd4\u56de\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u4e0d\u200b\u5927\u4e8e\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u5143\u7d20\u200b\u4e0b\u6807\u200b\u3002
- \u200b\u672c\u9898\u200b\u8981\u6c42\u200b\u8fd4\u56de\u200b\u7b2c\u4e00\u4e2a\u200b\u4e0d\u200b\u5c0f\u4e8e\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u5143\u7d20\u200b\u4e0b\u6807\u200b\u3002
int bSearch(int *nums, int lo, int hi, int target)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (nums[mid] >= target)\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo;\n}\n\nint searchInsert(int* nums, int numsSize, int target){\n return bSearch(nums, 0, numsSize, target);\n}\n
\u200b\u9644\u200b\uff1a\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u4f9b\u200b\u6bd4\u8f83\u200b
int bSearch(int *nums, int lo, int hi, int target)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (nums[mid] > target)\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo - 1;\n}\n
\u200b\u5728\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u4e2d\u200b\uff0c\u200b\u59cb\u7ec8\u200b\u6709\u200b\uff1a
nums[lo - 1]
\u200b\u662f\u200b\u622a\u81f3\u200b\u5f53\u524d\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u4e0d\u200b\u5927\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5927\u200b\u5143\u7d20\u200b nums[hi]
\u200b\u662f\u200b\u622a\u81f3\u200b\u5f53\u524d\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u5927\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b
\u200b\u800c\u200b\u5728\u200b\u672c\u9898\u200b\u7b97\u6cd5\u200b\u4e2d\u200b\uff0c\u200b\u59cb\u7ec8\u200b\u6709\u200b\uff1a
nums[lo - 1]
\u200b\u662f\u200b\u622a\u81f3\u200b\u5f53\u524d\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u5c0f\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5927\u200b\u5143\u7d20\u200b nums[hi]
\u200b\u662f\u200b\u622a\u81f3\u200b\u5f53\u524d\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u4e0d\u200b\u5c0f\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b
\u200b\u539f\u56e0\u200b\u5728\u4e8e\u200b\uff0c\u200b\u4e24\u200b\u7b97\u6cd5\u200b\u5bf9\u200b\u7b49\u4e8e\u200b\u7684\u200b\u60c5\u51b5\u200b\u7684\u200b\u5904\u7406\u200b\u4e0d\u540c\u200b\uff0c\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u5bf9\u200bnums[mid] == target
\u200b\u60c5\u51b5\u200b\u7684\u200b\u5904\u7406\u200b\u4e3a\u200b lo = mid + 1
\uff0c\u200b\u4ec5\u5f53\u200bnums[mid] > target
\u200b\u65f6\u624d\u200b\u6267\u884c\u200bhi = mid
\u3002\u200b\u7531\u4e8e\u200b[lo, hi)
\u200b\u662f\u200b\u5f53\u524d\u200b\u5df2\u200b \u200b\u786e\u8ba4\u200b\u7684\u200b\u533a\u95f4\u200b\uff0c\u200b\u5219\u200bnums[hi]
\u200b\u4e3a\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u5927\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b\uff0c\u200b\u800c\u200bnums[lo - 1]
\u200b\u4e3a\u200b\u4e0d\u200b\u5927\u4e8e\u200b target
\u200b\u7684\u200b\u6700\u5927\u200b\u5143\u7d20\u200b\u3002\u200b\u800c\u200b\u672c\u9898\u200b\u7b97\u6cd5\u200b\u5bf9\u200bnums[mid] == target
\u200b\u60c5\u51b5\u200b\u7684\u200b\u5904\u7406\u200b\u4e3a\u200bhi = mid
\uff0c\u200b\u4ec5\u5f53\u200b nums[mid] < target
\u200b\u65f6\u624d\u200b\u6267\u884c\u200blo = mid + 1
\uff0c\u200b\u5219\u200bnums[hi]
\u200b\u4e3a\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u4e0d\u200b\u5c0f\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5c0f\u200b \u200b\u5143\u7d20\u200b\uff0cnums[lo - 1]
\u200b\u4e3a\u200b\u5df2\u200b\u786e\u8ba4\u200b\u7684\u200b\u5c0f\u4e8e\u200btarget
\u200b\u7684\u200b\u6700\u5927\u200b\u5143\u7d20\u200b\u3002
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/350/","title":"350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/350/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u6765\u200b\u8ba1\u7b97\u200b\u5b83\u4eec\u200b\u7684\u200b\u4ea4\u96c6\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums1 = [1,2,2,1], nums2 = [2,2]\n\u200b\u8f93\u51fa\u200b\uff1a[2,2]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums1 = [4,9,5], nums2 = [9,4,9,8,4]\n\u200b\u8f93\u51fa\u200b\uff1a[4,9]\n
\u200b\u8bf4\u660e\u200b\uff1a
- \u200b\u8f93\u51fa\u200b\u7ed3\u679c\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b\uff0c\u200b\u5e94\u200b\u4e0e\u200b\u5143\u7d20\u200b\u5728\u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\u4e00\u81f4\u200b\u3002
- \u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u8003\u8651\u200b\u8f93\u51fa\u200b\u7ed3\u679c\u200b\u7684\u200b\u987a\u5e8f\u200b\u3002
\u200b\u8fdb\u9636\u200b\uff1a
- \u200b\u5982\u679c\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u6570\u7ec4\u200b\u5df2\u7ecf\u200b\u6392\u597d\u5e8f\u200b\u5462\u200b\uff1f\u200b\u4f60\u200b\u5c06\u200b\u5982\u4f55\u200b\u4f18\u5316\u200b\u4f60\u200b\u7684\u200b\u7b97\u6cd5\u200b\uff1f
- \u200b\u5982\u679c\u200b
nums1
\u200b\u7684\u200b\u5927\u5c0f\u200b\u6bd4\u200bnums2
\u200b\u5c0f\u200b\u5f88\u591a\u200b\uff0c\u200b\u54ea\u200b\u79cd\u200b\u65b9\u6cd5\u200b\u66f4\u4f18\u200b\uff1f - \u200b\u5982\u679c\u200b
nums2
\u200b\u7684\u200b\u5143\u7d20\u200b\u5b58\u50a8\u200b\u5728\u200b\u78c1\u76d8\u200b\u4e0a\u200b\uff0c\u200b\u5185\u5b58\u200b\u662f\u200b\u6709\u9650\u200b\u7684\u200b\uff0c\u200b\u5e76\u4e14\u200b\u4f60\u200b\u4e0d\u80fd\u200b\u4e00\u6b21\u200b\u52a0\u8f7d\u200b\u6240\u6709\u200b\u7684\u200b\u5143\u7d20\u200b\u5230\u200b\u5185\u5b58\u200b\u4e2d\u200b\uff0c\u200b\u4f60\u200b\u8be5\u200b\u600e\u4e48\u529e\u200b\uff1f
Reference
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/350/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u54c8\u5e0c\u200b\u8868\u200b\u5b58\u50a8\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5404\u200b\u5143\u7d20\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b\uff0c\u200b\u6ce8\u610f\u200b\u6570\u503c\u200b\u5728\u200b\u4ea4\u200b\u96c6\u4e2d\u200b\u53ef\u4ee5\u200b\u91cd\u590d\u200b\u51fa\u73b0\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
#define MIN(x, y) (x > y ? y : x)\nstruct cell\n{\n int value;\n int times1;\n int times2;\n};\nint* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){\n int i = 0, cur, mapSize = nums1Size + nums2Size, *ret = (int *)malloc(sizeof(int) * (nums1Size + nums2Size));\n *returnSize = 0;\n struct cell *hashMap = (struct cell *)memset(malloc(sizeof(struct cell) * mapSize), 0, sizeof(struct cell) * mapSize);\n for (i = 0; i < nums1Size; i++)\n {\n cur = (nums1[i] > 0 ? 1 : -1) * (nums1[i] % mapSize);\n while((hashMap[cur].times1 != 0 || hashMap[cur].times2) && hashMap[cur].value != nums1[i])\n {\n cur++;\n cur = cur == mapSize ? 0 : cur;\n }\n if (hashMap[cur].times1 == 0 && hashMap[cur].times2 == 0)\n hashMap[cur].value = nums1[i];\n hashMap[cur].times1++;\n }\n for (i = 0; i < nums2Size; i++)\n {\n cur = (nums2[i] > 0 ? 1 : -1) * (nums2[i] % mapSize);\n while((hashMap[cur].times1 != 0 || hashMap[cur].times2) && hashMap[cur].value != nums2[i])\n {\n cur++;\n cur = cur == mapSize ? 0 : cur;\n }\n if (hashMap[cur].times1 == 0 && hashMap[cur].times2 == 0)\n hashMap[cur].value = nums2[i];\n hashMap[cur].times2++;\n }\n for (i = 0; i < mapSize; i++)\n while ((hashMap[i].times2--) && (hashMap[i].times1--))\n ret[(*returnSize)++] = hashMap[i].value;\n return ret;\n}\n
","tags":["\u6392\u5e8f","\u54c8\u5e0c\u8868","\u53cc\u6307\u9488","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/36/","title":"36. \u200b\u6709\u6548\u200b\u7684\u200b\u6570\u72ec","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/36/#_1","title":"\u9898\u76ee","text":"\u200b\u5224\u65ad\u200b\u4e00\u4e2a\u200b\u00a09x9 \u200b\u7684\u200b\u6570\u72ec\u200b\u662f\u5426\u200b\u6709\u6548\u200b\u3002\u200b\u53ea\u200b\u9700\u8981\u200b\u6839\u636e\u200b\u4ee5\u4e0b\u200b\u89c4\u5219\u200b\uff0c\u200b\u9a8c\u8bc1\u200b\u5df2\u7ecf\u200b\u586b\u5165\u200b\u7684\u200b\u6570\u5b57\u200b\u662f\u5426\u200b\u6709\u6548\u200b\u5373\u53ef\u200b\u3002
- \u200b\u6570\u5b57\u200b
1-9
\u200b\u5728\u200b\u6bcf\u200b\u4e00\u884c\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002 - \u200b\u6570\u5b57\u200b
1-9
\u200b\u5728\u200b\u6bcf\u200b\u4e00\u5217\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002 - \u200b\u6570\u5b57\u200b
1-9
\u200b\u5728\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u4ee5\u200b\u7c97\u200b\u5b9e\u7ebf\u200b\u5206\u9694\u200b\u7684\u200b3x3
\u200b\u5bab\u5185\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002
\u200b\u4e0a\u56fe\u200b\u662f\u200b\u4e00\u4e2a\u200b\u90e8\u5206\u200b\u586b\u5145\u200b\u7684\u200b\u6709\u6548\u200b\u7684\u200b\u6570\u72ec\u200b\u3002
\u200b\u6570\u72ec\u200b\u90e8\u5206\u200b\u7a7a\u683c\u200b\u5185\u200b\u5df2\u200b\u586b\u5165\u200b\u4e86\u200b\u6570\u5b57\u200b\uff0c\u200b\u7a7a\u767d\u200b\u683c\u7528\u200b'.'
\u200b\u8868\u793a\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b:\n[\n [\"5\",\"3\",\".\",\".\",\"7\",\".\",\".\",\".\",\".\"],\n [\"6\",\".\",\".\",\"1\",\"9\",\"5\",\".\",\".\",\".\"],\n [\".\",\"9\",\"8\",\".\",\".\",\".\",\".\",\"6\",\".\"],\n [\"8\",\".\",\".\",\".\",\"6\",\".\",\".\",\".\",\"3\"],\n [\"4\",\".\",\".\",\"8\",\".\",\"3\",\".\",\".\",\"1\"],\n [\"7\",\".\",\".\",\".\",\"2\",\".\",\".\",\".\",\"6\"],\n [\".\",\"6\",\".\",\".\",\".\",\".\",\"2\",\"8\",\".\"],\n [\".\",\".\",\".\",\"4\",\"1\",\"9\",\".\",\".\",\"5\"],\n [\".\",\".\",\".\",\".\",\"8\",\".\",\".\",\"7\",\"9\"]\n]\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b:\n[\n\u00a0 [\"8\",\"3\",\".\",\".\",\"7\",\".\",\".\",\".\",\".\"],\n\u00a0 [\"6\",\".\",\".\",\"1\",\"9\",\"5\",\".\",\".\",\".\"],\n\u00a0 [\".\",\"9\",\"8\",\".\",\".\",\".\",\".\",\"6\",\".\"],\n\u00a0 [\"8\",\".\",\".\",\".\",\"6\",\".\",\".\",\".\",\"3\"],\n\u00a0 [\"4\",\".\",\".\",\"8\",\".\",\"3\",\".\",\".\",\"1\"],\n\u00a0 [\"7\",\".\",\".\",\".\",\"2\",\".\",\".\",\".\",\"6\"],\n\u00a0 [\".\",\"6\",\".\",\".\",\".\",\".\",\"2\",\"8\",\".\"],\n\u00a0 [\".\",\".\",\".\",\"4\",\"1\",\"9\",\".\",\".\",\"5\"],\n\u00a0 [\".\",\".\",\".\",\".\",\"8\",\".\",\".\",\"7\",\"9\"]\n]\n\u200b\u8f93\u51fa\u200b: false\n\u200b\u89e3\u91ca\u200b: \u200b\u9664\u4e86\u200b\u7b2c\u4e00\u884c\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6570\u5b57\u200b\u4ece\u200b 5 \u200b\u6539\u4e3a\u200b 8 \u200b\u4ee5\u5916\u200b\uff0c\u200b\u7a7a\u683c\u200b\u5185\u200b\u5176\u4ed6\u200b\u6570\u5b57\u200b\u5747\u200b\u4e0e\u200b \u200b\u793a\u4f8b\u200b1 \u200b\u76f8\u540c\u200b\u3002\n \u200b\u4f46\u200b\u7531\u4e8e\u200b\u4f4d\u4e8e\u200b\u5de6\u4e0a\u89d2\u200b\u7684\u200b 3x3 \u200b\u5bab\u5185\u200b\u6709\u200b\u4e24\u4e2a\u200b 8 \u200b\u5b58\u5728\u200b, \u200b\u56e0\u6b64\u200b\u8fd9\u4e2a\u200b\u6570\u72ec\u200b\u662f\u200b\u65e0\u6548\u200b\u7684\u200b\u3002\n
\u200b\u8bf4\u660e\u200b\uff1a
- \u200b\u4e00\u4e2a\u200b\u6709\u6548\u200b\u7684\u200b\u6570\u72ec\u200b\uff08\u200b\u90e8\u5206\u200b\u5df2\u200b\u88ab\u200b\u586b\u5145\u200b\uff09\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u53ef\u89e3\u200b\u7684\u200b\u3002
- \u200b\u53ea\u200b\u9700\u8981\u200b\u6839\u636e\u200b\u4ee5\u4e0a\u200b\u89c4\u5219\u200b\uff0c\u200b\u9a8c\u8bc1\u200b\u5df2\u7ecf\u200b\u586b\u5165\u200b\u7684\u200b\u6570\u5b57\u200b\u662f\u5426\u200b\u6709\u6548\u200b\u5373\u53ef\u200b\u3002
- \u200b\u7ed9\u200b\u5b9a\u6570\u200b\u72ec\u200b\u5e8f\u5217\u200b\u53ea\u200b\u5305\u542b\u200b\u6570\u5b57\u200b\u00a01-9\u00a0\u200b\u548c\u200b\u5b57\u7b26\u200b\u00a0'.'\u00a0\u3002
- \u200b\u7ed9\u200b\u5b9a\u6570\u200b\u72ec\u200b\u6c38\u8fdc\u200b\u662f\u200b\u00a09x9\u00a0\u200b\u5f62\u5f0f\u200b\u7684\u200b\u3002
Reference
","tags":["\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/36/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6839\u636e\u200b\u5b9a\u4e49\u200b\u76f4\u63a5\u5224\u65ad\u200b\u8f93\u5165\u200b\u7684\u200b\u6570\u7ec4\u200b\u662f\u5426\u200b\u6ee1\u8db3\u200b\u6570\u72ec\u200b\u7684\u200b3\u200b\u4e2a\u200b\u6761\u4ef6\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
bool isValidSudoku(char** board, int boardSize, int* boardColSize){\n int i = 0, j = 0, positions1[boardSize], positions2[boardSize], k = 0;\n for (i = 0; i < boardSize; i++)\n {\n memset(positions1, 0, sizeof(int) * boardSize);\n memset(positions2, 0, sizeof(int) * boardSize);\n for (j = 0; j < boardSize; j++)\n {\n if (board[i][j] > '0' && positions1[board[i][j] - '1'])\n return false;\n if (board[j][i] > '0' && positions2[board[j][i] - '1'])\n return false;\n if (board[i][j] > '0')\n positions1[board[i][j] - '1'] = 1;\n if (board[j][i] > '0')\n positions2[board[j][i] - '1'] = 1;\n }\n }\n for (i = 0; i < 3; i++)\n {\n for (j = 0; j < 3; j++)\n {\n memset(positions1, 0, sizeof(int) * boardSize);\n for (k = 0; k < boardSize; k++)\n {\n if (board[i * 3 + k % 3][j * 3 + k / 3] > '0' && positions1[board[i * 3 + k % 3][j * 3 + k / 3] - '1'])\n return false;\n if (board[i * 3 + k % 3][j * 3 + k / 3] > '0')\n positions1[board[i * 3 + k % 3][j * 3 + k / 3] - '1'] = 1;\n }\n }\n }\n return true;\n}\n
","tags":["\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/368/","title":"368. \u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/368/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u7531\u200b \u200b\u65e0\u200b\u91cd\u590d\u200b \u200b\u6b63\u6574\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b nums
\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u627e\u51fa\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5176\u4e2d\u200b\u6700\u5927\u200b\u7684\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b answer
\uff0c\u200b\u5b50\u200b\u96c6\u4e2d\u200b\u6bcf\u4e00\u200b\u5143\u7d20\u200b\u5bf9\u200b (answer[i], answer[j])
\u200b\u90fd\u200b\u5e94\u5f53\u200b\u6ee1\u8db3\u200b\uff1a
answer[i] % answer[j] == 0
\uff0c\u200b\u6216\u200b answer[j] % answer[i] == 0
\u200b\u5982\u679c\u200b\u5b58\u5728\u200b\u591a\u4e2a\u200b\u6709\u6548\u200b\u89e3\u200b\u5b50\u96c6\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5176\u4e2d\u200b\u4efb\u4f55\u200b\u4e00\u4e2a\u200b\u5747\u200b\u53ef\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,3]\n\u200b\u8f93\u51fa\u200b\uff1a[1,2]\n\u200b\u89e3\u91ca\u200b\uff1a[1,3] \u200b\u4e5f\u200b\u4f1a\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u6b63\u786e\u200b\u7b54\u6848\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,4,8]\n\u200b\u8f93\u51fa\u200b\uff1a[1,2,4,8]\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 1000
1 <= nums[i] <= 2 * 10^9
nums
\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u6574\u6570\u200b \u200b\u4e92\u4e0d\u200b\u76f8\u540c\u200b
Reference
","tags":["\u6570\u5b66","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/368/#_2","title":"\u9898\u89e3","text":"\u200b\u6574\u6570\u200b\u4e4b\u95f4\u200b\u7684\u200b\u6574\u9664\u200b\u5173\u7cfb\u200b\u6ee1\u8db3\u200b\u81ea\u53cd\u6027\u200b\u3001\u200b\u53cd\u5bf9\u79f0\u6027\u200b\u548c\u200b\u4f20\u9012\u6027\u200b\uff0c\u200b\u4f7f\u7528\u200b\\(a|b\\)\u200b\u8868\u793a\u200b\\(a\\)\u200b\u53ef\u4ee5\u200b\u88ab\u200b\\(b\\)\u200b\u6574\u9664\u200b\uff0c\u200b\u5219\u200b\uff1a
- \u200b\u81ea\u53cd\u6027\u200b\uff1a\\(a|a = T\\)
- \u200b\u53cd\u5bf9\u79f0\u6027\u200b\uff1a\\(a|b \\overline \\lor b|a = T\\)
- \u200b\u4f20\u9012\u6027\u200b\uff1a\\(a|b \\land b|c\\Rightarrow a|c\\)
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u6574\u9664\u200b\u5173\u7cfb\u200b\u662f\u200b\u6b63\u6574\u6570\u200b\u96c6\u200b\\(N_+\\)\u200b\u4e0a\u200b\u7684\u200b\u76f8\u5bb9\u200b\u5173\u7cfb\u200b\u4e0e\u200b\u504f\u5e8f\u200b\u5173\u7cfb\u200b\u3002
\u200b\u8bbe\u200b\u6b63\u6574\u6570\u200b\u96c6\u5408\u200b\u4e3a\u200b\\(S\\)\uff0c\u200b\u4ee5\u4e0b\u200b\u57fa\u4e8e\u200b\u504f\u5e8f\u200b\u5173\u7cfb\u200b\\(R\\)\u200b\u4e0e\u200b\u504f\u5e8f\u200b\u96c6\u200b\\(S\\)\u200b\u5b9a\u4e49\u200b\u94fe\u200b\u7684\u200b\u6982\u5ff5\u200b\uff1a
- \u200b\u82e5\u200b\\(a\\in S, b\\in S\\)\uff0c\u200b\u4e14\u200b\\(a|b \\lor b|a\\)\uff0c\u200b\u5219\u200b\\(a, b\\)\u200b\u662f\u200b\u53ef\u6bd4\u200b\u7684\u200b\uff1b
- \u200b\u82e5\u200b\u96c6\u5408\u200b\\(B\\subseteq S\\)\uff0c\u200b\u4e14\u200b\u5bf9\u4e8e\u200b\\(B\\)\u200b\u4e2d\u200b\u4efb\u610f\u200b\u4e00\u5bf9\u200b\u5143\u7d20\u200b\\(x, y\\)\u200b\u90fd\u200b\u662f\u200b\u53ef\u6bd4\u200b\u7684\u200b\uff0c\u200b\u5219\u200b\u79f0\u200b\\(B\\)\u200b\u4e3a\u200b\u504f\u5e8f\u200b\u96c6\u200b\\(S\\)\u200b\u4e0a\u200b\u7684\u200b\u94fe\u200b\u3002
- \u200b\u504f\u5e8f\u200b\u96c6\u200b\\(S\\)\u200b\u4e2d\u200b\u5305\u542b\u200b\u5143\u7d20\u200b\u6700\u591a\u200b\u7684\u200b\u94fe\u200b\u79f0\u4e3a\u200b\u6700\u957f\u200b\u94fe\u200b\u3002
\u200b\u7531\u6b64\u53ef\u89c1\u200b\uff0c\u200b\u6240\u6c42\u200b\u7684\u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b\u5373\u200b\u4e3a\u200b\\(S\\)\u200b\u4e0a\u200b\u7684\u200b\u6700\u957f\u200b\u94fe\u200b\u3002
\u200b\u504f\u5e8f\u200b\u96c6\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u54c8\u65af\u200b\u56fe\u200b\u8fdb\u884c\u200b\u8868\u793a\u200b\uff0c\u200b\u5982\u200b\u96c6\u5408\u200b\\(\\{2,3,4,6,8\\}\\)\u200b\u4e0a\u200b\u7684\u200b\u504f\u5e8f\u200b\u5173\u7cfb\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
\u200b\u54c8\u65af\u200b\u56fe\u662f\u200b\u6709\u200b\u5411\u200b\u65e0\u200b\u73af\u56fe\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u8fde\u901a\u200b\u3002\u200b\u94fe\u200b\u5728\u200b\u54c8\u65af\u200b\u56fe\u4e2d\u200b\u8868\u73b0\u200b\u4e3a\u200b\u4e00\u6bb5\u200b\u8def\u5f84\u200b\uff0c\u200b\u6700\u957f\u200b\u94fe\u5373\u200b\u4e3a\u200b\u54c8\u65af\u200b\u56fe\u4e2d\u200b\u7684\u200b\u6700\u957f\u200b\u8def\u5f84\u200b\uff0c\u200b\u5373\u200b\u5404\u200b\u5206\u91cf\u200b\u7684\u200b\u6700\u957f\u200b\u76f4\u5f84\u200b\uff0c\u200b\u5982\u56fe\u200b\u4e2d\u52a0\u200b\u7c97\u7ebf\u6761\u200b\u6240\u793a\u200b\u3002
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u56fe\u200b\u89e3\u51b3\u200b\u672c\u9898\u200b\uff0c\u200b\u7b2c\u4e00\u6b65\u200b\u6784\u9020\u200b\u504f\u5e8f\u200b\u96c6\u200b\u7684\u200b\u54c8\u65af\u200b\u56fe\u200b\uff0c\u200b\u6d41\u7a0b\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u5bf9\u200b\u96c6\u5408\u200b\u6392\u5e8f\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u5728\u200b\u56fe\u200b\u4e2d\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u4e0e\u200b\u4e4b\u200b\u5bf9\u5e94\u200b\uff1b
- \u200b\u4ece\u540e\u200b\u5411\u524d\u200b\u904d\u5386\u200b\u96c6\u5408\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\\(a_i\\)\uff1a
- \u200b\u4ece\u200b\u7b2c\u200b\\(i + 1\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\u5f00\u59cb\u200b\uff0c\u200b\u5411\u200b\u540e\u200b\u904d\u5386\u200b\u96c6\u5408\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\\(a_j\\)\uff0c\u200b\u82e5\u200b\\(a_j|a_i\\)\uff0c\u200b\u5e76\u4e14\u200b\u4e0d\u200b\u5b58\u5728\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u8282\u70b9\u200b\u4e0e\u200b\\(a_i\\)\u200b\u76f8\u8fde\u200b\uff0c\u200b\u5219\u200b\u5c06\u200b\u8282\u70b9\u200b\\(i\\)\u200b\u4e0e\u200b\u8282\u70b9\u200b\\(j\\)\u200b\u76f8\u8fde\u63a5\u200b\u3002
\u200b\u4e3a\u4e86\u200b\u5feb\u901f\u200b\u6c42\u51fa\u200b\u56fe\u200b\u7684\u200b\u76f4\u5f84\u200b\uff0c\u200b\u53ef\u200b\u5728\u200b\u8282\u70b9\u200b\u4e2d\u200b\u5b58\u50a8\u200b\u4e24\u4e2a\u200b\u503c\u200b\uff0c\u200b\u5373\u200b\uff1a
- \u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u8ddd\u79bb\u200b\u672b\u7aef\u200b\u8282\u70b9\u200b\uff08\u200b\u51fa\u5ea6\u200b\u4e3a\u200b\\(0\\)\u200b\u7684\u200b\u8282\u70b9\u200b\uff09\u200b\u7684\u200b\u6700\u5927\u200b\u8ddd\u79bb\u200b
- \u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u8ddd\u79bb\u200b\u672b\u7aef\u200b\u8282\u70b9\u200b\u6700\u5927\u200b\u8ddd\u79bb\u200b\u6240\u200b\u5bf9\u5e94\u200b\u7684\u200b\u51fa\u8fb9\u200b
\u200b\u7531\u4e8e\u200b\u6574\u9664\u200b\u5173\u7cfb\u200b\u8574\u542b\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b\u5173\u7cfb\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5728\u200b\u6784\u9020\u200b\u54c8\u65af\u200b\u56fe\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u540c\u65f6\u200b\u6784\u9020\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u503c\u200b\u3002
\u200b\u7b2c\u4e8c\u6b65\u200b\u5373\u53ef\u200b\u627e\u51fa\u200b\u6700\u957f\u200b\u76f4\u5f84\u200b\u3002\u200b\u904d\u5386\u200b\u6240\u6709\u200b\u5165\u5ea6\u200b\u4e3a\u200b\\(0\\)\u200b\u7684\u200b\u8282\u70b9\u200b\uff0c\u200b\u627e\u51fa\u200b\u5e76\u200b\u8bb0\u4e0b\u200b\u8ddd\u79bb\u200b\u672b\u7aef\u200b\u8282\u70b9\u200b\u6700\u8fdc\u200b\u7684\u200b\u8282\u70b9\u200b\u3002\u200b\u518d\u200b\u6839\u636e\u200b\u8282\u70b9\u200b\u4e2d\u200b\u5b58\u50a8\u200b\u7684\u200b\u51fa\u8fb9\u200b\u4fe1\u606f\u200b\u5373\u53ef\u200b\u5b8c\u6574\u200b\u6784\u9020\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b\u3002
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\n#define MAX(x, y) ((x) > (y) ? (x) : (y))\nstruct Edge;\nstruct Vertex;\nstruct Edge\n{\n struct Vertex *dest;\n struct Edge *next;\n};\nstruct Vertex\n{\n int val;\n int status;\n struct Edge *edges;\n int height;\n struct Edge *maxHeight;\n};\nstruct Edge *getEdge(struct Vertex *dest, struct Edge *next)\n{\n struct Edge *cur = next;\n while (cur)\n {\n if (dest->val % cur->dest->val == 0)\n return next;\n cur = cur->next;\n }\n struct Edge *ret = (struct Edge *)malloc(sizeof(struct Edge));\n ret->dest = dest;\n ret->next = next;\n return ret;\n}\nint cmp(const void *a, const void *b)\n{\n return *((int *)a) - *((int *)b);\n}\nvoid dfs(struct Vertex *graph)\n{\n if (graph == NULL)\n return;\n graph->status = true;\n struct Edge *edge = graph->edges;\n while (edge)\n {\n dfs(edge->dest);\n edge = edge->next;\n }\n}\nint* largestDivisibleSubset(int* nums, int numsSize, int* returnSize){\n struct Vertex *nodes = (struct Vertex *)malloc(sizeof(struct Vertex) * numsSize), *maxVertex = NULL;\n int i = 0, j = 0, max = -1, *ret = NULL;\n qsort(nums, numsSize, sizeof(int), cmp);\n for (i = 0; i < numsSize; i++)\n {\n nodes[i].val = nums[i];\n nodes[i].status = 0;\n nodes[i].edges = NULL;\n nodes[i].height = 0;\n nodes[i].maxHeight = NULL;\n }\n for (i = numsSize - 1; i >= 0; i--)\n {\n for (j = i + 1; j < numsSize; j++)\n {\n if (nodes[j].val % nodes[i].val)\n continue;\n nodes[i].edges = getEdge(nodes + j, nodes[i].edges);\n if (nodes[i].height < nodes[j].height + 1)\n {\n nodes[i].height = nodes[j].height + 1;\n nodes[i].maxHeight = nodes[i].edges;\n }\n }\n }\n for (i = 0; i < numsSize; i++)\n {\n if (nodes[i].status)\n continue;\n if (nodes[i].height > max)\n {\n max = nodes[i].height;\n maxVertex = nodes + i;\n }\n dfs(nodes + i);\n }\n *returnSize = max + 1;\n ret = (int *)malloc(sizeof(int) * (max + 1));\n for (i = 0; i <= max; i++)\n {\n ret[i] = maxVertex->val;\n if (maxVertex->maxHeight == NULL)\n break;\n maxVertex = maxVertex->maxHeight->dest;\n }\n return ret;\n}\n
","tags":["\u6570\u5b66","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/37/","title":"37. \u200b\u89e3\u6570\u200b\u72ec","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u54c8\u5e0c\u8868","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/37/#_1","title":"\u9898\u76ee","text":"\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u7a0b\u5e8f\u200b\uff0c\u200b\u901a\u8fc7\u200b\u586b\u5145\u200b\u7a7a\u683c\u200b\u6765\u200b\u89e3\u51b3\u200b\u6570\u72ec\u200b\u95ee\u9898\u200b\u3002
\u200b\u6570\u72ec\u200b\u7684\u200b\u89e3\u6cd5\u200b\u9700\u200b \u200b\u9075\u5faa\u200b\u5982\u4e0b\u200b\u89c4\u5219\u200b\uff1a
\u200b\u6570\u5b57\u200b\u00a01-9
\u00a0\u200b\u5728\u200b\u6bcf\u200b\u4e00\u884c\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002 \u200b\u6570\u5b57\u200b\u00a01-9
\u00a0\u200b\u5728\u200b\u6bcf\u200b\u4e00\u5217\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002 \u200b\u6570\u5b57\u200b\u00a01-9
\u00a0\u200b\u5728\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u4ee5\u200b\u7c97\u200b\u5b9e\u7ebf\u200b\u5206\u9694\u200b\u7684\u200b\u00a03x3
\u00a0\u200b\u5bab\u5185\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002\uff08\u200b\u8bf7\u200b\u53c2\u8003\u200b\u793a\u4f8b\u200b\u56fe\u200b\uff09 \u200b\u6570\u72ec\u200b\u90e8\u5206\u200b\u7a7a\u683c\u200b\u5185\u200b\u5df2\u200b\u586b\u5165\u200b\u4e86\u200b\u6570\u5b57\u200b\uff0c\u200b\u7a7a\u767d\u200b\u683c\u7528\u200b\u00a0'.'
\u00a0\u200b\u8868\u793a\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = [\n [\"5\",\"3\",\".\",\".\",\"7\",\".\",\".\",\".\",\".\"],\n [\"6\",\".\",\".\",\"1\",\"9\",\"5\",\".\",\".\",\".\"],\n [\".\",\"9\",\"8\",\".\",\".\",\".\",\".\",\"6\",\".\"],\n [\"8\",\".\",\".\",\".\",\"6\",\".\",\".\",\".\",\"3\"],\n [\"4\",\".\",\".\",\"8\",\".\",\"3\",\".\",\".\",\"1\"],\n [\"7\",\".\",\".\",\".\",\"2\",\".\",\".\",\".\",\"6\"],\n [\".\",\"6\",\".\",\".\",\".\",\".\",\"2\",\"8\",\".\"],\n [\".\",\".\",\".\",\"4\",\"1\",\"9\",\".\",\".\",\"5\"],\n [\".\",\".\",\".\",\".\",\"8\",\".\",\".\",\"7\",\"9\"]\n]\n\u200b\u8f93\u51fa\u200b\uff1a[\n [\"5\",\"3\",\"4\",\"6\",\"7\",\"8\",\"9\",\"1\",\"2\"],\n [\"6\",\"7\",\"2\",\"1\",\"9\",\"5\",\"3\",\"4\",\"8\"],\n [\"1\",\"9\",\"8\",\"3\",\"4\",\"2\",\"5\",\"6\",\"7\"],\n [\"8\",\"5\",\"9\",\"7\",\"6\",\"1\",\"4\",\"2\",\"3\"],\n [\"4\",\"2\",\"6\",\"8\",\"5\",\"3\",\"7\",\"9\",\"1\"],\n [\"7\",\"1\",\"3\",\"9\",\"2\",\"4\",\"8\",\"5\",\"6\"],\n [\"9\",\"6\",\"1\",\"5\",\"3\",\"7\",\"2\",\"8\",\"4\"],\n [\"2\",\"8\",\"7\",\"4\",\"1\",\"9\",\"6\",\"3\",\"5\"],\n [\"3\",\"4\",\"5\",\"2\",\"8\",\"6\",\"1\",\"7\",\"9\"]\n]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8f93\u5165\u200b\u7684\u200b\u6570\u72ec\u200b\u5982\u4e0a\u56fe\u200b\u6240\u793a\u200b\uff0c\u200b\u552f\u4e00\u200b\u6709\u6548\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a\n
\u200b\u63d0\u793a\u200b\uff1a
board.length == 9
board[i].length == 9
board[i][j]
\u200b\u662f\u200b\u4e00\u4f4d\u200b\u6570\u5b57\u200b\u6216\u8005\u200b '.'
- \u200b\u9898\u76ee\u200b\u6570\u636e\u200b \u200b\u4fdd\u8bc1\u200b \u200b\u8f93\u5165\u200b\u6570\u72ec\u4ec5\u200b\u6709\u200b\u4e00\u4e2a\u200b\u89e3\u200b
Reference
","tags":["\u54c8\u5e0c\u8868","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/37/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u56de\u6eaf\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u7a7a\u200b\u5355\u5143\u683c\u200b\uff0c\u200b\u68c0\u67e5\u200b\u5176\u200b\u6240\u5728\u200b\u884c\u200b\uff0c\u200b\u6240\u5728\u200b\u5217\u200b\u4e0e\u200b\u6240\u5728\u200b\u65b9\u683c\u200b\uff0c\u200b\u9010\u4e2a\u200b\u68c0\u67e5\u200b\u5176\u200b\u53ef\u4ee5\u200b\u586b\u5165\u200b\u7684\u200b\u6570\u503c\u200b\u3002\u200b\u5982\u679c\u200b \u200b\u6709\u200b\u53ef\u4ee5\u200b\u586b\u5165\u200b\u7684\u200b\u5b57\u7b26\u200b\uff0c\u200b\u5219\u200b\u4f9d\u6b21\u200b\u8fdb\u884c\u200b\u5c1d\u8bd5\u200b\u3002\u200b\u82e5\u200b\u67d0\u4e2a\u200b\u7a7a\u683c\u200b\u6ca1\u6709\u200b\u4efb\u4f55\u200b\u53ef\u4ee5\u200b\u586b\u5165\u200b\u7684\u200b\u6570\u503c\u200b\uff0c\u200b\u6216\u200b\u6240\u6709\u200b\u53ef\u200b\u586b\u5165\u200b\u7684\u200b\u503c\u200b\u90fd\u200b\u662f\u200b\u9519\u8bef\u200b\u7684\u200b \uff0c\u200b\u610f\u5473\u7740\u200b\u5f53\u524d\u200b\u641c\u7d22\u200b\u8def\u5f84\u200b\u5b58\u5728\u200b\u9519\u8bef\u200b\uff0c\u200b\u9700\u8981\u200b\u8fd4\u56de\u200b\u4e0a\u200b\u4e00\u4e2a\u200b\u72b6\u6001\u200b\u8fdb\u884c\u200b\u4e0b\u200b\u4e00\u6b65\u200b\u5c1d\u8bd5\u200b\u3002
\u200b\u5982\u679c\u200b\u65b9\u683c\u200b\u88ab\u200b\u5b8c\u5168\u200b\u586b\u6ee1\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u7acb\u5373\u200b\u8fd4\u56de\u200b\u3002\u200b\u5e76\u200b\u901a\u8fc7\u200b\u8fd4\u56de\u503c\u200b\u544a\u8bc9\u200b\u4e0a\u200b\u4e00\u6b65\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200b\u7ed3\u679c\u200b\u3002
bool dfs(char **board, int boardSize, int *boardColSize)\n{\n int x = 0, y = 0, i = 0, j = 0;\n bool flag = true, candidate[9] = {false};\n for (x = 0; x < 9 && flag; x++)\n for (y = 0; y < 9 && flag; y++)\n if (board[x][y] == '.')\n flag = false;\n if (flag)\n return true;\n x--;\n y--;\n for (i = 0; i < 9; i++)\n {\n if (board[x][i] != '.')\n candidate[board[x][i] - '1'] = true;\n if (board[i][y] != '.')\n candidate[board[i][y] - '1'] = true;\n if (board[3 * (x / 3) + i / 3][3 * (y / 3) + i % 3] != '.')\n candidate[board[3 * (x / 3) + i / 3][3 * (y / 3) + i % 3] - '1'] = true;\n }\n for (i = 0; i < 9 && !flag; i++)\n {\n if (!candidate[i])\n {\n board[x][y] = '1' + i;\n flag = flag || dfs(board, boardSize, boardColSize);\n if (flag)\n return flag;\n board[x][y] = '.';\n }\n }\n return flag;\n}\n\nvoid solveSudoku(char** board, int boardSize, int* boardColSize){\n dfs(board, boardSize, boardColSize);\n}\n
","tags":["\u54c8\u5e0c\u8868","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/377/","title":"377. \u200b\u7ec4\u5408\u200b\u603b\u548c\u200b \u2163","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/377/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u7531\u200b \u200b\u4e0d\u540c\u200b \u200b\u6574\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u6570\u7ec4\u200b nums
\uff0c\u200b\u548c\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u200b\u6574\u6570\u200b target
\u3002\u200b\u8bf7\u200b\u4f60\u200b\u4ece\u200b nums
\u200b\u4e2d\u200b\u627e\u51fa\u200b\u5e76\u200b\u8fd4\u56de\u200b\u603b\u548c\u200b\u4e3a\u200b target
\u200b\u7684\u200b\u5143\u7d20\u200b\u7ec4\u5408\u200b\u7684\u200b\u4e2a\u6570\u200b\u3002
\u200b\u9898\u76ee\u200b\u6570\u636e\u200b\u4fdd\u8bc1\u200b\u7b54\u6848\u200b\u7b26\u5408\u200b 32
\u200b\u4f4d\u200b\u6574\u6570\u200b\u8303\u56f4\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,3], target = 4\n\u200b\u8f93\u51fa\u200b\uff1a7\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u7ec4\u5408\u200b\u4e3a\u200b\uff1a\n(1, 1, 1, 1)\n(1, 1, 2)\n(1, 2, 1)\n(1, 3)\n(2, 1, 1)\n(2, 2)\n(3, 1)\n\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u987a\u5e8f\u200b\u4e0d\u540c\u200b\u7684\u200b\u5e8f\u5217\u200b\u88ab\u200b\u89c6\u4f5c\u200b\u4e0d\u540c\u200b\u7684\u200b\u7ec4\u5408\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [9], target = 3\n\u200b\u8f93\u51fa\u200b\uff1a0\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 200
1 <= nums[i] <= 1000
nums
\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b \u200b\u4e92\u4e0d\u200b\u76f8\u540c\u200b 1 <= target <= 1000
\u200b\u8fdb\u9636\u200b\uff1a \u200b\u5982\u679c\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u542b\u6709\u200b\u8d1f\u6570\u200b\u4f1a\u200b\u53d1\u751f\u200b\u4ec0\u4e48\u200b\uff1f\u200b\u95ee\u9898\u200b\u4f1a\u200b\u4ea7\u751f\u200b\u4f55\u79cd\u200b\u53d8\u5316\u200b\uff1f\u200b\u5982\u679c\u200b\u5141\u8bb8\u200b\u8d1f\u6570\u200b\u51fa\u73b0\u200b\uff0c\u200b\u9700\u8981\u200b\u5411\u200b\u9898\u76ee\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u54ea\u4e9b\u200b\u9650\u5236\u200b\u6761\u4ef6\u200b\uff1f
Reference
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/377/#_2","title":"\u9898\u89e3","text":"\u200b\u672c\u9898\u200b\u7684\u200b\u601d\u8def\u200b\u4e0e\u200b70. \u200b\u722c\u697c\u68af\u200b\u76f8\u540c\u200b\u3002\u200b\u6b64\u5904\u200b\u4f7f\u7528\u200b\u8bb0\u5fc6\u200b\u5316\u200b\u9012\u5f52\u200b\u89e3\u51b3\u200b\u3002
\u200b\u8bbe\u200b\\(f(x; S)\\)\u200b\u4e3a\u200b\u7ed9\u5b9a\u200b\u6574\u6570\u200b\u96c6\u5408\u200b\\(S\\)\uff0c\u200b\u7ec4\u6210\u200b\u76ee\u6807\u503c\u200b\\(x\\)\u200b\u7684\u200b\u7ec4\u5408\u200b\u6570\u91cf\u200b\uff0c\u200b\u6211\u4eec\u200b\u9ed8\u8ba4\u200b\\(0\\in S\\)\u3002
- \u200b\u5f53\u200b\\(x < 0\\)\uff0c\u200b\u7531\u4e8e\u200b\\(\\forall y\\in S, y\\geq 0\\)\uff0c\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u5f97\u5230\u200b\u5c0f\u4e8e\u200b\\(0\\)\u200b\u7684\u200b\u6570\u503c\u200b\uff0c\u200b\u6709\u200b\\(f(x; S) = 0\\)
- \\(x = 0\\)\uff0c\u200b\u7531\u4e8e\u200b\u9ed8\u8ba4\u200b\\(0\\in S\\)\uff0c\u200b\u6709\u200b\\(f(x; S) = 1\\)\u3002
- \u200b\u5f53\u200b\\(x < 0\\)\uff0c\\(S\\)\u200b\u4e2d\u200b\u7684\u200b\u4efb\u610f\u200b\u5143\u7d20\u200b\\(y\\)\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u9009\u62e9\u200b\uff0c\u200b\u9009\u62e9\u200b\\(y\\)\u200b\u5f97\u5230\u200b\u7684\u200b\u7ec4\u5408\u200b\u4e2a\u6570\u200b\u4e3a\u200b\\(f(x - y; S)\\)
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5f97\u5230\u200b\\(f(x; S)\\)\u200b\u7684\u200b\u8868\u8fbe\u5f0f\u200b\uff1a
\\[ f(x; S)=\\left\\{ \\begin{aligned} & 0 & x < 0 \\\\ & 1 & x = 0 \\\\ & \\sum_{y\\in S} f(x - y; S) & x > 0 \\end{aligned} \\right . \\] \u200b\u7531\u4e8e\u200b\u8ba1\u7b97\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u4f1a\u200b\u91cd\u590d\u200b\u8ba1\u7b97\u200b\u67d0\u4e9b\u200b\\(f(x; S)\\)\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u8bb0\u5f55\u200b\u6240\u6709\u200b\u5df2\u7ecf\u200b\u8ba1\u7b97\u200b\u8fc7\u200b\u7684\u200b\\(f(x; S)\\)\u3002
int helper(int *dp, int *nums, int numsSize, int target)\n{\n if (target == 0)\n return 1;\n if (target < 0)\n return 0;\n if (dp[target - 1] < 0)\n {\n int ret = 0, i = 0;\n for (i = 0; i < numsSize; i++)\n ret += helper(dp, nums, numsSize, target - nums[i]);\n dp[target - 1] = ret;\n }\n return dp[target - 1];\n}\n\nint combinationSum4(int* nums, int numsSize, int target) {\n int *dp = (int *)malloc(sizeof(int) * target);\n memset(dp, 0xff, sizeof(int) * target);\n return helper(dp, nums, numsSize, target);\n}\n
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/38/","title":"38. \u200b\u5916\u89c2\u200b\u6570\u5217","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/38/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\\(n\\)\uff08\\(1 \\leq\u00a0n\u00a0\\leq 30\\)\uff09\uff0c\u200b\u8f93\u51fa\u200b\u5916\u89c2\u200b\u6570\u5217\u200b\u7684\u200b\u7b2c\u200b\\(n\\)\u200b\u9879\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u6574\u6570\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e00\u9879\u200b\u5c06\u200b\u8868\u793a\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u3002
\u300c\u200b\u5916\u89c2\u200b\u6570\u5217\u200b\u300d\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4ece\u200b\u6570\u5b57\u200b 1 \u200b\u5f00\u59cb\u200b\uff0c\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e00\u9879\u200b\u90fd\u200b\u662f\u200b\u5bf9\u200b\u524d\u200b\u4e00\u9879\u200b\u7684\u200b\u63cf\u8ff0\u200b\u3002\u200b\u524d\u200b\u4e94\u9879\u200b\u5982\u4e0b\u200b\uff1a
1. 1\n2. 11\n3. 21\n4. 1211\n5. 111221\n
\u200b\u7b2c\u4e00\u9879\u200b\u662f\u200b\u6570\u5b57\u200b 1
\u200b\u63cf\u8ff0\u200b\u524d\u200b\u4e00\u9879\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u6570\u662f\u200b 1 \u200b\u5373\u200b \u201c\u200b\u4e00\u4e2a\u200b 1 \u201d\uff0c\u200b\u8bb0\u200b\u4f5c\u200b 11
\u200b\u63cf\u8ff0\u200b\u524d\u200b\u4e00\u9879\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u6570\u662f\u200b 11 \u200b\u5373\u200b \u201c\u200b\u4e24\u4e2a\u200b 1 \u201d \uff0c\u200b\u8bb0\u200b\u4f5c\u200b 21
\u200b\u63cf\u8ff0\u200b\u524d\u200b\u4e00\u9879\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u6570\u662f\u200b 21 \u200b\u5373\u200b \u201c\u200b\u4e00\u4e2a\u200b 2 \u200b\u4e00\u4e2a\u200b 1 \u201d \uff0c\u200b\u8bb0\u200b\u4f5c\u200b 1211
\u200b\u63cf\u8ff0\u200b\u524d\u200b\u4e00\u9879\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u6570\u662f\u200b 1211 \u200b\u5373\u200b \u201c\u200b\u4e00\u4e2a\u200b 1 \u200b\u4e00\u4e2a\u200b 2 \u200b\u4e24\u4e2a\u200b 1 \u201d \uff0c\u200b\u8bb0\u200b\u4f5c\u200b 111221
\u200b\u793a\u4f8b\u200b\u00a01:
\u200b\u8f93\u5165\u200b: 1\n\u200b\u8f93\u51fa\u200b: \"1\"\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8fd9\u662f\u200b\u4e00\u4e2a\u200b\u57fa\u672c\u200b\u6837\u4f8b\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2:
\u200b\u8f93\u5165\u200b: 4\n\u200b\u8f93\u51fa\u200b: \"1211\"\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u5f53\u200b n = 3 \u200b\u65f6\u200b\uff0c\u200b\u5e8f\u5217\u200b\u662f\u200b \"21\"\uff0c\u200b\u5176\u4e2d\u200b\u6211\u4eec\u200b\u6709\u200b \"2\" \u200b\u548c\u200b \"1\" \u200b\u4e24\u7ec4\u200b\uff0c\"2\" \u200b\u53ef\u4ee5\u200b\u8bfb\u4f5c\u200b \"12\"\uff0c\u200b\u4e5f\u200b\u5c31\u662f\u200b\u51fa\u73b0\u200b\u9891\u6b21\u200b = 1 \u200b\u800c\u200b \u200b\u503c\u200b = 2\uff1b\u200b\u7c7b\u4f3c\u200b \"1\" \u200b\u53ef\u4ee5\u200b\u8bfb\u4f5c\u200b \"11\"\u3002\u200b\u6240\u4ee5\u200b\u7b54\u6848\u200b\u662f\u200b \"12\" \u200b\u548c\u200b \"11\" \u200b\u7ec4\u5408\u200b\u5728\u200b\u4e00\u8d77\u200b\uff0c\u200b\u4e5f\u200b\u5c31\u662f\u200b \"1211\"\u3002\n
Reference
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/38/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6839\u636e\u200b\u5b9a\u4e49\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\u5373\u53ef\u200b\uff0c\u200b\u6ce8\u610f\u200b\u6b21\u6570\u200b\u90e8\u5206\u200b\u53ef\u80fd\u200b\u8d85\u8fc7\u200b10\uff0c\u200b\u800c\u200b\u6570\u5b57\u200b\u90e8\u5206\u200b\u4e0d\u4f1a\u200b\u8d85\u8fc7\u200b10\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
char * toStr(int n)\n{\n char *ret = (char *)memset(malloc(sizeof(char) * 10), 0, sizeof(char) * 10), temp;\n int i = 0, head = 0, tail;\n while (n)\n {\n ret[i] = n % 10 + '0';\n n /= 10;\n i++;\n }\n tail = i - 1;\n while(head < tail)\n {\n temp = ret[head];\n ret[head] = ret[tail];\n ret[tail] = temp;\n }\n return ret;\n}\n\nchar * countAndSay(int n){\n if (n == 1)\n {\n char *ret = (char *)malloc(sizeof(char) * 2);\n ret[0] = '1';\n ret[1] = 0;\n return ret;\n }\n char *rec = countAndSay(n - 1), *cur = rec, flag = *cur, *temp = NULL,\n *ret = (char *)memset(malloc(sizeof(char) * (strlen(rec) * 2 + 1)), 0, sizeof(char) * (strlen(rec) * 2 + 1)), *retcur = ret;\n int counter = 0;\n while(*cur)\n {\n if (*cur == flag)\n counter++;\n else\n {\n temp = toStr(counter);\n strcpy(retcur, temp);\n while(*retcur)\n retcur++;\n *retcur = flag;\n *retcur++;\n flag = *cur;\n counter = 1;\n free(temp);\n }\n cur++;\n }\n temp = toStr(counter);\n strcpy(retcur, temp);\n while (*retcur)\n retcur++;\n *retcur = flag;\n free(temp);\n free(rec);\n return ret;\n}\n
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/384/","title":"384. \u200b\u6253\u4e71\u200b\u6570\u7ec4","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/384/#_1","title":"\u9898\u76ee","text":"\u200b\u6253\u4e71\u200b\u4e00\u4e2a\u200b\u6ca1\u6709\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\u7684\u200b\u6570\u7ec4\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
// \u200b\u4ee5\u200b\u6570\u5b57\u200b\u96c6\u5408\u200b 1, 2 \u200b\u548c\u200b 3 \u200b\u521d\u59cb\u5316\u200b\u6570\u7ec4\u200b\u3002\nint[] nums = {1,2,3};\nSolution solution = new Solution(nums);\n\n// \u200b\u6253\u4e71\u200b\u6570\u7ec4\u200b [1,2,3] \u200b\u5e76\u200b\u8fd4\u56de\u200b\u7ed3\u679c\u200b\u3002\u200b\u4efb\u4f55\u200b [1,2,3]\u200b\u7684\u200b\u6392\u5217\u200b\u8fd4\u56de\u200b\u7684\u200b\u6982\u7387\u200b\u5e94\u8be5\u200b\u76f8\u540c\u200b\u3002\nsolution.shuffle();\n\n// \u200b\u91cd\u8bbe\u200b\u6570\u7ec4\u200b\u5230\u200b\u5b83\u200b\u7684\u200b\u521d\u59cb\u72b6\u6001\u200b[1,2,3]\u3002\nsolution.reset();\n\n// \u200b\u968f\u673a\u200b\u8fd4\u56de\u200b\u6570\u7ec4\u200b[1,2,3]\u200b\u6253\u4e71\u200b\u540e\u200b\u7684\u200b\u7ed3\u679c\u200b\u3002\nsolution.shuffle();\n
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/384/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a Fisher-Yates \u200b\u6d17\u724c\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5173\u952e\u5728\u4e8e\u200b\u5b9e\u73b0\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u65e0\u653e\u56de\u200b\u62bd\u6837\u200b\u3002
Fisher-Yates \u200b\u6d17\u724c\u200b\u7b97\u6cd5\u200b\u8ddf\u200b\u66b4\u529b\u200b\u7b97\u6cd5\u200b\u5f88\u200b\u50cf\u200b\u3002\u200b\u5728\u200b\u6bcf\u6b21\u200b\u8fed\u4ee3\u200b\u4e2d\u200b\uff0c\u200b\u751f\u6210\u200b\u4e00\u4e2a\u200b\u8303\u56f4\u200b\u5728\u200b\u5f53\u524d\u200b\u4e0b\u6807\u200b\u5230\u200b\u6570\u7ec4\u200b\u672b\u5c3e\u200b\u5143\u7d20\u200b\u4e0b\u6807\u200b\u4e4b\u95f4\u200b\u7684\u200b\u968f\u673a\u200b\u6574\u6570\u200b\u3002\u200b\u63a5\u4e0b\u6765\u200b\uff0c\u200b\u5c06\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u548c\u200b\u968f\u673a\u200b\u9009\u51fa\u200b\u7684\u200b\u4e0b\u6807\u200b\u6240\u6307\u200b\u7684\u200b\u5143\u7d20\u200b\u4e92\u76f8\u4ea4\u6362\u200b - \u200b\u8fd9\u200b\u4e00\u6b65\u200b\u6a21\u62df\u200b\u4e86\u200b\u6bcf\u6b21\u200b\u4ece\u200b \u201c\u200b\u5e3d\u5b50\u200b\u201d \u200b\u91cc\u9762\u200b\u6478\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u5176\u4e2d\u200b\u9009\u53d6\u200b\u4e0b\u6807\u200b\u8303\u56f4\u200b\u7684\u200b\u4f9d\u636e\u200b\u5728\u4e8e\u200b\u6bcf\u4e2a\u200b\u88ab\u200b\u6478\u200b\u51fa\u200b\u7684\u200b\u5143\u7d20\u200b\u90fd\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u518d\u200b\u88ab\u200b\u6478\u51fa\u6765\u200b\u4e86\u200b\u3002\u200b\u6b64\u5916\u200b\u8fd8\u6709\u200b\u4e00\u4e2a\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b\u7684\u200b\u7ec6\u8282\u200b\uff0c\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u662f\u200b\u53ef\u4ee5\u200b\u548c\u200b\u5b83\u200b\u672c\u8eab\u200b\u4e92\u76f8\u4ea4\u6362\u200b\u7684\u200b - \u200b\u5426\u5219\u200b\u751f\u6210\u200b\u6700\u540e\u200b\u7684\u200b\u6392\u5217\u7ec4\u5408\u200b\u7684\u200b\u6982\u7387\u200b\u5c31\u200b\u4e0d\u200b\u5bf9\u200b\u4e86\u200b\u3002
Reference
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
typedef struct {\n int size;\n int *nums;\n} Solution;\n\n\nSolution* solutionCreate(int* nums, int numsSize) {\n Solution *ret = (Solution *)malloc(sizeof(Solution));\n ret->size = numsSize;\n ret->nums = (int *)memcpy(malloc(sizeof(int) * numsSize), nums, sizeof(int) * numsSize);\n return ret;\n}\n\n/** Resets the array to its original configuration and return it. */\nint* solutionReset(Solution* obj, int* retSize) {\n *retSize = obj->size;\n return obj->nums;\n}\n\n/** Returns a random shuffling of the array. */\nint* solutionShuffle(Solution* obj, int* retSize) {\n *retSize = obj->size;\n int *ret = (int *)memcpy(malloc(sizeof(int) * obj->size), obj->nums, sizeof(int) * obj->size), i = 0, temp, x, y;\n unsigned int *seed = malloc(sizeof(unsigned int));\n *seed += (unsigned int)seed;\n srand(*seed);\n for (i = 0; i < obj->size; i++)\n {\n x = i;\n y = rand() % (obj->size - i) + i;\n temp = ret[x];\n ret[x] = ret[y];\n ret[y] = temp;\n }\n free(seed);\n return ret;\n}\n\nvoid solutionFree(Solution* obj) {\n free(obj->nums);\n free(obj);\n}\n\n/**\n * Your Solution struct will be instantiated and called as such:\n * Solution* obj = solutionCreate(nums, numsSize);\n * int* param_1 = solutionReset(obj, retSize);\n\n * int* param_2 = solutionShuffle(obj, retSize);\n\n * solutionFree(obj);\n*/\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/387/","title":"387. \u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u5b57\u7b26","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u54c8\u5e0c\u8868","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/387/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u627e\u5230\u200b\u5b83\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u4e0d\u200b\u91cd\u590d\u200b\u7684\u200b\u5b57\u7b26\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5b83\u200b\u7684\u200b\u7d22\u5f15\u200b\u3002\u200b\u5982\u679c\u200b\u4e0d\u200b\u5b58\u5728\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200b-1
\u3002
\u200b\u793a\u4f8b\u200b\uff1a
s = \"leetcode\"\n\u200b\u8fd4\u56de\u200b 0\n\ns = \"loveleetcode\"\n\u200b\u8fd4\u56de\u200b 2\n
\u200b\u63d0\u793a\u200b\uff1a \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u5b9a\u200b\u8be5\u200b\u5b57\u7b26\u4e32\u200b\u53ea\u200b\u5305\u542b\u200b\u5c0f\u5199\u5b57\u6bcd\u200b\u3002
Reference
","tags":["\u54c8\u5e0c\u8868","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/387/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u5b58\u50a8\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u5404\u200b\u5b57\u7b26\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u3002\u200b\u904d\u5386\u200b\u5b57\u7b26\u4e32\u200b\u8fdb\u884c\u200b\u7edf\u8ba1\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int firstUniqChar(char * s){\n int hashMap[26] = {0};\n char *cur = s;\n while(*cur)\n {\n hashMap[*cur - 'a']++;\n cur++;\n }\n cur = s;\n while(*cur)\n {\n if (hashMap[*cur - 'a'] == 1)\n return (int)(cur - s);\n cur++;\n }\n return -1;\n}\n
","tags":["\u54c8\u5e0c\u8868","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/403/","title":"403. \u200b\u9752\u86d9\u200b\u8fc7\u6cb3","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
\u200b\u4e00\u53ea\u200b\u9752\u86d9\u200b\u60f3\u8981\u200b\u8fc7\u6cb3\u200b\u3002 \u200b\u5047\u5b9a\u200b\u6cb3\u6d41\u200b\u88ab\u200b\u7b49\u200b\u5206\u4e3a\u200b\u82e5\u5e72\u4e2a\u200b\u5355\u5143\u683c\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5728\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u5355\u5143\u683c\u200b\u5185\u200b\u90fd\u200b\u6709\u200b\u53ef\u80fd\u200b\u653e\u200b\u6709\u200b\u4e00\u5757\u200b\u77f3\u5b50\u200b\uff08\u200b\u4e5f\u200b\u6709\u200b\u53ef\u80fd\u200b\u6ca1\u6709\u200b\uff09\u3002 \u200b\u9752\u86d9\u200b\u53ef\u4ee5\u200b\u8df3\u4e0a\u200b\u77f3\u5b50\u200b\uff0c\u200b\u4f46\u662f\u200b\u4e0d\u200b\u53ef\u4ee5\u200b\u8df3\u5165\u200b\u6c34\u4e2d\u200b\u3002
\u200b\u7ed9\u200b\u4f60\u200b\u77f3\u5b50\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u5217\u8868\u200b stones
\uff08\u200b\u7528\u200b\u5355\u5143\u683c\u200b\u5e8f\u53f7\u200b \u200b\u5347\u5e8f\u200b \u200b\u8868\u793a\u200b\uff09\uff0c\u00a0\u200b\u8bf7\u200b\u5224\u5b9a\u200b\u9752\u86d9\u200b\u80fd\u5426\u200b\u6210\u529f\u200b\u8fc7\u6cb3\u200b\uff08\u200b\u5373\u200b\u80fd\u5426\u200b\u5728\u200b\u6700\u540e\u200b\u4e00\u6b65\u200b\u8df3\u81f3\u200b\u6700\u540e\u200b\u4e00\u5757\u200b\u77f3\u5b50\u200b\u4e0a\u200b\uff09\u3002
\u200b\u5f00\u59cb\u200b\u65f6\u200b\uff0c\u00a0\u200b\u9752\u86d9\u200b\u9ed8\u8ba4\u200b\u5df2\u7ad9\u200b\u5728\u200b\u7b2c\u4e00\u5757\u200b\u77f3\u5b50\u200b\u4e0a\u200b\uff0c\u200b\u5e76\u200b\u53ef\u4ee5\u200b\u5047\u5b9a\u200b\u5b83\u200b\u7b2c\u4e00\u6b65\u200b\u53ea\u80fd\u200b\u8df3\u8dc3\u200b\u4e00\u4e2a\u200b\u5355\u4f4d\u200b\uff08\u200b\u5373\u200b\u53ea\u80fd\u200b\u4ece\u200b\u5355\u5143\u683c\u200b 1 \u200b\u8df3\u81f3\u200b\u5355\u5143\u683c\u200b 2 \uff09\u3002
\u200b\u5982\u679c\u200b\u9752\u86d9\u200b\u4e0a\u200b\u4e00\u6b65\u200b\u8df3\u8dc3\u200b\u4e86\u200b\u00a0k
\u00a0\u200b\u4e2a\u200b\u5355\u4f4d\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5b83\u200b\u63a5\u4e0b\u6765\u200b\u7684\u200b\u8df3\u8dc3\u200b\u8ddd\u79bb\u200b\u53ea\u80fd\u200b\u9009\u62e9\u200b\u4e3a\u200b\u00a0k - 1
\u3001k
\u00a0\u200b\u6216\u200b\u00a0k + 1
\u200b\u4e2a\u200b\u5355\u4f4d\u200b\u3002\u00a0\u200b\u53e6\u200b\u8bf7\u200b\u6ce8\u610f\u200b\uff0c\u200b\u9752\u86d9\u200b\u53ea\u80fd\u200b\u5411\u200b\u524d\u65b9\u200b\uff08\u200b\u7ec8\u70b9\u200b\u7684\u200b\u65b9\u5411\u200b\uff09\u200b\u8df3\u8dc3\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1astones = [0,1,3,5,6,8,12,17]\n\u200b\u8f93\u51fa\u200b\uff1atrue\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u9752\u86d9\u200b\u53ef\u4ee5\u200b\u6210\u529f\u200b\u8fc7\u6cb3\u200b\uff0c\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u65b9\u6848\u200b\u8df3\u8dc3\u200b\uff1a\u200b\u8df3\u200b 1 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 2 \u200b\u5757\u200b\u77f3\u5b50\u200b, \u200b\u7136\u540e\u200b\u8df3\u200b 2 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 3 \u200b\u5757\u200b\u77f3\u5b50\u200b, \u200b\u63a5\u7740\u200b \u200b\u8df3\u200b 2 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 4 \u200b\u5757\u200b\u77f3\u5b50\u200b, \u200b\u7136\u540e\u200b\u8df3\u200b 3 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 6 \u200b\u5757\u200b\u77f3\u5b50\u200b, \u200b\u8df3\u200b 4 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 7 \u200b\u5757\u200b\u77f3\u5b50\u200b, \u200b\u6700\u540e\u200b\uff0c\u200b\u8df3\u200b 5 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u5230\u200b\u7b2c\u200b 8 \u200b\u4e2a\u200b\u77f3\u5b50\u200b\uff08\u200b\u5373\u200b\u6700\u540e\u200b\u4e00\u5757\u200b\u77f3\u5b50\u200b\uff09\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1astones = [0,1,2,3,4,8,9,11]\n\u200b\u8f93\u51fa\u200b\uff1afalse\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8fd9\u200b\u662f\u56e0\u4e3a\u200b\u7b2c\u200b 5 \u200b\u548c\u200b\u7b2c\u200b 6 \u200b\u4e2a\u200b\u77f3\u5b50\u200b\u4e4b\u95f4\u200b\u7684\u200b\u95f4\u8ddd\u200b\u592a\u200b\u5927\u200b\uff0c\u200b\u6ca1\u6709\u200b\u53ef\u9009\u200b\u7684\u200b\u65b9\u6848\u200b\u4f9b\u200b\u9752\u86d9\u200b\u8df3\u8dc3\u200b\u8fc7\u53bb\u200b\u3002\n
\u200b\u63d0\u793a\u200b\uff1a
2 <= stones.length <= 2000
0 <= stones[i] <= 2^31 - 1
stones[0] == 0
Reference
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/403/#_1","title":"\u9898\u89e3","text":"\u200b\u6839\u636e\u200b\u9898\u610f\u200b\uff0c\u200b\u5728\u200b\u4efb\u4f55\u200b\u72b6\u6001\u200b\uff0c\u200b\u9752\u86d9\u200b\u90fd\u200b\u6700\u200b\u591a\u200b\u53ea\u6709\u200b\u4e09\u79cd\u200b\u72b6\u6001\u200b\u53ef\u4ee5\u200b\u9009\u62e9\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b\u67e5\u627e\u200b\u6240\u6709\u200b\u7684\u200b\u72b6\u6001\u200b\u3002\u200b\u5047\u8bbe\u200b\u9752\u86d9\u200b\u8df3\u200b\u4e86\u200b\\(k\\)\u200b\u683c\u200b\u8fbe\u5230\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b
- \u200b\u5f53\u200b\u9752\u86d9\u200b\u8fbe\u5230\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u65f6\u200b\u8fd4\u56de\u200b
true
\uff0c - \u200b\u5f53\u200b\u9752\u86d9\u200b\u5230\u8fbe\u200b\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u65f6\u200b\uff0c\u200b\u68c0\u67e5\u200b\u524d\u9762\u200b\u7684\u200b\\(k-1, k, k+1\\)\u200b\u4e2a\u200b\u5355\u5143\u683c\u200b\u662f\u5426\u200b\u6709\u200b\u77f3\u5b50\u200b\uff0c
- \u200b\u5f53\u200b\u9752\u86d9\u200b\u65e0\u6cd5\u200b\u7ee7\u7eed\u200b\u5411\u524d\u200b\u79fb\u52a8\u200b\u65f6\u200b\u8fd4\u56de\u200b
false
\u200b\u5e76\u200b\u8fdb\u884c\u200b\u56de\u6eaf\u200b\u3002
bool dfs(int *stones, int stonesSize, int currentPos, int lastStep)\n{\n if (currentPos == stonesSize - 1)\n return true;\n int i = 0, j = 0, cur_id = stones[currentPos];\n bool ret = false;\n for (i = -1; i < 2; i++)\n {\n if (lastStep + i <= 0)\n continue;\n for (j = currentPos + 1; !ret && j < stonesSize && stones[j] <= cur_id + lastStep + i; j++)\n if (stones[j] == cur_id + lastStep + i)\n ret = ret || dfs(stones, stonesSize, j, lastStep + i);\n }\n return ret;\n}\n\nbool canCross(int* stones, int stonesSize){\n return dfs(stones, stonesSize, 0, 0);\n}\n
\u200b\u5982\u200b\u4e0a\u200bdfs\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u5bf9\u200b\u6240\u6709\u200b\u7684\u200b\u5206\u652f\u200b\u8fdb\u884c\u200b\u904d\u5386\u200b\uff0c\u200b\u76f4\u5230\u200b\u627e\u51fa\u200b\u6700\u7ec8\u200b\u7ed3\u679c\u200b\u3002\u200b\u4f1a\u200b\u9020\u6210\u200b\u5927\u91cf\u200b\u65f6\u95f4\u200b\u7684\u200b\u6d6a\u8d39\u200b\u3002\u200b\u6784\u9020\u200b\u5982\u4e0b\u200b\u8f93\u5165\u200b\u6570\u636e\u200b\u5373\u53ef\u200b\u4f7f\u8be5\u200b\u7b97\u6cd5\u200b\u8d85\u65f6\u200b\uff1a
[0,1,2,3,4,5,...,998, +infty]\n
\u200b\u5176\u4e2d\u200b+infty
\u200b\u6307\u200b\u5145\u5206\u200b\u5927\u200b\u7684\u200b\u6574\u6570\u200b\u3002
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u52a0\u5165\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8bb0\u5fc6\u200b\u4e0d\u540c\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5230\u200b\u7ec8\u70b9\u200b\u7684\u200b\u53ef\u8fbe\u6027\u200b\uff1a
bool dfs(int *stones, int *buf, int stonesSize, int currentPos, int lastStep)\n{\n if (buf[currentPos] != -1)\n return buf[currentPos];\n if (currentPos == stonesSize - 1)\n return true;\n int i = 0, j = 0, cur_id = stones[currentPos];\n bool ret = false;\n for (i = -1; i < 2; i++)\n {\n if (lastStep + i <= 0)\n continue;\n for (j = currentPos + 1; !ret && j < stonesSize && stones[j] <= cur_id + lastStep + i; j++)\n if (stones[j] == cur_id + lastStep + i)\n ret = ret || dfs(stones, buf, stonesSize, j, lastStep + i);\n }\n buf[currentPos] = ret;\n return ret;\n}\n\nbool canCross(int* stones, int stonesSize){\n int *buf = (int *)malloc(sizeof(int) * stonesSize);\n memset(buf, 0xff, sizeof(int) * stonesSize);\n return dfs(stones, buf, stonesSize, 0, 0);\n}\n
\u200b\u4f46\u200b\u8fd9\u4e2a\u200b\u7b97\u6cd5\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200b\u4e00\u90e8\u5206\u200b\u6d4b\u4f8b\u200b\uff0c\u200b\u90e8\u5206\u200b\u6d4b\u4f8b\u200b\u65e0\u6cd5\u200b\u901a\u8fc7\u200b\uff08\u200b\u5982\u200b\u793a\u4f8b\u200b1\uff0c[0,1,3,5,6,8,12,17]
\uff09\u3002\u200b\u6211\u4eec\u200b\u67e5\u770b\u200b\u4e00\u4e0b\u200b\u9752\u86d9\u200b\u5728\u200b\u8282\u70b9\u200b\u95f4\u200b\u8df3\u8dc3\u200b\u7684\u200b\u60c5\u51b5\u200b\uff1a
\u200b\u5f53\u200b\u7b97\u6cd5\u200b\u8d70\u200b\u5230\u200b\u8282\u70b9\u200b5
\u200b\u65f6\u200b\uff0c\u200b\u9996\u5148\u200b\u4f1a\u200b\u5c1d\u8bd5\u200b\u8def\u5f84\u200b5->6->8
\uff0c\u200b\u4f46\u200b\u6b64\u65f6\u200b\u5728\u200b\u8282\u70b9\u200b8
\u200b\u9752\u86d9\u200b\u6700\u200b\u591a\u200b\u53ea\u80fd\u200b\u8df3\u200b3
\u200b\u6b65\u200b\uff0c\u200b\u4ece\u800c\u200b\u88ab\u200b\u8bb0\u5fc6\u200b\u5316\u200b\u6807\u8bb0\u200b\u4e3a\u200b\u4e0d\u53ef\u200b\u5230\u8fbe\u200b\u7ec8\u70b9\u200b\uff0c\u200b\u4f46\u200b\u5b9e\u9645\u4e0a\u200b\u5982\u679c\u200b\u76f4\u63a5\u200b\u91c7\u53d6\u200b\u8def\u5f84\u200b5->8
\u200b\u5219\u200b\u53ef\u4ee5\u200b\u4ece\u200b\u8282\u70b9\u200b8
\u200b\u8df3\u200b\u5230\u200b\u8282\u70b9\u200b12
\u3002\u200b\u5373\u200b\u67d0\u4e2a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u7ec8\u70b9\u200b\u53ef\u8fbe\u6027\u200b\u53d7\u5230\u200b\u4e0a\u200b\u4e00\u6b65\u200b\u8df3\u52a8\u200b\u6b65\u6570\u200b\u7684\u200b\u5f71\u54cd\u200b\uff0c\u200b\u6211\u4eec\u200b\u5728\u200b\u8fdb\u884c\u200b\u8bb0\u5fc6\u200b\u5316\u200b\u65f6\u200b\u9700\u8981\u200b\u8bb0\u5fc6\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\u5728\u200b\u6bcf\u4e2a\u200b\u8df3\u52a8\u200b\u6b65\u6570\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u7684\u200b\u53ef\u8fbe\u6027\u200b\u3002
\u200b\u5982\u4e0b\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u4ee3\u66ff\u200b\u904d\u5386\u200b\uff0c\u200b\u5e76\u200b\u4f7f\u7528\u200b\u62c9\u94fe\u200b\u6cd5\u200b\u5b58\u50a8\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\u7684\u200b\u53ef\u8fbe\u6027\u200b\uff0c\u200b\u94fe\u8868\u200b\u8282\u70b9\u200b\u4e2d\u200b\u5b58\u50a8\u200b\u76f8\u5e94\u200b\u7684\u200b\u8df3\u52a8\u200b\u6b65\u6570\u200b\u3002
struct BufNode\n{\n int success;\n int lastStep;\n struct BufNode *next;\n};\n\nstruct BufNode *getNode(int success, int lastStep, struct BufNode *next)\n{\n struct BufNode *ret = (struct BufNode *)malloc(sizeof(struct BufNode));\n ret->success = success;\n ret->lastStep = lastStep;\n ret->next = next;\n return ret;\n}\n\nbool check(struct BufNode *buf, int lastStep, int *success)\n{\n if (buf == NULL)\n return NULL;\n if (buf->lastStep == lastStep)\n {\n if (success)\n *success = buf->success;\n return true;\n }\n return check(buf->next, lastStep, success);\n}\n\nint bSearch(int *stones, int lo, int hi, int target)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (target < stones[mid])\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo - 1;\n}\n\nbool dfs(int *stones, struct BufNode **buf, int stonesSize, int currentPos, int lastStep)\n{\n int success = false;\n if (check(buf[currentPos], lastStep, &success))\n return success;\n if (currentPos == stonesSize - 1)\n return true;\n int i = 0, j = 0, cur_id = stones[currentPos];\n bool ret = false;\n for (i = -1; i < 2; i++)\n {\n if (lastStep + i <= 0)\n continue;\n j = bSearch(stones, currentPos + 1, stonesSize, cur_id + lastStep + i);\n if (stones[j] == cur_id + lastStep + i)\n ret = ret || dfs(stones, buf, stonesSize, j, lastStep + i);\n }\n buf[currentPos] = getNode(ret, lastStep, buf[currentPos]);\n return ret;\n}\n\nbool canCross(int* stones, int stonesSize){\n struct BufNode **buf = (struct BufNode **)malloc(sizeof(struct BufNode *) * stonesSize);\n memset(buf, 0, sizeof(struct BufNode *) * stonesSize);\n return dfs(stones, buf, stonesSize, 0, 0);\n}\n
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/42/","title":"42. \u200b\u63a5\u200b\u96e8\u6c34","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u6808","\u6570\u7ec4","\u53cc\u6307\u9488","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/42/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u00a0n
\u200b\u4e2a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u8868\u793a\u200b\u6bcf\u4e2a\u200b\u5bbd\u5ea6\u200b\u4e3a\u200b 1
\u200b\u7684\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u56fe\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u6309\u6b64\u200b\u6392\u5217\u200b\u7684\u200b\u67f1\u5b50\u200b\uff0c\u200b\u4e0b\u96e8\u200b\u4e4b\u540e\u200b\u80fd\u63a5\u200b\u591a\u5c11\u200b\u96e8\u6c34\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aheight = [0,1,0,2,1,0,1,3,2,1,2,1]\n\u200b\u8f93\u51fa\u200b\uff1a6\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u4e0a\u9762\u200b\u662f\u200b\u7531\u200b\u6570\u7ec4\u200b [0,1,0,2,1,0,1,3,2,1,2,1] \u200b\u8868\u793a\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u56fe\u200b\uff0c\u200b\u5728\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u63a5\u200b 6 \u200b\u4e2a\u200b\u5355\u4f4d\u200b\u7684\u200b\u96e8\u6c34\u200b\uff08\u200b\u84dd\u8272\u200b\u90e8\u5206\u200b\u8868\u793a\u200b\u96e8\u6c34\u200b\uff09\u3002 \n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aheight = [4,2,0,3,2,5]\n\u200b\u8f93\u51fa\u200b\uff1a9\n
\u200b\u63d0\u793a\u200b\uff1a
n == height.length
0 <= n <= 3 * 10^4
0 <= height[i] <= 10^5
Reference
\u200b\u6ce8\u200b\uff1a\u200b\u672c\u9898\u200b\u4e0e\u200b\u9762\u8bd5\u9898\u200b 17.21. \u200b\u76f4\u65b9\u56fe\u200b\u7684\u200b\u6c34\u91cf\u200b\u76f8\u540c\u200b\u3002
","tags":["\u6808","\u6570\u7ec4","\u53cc\u6307\u9488","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/42/#_2","title":"\u9898\u89e3","text":" -
\u200b\u5206\u6cbb\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u6c34\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u4e0d\u4f1a\u200b\u9ad8\u4e8e\u200b\u6700\u9ad8\u200b\u7684\u200b\u67f1\u5b50\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5728\u200b\u6700\u9ad8\u200b\u7684\u200b\u67f1\u5b50\u200b\\(A\\)\u200b\u4e0e\u200b\u6b21\u200b\u9ad8\u200b\u7684\u200b\u67f1\u5b50\u200b\\(B\\)\u200b\u4e24\u5904\u200b\u8fdb\u884c\u200b\u5206\u5272\u200b\uff0c\u200b\u5206\u522b\u200b\u6c42\u89e3\u200b\u4e09\u6bb5\u200b\u5bb9\u7eb3\u200b\u7684\u200b\u6c34\u91cf\u200b\u3002
\\(A, B\\)\u200b\u4e4b\u95f4\u200b\u5fc5\u7136\u200b\u53ef\u4ee5\u200b\u5bb9\u7eb3\u200b\u6c34\u200b\uff0c\u200b\u6c34\u200b\u7684\u200b\u91cf\u200b\u7b49\u4e8e\u200b\u5404\u4e2a\u200b\u67f1\u5b50\u200b\u5230\u6b21\u200b\u9ad8\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u4e4b\u200b\u548c\u200b\u3002\u200b\u5176\u4ed6\u200b\u533a\u95f4\u200b\u9700\u8981\u200b\u9012\u5f52\u200b\u8fdb\u884c\u200b\u6c42\u89e3\u200b\u3002\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b\u5206\u5272\u200b\u65f6\u200b\u5206\u5272\u200b\u70b9\u8981\u200b\u540c\u65f6\u200b\u5305\u542b\u200b\u5728\u200b\u5de6\u53f3\u200b\u4e24\u4fa7\u200b\uff0c\u200b\u5426\u5219\u200b\u65e0\u6cd5\u200b\u5bb9\u7eb3\u200b\u6c34\u200b\u3002
\u200b\u5f53\u200b\u67f1\u5b50\u200b\u6570\u91cf\u200b\u5c0f\u4e8e\u200b3\u200b\u65f6\u200b\uff0c\u200b\u65e0\u6cd5\u200b\u5bb9\u7eb3\u200b\u4efb\u4f55\u200b\u6c34\u200b\u3002
#define MAX(x, y) (x > y ? x : y)\n#define MIN(x, y) (x < y ? x : y)\n\nint trap(int* height, int heightSize){\n int *maxLeft = (int *)malloc(sizeof(int) * heightSize),\n *maxRight = (int *)malloc(sizeof(int) * heightSize),\n i = 0, ret = 0;\n if (heightSize == 0)\n return 0;\n maxLeft[0] = height[0];\n maxRight[heightSize - 1] = height[heightSize - 1];\n for (i = 1; i < heightSize; i++)\n {\n maxLeft[i] = MAX(maxLeft[i - 1], height[i - 1]);\n maxRight[heightSize - i - 1] = MAX(maxRight[heightSize - i], height[heightSize - i]);\n }\n for (i = 0; i < heightSize; i++)\n ret += MAX(0, MIN(maxLeft[i], maxRight[i]) - height[i]);\n return ret;\n}\n
\u200b\u603b\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b\\(\\mathcal O(N)\\)\u3002
-
\u200b\u76f4\u63a5\u200b\u601d\u8def\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u67f1\u5b50\u200b\uff0c\u200b\u5176\u200b\u5bb9\u7eb3\u200b\u6c34\u540e\u200b\u7684\u200b\u9ad8\u5ea6\u200b\uff08\u200b\u67f1\u5b50\u200b\u9ad8\u5ea6\u200b\u51cf\u53bb\u200b\u6c34\u200b\u9ad8\u5ea6\u200b\uff09\u200b\u7b49\u4e8e\u200b\u8be5\u200b\u67f1\u5b50\u200b\u5de6\u4fa7\u200b\u6700\u9ad8\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u4e0e\u200b\u53f3\u4fa7\u200b\u6700\u9ad8\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u67f1\u5b50\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7edf\u8ba1\u200b\u5728\u200b\u5176\u200b\u5de6\u4fa7\u200b\u6700\u9ad8\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u4e0e\u200b\u5728\u200b\u5176\u200b\u53f3\u4fa7\u200b\u6700\u9ad8\u200b\u67f1\u5b50\u200b\u7684\u200b\u9ad8\u5ea6\u200b\uff0c\u200b\u5b58\u50a8\u200b\u5728\u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u3002
\u200b\u7ed3\u679c\u200b\u4e3a\u200b\u6bcf\u4e2a\u200b\u67f1\u5b50\u200b\u5bb9\u7eb3\u200b\u6c34\u540e\u200b\u7684\u200b\u9ad8\u5ea6\u200b\u4e0e\u200b\u67f1\u5b50\u200b\u9ad8\u5ea6\u200b\u4e4b\u5dee\u200b\u7684\u200b\u6c42\u548c\u200b\u3002
#define MAX(x, y) (x > y ? x : y)\n#define MIN(x, y) (x < y ? x : y)\n\nint trap(int* height, int heightSize){\n int *maxLeft = (int *)malloc(sizeof(int) * heightSize),\n *maxRight = (int *)malloc(sizeof(int) * heightSize),\n i = 0, ret = 0;\n if (heightSize == 0)\n return 0;\n maxLeft[0] = height[0];\n maxRight[heightSize - 1] = height[heightSize - 1];\n for (i = 1; i < heightSize; i++)\n {\n maxLeft[i] = MAX(maxLeft[i - 1], height[i - 1]);\n maxRight[heightSize - i - 1] = MAX(maxRight[heightSize - i], height[heightSize - i]);\n }\n for (i = 0; i < heightSize; i++)\n ret += MAX(0, MIN(maxLeft[i], maxRight[i]) - height[i]);\n return ret;\n}\n
","tags":["\u6808","\u6570\u7ec4","\u53cc\u6307\u9488","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/43/","title":"43. \u200b\u5b57\u7b26\u4e32\u200b\u76f8\u4e58","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/43/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e24\u4e2a\u200b\u4ee5\u200b\u5b57\u7b26\u4e32\u200b\u5f62\u5f0f\u200b\u8868\u793a\u200b\u7684\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u00a0num1
\u00a0\u200b\u548c\u200b\u00a0num2
\uff0c\u200b\u8fd4\u56de\u200b\u00a0num1
\u00a0\u200b\u548c\u200b\u00a0num2
\u00a0\u200b\u7684\u200b\u4e58\u79ef\u200b\uff0c\u200b\u5b83\u4eec\u200b\u7684\u200b\u4e58\u79ef\u200b\u4e5f\u200b\u8868\u793a\u200b\u4e3a\u200b\u5b57\u7b26\u4e32\u200b\u5f62\u5f0f\u200b\u3002
\u200b\u793a\u4f8b\u200b 1:
\u200b\u8f93\u5165\u200b: num1 = \"2\", num2 = \"3\"\n\u200b\u8f93\u51fa\u200b: \"6\"\n
\u200b\u793a\u4f8b\u200b\u00a02:
\u200b\u8f93\u5165\u200b: num1 = \"123\", num2 = \"456\"\n\u200b\u8f93\u51fa\u200b: \"56088\"\n
\u200b\u8bf4\u660e\u200b\uff1a
num1
\u00a0\u200b\u548c\u200b\u00a0num2
\u00a0\u200b\u7684\u200b\u957f\u5ea6\u200b\u5c0f\u4e8e\u200b110\u3002 num1
\u200b\u548c\u200b\u00a0num2
\u200b\u53ea\u200b\u5305\u542b\u200b\u6570\u5b57\u200b\u00a00-9
\u3002 num1
\u200b\u548c\u200b\u00a0num2
\u00a0\u200b\u5747\u200b\u4e0d\u200b\u4ee5\u200b\u96f6\u200b\u5f00\u5934\u200b\uff0c\u200b\u9664\u975e\u200b\u662f\u200b\u6570\u5b57\u200b 0
\u200b\u672c\u8eab\u200b\u3002 - \u200b\u4e0d\u80fd\u200b\u4f7f\u7528\u200b\u4efb\u4f55\u200b\u6807\u51c6\u200b\u5e93\u200b\u7684\u200b\u5927\u6570\u200b\u7c7b\u578b\u200b\uff08\u200b\u6bd4\u5982\u200bBigInteger\uff09\u200b\u6216\u200b\u76f4\u63a5\u200b\u5c06\u200b\u8f93\u5165\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u6574\u6570\u200b\u6765\u200b\u5904\u7406\u200b\u3002
Reference
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/43/#_2","title":"\u9898\u89e3","text":"\u200b\u8ba1\u7b97\u65b9\u6cd5\u200b\u4e0e\u200b\u5217\u7ad6\u5f0f\u200b\u76f8\u540c\u200b\uff0c\u200b\u6ce8\u610f\u200b\u5bf9\u200b\u7279\u6b8a\u200b\u8f93\u5165\u200b0
\u200b\u7684\u200b\u5904\u7406\u200b\u3002\u200b\u7ed3\u679c\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e0d\u4f1a\u200b\u8d85\u8fc7\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u4e4b\u200b\u548c\u200b\u3002
char * multiply(char * num1, char * num2){\n if (*num1 == '0' || *num2 == '0')\n return *num1 == '0' ? num1 : num2;\n int len1 = strlen(num1), len2 = strlen(num2), retLen = len1 + len2, i = 0, j = 0, incre, curDigit, pos;\n char *ret = (char *)memset(malloc(sizeof(char) * (retLen + 1)), '0', sizeof(char) * (retLen + 1)),\n *cur = ret;\n ret[retLen] = 0;\n for (i = len1 - 1; i >= 0; i--)\n {\n for (j = len2 - 1; j >= 0; j--)\n {\n incre = (num1[i] - '0') * (num2[j] - '0');\n curDigit = incre % 10;\n incre /= 10;\n pos = retLen - ((len1 - i - 1) + (len2 - j - 1)) - 1;\n while (incre != 0 || curDigit != 0)\n {\n ret[pos] += curDigit;\n incre += ret[pos] > '9';\n ret[pos] -= ret[pos] > '9' ? 10 : 0;\n curDigit = incre >= 10 ? incre - 10 : incre;\n incre = incre >= 10;\n pos--;\n }\n }\n }\n while (*cur == '0')\n cur++;\n return cur;\n}\n
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/433/","title":"433. \u200b\u6700\u5c0f\u200b\u57fa\u56e0\u200b\u53d8\u5316","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/433/#_1","title":"\u9898\u76ee","text":"\u200b\u4e00\u6761\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u7531\u200b\u4e00\u4e2a\u200b\u5e26\u6709\u200b8\u200b\u4e2a\u5b57\u7b26\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\u8868\u793a\u200b\uff0c\u200b\u5176\u4e2d\u200b\u6bcf\u4e2a\u200b\u5b57\u7b26\u200b\u90fd\u200b\u5c5e\u4e8e\u200b \"A\"
, \"C\"
, \"G\"
, \"T\"
\u200b\u4e2d\u200b\u7684\u200b\u4efb\u610f\u200b\u4e00\u4e2a\u200b\u3002
\u200b\u5047\u8bbe\u200b\u6211\u4eec\u200b\u8981\u200b\u8c03\u67e5\u200b\u4e00\u4e2a\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u7684\u200b\u53d8\u5316\u200b\u3002\u200b\u4e00\u6b21\u200b\u57fa\u56e0\u200b\u53d8\u5316\u200b\u610f\u5473\u7740\u200b\u8fd9\u4e2a\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u53d1\u751f\u200b\u4e86\u200b\u53d8\u5316\u200b\u3002
\u200b\u4f8b\u5982\u200b\uff0c\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u7531\u200b \"AACCGGTT\"
\u00a0\u200b\u53d8\u5316\u200b\u81f3\u200b\u00a0\"AACCGGTA\"
\u00a0\u200b\u5373\u200b\u53d1\u751f\u200b\u4e86\u200b\u4e00\u6b21\u200b\u57fa\u56e0\u200b\u53d8\u5316\u200b\u3002
\u200b\u4e0e\u6b64\u540c\u65f6\u200b\uff0c\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u57fa\u56e0\u200b\u53d8\u5316\u200b\u7684\u200b\u7ed3\u679c\u200b\uff0c\u200b\u90fd\u200b\u9700\u8981\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5408\u6cd5\u200b\u7684\u200b\u57fa\u56e0\u200b\u4e32\u200b\uff0c\u200b\u5373\u8be5\u200b\u7ed3\u679c\u200b\u5c5e\u4e8e\u200b\u4e00\u4e2a\u200b\u57fa\u56e0\u5e93\u200b\u3002
\u200b\u73b0\u5728\u200b\u7ed9\u5b9a\u200b3\u200b\u4e2a\u200b\u53c2\u6570\u200b \u2014 start
, end
, bank
\uff0c\u200b\u5206\u522b\u200b\u4ee3\u8868\u200b\u8d77\u59cb\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\uff0c\u200b\u76ee\u6807\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u53ca\u200b\u57fa\u56e0\u5e93\u200b\uff0c\u200b\u8bf7\u200b\u627e\u51fa\u200b\u80fd\u591f\u200b\u4f7f\u200b\u8d77\u59cb\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u53d8\u5316\u200b\u4e3a\u200b\u76ee\u6807\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u6240\u200b\u9700\u200b\u7684\u200b\u6700\u5c11\u200b\u53d8\u5316\u200b\u6b21\u6570\u200b\u3002\u200b\u5982\u679c\u200b\u65e0\u6cd5\u200b\u5b9e\u73b0\u76ee\u6807\u200b\u53d8\u5316\u200b\uff0c\u200b\u8bf7\u200b\u8fd4\u56de\u200b -1
\u3002
\u200b\u6ce8\u610f\u200b\uff1a
- \u200b\u8d77\u59cb\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u9ed8\u8ba4\u200b\u662f\u200b\u5408\u6cd5\u200b\u7684\u200b\uff0c\u200b\u4f46\u662f\u200b\u5b83\u200b\u5e76\u4e0d\u4e00\u5b9a\u200b\u4f1a\u200b\u51fa\u73b0\u200b\u5728\u200b\u57fa\u56e0\u5e93\u200b\u4e2d\u200b\u3002
- \u200b\u5982\u679c\u200b\u4e00\u4e2a\u200b\u8d77\u59cb\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u9700\u8981\u200b\u591a\u6b21\u200b\u53d8\u5316\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5b83\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u53d8\u5316\u200b\u4e4b\u540e\u200b\u7684\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u90fd\u200b\u5fc5\u987b\u200b\u662f\u200b\u5408\u6cd5\u200b\u7684\u200b\u3002
- \u200b\u5047\u5b9a\u200b\u8d77\u59cb\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u4e0e\u200b\u76ee\u6807\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u662f\u200b\u4e0d\u200b\u4e00\u6837\u200b\u7684\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
start: \"AACCGGTT\"\nend: \"AACCGGTA\"\nbank: [\"AACCGGTA\"]\n\n\u200b\u8fd4\u56de\u503c\u200b: 1\n
\u200b\u793a\u4f8b\u200b 2\uff1a
start: \"AACCGGTT\"\nend: \"AAACGGTA\"\nbank: [\"AACCGGTA\", \"AACCGCTA\", \"AAACGGTA\"]\n\n\u200b\u8fd4\u56de\u503c\u200b: 2\n
\u200b\u793a\u4f8b\u200b 3\uff1a
start: \"AAAAACCC\"\nend: \"AACCCCCC\"\nbank: [\"AAAACCCC\", \"AAACCCCC\", \"AACCCCCC\"]\n\n\u200b\u8fd4\u56de\u503c\u200b: 3\n
Reference
","tags":["\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/433/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u5e7f\u5ea6\u200b\u4f18\u5148\u200b\u7b97\u6cd5\u200b\u904d\u5386\u200b\u57fa\u56e0\u200b\u7684\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u6539\u52a8\u200b\u60c5\u51b5\u200b\u3002\u200b\u57fa\u56e0\u200b\u5e8f\u5217\u200b\u957f\u5ea6\u200b\u4e3a\u200b8\uff0c\u200b\u6bcf\u6b21\u200b\u53ef\u80fd\u200b\u7684\u200b\u6539\u52a8\u200b\u60c5\u51b5\u200b\u4e3a\u200b\\(8\\times 3 = 24\\)\u200b\u79cd\u200b\uff0c\u200b\u5728\u200b\u8fd9\u200b24\u200b\u79cd\u200b\u6539\u52a8\u200b\u60c5\u51b5\u200b\u4e2d\u200b\u9009\u62e9\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u7ed3\u679c\u200b\uff1a
- \u200b\u7ed3\u679c\u200b\u662f\u200b\u5408\u6cd5\u200b\u7684\u200b\u57fa\u56e0\u200b
- \u200b\u7ed3\u679c\u200b\u672a\u200b\u88ab\u200b\u904d\u5386\u200b\u8fc7\u200b
\u200b\u4f7f\u7528\u200b\u54c8\u5e0c\u200b\u8868\u200b\u5b58\u50a8\u200b\u57fa\u56e0\u5e93\u200b\u548c\u200b\u5df2\u7ecf\u200b\u88ab\u200b\u904d\u5386\u200b\u8fc7\u200b\u7684\u200b\u57fa\u56e0\u200b\u3002
char *genes = \"TGCATGCA\";\n\nint getCode(char *s)\n{\n int ret = 0;\n switch (*s)\n {\n case 'A':\n ret++;\n case 'C':\n ret++;\n case 'G':\n ret++;\n case 'T':\n break;\n }\n return ret;\n}\n\nint hash(char *s)\n{\n char *cur = s;\n int ret = 0;\n while (*cur)\n {\n ret <<= 2;\n ret += getCode(cur);\n cur++;\n }\n return ret;\n}\n\nchar *dehash(int o)\n{\n char *ret = (char *)malloc(sizeof(char) * 9);\n ret[8] = 0;\n for (int i = 7; i >= 0; i--)\n {\n ret[i] = genes[o & 3];\n o >>= 2;\n }\n return ret;\n}\n\nstruct Bank {\n char *bitmap;\n};\n\nvoid deleteBank(struct Bank *dest)\n{\n free(dest->bitmap);\n free(dest);\n}\n\nvoid removeGene(struct Bank *dest, char *seq)\n{\n int i = hash(seq);\n dest->bitmap[i >> 3] &= ~(1 << (i & 7));\n}\n\nvoid addGene(struct Bank *dest, char *seq)\n{\n int i = hash(seq);\n dest->bitmap[i >> 3] |= 1 << (i & 7);\n}\n\nbool queryGene(struct Bank *dest, char *seq)\n{\n int i = hash(seq);\n return dest->bitmap[i >> 3] & (1 << (i & 7));\n}\n\nvoid merge(struct Bank *dest, struct Bank *src)\n{\n int i = 0;\n for (i = 0; i < 8192; i++)\n dest->bitmap[i] |= src->bitmap[i];\n deleteBank(src);\n}\n\nstruct Bank *getBank(char **bank, int bankSize)\n{\n struct Bank *ret = (struct Bank *)malloc(sizeof(struct Bank));\n ret->bitmap = (char *)malloc(sizeof(char) * 8192);\n memset(ret->bitmap, 0, sizeof(char) * 8192);\n for (int i = 0; i < bankSize; i++)\n addGene(ret, bank[i]);\n return ret;\n}\n\nstruct Bank *step(char *current, char *end, struct Bank *passed, struct Bank *fullBank, int *count)\n{\n int startHash = hash(current);\n struct Bank *ret = getBank(NULL, 0);\n addGene(passed, current);\n for (int i = 0; i < 8; i++)\n {\n for (int j = 0; j < 4; j++)\n {\n current[i] = genes[getCode(current + i) + 1];\n if (startHash == hash(current))\n continue;\n if (!queryGene(fullBank, current))\n continue;\n if (queryGene(passed, current))\n continue;\n addGene(ret, current);\n (*count)++;\n }\n }\n return ret;\n}\n\nstruct Bank *stepBank(struct Bank *current, char *end, struct Bank *passed, struct Bank *fullBank, int* count)\n{\n int index = 0;\n struct Bank *ret = getBank(NULL, 0);\n char *temp = NULL;\n for (int i = 0; i < 8192; i++)\n {\n if (current->bitmap[i])\n {\n index = i << 3;\n for (int j = 0; j < 8; j++)\n {\n if (current->bitmap[i] & (1 << j))\n {\n index += j;\n temp = dehash(index);\n merge(ret, step(temp, end, passed, fullBank, count));\n free(temp);\n }\n }\n }\n }\n return ret;\n}\n\nint minMutation(char * start, char * end, char ** bank, int bankSize){\n struct Bank *fullBank = getBank(bank, bankSize), *passed = getBank(NULL, 0);\n struct Bank *temp = getBank(NULL, 0), *temp2 = NULL;\n addGene(temp, start);\n int ret = 0, modified = 0;\n while (!queryGene(temp, end))\n {\n modified = 0;\n temp2 = stepBank(temp, end, passed, fullBank, &modified);\n deleteBank(temp);\n temp = temp2;\n if (!modified)\n return -1;\n ret++;\n }\n return ret;\n}\n
","tags":["\u5e7f\u5ea6\u4f18\u5148\u641c\u7d22","\u54c8\u5e0c\u8868"]},{"location":"coding/leetcode/46/","title":"46. \u200b\u5168\u200b\u6392\u5217","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/46/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b \u200b\u6ca1\u6709\u200b\u91cd\u590d\u200b \u200b\u6570\u5b57\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5176\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u5168\u200b\u6392\u5217\u200b\u3002
\u200b\u793a\u4f8b\u200b:
\u200b\u8f93\u5165\u200b: [1,2,3]\n\u200b\u8f93\u51fa\u200b:\n[\n [1,2,3],\n [1,3,2],\n [2,1,3],\n [2,3,1],\n [3,1,2],\n [3,2,1]\n]\n
Reference
","tags":["\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/46/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u56de\u6eaf\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u5e8f\u5217\u200b\uff1a
- \u200b\u82e5\u200b\u957f\u5ea6\u200b\u4e3a\u200b1\uff0c\u200b\u5219\u200b\u53ea\u6709\u200b\u4e00\u79cd\u200b\u6392\u5217\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200b
- \u200b\u82e5\u200b\u957f\u5ea6\u200b\u5927\u4e8e\u200b1\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\uff1a
- \u200b\u5c06\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7b2c\u4e00\u4e2a\u200b\u6570\u200b\u653e\u5728\u200b\u6392\u5217\u200b\u7684\u200b\u7b2c\u4e00\u4f4d\u200b\uff0c\u200b\u7136\u540e\u200b\u4e0e\u200b\u540e\u9762\u200b\u90e8\u5206\u200b\u7684\u200b\u5168\u200b\u6392\u5217\u200b\u5408\u5e76\u200b
- \u200b\u5c06\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7b2c\u4e8c\u4e2a\u200b\u6570\u200b\u653e\u5728\u200b\u6392\u5217\u200b\u7684\u200b\u7b2c\u4e00\u4f4d\u200b\uff0c\u200b\u7136\u540e\u200b\u4e0e\u200b\u540e\u9762\u200b\u90e8\u5206\u200b\u7684\u200b\u5168\u200b\u6392\u5217\u200b\u5408\u5e76\u200b
- \u2026\u2026
- \u200b\u5c06\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u6570\u200b\u653e\u5728\u200b\u6392\u5217\u200b\u7684\u200b\u7b2c\u4e00\u4f4d\u200b\uff0c\u200b\u7136\u540e\u200b\u4e0e\u200b\u540e\u9762\u200b\u90e8\u5206\u200b\u7684\u200b\u5168\u200b\u6392\u5217\u200b\u5408\u5e76\u200b
- \u200b\u6700\u7ec8\u200b\u7ed3\u679c\u200b\u5305\u542b\u200b\u5982\u200b\u4e0a\u200b\u6240\u6709\u200b\u7684\u200b\u6392\u5217\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5171\u6709\u200b\\(n!\\)\u200b\u79cd\u200b\u6392\u5217\u200b\u3002
int fact(int x)\n{\n if (!x)\n return 0;\n int i = 1, ret = 1;\n for (i = 1; i <= x; i++)\n ret *= i;\n return ret;\n}\nvoid swap(int *a, int *b)\n{\n int temp = *a;\n *a = *b;\n *b = temp;\n}\nint** permute(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){\n if (numsSize < 2)\n {\n *returnSize = 1;\n *returnColumnSizes = (int *)malloc(sizeof(int) * *returnSize);\n *returnColumnSizes[0] = numsSize;\n if (numsSize == 0)\n return NULL;\n int **ret = (int **)malloc(sizeof(int *) * *returnSize);\n *ret = (int *)malloc(sizeof(int));\n **ret = *nums;\n return ret;\n }\n *returnSize = fact(numsSize);\n *returnColumnSizes = (int *)malloc(sizeof(int *) * *returnSize);\n int *sub = (int *)malloc(sizeof(int) * numsSize), i = 0, **rec = NULL, recSize, *recColSize,\n **ret = (int **)malloc(sizeof(int *) * *returnSize), retpos = 0, j = 0;\n for (i = 0; i < *returnSize; i++)\n (*returnColumnSizes)[i] = numsSize;\n for (i = 0; i < numsSize; i++)\n {\n sub = memcpy(sub, nums, sizeof(int) * numsSize);\n swap(sub + i, sub);\n rec = permute(sub + 1, numsSize - 1, &recSize, &recColSize);\n for (j = 0; j < recSize; j++)\n {\n ret[retpos] = (int *)malloc(sizeof(int) * numsSize);\n ret[retpos][0] = sub[0];\n memcpy(ret[retpos] + 1, rec[j], sizeof(int) * (numsSize - 1));\n retpos++;\n }\n }\n return ret;\n}\n
","tags":["\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/48/","title":"48. \u200b\u65cb\u8f6c\u200b\u56fe\u50cf","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/48/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b n\u00a0\u00d7\u00a0n \u200b\u7684\u200b\u4e8c\u7ef4\u200b\u77e9\u9635\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u56fe\u50cf\u200b\u3002
\u200b\u5c06\u200b\u56fe\u50cf\u200b\u987a\u65f6\u9488\u200b\u65cb\u8f6c\u200b 90 \u200b\u5ea6\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a
\u200b\u4f60\u200b\u5fc5\u987b\u200b\u5728\u200b\u539f\u5730\u200b\u65cb\u8f6c\u200b\u56fe\u50cf\u200b\uff0c\u200b\u8fd9\u200b\u610f\u5473\u7740\u200b\u4f60\u200b\u9700\u8981\u200b\u76f4\u63a5\u200b\u4fee\u6539\u200b\u8f93\u5165\u200b\u7684\u200b\u4e8c\u7ef4\u200b\u77e9\u9635\u200b\u3002\u200b\u8bf7\u200b\u4e0d\u8981\u200b\u4f7f\u7528\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u77e9\u9635\u200b\u6765\u200b\u65cb\u8f6c\u200b\u56fe\u50cf\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u7ed9\u5b9a\u200b matrix = \n[\n [1,2,3],\n [4,5,6],\n [7,8,9]\n],\n\n\u200b\u539f\u5730\u200b\u65cb\u8f6c\u200b\u8f93\u5165\u200b\u77e9\u9635\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u53d8\u4e3a\u200b:\n[\n [7,4,1],\n [8,5,2],\n [9,6,3]\n]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u7ed9\u5b9a\u200b matrix =\n[\n [ 5, 1, 9,11],\n [ 2, 4, 8,10],\n [13, 3, 6, 7],\n [15,14,12,16]\n], \n\n\u200b\u539f\u5730\u200b\u65cb\u8f6c\u200b\u8f93\u5165\u200b\u77e9\u9635\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u53d8\u4e3a\u200b:\n[\n [15,13, 2, 5],\n [14, 3, 4, 1],\n [12, 6, 8, 9],\n [16, 7,10,11]\n]\n
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/48/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5c06\u200b\u77e9\u9635\u200b\u8f6c\u7f6e\u200b\u540e\u200b\u53cd\u8f6c\u200b\u5404\u5217\u200b\u7684\u200b\u987a\u5e8f\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
void rotate(int** matrix, int matrixSize, int* matrixColSize){\n int i = 0, j = 0, temp;\n for (i = 0; i < matrixSize; i++)\n {\n for (j = i; j < matrixSize; j++)\n {\n temp = matrix[i][j];\n matrix[i][j] = matrix[j][i];\n matrix[j][i] = temp;\n }\n }\n for (i = 0; i < matrixSize; i++)\n {\n for (j = 0; j < matrixSize / 2; j++)\n {\n temp = matrix[i][j];\n matrix[i][j] = matrix[i][matrixSize - j - 1];\n matrix[i][matrixSize - j - 1] = temp;\n }\n }\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/488/","title":"488. \u200b\u7956\u739b\u200b\u6e38\u620f","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/488/#_1","title":"\u9898\u76ee","text":"\u200b\u56de\u5fc6\u200b\u4e00\u4e0b\u200b\u7956\u739b\u200b\u6e38\u620f\u200b\u3002\u200b\u73b0\u5728\u200b\u684c\u4e0a\u200b\u6709\u200b\u4e00\u4e32\u200b\u7403\u200b\uff0c\u200b\u989c\u8272\u200b\u6709\u200b\u7ea2\u8272\u200b(R)\uff0c\u200b\u9ec4\u8272\u200b(Y)\uff0c\u200b\u84dd\u8272\u200b(B)\uff0c\u200b\u7eff\u8272\u200b(G)\uff0c\u200b\u8fd8\u6709\u200b\u767d\u8272\u200b(W)\u3002 \u200b\u73b0\u5728\u200b\u4f60\u200b\u624b\u91cc\u200b\u4e5f\u200b\u6709\u200b\u51e0\u4e2a\u200b\u7403\u200b\u3002
\u200b\u6bcf\u200b\u4e00\u6b21\u200b\uff0c\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u4ece\u200b\u624b\u91cc\u200b\u7684\u200b\u7403\u9009\u200b\u4e00\u4e2a\u200b\uff0c\u200b\u7136\u540e\u200b\u628a\u200b\u8fd9\u4e2a\u200b\u7403\u200b\u63d2\u5165\u200b\u5230\u200b\u4e00\u4e32\u200b\u7403\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u4f4d\u7f6e\u200b\u4e0a\u200b\uff08\u200b\u5305\u62ec\u200b\u6700\u200b\u5de6\u7aef\u200b\uff0c\u200b\u6700\u200b\u53f3\u7aef\u200b\uff09\u3002\u200b\u63a5\u7740\u200b\uff0c\u200b\u5982\u679c\u200b\u6709\u200b\u51fa\u73b0\u200b\u4e09\u4e2a\u200b\u6216\u8005\u200b\u4e09\u4e2a\u200b\u4ee5\u4e0a\u200b\u989c\u8272\u200b\u76f8\u540c\u200b\u7684\u200b\u7403\u200b\u76f8\u8fde\u200b\u7684\u8bdd\u200b\uff0c\u200b\u5c31\u200b\u628a\u200b\u5b83\u4eec\u200b\u79fb\u200b\u9664\u6389\u200b\u3002\u200b\u91cd\u590d\u200b\u8fd9\u4e00\u200b\u6b65\u9aa4\u200b\u76f4\u5230\u200b\u684c\u4e0a\u200b\u6240\u6709\u200b\u7684\u200b\u7403\u200b\u90fd\u200b\u88ab\u200b\u79fb\u9664\u200b\u3002
\u200b\u627e\u5230\u200b\u63d2\u5165\u200b\u5e76\u200b\u53ef\u4ee5\u200b\u79fb\u200b\u9664\u6389\u200b\u684c\u4e0a\u200b\u6240\u6709\u200b\u7403\u6240\u200b\u9700\u200b\u7684\u200b\u6700\u5c11\u200b\u7684\u200b\u7403\u6570\u200b\u3002\u200b\u5982\u679c\u200b\u4e0d\u80fd\u200b\u79fb\u9664\u200b\u684c\u4e0a\u200b\u6240\u6709\u200b\u7684\u200b\u7403\u200b\uff0c\u200b\u8f93\u51fa\u200b -1
\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = \"WRRBBW\", hand = \"RB\"\n\u200b\u8f93\u51fa\u200b\uff1a-1\n\u200b\u89e3\u91ca\u200b\uff1aWRRBBW -> WRR[R]BBW -> WBBW -> WBB[B]W -> WW\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = \"WWRRBBWW\", hand = \"WRBRW\"\n\u200b\u8f93\u51fa\u200b\uff1a2\n\u200b\u89e3\u91ca\u200b\uff1aWWRRBBWW -> WWRR[R]BBWW -> WWBBWW -> WWBB[B]WW -> WWWW -> empty\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = \"G\", hand = \"GGGGG\"\n\u200b\u8f93\u51fa\u200b\uff1a2\n\u200b\u89e3\u91ca\u200b\uff1aG -> G[G] -> GG[G] -> empty \n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = \"RBYYBBRRB\", hand = \"YRBGB\"\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1aRBYYBBRRB -> RBYY[Y]BBRRB -> RBBBRRB -> RRRB -> B -> B[B] -> BB[B] -> empty \n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u684c\u4e0a\u200b\u4e00\u200b\u5f00\u59cb\u200b\u7684\u200b\u7403\u200b\u4e2d\u200b\uff0c\u200b\u4e0d\u4f1a\u200b\u6709\u200b\u4e09\u4e2a\u200b\u53ca\u200b\u4e09\u4e2a\u200b\u4ee5\u4e0a\u200b\u989c\u8272\u200b\u76f8\u540c\u200b\u4e14\u200b\u8fde\u200b\u7740\u200b\u7684\u200b\u7403\u200b\u3002
1 <= board.length <= 16
1 <= hand.length <= 5
- \u200b\u8f93\u5165\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u5747\u200b\u4e3a\u200b\u975e\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u4e14\u200b\u53ea\u200b\u5305\u542b\u200b\u5b57\u7b26\u200b
'R','Y','B','G','W'
\u3002
Reference
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/488/#_2","title":"\u9898\u89e3","text":"\u200b\u5b9a\u4e49\u200b\u5f53\u524d\u200b\u6e38\u620f\u200b\u7684\u200b\u72b6\u6001\u200b\uff0c\u200b\u4e00\u4e2a\u200b\u72b6\u6001\u200b\u7531\u200b\u684c\u4e0a\u200b\u7684\u200b\u7403\u200b\u5217\u8868\u200b\u4e0e\u200b\u624b\u4e2d\u200b\u7684\u200b\u7403\u200b\u5217\u8868\u200b\u8868\u793a\u200b\u3002\u200b\u6bcf\u6b21\u200b\u63d2\u5165\u200b\u64cd\u4f5c\u200b\u6784\u6210\u200b\u4e00\u4e2a\u200b\u72b6\u6001\u200b\u95f4\u200b\u7684\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u8fc7\u7a0b\u200b\u3002\u200b\u4f7f\u7528\u200b\u4e24\u4e2a\u200b\u961f\u5217\u200b\u5b58\u50a8\u200b\u5f53\u524d\u200b\u72b6\u6001\u200b\uff0c\u200b\u548c\u200b\u5f53\u524d\u200b\u72b6\u6001\u200b\u7684\u200b \u200b\u6240\u6709\u200b \u200b\u53ef\u80fd\u200b\u8f6c\u79fb\u200b\u5230\u200b\u7684\u200b\u72b6\u6001\u200b\u3002\u200b\u518d\u200b\u5c06\u200b\u8f6c\u79fb\u200b\u5230\u200b\u7684\u200b\u72b6\u6001\u200b\u8bbe\u200b\u4e3a\u200b\u5f53\u524d\u200b\u72b6\u6001\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u8fdb\u884c\u200b\u641c\u7d22\u200b\u8fc7\u7a0b\u200b\u3002\u200b\u672c\u9898\u200b\u4e2d\u200b\uff0c\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u662f\u200b\u5355\u5411\u200b\u7684\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e0d\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u91cd\u590d\u200b\u7ecf\u8fc7\u200b\u4e00\u79cd\u200b\u72b6\u6001\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002
\u200b\u7531\u4e8e\u200b\u4e00\u4e2a\u200b\u72b6\u6001\u200b\u53ef\u4ee5\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u72b6\u6001\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u8fd9\u4e9b\u200b\u72b6\u6001\u200b\u95f4\u200b\u8fdb\u884c\u200b\u7b5b\u9009\u200b\u3002\u200b\u7b5b\u9009\u200b\u89c4\u5219\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u5f53\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b\u4e24\u4fa7\u200b\u7684\u200b\u989c\u8272\u200b\u4e0d\u200b\u540c\u65f6\u200b\uff0c\u200b\u65b0\u7403\u200b\u7684\u200b\u989c\u8272\u200b\u9700\u8981\u200b\u4e0e\u200b\u5de6\u53f3\u200b\u4e24\u4fa7\u200b\u5176\u4e2d\u200b\u4e00\u4e2a\u200b\u7403\u200b\u7684\u200b\u989c\u8272\u200b\u76f8\u540c\u200b
- \u200b\u5f53\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b\u4e24\u4fa7\u200b\u989c\u8272\u200b\u76f8\u540c\u200b\u65f6\u200b\uff0c\u200b\u65b0\u7403\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4efb\u610f\u200b\u53ef\u80fd\u200b\u7684\u200b\u989c\u8272\u200b
- \u200b\u5f53\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b\u4f4d\u4e8e\u200b\u7aef\u70b9\u200b\u65f6\u200b\uff0c\u200b\u65b0\u7403\u200b\u7684\u200b\u989c\u8272\u200b\u9700\u8981\u200b\u4e0e\u200b\u76f8\u90bb\u200b\u7403\u200b\u7684\u200b\u989c\u8272\u200b\u76f8\u540c\u200b
\u200b\u5982\u200b\u4e0a\u200b\u526a\u679d\u200b\u601d\u8def\u200b\u4e0d\u4f1a\u200b\u5f71\u54cd\u200b\u6d4b\u4f8b\u200b\"RRYGGYYRRYGGYYRR\" \"GGBBB\"
\u200b\u4e0e\u200b\"RRWWRRBBRR\" \"WB\"
\u200b\u7b49\u200b\u9700\u8981\u200b\u5c06\u200b\u8fde\u7eed\u200b\u5e8f\u5217\u200b\u5206\u5272\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u5982\u200b\u4e0a\u200b\u6761\u4ef6\u200b\u7684\u200b\u72b6\u6001\u200b\u89c6\u4e3a\u200b\u65e0\u6548\u200b\u7684\u200b\u72b6\u6001\u200b\uff0c\u200b\u76f4\u63a5\u200b\u8df3\u8fc7\u200b\u5bf9\u200b\u8fd9\u4e9b\u200b\u72b6\u6001\u200b\u7684\u200b\u641c\u7d22\u200b\u3002
\u200b\u4f7f\u7528\u200b\u94fe\u8868\u200b\u6a21\u62df\u200b\u961f\u5217\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u94fe\u8868\u200b\u8282\u70b9\u200b\u8868\u793a\u200b\u95ee\u9898\u200b\u7684\u200b\u4e00\u4e2a\u200b\u72b6\u6001\u200b\uff0c\u200b\u7531\u4e8e\u200b\u94fe\u8868\u200b\u8282\u70b9\u200b\u9700\u8981\u200b\u591a\u6b21\u200b\u5206\u914d\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u63d0\u524d\u200b\u5206\u914d\u5185\u5b58\u200b\u6c60\u200b\u7684\u200b\u7b56\u7565\u200b\u4ee5\u200b\u51cf\u5c11\u200bmalloc()
\u200b\u7684\u200b\u8c03\u7528\u200b\u6b21\u6570\u200b\u3002
struct Queue\n{\n char *val;\n int colorsOnHand[5];\n struct Queue *next;\n};\n\nstruct Queue *nodePool;\nint poolSize;\nint poolAllocated;\n\nstruct Queue *getNode(char *val, struct Queue *next, int *colorsOnHand)\n{\n int i = 0;\n struct Queue *ret;\n if (!nodePool || poolAllocated >= poolSize)\n {\n if (poolAllocated)\n poolSize <<= 1;\n else\n poolSize = 1000;\n poolAllocated = 0;\n nodePool = (struct Queue *)malloc(sizeof(struct Queue) * poolSize);\n }\n ret = nodePool + (poolAllocated++);\n ret->val = val;\n ret->next = next;\n for (i = 0; i < 5; i++)\n ret->colorsOnHand[i] = colorsOnHand[i];\n return ret;\n}\n
\u200b\u5206\u200b\u4e24\u6b65\u200b\u8fdb\u884c\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\uff0c\u200b\u7b2c\u4e00\u6b65\u200b\u5148\u200b\u63d2\u5165\u200b\u4e00\u4e2a\u200b\u7403\u200b\uff0c\u200b\u7b2c\u4e8c\u6b65\u200b\u6d88\u9664\u200b\u8fde\u7eed\u200b\u7684\u200b\u7403\u200b\uff0c\u200b\u76f4\u5230\u200b\u65e0\u7403\u200b\u53ef\u6d88\u200b\u3002
char *strPool;\nint strSize;\nint strAllocated;\n\nchar *getStr(int len)\n{\n if (!strPool || strAllocated + len >= strSize)\n {\n if (strAllocated)\n strSize <<= 1;\n else\n strSize = 32768;\n strAllocated = 0;\n strPool = (char *)malloc(sizeof(char) * strSize);\n }\n char *ret = strPool + strAllocated;\n strAllocated += len;\n return ret;\n}\n\nbool play(char *src)\n{\n char *ptrfast = src, *ptrslow = src, cur = 0;\n int i = 0;\n bool flag = false;\n while (*ptrfast)\n {\n if (cur == *ptrfast)\n i++;\n else\n {\n if (i < 3)\n {\n while (i)\n {\n *(ptrslow++) = cur;\n i--;\n }\n }\n else\n flag = true;\n i = 1;\n cur = *ptrfast;\n }\n ptrfast++;\n }\n if (i < 3)\n {\n while (i)\n {\n *(ptrslow++) = cur;\n i--;\n }\n }\n else\n flag = true;\n *ptrslow = 0;\n return flag;\n}\n\nchar *addBall(char *src, int len, char ball, int loc)\n{\n char *ret = (char *)malloc(sizeof(char) * (len + 2));\n ret[len + 1] = 0;\n memcpy(ret, src, sizeof(char) * loc);\n memcpy(ret + loc + 1, src + loc, sizeof(char) * (len - loc));\n ret[loc] = ball;\n return ret;\n}\n
int findMinStep(char * board, char * hand) {\n struct Queue *current = NULL, *temp = NULL;\n char *cur = hand, *init = getStr(strlen(board) + 1), *newseq = NULL,\n *colors = \"RYBGW\";\n int i = 0, j = 0, len = 0, ret = 0, colorsOnHand[5] = {0}, flag;\n\n nodePool = NULL;\n poolSize = 0;\n poolAllocated = 0;\n strPool = NULL;\n strSize = 0;\n strAllocated = 0;\n\n strcpy(init, board);\n do\n for (i = 0; i < 5; i++)\n if (*cur == colors[i])\n colorsOnHand[i]++;\n while (*(++cur));\n\n current = getNode(init, NULL, colorsOnHand);\n while (current)\n {\n while (current)\n {\n len = strlen(current->val);\n if (!len)\n return ret;\n for (i = 0; i <= len; i++)\n {\n flag = false;\n for (j = 0; j < 5; j++)\n {\n if (current->colorsOnHand[j] == 0)\n continue;\n if (i > 0)\n flag = flag || current->val[i - 1] == colors[j];\n if (i < len)\n flag = flag || current->val[i] == colors[j];\n if (i > 0 && i < len)\n flag = flag || current->val[i - 1] == current->val[i];\n if (!flag)\n continue;\n current->colorsOnHand[j]--;\n newseq = addBall(current->val, len, colors[j], i);\n while (play(newseq));\n temp = getNode(newseq, temp, current->colorsOnHand);\n current->colorsOnHand[j]++;\n }\n }\n current = current->next;\n }\n ret++;\n current = temp;\n temp = NULL;\n }\n return -1;\n}\n
","tags":["\u6df1\u5ea6\u4f18\u5148\u641c\u7d22"]},{"location":"coding/leetcode/50/","title":"50. Pow(x, n)","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/50/#_1","title":"\u9898\u76ee","text":"\u200b\u5b9e\u73b0\u200b\u00a0pow(x, n)\uff0c\u200b\u5373\u200b\u8ba1\u7b97\u200b x \u200b\u7684\u200b n \u200b\u6b21\u200b\u5e42\u51fd\u6570\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: 2.00000, 10\n\u200b\u8f93\u51fa\u200b: 1024.00000\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a \u200b\u8f93\u5165\u200b: 2.10000, 3\n\u200b\u8f93\u51fa\u200b: 9.26100\n
\u200b\u793a\u4f8b\u200b\u00a03\uff1a \u200b\u8f93\u5165\u200b: 2.00000, -2\n\u200b\u8f93\u51fa\u200b: 0.25000\n\u200b\u89e3\u91ca\u200b: 2^(-2) = (1/2)^2 = 1/4 = 0.25\n
\u200b\u8bf4\u660e\u200b\uff1a - -100.0 <\u00a0x\u00a0< 100.0
- n\u00a0\u200b\u662f\u200b 32 \u200b\u4f4d\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\uff0c\u200b\u5176\u200b\u6570\u503c\u200b\u8303\u56f4\u200b\u662f\u200b\\([\u22122^{31},\u00a02^{31}\u00a0\u2212 1]\\)\u3002
Reference
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/50/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5229\u7528\u200b\u5feb\u901f\u200b\u5e42\u200b\u7684\u200b\u601d\u8def\u200b\uff0c\u200b\u5b58\u50a8\u200b\u6b21\u6570\u200b\u4e3a\u200b2\u200b\u7684\u200b\u6574\u6570\u200b\u5e42\u200b\u7684\u200b\u8ba1\u7b97\u7ed3\u679c\u200b\uff0c\u200b\u7136\u540e\u200b\u7528\u200b\u8fd9\u4e9b\u200b\u7ed3\u679c\u200b\u76f8\u4e58\u200b\u5f97\u5230\u200b\u8f93\u51fa\u200b\u7ed3\u679c\u200b\u3002\u200b\u6ce8\u610f\u200b\u6307\u6570\u200b\u4e3a\u200b\u8d1f\u6570\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\u200b\u5f53\u200b\u6307\u6570\u200b\u4e3a\u200b-2147483648
\u200b\u65f6\u200b\u4e0d\u80fd\u200b\u53d6\u8d1f\u200b\uff0c\u200b\u6b64\u65f6\u200b\u53ef\u4ee5\u200b\u5148\u52a0\u200b\u4e00\u518d\u200b\u53d6\u8d1f\u200b\uff0c\u200b\u6700\u540e\u200b\u9664\u4ee5\u200b\u5e95\u6570\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
double myPow(double x, int n)\n{\n if (n < 0)\n return 1 / myPow(x, -(n + 1)) / x;\n double cache[32] = {0}, ret = 1;\n int i = 0;\n cache[0] = x;\n while (n)\n {\n if (n & 1)\n ret *= cache[i];\n n >>= 1;\n i++;\n cache[i] = cache[i - 1] * cache[i - 1];\n }\n return ret;\n}\n
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/509/","title":"509. \u200b\u6590\u6ce2\u200b\u90a3\u200b\u5951\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/509/#_1","title":"\u9898\u76ee","text":"\u200b\u6590\u6ce2\u200b\u90a3\u200b\u5951\u6570\u200b\uff0c\u200b\u901a\u5e38\u200b\u7528\u200bF(n)
\u200b\u8868\u793a\u200b\uff0c\u200b\u5f62\u6210\u200b\u7684\u200b\u5e8f\u5217\u200b\u79f0\u4e3a\u200b\u6590\u6ce2\u200b\u90a3\u5951\u200b\u6570\u5217\u200b\u3002\u200b\u8be5\u200b\u6570\u5217\u200b\u7531\u200b0
\u200b\u548c\u200b1
\u200b\u5f00\u59cb\u200b\uff0c\u200b\u540e\u9762\u200b\u7684\u200b\u6bcf\u4e00\u9879\u200b\u6570\u5b57\u200b\u90fd\u200b\u662f\u200b\u524d\u9762\u200b\u4e24\u9879\u200b\u6570\u5b57\u200b\u7684\u200b\u548c\u200b\u3002\u200b\u4e5f\u200b\u5c31\u662f\u200b\uff1a
F(0) = 0,\u00a0 \u00a0F(1)\u00a0= 1\nF(N) = F(N - 1) + F(N - 2), \u200b\u5176\u4e2d\u200b N > 1.\n
\u200b\u7ed9\u5b9a\u200bN
\uff0c\u200b\u8ba1\u7b97\u200bF(N)
\u3002 \u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a2\n\u200b\u8f93\u51fa\u200b\uff1a1\n\u200b\u89e3\u91ca\u200b\uff1aF(2) = F(1) + F(0) = 1 + 0 = 1.\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1a3\n\u200b\u8f93\u51fa\u200b\uff1a2\n\u200b\u89e3\u91ca\u200b\uff1aF(3) = F(2) + F(1) = 1 + 1 = 2.\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1a4\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1aF(4) = F(3) + F(2) = 2 + 1 = 3.\n
\u200b\u63d0\u793a\u200b\uff1a
\\(0\\leq N\\leq30\\)
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/509/#_2","title":"\u9898\u89e3","text":"","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/509/#_3","title":"\u9012\u5f52","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u5b58\u653e\u200b\u5386\u53f2\u200b\u7ed3\u679c\u200b\uff0c\u200b\u52a0\u901f\u200b\u9012\u5f52\u8ba1\u7b97\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int fib_cache(int N, int **cache, int *lenCache, int *fullCache){\n if (!N)\n return 0;\n if (!(*cache))\n {\n *lenCache = 2;\n *fullCache = N + 1;\n *cache = (int *)memset(malloc(sizeof(int) * *fullCache), 0, sizeof(int) * *fullCache);\n (*cache)[0] = 1;\n (*cache)[1] = 1;\n }\n if (N > *lenCache && N <= *fullCache)\n (*cache)[N-1] = fib_cache(N - 1, cache, lenCache, fullCache) + fib_cache(N - 2, cache, lenCache, fullCache);\n *lenCache = N;\n return (*cache)[N - 1];\n}\n\nint fib(int N){\n int *cache = NULL, lenCache = 0, fullCache = 0;\n return fib_cache(N, &cache, &lenCache, &fullCache);\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/509/#_4","title":"\u8fed\u4ee3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6839\u636e\u200b\u5b9a\u4e49\u200b\u63a8\u7b97\u200b\u6590\u6ce2\u200b\u90a3\u200b\u5951\u6570\u200b
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int fib(int N){\n int ret = 0, next = 1, tmp;\n while (N)\n {\n tmp = ret;\n ret = next;\n next = ret + tmp;\n N--;\n }\n return ret;\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/53/","title":"53. \u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u5206\u6cbb\u7b97\u6cd5","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/53/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b nums
\u00a0\uff0c\u200b\u627e\u5230\u200b\u4e00\u4e2a\u200b\u5177\u6709\u200b\u6700\u5927\u200b\u548c\u200b\u7684\u200b\u8fde\u7eed\u200b\u5b50\u200b\u6570\u7ec4\u200b\uff08\u200b\u5b50\u200b\u6570\u7ec4\u200b\u6700\u5c11\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\uff09\uff0c\u200b\u8fd4\u56de\u200b\u5176\u200b\u6700\u5927\u200b\u548c\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [-2,1,-3,4,-1,2,1,-5,4]\n\u200b\u8f93\u51fa\u200b\uff1a6\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u8fde\u7eed\u200b\u5b50\u200b\u6570\u7ec4\u200b\u00a0[4,-1,2,1] \u200b\u7684\u200b\u548c\u200b\u6700\u5927\u200b\uff0c\u200b\u4e3a\u200b\u00a06 \u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1]\n\u200b\u8f93\u51fa\u200b\uff1a1\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [0]\n\u200b\u8f93\u51fa\u200b\uff1a0\n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [-1]\n\u200b\u8f93\u51fa\u200b\uff1a-1\n
\u200b\u793a\u4f8b\u200b 5\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [-100000]\n\u200b\u8f93\u51fa\u200b\uff1a-100000\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 3 * 10^4
-10^5 <= nums[i] <= 10^5
\u200b\u8fdb\u9636\u200b\uff1a\u200b\u5982\u679c\u200b\u4f60\u200b\u5df2\u7ecf\u200b\u5b9e\u73b0\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b O(n)
\u200b\u7684\u200b\u89e3\u6cd5\u200b\uff0c\u200b\u5c1d\u8bd5\u200b\u4f7f\u7528\u200b\u66f4\u4e3a\u200b\u7cbe\u5999\u200b\u7684\u200b \u200b\u5206\u6cbb\u200b\u6cd5\u200b \u200b\u6c42\u89e3\u200b\u3002
Reference
","tags":["\u6570\u7ec4","\u5206\u6cbb\u7b97\u6cd5","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/53/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u4ece\u540e\u200b\u5411\u524d\u200b\u8fdb\u884c\u200b\u8003\u8651\u200b\uff0c\u200b\u8bbe\u200b\u6570\u7ec4\u200b\u4e2d\u5171\u200b\u6709\u200b\\(n\\)\u200b\u4e2a\u200b\u5143\u7d20\u200b\\(\\{a_n\\}\\)\uff0c\u200b\u5f53\u524d\u200b\u4f4d\u7f6e\u200b\\(i\\)\u200b\u4ece\u540e\u200b\u5411\u524d\u200b\u79fb\u52a8\u200b\uff0c\\(i\\)\u200b\u4f4d\u7f6e\u200b\u53ca\u200b\\(i\\)\u200b\u4f4d\u7f6e\u200b\u4e4b\u540e\u200b\u6784\u6210\u200b\u7684\u200b\u6700\u5927\u200b\u5b50\u200b\u5e8f\u5217\u200b\u6570\u503c\u200b\u4e3a\u200b\\(s_i\\)\u3002
- \u200b\u521d\u59cb\u200b\u60c5\u51b5\u200b\uff0c\\(s_n = 0\\)
- \u200b\u8ba8\u8bba\u200b\\(s_{i + 1}\\)\uff1a
- \u200b\u82e5\u200b\\(s_{i + 1} \\leq 0\\)\uff0c\u200b\u5219\u200b\\(s_{i} = a_{i}\\)
- \u200b\u82e5\u200b\\(s_{i + 1} > 0\\)\uff0c\u200b\u5219\u200b\\(s_{i} = a_{i} + s_{i + 1}\\)
\u200b\u7531\u6b64\u200b\u4e0d\u65ad\u200b\u8fdb\u884c\u200b\uff0c\u200b\u4e22\u5f03\u200b\u548c\u200b\u4e3a\u200b\u8d1f\u6570\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b\uff0c\u200b\u6700\u7ec8\u200b\u5f97\u5230\u200b\u7684\u200b\\(s_0\\)\u200b\u5373\u200b\u4e3a\u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c\u200b\u3002
#define MAX(x, y) (x > y ? x : y)\nint maxSubArray(int* nums, int numsSize){\n int ret = INT_MIN, value = 0;\n for (int i = numsSize - 1; i >= 0; i--)\n {\n value = MAX(value, 0) + nums[i];\n ret = MAX(ret, value);\n }\n return ret;\n}\n
","tags":["\u6570\u7ec4","\u5206\u6cbb\u7b97\u6cd5","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/55/","title":"55. \u200b\u8df3\u8dc3\u200b\u6e38\u620f","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u00a0nums
\uff0c\u200b\u4f60\u200b\u6700\u521d\u200b\u4f4d\u4e8e\u200b\u6570\u7ec4\u200b\u7684\u200b \u200b\u7b2c\u4e00\u4e2a\u200b\u4e0b\u6807\u200b \u3002
\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u4ee3\u8868\u200b\u4f60\u200b\u5728\u200b\u8be5\u200b\u4f4d\u7f6e\u200b\u53ef\u4ee5\u200b\u8df3\u8dc3\u200b\u7684\u200b\u6700\u5927\u200b\u957f\u5ea6\u200b\u3002
\u200b\u5224\u65ad\u200b\u4f60\u200b\u662f\u5426\u200b\u80fd\u591f\u200b\u5230\u8fbe\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u4e0b\u6807\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [2,3,1,1,4]\n\u200b\u8f93\u51fa\u200b\uff1atrue\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u53ef\u4ee5\u200b\u5148\u200b\u8df3\u200b 1 \u200b\u6b65\u200b\uff0c\u200b\u4ece\u200b\u4e0b\u6807\u200b 0 \u200b\u5230\u8fbe\u200b\u4e0b\u6807\u200b 1, \u200b\u7136\u540e\u200b\u518d\u200b\u4ece\u200b\u4e0b\u6807\u200b 1 \u200b\u8df3\u200b 3 \u200b\u6b65\u200b\u5230\u8fbe\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u4e0b\u6807\u200b\u3002\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [3,2,1,0,4]\n\u200b\u8f93\u51fa\u200b\uff1afalse\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u65e0\u8bba\u600e\u6837\u200b\uff0c\u200b\u603b\u4f1a\u200b\u5230\u8fbe\u200b\u4e0b\u6807\u200b\u4e3a\u200b 3 \u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002\u200b\u4f46\u200b\u8be5\u200b\u4e0b\u200b\u6807\u7684\u200b\u6700\u5927\u200b\u8df3\u8dc3\u200b\u957f\u5ea6\u200b\u662f\u200b 0 \uff0c \u200b\u6240\u4ee5\u200b\u6c38\u8fdc\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u5230\u8fbe\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u4e0b\u6807\u200b\u3002\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 3 * 10^4
0 <= nums[i] <= 10^5
Reference
","tags":["\u8d2a\u5fc3\u7b97\u6cd5","\u6570\u7ec4"]},{"location":"coding/leetcode/55/#_1","title":"\u9898\u89e3","text":"\u200b\u53cd\u5e8f\u200b\u904d\u5386\u200b\u6570\u7ec4\u200b\uff0c\u200b\u4ece\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u4f4d\u7f6e\u200b\u5f00\u59cb\u200b\uff0c\u200b\u68c0\u67e5\u200b\u5404\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u53ef\u200b\u8df3\u200b\u8ddd\u79bb\u200b\uff0c\u200b\u4ece\u800c\u200b\u6784\u9020\u200b\u4e00\u4e2a\u200b\u53ef\u4ee5\u200b\u8df3\u5230\u200b\u4e2d\u70b9\u200b\u7684\u200b\u4e0b\u6807\u200b\u533a\u95f4\u200b\u3002\u200b\u904d\u5386\u200b\u5b8c\u6210\u200b\u540e\u200b\u68c0\u67e5\u200b\u8d77\u70b9\u200b\u662f\u5426\u200b\u5728\u200b\u8be5\u200b\u4e0b\u6807\u200b\u533a\u95f4\u200b\u4e2d\u200b\u3002
bool canJump(int* nums, int numsSize) {\n\n int distance = numsSize - 1, i = 0;\n for (i = numsSize - 1; i >= 0; i--)\n if (i + nums[i] >= distance)\n distance = i;\n return distance == 0;\n}\n
","tags":["\u8d2a\u5fc3\u7b97\u6cd5","\u6570\u7ec4"]},{"location":"coding/leetcode/56/","title":"56. \u200b\u5408\u5e76\u200b\u533a\u95f4","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u6392\u5e8f"]},{"location":"coding/leetcode/56/#_1","title":"\u9898\u76ee","text":"\u200b\u4ee5\u200b\u6570\u7ec4\u200b intervals
\u200b\u8868\u793a\u200b\u82e5\u5e72\u4e2a\u200b\u533a\u95f4\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u5176\u4e2d\u200b\u5355\u4e2a\u200b\u533a\u95f4\u200b\u4e3a\u200b intervals[i] = [start_i, end_i]
\u3002\u200b\u8bf7\u200b\u4f60\u200b\u5408\u5e76\u200b\u6240\u6709\u200b\u91cd\u53e0\u200b\u7684\u200b\u533a\u95f4\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u4e0d\u200b\u91cd\u53e0\u200b\u7684\u200b\u533a\u95f4\u200b\u6570\u7ec4\u200b\uff0c\u200b\u8be5\u200b\u6570\u7ec4\u200b\u9700\u200b\u6070\u597d\u200b\u8986\u76d6\u200b\u8f93\u5165\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u533a\u95f4\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aintervals = [[1,3],[2,6],[8,10],[15,18]]\n\u200b\u8f93\u51fa\u200b\uff1a[[1,6],[8,10],[15,18]]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u533a\u95f4\u200b [1,3] \u200b\u548c\u200b [2,6] \u200b\u91cd\u53e0\u200b, \u200b\u5c06\u200b\u5b83\u4eec\u200b\u5408\u5e76\u200b\u4e3a\u200b [1,6].\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b\uff1aintervals = [[1,4],[4,5]]\n\u200b\u8f93\u51fa\u200b\uff1a[[1,5]]\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u533a\u95f4\u200b [1,4] \u200b\u548c\u200b [4,5] \u200b\u53ef\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u91cd\u53e0\u200b\u533a\u95f4\u200b\u3002\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= intervals.length <= 10^4
intervals[i].length == 2
0 <= starti <= endi <= 10^4
Reference
","tags":["\u6570\u7ec4","\u6392\u5e8f"]},{"location":"coding/leetcode/56/#_2","title":"\u9898\u89e3","text":"\u200b\u9996\u5148\u200b\u5bf9\u200b\u533a\u95f4\u200b\u7684\u200b\u8d77\u70b9\u200b\u6309\u7167\u200b\u5347\u5e8f\u200b\u6392\u5e8f\u200b\uff0c\u200b\u4e4b\u540e\u200b\u904d\u5386\u200b\u533a\u95f4\u200b\u5217\u8868\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u68c0\u67e5\u200b\u5df2\u200b\u5408\u5e76\u200b\u533a\u95f4\u200b\u4e0e\u200b\u5f53\u524d\u200b\u533a\u95f4\u200b\u662f\u5426\u200b\u5b58\u5728\u200b\u91cd\u53e0\u200b\uff0c\u200b\u5982\u679c\u200b\u5b58\u5728\u200b\u91cd\u53e0\u200b\uff0c\u200b\u5219\u200b\u5c06\u200b\u4e24\u200b\u533a\u95f4\u200b\u5408\u5e76\u200b\uff0c\u200b\u5426\u5219\u200b\u5c06\u200b\u5df2\u200b\u5408\u5e76\u200b\u533a\u95f4\u200b\u52a0\u5165\u200b\u7ed3\u679c\u200b\u96c6\u4e2d\u200b\uff0c\u200b\u5f53\u524d\u200b\u533a\u95f4\u200b\u8bbe\u4e3a\u200b\u5df2\u200b\u5408\u5e76\u200b\u533a\u95f4\u200b\u3002
/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\n#define MAX(x, y) (x > y ? x : y)\nint comp(const void *x, const void *y)\n{\n return **(int **)x - **(int **)y;\n}\nint** merge(int** intervals, int intervalsSize, int* intervalsColSize, int* returnSize, int** returnColumnSizes){\n if (intervalsSize == 0)\n {\n *returnSize = 0;\n return NULL;\n }\n qsort(intervals, intervalsSize, sizeof(int *), comp);\n int **ret = (int **)malloc(sizeof(int *) * intervalsSize), i = 0;\n ret[0] = (int *)memcpy(malloc(sizeof(int) * 2), intervals[0], sizeof(int) * 2);\n *returnSize = 0;\n for (i = 1; i < intervalsSize; i++)\n {\n if (ret[*returnSize][1] >= intervals[i][0])\n ret[*returnSize][1] = MAX(intervals[i][1], ret[*returnSize][1]);\n else\n ret[++(*returnSize)] = (int *)memcpy(malloc(sizeof(int) * 2), intervals[i], sizeof(int) * 2);\n }\n (*returnSize)++;\n *returnColumnSizes = (int *)malloc(sizeof(int) * *returnSize);\n for (i = 0; i < *returnSize; i++)\n (*returnColumnSizes)[i] = 2;\n return ret;\n}\n
","tags":["\u6570\u7ec4","\u6392\u5e8f"]},{"location":"coding/leetcode/59/","title":"59. \u200b\u87ba\u65cb\u200b\u77e9\u9635\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/59/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\u00a0n
\uff0c\u200b\u751f\u6210\u200b\u4e00\u4e2a\u200b\u5305\u542b\u200b 1
\u200b\u5230\u200b\u00a0n^2
\u00a0\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\uff0c\u200b\u4e14\u200b\u5143\u7d20\u200b\u6309\u200b\u987a\u65f6\u9488\u200b\u987a\u5e8f\u200b\u87ba\u65cb\u200b\u6392\u5217\u200b\u7684\u200b\u00a0n x n
\u200b\u6b63\u65b9\u5f62\u200b\u77e9\u9635\u200b matrix
\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1an = 3\n\u200b\u8f93\u51fa\u200b\uff1a[[1,2,3],[8,9,4],[7,6,5]]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1an = 1\n\u200b\u8f93\u51fa\u200b\uff1a[[1]]\n
\u200b\u63d0\u793a\u200b\uff1a
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/59/#_2","title":"\u9898\u89e3","text":"\u200b\u6309\u200b\u987a\u5e8f\u200b\u586b\u5145\u200b\u77e9\u9635\u200b\uff0c\u200b\u5f53\u200b\u8d85\u51fa\u200b\u77e9\u9635\u200b\u6216\u200b\u9047\u5230\u200b\u5df2\u200b\u586b\u5145\u200b\u5143\u7d20\u200b\u65f6\u200b\u8f6c\u5411\u200b\u3002
/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\nvoid change(int direction, int *i, int *j, int incre)\n{\n switch(direction)\n {\n case 0:\n *j += incre;\n break;\n case 1:\n *i += incre;\n break;\n case 2:\n *j -= incre;\n break;\n case 3:\n *i -= incre;\n break;\n }\n}\nint** generateMatrix(int n, int* returnSize, int** returnColumnSizes){\n *returnSize = n;\n *returnColumnSizes = (int *)malloc(sizeof(int) * n);\n\n int i = 0, j = 0, m = 1, direction = 0, **ret = (int **)malloc(sizeof(int *) * n);\n for (i = 0; i < n; i++)\n {\n (*returnColumnSizes)[i] = n;\n ret[i] = (int *)malloc(sizeof(int) * n);\n memset(ret[i], 0, sizeof(int) * n);\n }\n\n i = 0;\n while (m < n * n)\n {\n ret[i][j] = m;\n change(direction, &i, &j, 1);\n m++;\n if (i < 0 || j < 0 || i >= n || j >= n || ret[i][j])\n {\n change(direction, &i, &j, -1);\n direction = (direction + 1) & 3;\n m--;\n }\n }\n ret[i][j] = m;\n return ret;\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/61/","title":"61. \u200b\u65cb\u8f6c\u200b\u94fe\u8868","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/61/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u94fe\u8868\u200b\u7684\u200b\u5934\u200b\u8282\u70b9\u200b head
\uff0c\u200b\u65cb\u8f6c\u200b\u94fe\u8868\u200b\uff0c\u200b\u5c06\u200b\u94fe\u8868\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u00a0k
\u00a0\u200b\u4e2a\u200b\u4f4d\u7f6e\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1,2,3,4,5], k = 2\n\u200b\u8f93\u51fa\u200b\uff1a[4,5,1,2,3]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [0,1,2], k = 4\n\u200b\u8f93\u51fa\u200b\uff1a[2,0,1]\n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u94fe\u8868\u200b\u4e2d\u200b\u8282\u70b9\u200b\u7684\u200b\u6570\u76ee\u200b\u5728\u200b\u8303\u56f4\u200b
[0, 500]
\u200b\u5185\u200b -100 <= Node.val <= 100
0 <= k <= 2 * 10^9
Reference
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/61/#_2","title":"\u9898\u89e3","text":"\u200b\u5148\u200b\u5c06\u200b\u94fe\u8868\u200b\u95ed\u73af\u200b\uff0c\u200b\u53f3\u79fb\u200b k \u200b\u4e2a\u200b\u8282\u70b9\u200b\u540e\u200b\u4ee5\u200b\u8be5\u200b\u8282\u70b9\u200b\u4f5c\u4e3a\u200b\u5934\u200b\u8282\u70b9\u200b\uff0c\u200b\u5c06\u200b\u94fe\u8868\u200b\u7684\u200b\u73af\u200b\u6253\u5f00\u200b\u3002
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\n\n\nstruct ListNode* rotateRight(struct ListNode* head, int k) {\n if (!head)\n return NULL;\n struct ListNode *cur = head, *ret = NULL;\n int len = 1;\n while (cur->next != NULL)\n {\n cur = cur->next;\n len++;\n }\n cur->next = head;\n cur = head;\n k %= len;\n for (int i = k + 1; i < len; i++)\n cur = cur->next;\n ret = cur->next;\n cur->next = NULL;\n return ret;\n}\n
","tags":["\u94fe\u8868","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/62/","title":"62. \u200b\u4e0d\u540c\u200b\u8def\u5f84","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/62/#_1","title":"\u9898\u76ee","text":"\u200b\u4e00\u4e2a\u200b\u673a\u5668\u4eba\u200b\u4f4d\u4e8e\u200b\u4e00\u4e2a\u200b m x n
\u00a0\u200b\u7f51\u683c\u200b\u7684\u200b\u5de6\u4e0a\u89d2\u200b \uff08\u200b\u8d77\u59cb\u200b\u70b9\u200b\u5728\u200b\u4e0b\u56fe\u200b\u4e2d\u200b\u6807\u8bb0\u200b\u4e3a\u200b \u201cStart\u201d \uff09\u3002
\u200b\u673a\u5668\u4eba\u200b\u6bcf\u6b21\u200b\u53ea\u80fd\u200b\u5411\u4e0b\u200b\u6216\u8005\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u4e00\u6b65\u200b\u3002\u200b\u673a\u5668\u4eba\u200b\u8bd5\u56fe\u200b\u8fbe\u5230\u200b\u7f51\u683c\u200b\u7684\u200b\u53f3\u4e0b\u89d2\u200b\uff08\u200b\u5728\u200b\u4e0b\u56fe\u200b\u4e2d\u200b\u6807\u8bb0\u200b\u4e3a\u200b \u201cFinish\u201d \uff09\u3002
\u200b\u95ee\u200b\u603b\u5171\u200b\u6709\u200b\u591a\u5c11\u200b\u6761\u200b\u4e0d\u540c\u200b\u7684\u200b\u8def\u5f84\u200b\uff1f
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1am = 3, n = 7\n\u200b\u8f93\u51fa\u200b\uff1a28\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1am = 3, n = 2\n\u200b\u8f93\u51fa\u200b\uff1a3\n\u200b\u89e3\u91ca\u200b\uff1a\n\u200b\u4ece\u200b\u5de6\u4e0a\u89d2\u200b\u5f00\u59cb\u200b\uff0c\u200b\u603b\u5171\u200b\u6709\u200b 3 \u200b\u6761\u200b\u8def\u5f84\u200b\u53ef\u4ee5\u200b\u5230\u8fbe\u200b\u53f3\u4e0b\u89d2\u200b\u3002\n1. \u200b\u5411\u200b\u53f3\u200b -> \u200b\u5411\u4e0b\u200b -> \u200b\u5411\u4e0b\u200b\n2. \u200b\u5411\u4e0b\u200b -> \u200b\u5411\u4e0b\u200b -> \u200b\u5411\u200b\u53f3\u200b\n3. \u200b\u5411\u4e0b\u200b -> \u200b\u5411\u200b\u53f3\u200b -> \u200b\u5411\u4e0b\u200b\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1am = 7, n = 3\n\u200b\u8f93\u51fa\u200b\uff1a28\n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1am = 3, n = 3\n\u200b\u8f93\u51fa\u200b\uff1a6\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= m, n <= 100
- \u200b\u9898\u76ee\u200b\u6570\u636e\u200b\u4fdd\u8bc1\u200b\u7b54\u6848\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b
2 * 10^9
Reference
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/62/#_2","title":"\u9898\u89e3","text":"\u200b\u4ece\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u5f00\u59cb\u200b\u8003\u8651\u200b\uff0c\u200b\u8981\u200b\u5230\u8fbe\u200b\u53f3\u4e0b\u89d2\u200b\u7684\u200b\u65b9\u683c\u200b\uff0c\u200b\u6709\u200b\u4e24\u79cd\u200b\u65b9\u6cd5\u200b\uff1a
- \u200b\u4ece\u200b\u659c\u200b\u4e0a\u65b9\u200b\u7684\u200b\u65b9\u683c\u200b\u5f00\u59cb\u200b\uff0c\u200b\u5148\u200b\u5411\u4e0b\u200b\u540e\u200b\u5411\u200b\u53f3\u200b
- \u200b\u4ece\u200b\u659c\u200b\u4e0a\u65b9\u200b\u7684\u200b\u65b9\u683c\u200b\u5f00\u59cb\u200b\uff0c\u200b\u5148\u5411\u200b\u53f3\u540e\u200b\u5411\u4e0b\u200b
\u200b\u7531\u6b64\u200b\u5373\u53ef\u200b\u5f97\u51fa\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u65b9\u7a0b\u200b\u3002
int uniquePaths(int m, int n){\n if (m < n)\n return uniquePaths(n, m);\n int *dp = (int *)malloc(sizeof(int) * m), i = 0, j = 0;\n for (i = 0; i < m; i++)\n dp[i] = 1;\n for (i = 1; i < n; i++)\n for (j = 1; j < m; j++)\n dp[j] += dp[j - 1];\n return dp[m - 1];\n}\n
\u200b\u6216\u8005\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6392\u5217\u7ec4\u5408\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u957f\u4e3a\u200b\\(m\\)\uff0c\u200b\u5bbd\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u65b9\u683c\u200b\uff0c\u200b\u9700\u8981\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\\(m - 1\\)\u200b\u6b21\u200b\uff0c\u200b\u5411\u4e0b\u200b\u79fb\u52a8\u200b\\(n - 1\\)\u200b\u6b21\u200b\uff0c\u200b\u5171\u200b\\(m + n - 2\\)\u200b\u6b21\u200b\u3002
\u200b\u56e0\u6b64\u200b\u603b\u200b\u7684\u200b\u8def\u5f84\u200b\u4e2a\u6570\u200b\u4e3a\u200b\\(m + n - 2\\)\u200b\u4e2a\u200b\u9009\u62e9\u200b\u4e2d\u4e2d\u200b\u9009\u62e9\u200b\\(m - 1\\)\u200b\u6b21\u200b\u5411\u4e0b\u200b\u79fb\u52a8\u200b\u7684\u200b\u65b9\u6848\u200b\u603b\u6570\u200b\uff0c\u200b\u8be5\u200b\u65b9\u6848\u200b\u603b\u6570\u200b\u4e3a\u200b\uff1a
\\[ \\frac{(m + n - 2)!}{(m - 1)!(n - 1)!} \\]","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/64/","title":"64. \u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5305\u542b\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u7684\u200b m\u00a0x\u00a0n
\u00a0\u200b\u7f51\u683c\u200b\u00a0grid
\uff0c\u200b\u8bf7\u200b\u627e\u51fa\u200b\u4e00\u6761\u200b\u4ece\u200b\u5de6\u4e0a\u89d2\u200b\u5230\u200b\u53f3\u4e0b\u89d2\u200b\u7684\u200b\u8def\u5f84\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u8def\u5f84\u200b\u4e0a\u200b\u7684\u200b\u6570\u5b57\u200b\u603b\u548c\u200b\u4e3a\u200b\u6700\u5c0f\u200b\u3002
\u200b\u8bf4\u660e\u200b\uff1a\u200b\u6bcf\u6b21\u200b\u53ea\u80fd\u200b\u5411\u4e0b\u200b\u6216\u8005\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u4e00\u6b65\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1agrid = [[1,3,1],[1,5,1],[4,2,1]]\n\u200b\u8f93\u51fa\u200b\uff1a7\n\u200b\u89e3\u91ca\u200b\uff1a\u200b\u56e0\u4e3a\u200b\u8def\u5f84\u200b 1\u21923\u21921\u21921\u21921 \u200b\u7684\u200b\u603b\u548c\u200b\u6700\u5c0f\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1agrid = [[1,2,3],[4,5,6]]\n\u200b\u8f93\u51fa\u200b\uff1a12\n
\u200b\u63d0\u793a\u200b\uff1a
m == grid.length
n == grid[i].length
1 <= m, n <= 200
0 <= grid[i][j] <= 100
Reference
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/64/#_1","title":"\u9898\u89e3","text":"\u200b\u8bbe\u200b\u7b2c\u200b\\(i\\)\u200b\u884c\u7b2c\u200b\\(j\\)\u200b\u5217\u200b\u7684\u200b\u5143\u7d20\u200b\\(a_{ij}\\)\u200b\u5230\u200b\u53f3\u4e0b\u89d2\u200b\u8def\u5f84\u200b\u4e0a\u200b\u7684\u200b\u6570\u5b57\u200b\u548c\u200b\u4e3a\u200b\\(f(i, j)\\)\uff0c\u200b\u7279\u522b\u200b\u5730\u200b\uff0c\u200b\u6709\u200b\\(f(m, n) = a_{mn}\\)\uff0c\u200b\u5219\u200b\uff1a
\u200b\u5bf9\u4e8e\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u5143\u7d20\u200b\uff0c\u200b\u53ea\u80fd\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ f(m, j) = \\sum_{k=j} ^{n} a_{mk} \\] \u200b\u540c\u7406\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6700\u540e\u200b\u4e00\u5217\u200b\u5143\u7d20\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ f(i, n) = \\sum_{k = i} ^ {m} a_{kn} \\] \u200b\u8bbe\u200b\u7b2c\u200b\\(i\\)\u200b\u884c\u200b\u5230\u8fbe\u200b\u53f3\u4e0b\u89d2\u200b\u7684\u200b\u6700\u200b\u77ed\u200b\u8def\u5f84\u200b\u548c\u200b\uff08\u200b\u5373\u200b\\(f(i, j), \\forall j\\)\uff09\u200b\u4ee5\u53ca\u200b\u7b2c\u200b\\(i - 1\\)\u200b\u884c\u200b\u6700\u540e\u200b\u4e00\u5217\u200b\u5230\u8fbe\u200b\u53f3\u4e0b\u89d2\u200b\u7684\u200b\u6700\u200b\u77ed\u200b\u8def\u5f84\u200b\u548c\u200b\uff0c\u200b\u5373\u200b\\(f(i - 1, n)\\)\u200b\u5df2\u77e5\u200b\u3002\u200b\u7531\u4e8e\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u53ea\u80fd\u200b\u5411\u200b\u53f3\u200b\u6216\u200b\u5411\u4e0b\u200b\u79fb\u52a8\u200b\uff0c\\(f(i - 1, j)\\)\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u5982\u4e0b\u200b\u65b9\u7a0b\u200b\u63a8\u5bfc\u200b\uff1a
\\[ f(i - 1, j - 1) = \\min\\{f(i - 1, j), f(i, j - 1)\\} + a_{(i - 1)(j - 1)} \\] \u200b\u7531\u6b64\u200b\u5f97\u5230\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u65b9\u7a0b\u200b\uff0c\u200b\u5373\u53ef\u200b\u4f7f\u7528\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\u81ea\u200b\u5e95\u5411\u4e0a\u200b\u6c42\u89e3\u200b\u3002\u200b\u6c42\u89e3\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u53ea\u200b\u9700\u8981\u200b\u5b58\u50a8\u200b\u4e00\u884c\u200b\u7684\u200b\u6700\u200b\u77ed\u200b\u8def\u5f84\u200b\u548c\u200b\u5373\u53ef\u200b\u3002
#define MIN(x, y) ((x) < (y) ? x : y)\nint minPathSum(int** grid, int gridSize, int* gridColSize){\n if (gridSize == 0 || *gridColSize == 0)\n return 0;\n int *dp = (int *)memset(malloc(sizeof(int) * *gridColSize), 0, sizeof(int) * *gridColSize),\n i = 0, j = 0;\n for (i = 0; i < *gridColSize; i++)\n dp[i] = INT_MAX;\n dp[0] = 0;\n for (i = 0; i < gridSize; i++)\n {\n dp[0] += grid[i][0];\n for (j = 1; j < *gridColSize; j++)\n dp[j] = MIN(dp[j - 1], dp[j]) + grid[i][j];\n }\n return dp[*gridColSize - 1];\n}\n
","tags":["\u6570\u7ec4","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/66/","title":"66. \u200b\u52a0\u4e00","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/66/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u7531\u200b\u6574\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u975e\u7a7a\u200b\u6570\u7ec4\u200b\u6240\u200b\u8868\u793a\u200b\u7684\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\uff0c\u200b\u5728\u200b\u8be5\u6570\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u52a0\u200b\u4e00\u200b\u3002
\u200b\u6700\u9ad8\u200b\u4f4d\u200b\u6570\u5b57\u200b\u5b58\u653e\u200b\u5728\u200b\u6570\u7ec4\u200b\u7684\u200b\u9996\u4f4d\u200b\uff0c \u200b\u6570\u7ec4\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u53ea\u200b\u5b58\u50a8\u200b\u5355\u4e2a\u200b\u6570\u5b57\u200b\u3002
\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u9664\u4e86\u200b\u6574\u6570\u200b 0 \u200b\u4e4b\u5916\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u6574\u6570\u200b\u4e0d\u4f1a\u200b\u4ee5\u200b\u96f6\u200b\u5f00\u5934\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b: [1,2,3]\n\u200b\u8f93\u51fa\u200b: [1,2,4]\n\u200b\u89e3\u91ca\u200b: \u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u8868\u793a\u200b\u6570\u5b57\u200b 123\u3002\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b: [4,3,2,1]\n\u200b\u8f93\u51fa\u200b: [4,3,2,2]\n\u200b\u89e3\u91ca\u200b: \u200b\u8f93\u5165\u200b\u6570\u7ec4\u200b\u8868\u793a\u200b\u6570\u5b57\u200b 4321\u3002\n
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/66/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4ece\u200b\u6700\u540e\u200b\u4e00\u4f4d\u200b\u5f00\u59cb\u200b\u52a0\u200b\uff0c\u200b\u5411\u524d\u200b\u5904\u7406\u200b\u8fdb\u4f4d\u200b\u3002\u200b\u6ce8\u610f\u200b9999+1\u200b\u7684\u200b\u7279\u6b8a\u200b\u60c5\u51b5\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Note: The returned array must be malloced, assume caller calls free().\n */\nint* plusOne(int* digits, int digitsSize, int* returnSize){\n int *ret = (int *)malloc(sizeof(int) * (digitsSize + 1)), i = digitsSize, add = 1;\n *ret = 0;\n memcpy(ret + 1, digits, sizeof(int) * digitsSize);\n for (i = digitsSize; i >= 0 && add; i--)\n {\n if (add = ret[i] == 9)\n ret[i] = 0;\n else\n ret[i]++;\n }\n *returnSize = (i + 1) ? digitsSize : digitsSize + 1;\n return ret + ((i + 1) ? 1 : 0);\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/69/","title":"69. x \u200b\u7684\u200b\u5e73\u65b9\u6839","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/69/#_1","title":"\u9898\u76ee","text":"\u200b\u5b9e\u73b0\u200b\u00a0int sqrt(int x)
\u00a0\u200b\u51fd\u6570\u200b\u3002
\u200b\u8ba1\u7b97\u200b\u5e76\u200b\u8fd4\u56de\u200b\u00a0x
\u00a0\u200b\u7684\u200b\u5e73\u65b9\u6839\u200b\uff0c\u200b\u5176\u4e2d\u200b\u00a0x
\u200b\u662f\u975e\u200b\u8d1f\u200b\u6574\u6570\u200b\u3002
\u200b\u7531\u4e8e\u200b\u8fd4\u56de\u200b\u7c7b\u578b\u200b\u662f\u200b\u6574\u6570\u200b\uff0c\u200b\u7ed3\u679c\u200b\u53ea\u200b\u4fdd\u7559\u200b\u6574\u6570\u200b\u7684\u200b\u90e8\u5206\u200b\uff0c\u200b\u5c0f\u6570\u200b\u90e8\u5206\u200b\u5c06\u200b\u88ab\u200b\u820d\u53bb\u200b\u3002
\u200b\u793a\u4f8b\u200b 1:
\u200b\u8f93\u5165\u200b: 4\n\u200b\u8f93\u51fa\u200b: 2\n
\u200b\u793a\u4f8b\u200b 2:
\u200b\u8f93\u5165\u200b: 8\n\u200b\u8f93\u51fa\u200b: 2\n\u200b\u8bf4\u660e\u200b: 8 \u200b\u7684\u200b\u5e73\u65b9\u6839\u200b\u662f\u200b 2.82842..., \n\u00a0 \u200b\u7531\u4e8e\u200b\u8fd4\u56de\u200b\u7c7b\u578b\u200b\u662f\u200b\u6574\u6570\u200b\uff0c\u200b\u5c0f\u6570\u200b\u90e8\u5206\u200b\u5c06\u200b\u88ab\u200b\u820d\u53bb\u200b\u3002\n
Reference
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/69/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u5373\u53ef\u200b\uff0c\u200b\u5173\u4e8e\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u8ba8\u8bba\u200b\uff0c\u200b\u8bf7\u200b\u53c2\u89c1\u200b35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b
unsigned int binsearch(unsigned int target, unsigned int lo, unsigned int hi)\n{\n int mid;\n while (lo < hi)\n {\n mid = (lo + hi) >> 1;\n if (mid * mid > target)\n hi = mid;\n else\n lo = mid + 1;\n }\n return lo - 1;\n}\nint mySqrt(int x){\n return binsearch(x, 0, 46341);\n}\n
","tags":["\u6570\u5b66","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/7/","title":"7. \u200b\u6574\u6570\u200b\u53cd\u8f6c","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/7/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u51fa\u200b\u4e00\u4e2a\u200b 32 \u200b\u4f4d\u200b\u7684\u200b\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\uff0c\u200b\u4f60\u200b\u9700\u8981\u200b\u5c06\u200b\u8fd9\u4e2a\u200b\u6574\u6570\u200b\u4e2d\u200b\u6bcf\u4f4d\u200b\u4e0a\u200b\u7684\u200b\u6570\u5b57\u200b\u8fdb\u884c\u200b\u53cd\u8f6c\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b: 123\n\u200b\u8f93\u51fa\u200b: 321\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b: -123\n\u200b\u8f93\u51fa\u200b: -321\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b: 120\n\u200b\u8f93\u51fa\u200b: 21\n
\u200b\u6ce8\u610f\u200b\uff1a
\u200b\u5047\u8bbe\u200b\u6211\u4eec\u200b\u7684\u200b\u73af\u5883\u200b\u53ea\u80fd\u200b\u5b58\u50a8\u200b\u5f97\u200b\u4e0b\u200b 32 \u200b\u4f4d\u200b\u7684\u200b\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\uff0c\u200b\u5219\u200b\u5176\u200b\u6570\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b \\([\u22122^{31},\u00a0 2^{31}\u00a0\u2212 1]\\) \u3002\u200b\u8bf7\u200b\u6839\u636e\u200b\u8fd9\u4e2a\u200b\u5047\u8bbe\u200b\uff0c\u200b\u5982\u679c\u200b\u53cd\u8f6c\u200b\u540e\u200b\u6574\u6570\u200b\u6ea2\u51fa\u200b\u90a3\u4e48\u200b\u5c31\u200b\u8fd4\u56de\u200b 0\u3002
Reference
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/7/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6bcf\u200b\u4e00\u6b21\u200b\u4ece\u200b\u53f3\u4fa7\u200b\u63d0\u53d6\u200b\u51fa\u200b\u6700\u540e\u200b\u4e00\u4f4d\u200b\u52a0\u200b\u5230\u200b\u7ed3\u679c\u200b\u7684\u200b\u53f3\u4fa7\u200b\u3002\u200b\u6ce8\u610f\u200b\u8d1f\u6570\u200b-2147483648
\u200b\u5728\u200b 32 \u200b\u4f4d\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\u73af\u5883\u200b\u4e0b\u200b\u4e0d\u80fd\u200b\u53d6\u8d1f\u200b\uff0c\u200b\u5c06\u200b\u4e2d\u95f4\u200b\u53d8\u91cf\u200b\u58f0\u660e\u200b\u4e3a\u200blong
\u200b\u5373\u53ef\u200b\u89e3\u51b3\u200b\u3002
int reverse(int x){\n long ret = 0, testcase = x;\n testcase = testcase > 0 ? testcase : -testcase;\n while(testcase)\n {\n ret *= 10;\n ret += testcase % 10;\n testcase /= 10;\n }\n return ((ret >> 31) ? 0 : ret) * (x > 0 ? 1 : -1);\n}\n
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/70/","title":"70. \u200b\u722c\u697c\u68af","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/70/#_1","title":"\u9898\u76ee","text":"\u200b\u5047\u8bbe\u200b\u4f60\u200b\u6b63\u5728\u200b\u722c\u697c\u68af\u200b\u3002\u200b\u9700\u8981\u200b n\u00a0\u200b\u9636\u200b\u4f60\u200b\u624d\u80fd\u200b\u5230\u8fbe\u200b\u697c\u9876\u200b\u3002
\u200b\u6bcf\u6b21\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u722c\u200b 1 \u200b\u6216\u200b 2 \u200b\u4e2a\u200b\u53f0\u9636\u200b\u3002\u200b\u4f60\u200b\u6709\u200b\u591a\u5c11\u200b\u79cd\u200b\u4e0d\u540c\u200b\u7684\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u722c\u200b\u5230\u200b\u697c\u9876\u200b\u5462\u200b\uff1f
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u7ed9\u5b9a\u200b n \u200b\u662f\u200b\u4e00\u4e2a\u200b\u6b63\u6574\u6570\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a 2\n\u200b\u8f93\u51fa\u200b\uff1a 2\n\u200b\u89e3\u91ca\u200b\uff1a \u200b\u6709\u200b\u4e24\u79cd\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u722c\u200b\u5230\u200b\u697c\u9876\u200b\u3002\n1. 1 \u200b\u9636\u200b + 1 \u200b\u9636\u200b\n2. 2 \u200b\u9636\u200b\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1a 3\n\u200b\u8f93\u51fa\u200b\uff1a 3\n\u200b\u89e3\u91ca\u200b\uff1a \u200b\u6709\u200b\u4e09\u79cd\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u722c\u200b\u5230\u200b\u697c\u9876\u200b\u3002\n1. 1 \u200b\u9636\u200b + 1 \u200b\u9636\u200b + 1 \u200b\u9636\u200b\n2. 1 \u200b\u9636\u200b + 2 \u200b\u9636\u200b\n3. 2 \u200b\u9636\u200b + 1 \u200b\u9636\u200b\n
Reference
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/70/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u4f7f\u7528\u200b\u4e00\u4e2a\u200b\u6570\u7ec4\u200b\u5b58\u50a8\u200b\u4e34\u65f6\u200b\u7ed3\u679c\u200b\uff0c\u200b\u9012\u5f52\u8ba1\u7b97\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int climbStairs_cache(int n, int **cache)\n{\n if (n <= 2)\n return n;\n if (*cache == NULL)\n *cache = memset(malloc(sizeof(int) * n), 0, sizeof(int) * n);\n if (!(*cache)[n - 1])\n (*cache)[n - 1] = climbStairs_cache(n - 1, cache) + climbStairs_cache(n - 2, cache);\n return (*cache)[n - 1];\n}\n\nint climbStairs(int n){\n int *cache = NULL;\n return climbStairs_cache(n, &cache);\n}\n
","tags":["\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/73/","title":"73. \u200b\u77e9\u9635\u200b\u7f6e\u200b\u96f6","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/73/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u00a0m x n
\u200b\u7684\u200b\u77e9\u9635\u200b\uff0c\u200b\u5982\u679c\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u4e3a\u200b 0
\uff0c\u200b\u5219\u200b\u5c06\u200b\u5176\u200b\u6240\u5728\u200b\u884c\u548c\u5217\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u90fd\u200b\u8bbe\u4e3a\u200b 0
\u3002\u200b\u8bf7\u200b\u4f7f\u7528\u200b \u200b\u539f\u5730\u200b \u200b\u7b97\u6cd5\u200b\u3002
\u200b\u8fdb\u9636\u200b\uff1a
- \u200b\u4e00\u4e2a\u200b\u76f4\u89c2\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\u662f\u200b\u4f7f\u7528\u200b \u00a0\\(O(mn)\\)\u00a0\u200b\u7684\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4f46\u200b\u8fd9\u200b\u5e76\u200b\u4e0d\u662f\u200b\u4e00\u4e2a\u200b\u597d\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\u3002
- \u200b\u4e00\u4e2a\u200b\u7b80\u5355\u200b\u7684\u200b\u6539\u8fdb\u200b\u65b9\u6848\u200b\u662f\u200b\u4f7f\u7528\u200b \\(O(m\u00a0+\u00a0n)\\) \u200b\u7684\u200b\u989d\u5916\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4f46\u200b\u8fd9\u200b\u4ecd\u7136\u200b\u4e0d\u662f\u200b\u6700\u597d\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\u3002
- \u200b\u4f60\u200b\u80fd\u200b\u60f3\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u4ec5\u200b\u4f7f\u7528\u200b\u5e38\u91cf\u200b\u7a7a\u95f4\u200b\u7684\u200b\u89e3\u51b3\u65b9\u6848\u200b\u5417\u200b\uff1f
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1amatrix = [[1,1,1],[1,0,1],[1,1,1]]\n\u200b\u8f93\u51fa\u200b\uff1a[[1,0,1],[0,0,0],[1,0,1]]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1amatrix = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]\n\u200b\u8f93\u51fa\u200b\uff1a[[0,0,0,0],[0,4,5,0],[0,3,1,0]]\n
\u200b\u63d0\u793a\u200b\uff1a
m == matrix.length
n == matrix[0].length
1 <= m, n <= 200
-2^31 <= matrix[i][j] <= 2^31 - 1
Reference
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/73/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\\(m\\)\u200b\u4e2a\u200b\u6807\u8bb0\u53d8\u91cf\u200b\u6807\u8bb0\u200b\u884c\u4e2d\u200b\u662f\u5426\u200b\u51fa\u73b0\u200b0\uff0c\u200b\u7528\u200b\\(n\\)\u200b\u4e2a\u200b\u6807\u8bb0\u53d8\u91cf\u200b\u6807\u8bb0\u200b\u5217\u4e2d\u200b\u662f\u5426\u200b\u51fa\u73b0\u200b0\u3002
void setZeroes(int** matrix, int matrixSize, int* matrixColSize){\n int *rows = memset(malloc(sizeof(int) * matrixSize), 0, sizeof(int) * matrixSize),\n *cols = memset(malloc(sizeof(int) * *matrixColSize), 0, sizeof(int) * *matrixColSize),\n i = 0, j = 0;\n for (i = 0; i < matrixSize; i++)\n {\n for (j = 0; j < matrixColSize[i]; j++)\n {\n if (matrix[i][j] == 0)\n {\n rows[i] = 1;\n cols[j] = 1;\n }\n }\n }\n for (i = 0; i < matrixSize; i++)\n for (j = 0; j < matrixColSize[i]; j++)\n if (rows[i] || cols[j])\n matrix[i][j] = 0;\n}\n
","tags":["\u6570\u7ec4"]},{"location":"coding/leetcode/74/","title":"74. \u200b\u641c\u7d22\u200b\u4e8c\u7ef4\u200b\u77e9\u9635","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/74/#_1","title":"\u9898\u76ee","text":"\u200b\u7f16\u5199\u200b\u4e00\u4e2a\u200b\u9ad8\u6548\u200b\u7684\u200b\u7b97\u6cd5\u200b\u6765\u200b\u5224\u65ad\u200b\u00a0m x n
\u00a0\u200b\u77e9\u9635\u200b\u4e2d\u200b\uff0c\u200b\u662f\u5426\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u503c\u200b\u3002\u200b\u8be5\u200b\u77e9\u9635\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u7279\u6027\u200b\uff1a
- \u200b\u6bcf\u884c\u200b\u4e2d\u200b\u7684\u200b\u6574\u6570\u200b\u4ece\u5de6\u5230\u53f3\u200b\u6309\u200b\u5347\u5e8f\u200b\u6392\u5217\u200b\u3002
- \u200b\u6bcf\u884c\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6574\u6570\u200b\u5927\u4e8e\u200b\u524d\u200b\u4e00\u884c\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1amatrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1amatrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13\n\u200b\u8f93\u51fa\u200b\uff1afalse\n
\u200b\u63d0\u793a\u200b\uff1a
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-10^4 <= matrix[i][j], target <= 10^4
Reference
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/74/#_2","title":"\u9898\u89e3","text":"\u200b\u6839\u636e\u200b\u77e9\u9635\u200b\u7684\u200b\u7279\u6027\u200b\u53ef\u77e5\u200b\uff0c\u200b\u5047\u8bbe\u200b\u77e9\u9635\u200b\u4e3a\u200b\\(\\{a_{ij}\\}_{m\\times n}\\)\uff0c\u200b\u76ee\u6807\u503c\u200b\\(t\\)\u200b\u4f4d\u4e8e\u200b\u5750\u6807\u200b\\((i^*, j^*)\\)\u200b\u5904\u200b\uff0c\u200b\u6709\u200b\uff1a
- \u200b\u5bf9\u4e8e\u200b\u4efb\u4f55\u200b\\(i, j\\)\uff0c\u200b\u82e5\u200b\\(i < i^*\\)\uff0c\u200b\u5219\u200b\\(a_{ij} < t\\)\uff0c\u200b\u5f53\u200b\\(i = i^*\\)\u200b\u65f6\u200b\uff0c\u200b\u82e5\u200b\\(j < j^*\\)\uff0c\u200b\u5219\u200b\\(a_{ij} < t\\)
- \u200b\u5bf9\u4e8e\u200b\u4efb\u4f55\u200b\\(i, j\\)\uff0c\u200b\u82e5\u200b\\(i > i^*\\)\uff0c\u200b\u5219\u200b\\(a_{ij} > t\\)\uff0c\u200b\u5f53\u200b\\(i = i^*\\)\u200b\u65f6\u200b\uff0c\u200b\u82e5\u200b\\(j > j^*\\)\uff0c\u200b\u5219\u200b\\(a_{ij} < t\\)
\u200b\u5373\u200b\u76ee\u6807\u503c\u200b\u5c06\u200b\u77e9\u9635\u200b\u5206\u4e3a\u200b\u4e24\u200b\u90e8\u5206\u200b\uff1a\u200b\u53f3\u4fa7\u200b\u548c\u200b\u4e0b\u4fa7\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u5927\u4e8e\u200b\u7b49\u4e8e\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u5de6\u4fa7\u200b\u548c\u200b\u4e0a\u4fa7\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b\u76ee\u6807\u503c\u200b\u3002
\u200b\u4ece\u200b\u77e9\u5f62\u200b\u7684\u200b\u5de6\u4e0b\u89d2\u200b\u5f00\u59cb\u200b\uff1a
- \u200b\u82e5\u200b\u5f53\u524d\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u6570\u503c\u200b\u5c0f\u4e8e\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u8bf4\u660e\u200b\u76ee\u6807\u503c\u200b\u4f4d\u4e8e\u200b\u5f53\u524d\u200b\u884c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u5373\u53ef\u200b\u627e\u5230\u200b\u76ee\u6807\u503c\u200b
- \u200b\u82e5\u200b\u5f53\u524d\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u6570\u503c\u200b\u5927\u4e8e\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u8bf4\u660e\u200b\u76ee\u6807\u503c\u200b\u4e0d\u200b\u5728\u200b\u5f53\u524d\u200b\u884c\u200b\uff0c\u200b\u9700\u8981\u200b\u5411\u4e0a\u200b\u79fb\u52a8\u200b
\u200b\u91cd\u590d\u200b\u5982\u200b\u4e0a\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u76f4\u81f3\u200b\u627e\u5230\u200b\u76ee\u6807\u200b\u5143\u7d20\u200b\u3002
bool searchMatrix(int** matrix, int matrixSize, int* matrixColSize, int target){\n int x = matrixSize - 1, y = 0;\n while (x >= 0 && y < *matrixColSize)\n {\n if (matrix[x][y] < target)\n y++;\n else if (matrix[x][y] > target)\n x--;\n else\n return true;\n }\n return false;\n}\n
\u200b\u4ee5\u4e0a\u200b\u7b97\u6cd5\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u8fdb\u884c\u200b\u4f18\u5316\u200b\u3002
","tags":["\u6570\u7ec4","\u4e8c\u5206\u67e5\u627e"]},{"location":"coding/leetcode/75/","title":"75. \u200b\u989c\u8272\u200b\u5206\u7c7b","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6392\u5e8f","\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/75/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5305\u542b\u200b\u7ea2\u8272\u200b\u3001\u200b\u767d\u8272\u200b\u548c\u200b\u84dd\u8272\u200b\uff0c\u200b\u4e00\u5171\u200b\u00a0n
\u200b\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u6570\u7ec4\u200b\uff0c\u200b\u539f\u5730\u200b\u5bf9\u200b\u5b83\u4eec\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u76f8\u540c\u200b\u989c\u8272\u200b\u7684\u200b\u5143\u7d20\u200b\u76f8\u90bb\u200b\uff0c\u200b\u5e76\u200b\u6309\u7167\u200b\u7ea2\u8272\u200b\u3001\u200b\u767d\u8272\u200b\u3001\u200b\u84dd\u8272\u200b\u987a\u5e8f\u6392\u5217\u200b\u3002
\u200b\u6b64\u9898\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u4f7f\u7528\u200b\u6574\u6570\u200b 0
\u3001\u00a01
\u200b\u548c\u200b 2
\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u7ea2\u8272\u200b\u3001\u200b\u767d\u8272\u200b\u548c\u200b\u84dd\u8272\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [2,0,2,1,1,0]\n\u200b\u8f93\u51fa\u200b\uff1a[0,0,1,1,2,2]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [2,0,1]\n\u200b\u8f93\u51fa\u200b\uff1a[0,1,2]\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [0]\n\u200b\u8f93\u51fa\u200b\uff1a[0]\n
\u200b\u793a\u4f8b\u200b 4\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1]\n\u200b\u8f93\u51fa\u200b\uff1a[1]\n
\u200b\u63d0\u793a\u200b\uff1a
n == nums.length
1 <= n <= 300
nums[i]
\u200b\u4e3a\u200b 0
\u30011
\u200b\u6216\u200b 2
\u200b\u8fdb\u9636\u200b\uff1a
- \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u4f7f\u7528\u200b\u4ee3\u7801\u200b\u5e93\u4e2d\u200b\u7684\u200b\u6392\u5e8f\u200b\u51fd\u6570\u200b\u6765\u200b\u89e3\u51b3\u200b\u8fd9\u9053\u9898\u200b\u5417\u200b\uff1f
- \u200b\u4f60\u200b\u80fd\u200b\u60f3\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u4ec5\u200b\u4f7f\u7528\u200b\u5e38\u6570\u200b\u7a7a\u95f4\u200b\u7684\u200b\u4e00\u8d9f\u200b\u626b\u63cf\u200b\u7b97\u6cd5\u200b\u5417\u200b\uff1f
Reference
","tags":["\u6392\u5e8f","\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/75/#_2","title":"\u9898\u89e3","text":" - \u200b\u7edf\u8ba1\u200b\u6570\u7ec4\u200b\u4e2d\u200b
0
\u30011
\u200b\u548c\u200b2
\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\uff0c\u200b\u6309\u7167\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u91cd\u65b0\u200b\u751f\u6210\u200b\u6570\u7ec4\u200b\u3002 - \u200b\u4f7f\u7528\u200b\u5feb\u901f\u200b\u6392\u5e8f\u200b\u7684\u200b\u601d\u8def\u200b\uff0c\u200b\u82e5\u200b\u51fa\u73b0\u200b
0
\u200b\u5219\u200b\u79fb\u52a8\u200b\u5230\u200b\u6570\u7ec4\u200b\u5f00\u5934\u200b\uff0c\u200b\u82e5\u200b\u51fa\u73b0\u200b2
\u200b\u5219\u200b\u79fb\u52a8\u200b\u5230\u200b\u6570\u7ec4\u200b\u7ed3\u5c3e\u200b\u3002
void swap(int *a, int *b)\n{\n int temp = *a;\n *a = *b;\n *b = temp;\n}\nvoid sortColors(int* nums, int numsSize){\n int head = 0, tail = numsSize - 1, i = 0;\n for (i = 0; i <= tail && tail > head; i++)\n {\n if (nums[i] == 0)\n swap(nums + head++, nums + i);\n if (nums[i] == 2)\n swap(nums + tail--, nums + i--);\n }\n}\n
","tags":["\u6392\u5e8f","\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/779/","title":"779. \u200b\u7b2c\u200bK\u200b\u4e2a\u200b\u8bed\u6cd5\u200b\u7b26\u53f7","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u9012\u5f52"]},{"location":"coding/leetcode/779/#_1","title":"\u9898\u76ee","text":"\u200b\u5728\u200b\u7b2c\u4e00\u884c\u200b\u6211\u4eec\u200b\u5199\u200b\u4e0a\u200b\u4e00\u4e2a\u200b0
\u3002\u200b\u63a5\u4e0b\u6765\u200b\u7684\u200b\u6bcf\u200b\u4e00\u884c\u200b\uff0c\u200b\u5c06\u200b\u524d\u200b\u4e00\u884c\u200b\u4e2d\u200b\u7684\u200b0
\u200b\u66ff\u6362\u200b\u4e3a\u200b01
\uff0c1
\u200b\u66ff\u6362\u200b\u4e3a\u200b10
\u3002
\u200b\u7ed9\u5b9a\u200b\u884c\u200b\u6570\u200bN
\u200b\u548c\u200b\u5e8f\u6570\u200bK
\uff0c\u200b\u8fd4\u56de\u200b\u7b2c\u200bN
\u200b\u884c\u4e2d\u200b\u7b2c\u200bK
\u200b\u4e2a\u5b57\u7b26\u200b\u3002\uff08K
\u200b\u4ece\u200b 1 \u200b\u5f00\u59cb\u200b\uff09
\u200b\u4f8b\u5b50\u200b:
\u200b\u8f93\u5165\u200b: N = 1, K = 1\n\u200b\u8f93\u51fa\u200b: 0\n\n\u200b\u8f93\u5165\u200b: N = 2, K = 1\n\u200b\u8f93\u51fa\u200b: 0\n\n\u200b\u8f93\u5165\u200b: N = 2, K = 2\n\u200b\u8f93\u51fa\u200b: 1\n\n\u200b\u8f93\u5165\u200b: N = 4, K = 5\n\u200b\u8f93\u51fa\u200b: 1\n\n\u200b\u89e3\u91ca\u200b:\n\u200b\u7b2c\u4e00\u884c\u200b: 0\n\u200b\u7b2c\u4e8c\u884c\u200b: 01\n\u200b\u7b2c\u4e09\u884c\u200b: 0110\n\u200b\u7b2c\u56db\u884c\u200b: 01101001\n
\u200b\u6ce8\u610f\u200b\uff1a N
\u200b\u7684\u200b\u8303\u56f4\u200b[1, 30]
. K
\u200b\u7684\u200b\u8303\u56f4\u200b[1, 2^(N-1)]
.
Reference
","tags":["\u9012\u5f52"]},{"location":"coding/leetcode/779/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u6ce8\u610f\u200b\u5230\u200b\u6bcf\u4e2a\u200b\u7ed3\u679c\u200b\u5b57\u7b26\u4e32\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b4\u200b\u4e2a\u200b\u7b49\u200b\u957f\u200b\u7684\u200b\u90e8\u5206\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7b2c\u200b1\u30014\u200b\u90e8\u5206\u200b\u76f8\u540c\u200b\uff0c2\u30013\u200b\u90e8\u5206\u200b\u76f8\u540c\u200b\uff0c\u200b\u4e24\u7ec4\u200b\u7684\u200b\u4e8c\u8fdb\u5236\u200b\u4e92\u8865\u200b\u3002\u200b\u540c\u65f6\u200b\uff0c\u200b\u4efb\u610f\u200b\u4e00\u884c\u200b\u4ee5\u4e2d\u70b9\u200b\u4e3a\u754c\u200b\uff0c\u200b\u5de6\u53f3\u200b\u4e24\u4fa7\u200b\u4e92\u8865\u200b\u3002\u200b\u56e0\u6b64\u200b\u53ea\u200b\u9700\u8981\u200b\u5728\u200b\u5de6\u4fa7\u200b\u8fdb\u884c\u200b\u67e5\u627e\u200b\uff0c\u200b\u53f3\u4fa7\u200b\u90e8\u5206\u200b\u53d6\u53cd\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int kthGrammar(int N, int K)\n{\n if (N == 1)\n return 0;\n int unit = 1 << (N - 2);\n return !(K <= unit) ^ kthGrammar(N - 1, ((K - 1) & (unit - 1)) + 1);\n}\n
","tags":["\u9012\u5f52"]},{"location":"coding/leetcode/78/","title":"78. \u200b\u5b50\u96c6","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u4f4d\u8fd0\u7b97","\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/78/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u00a0nums
\uff0c\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b \u200b\u4e92\u4e0d\u200b\u76f8\u540c\u200b \u3002\u200b\u8fd4\u56de\u200b\u8be5\u200b\u6570\u7ec4\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u5b50\u96c6\u200b\uff08\u200b\u5e42\u96c6\u200b\uff09\u3002
\u200b\u89e3\u96c6\u200b \u200b\u4e0d\u80fd\u200b \u200b\u5305\u542b\u200b\u91cd\u590d\u200b\u7684\u200b\u5b50\u96c6\u200b\u3002\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u6309\u200b \u200b\u4efb\u610f\u200b\u987a\u5e8f\u200b \u200b\u8fd4\u56de\u200b\u89e3\u96c6\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,3]\n\u200b\u8f93\u51fa\u200b\uff1a[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [0]\n\u200b\u8f93\u51fa\u200b\uff1a[[],[0]]\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 10
-10 <= nums[i] <= 10
nums
\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b \u200b\u4e92\u4e0d\u200b\u76f8\u540c\u200b
Reference
","tags":["\u4f4d\u8fd0\u7b97","\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/78/#_2","title":"\u9898\u89e3","text":"\u200b\u5df2\u77e5\u200b\u96c6\u5408\u200b\u4e2d\u200b\u4e0d\u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6574\u6570\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u200b\u4e00\u4f4d\u200b\u8868\u793a\u200b\u96c6\u5408\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u9009\u53d6\u200b\u72b6\u6001\u200b\u3002
/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\nint count1(int x)\n{\n int ret = 0;\n while (x)\n {\n ret += x & 1;\n x >>= 1;\n }\n return ret;\n}\nint** subsets(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){\n *returnSize = 1 << numsSize;\n *returnColumnSizes = (int *)memset(malloc(sizeof(int) * *returnSize), 0, sizeof(int) * *returnSize);\n int i = 0, j = 0, **ret = (int **)malloc(sizeof(int *) * *returnSize), pos;\n for (i = 0; i < *returnSize; i++)\n {\n (*returnColumnSizes)[i] = count1(i);\n ret[i] = (int *)malloc(sizeof(int) * (*returnColumnSizes)[i]);\n pos = 0;\n for (j = 0; j < numsSize; j++)\n if (i & (1 << j))\n ret[i][pos++] = nums[j];\n }\n return ret;\n}\n
","tags":["\u4f4d\u8fd0\u7b97","\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/781/","title":"781. \u200b\u68ee\u6797\u200b\u4e2d\u200b\u7684\u200b\u5154\u5b50","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/781/#_1","title":"\u9898\u76ee","text":"\u200b\u68ee\u6797\u200b\u4e2d\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5154\u5b50\u200b\u90fd\u200b\u6709\u200b\u989c\u8272\u200b\u3002\u200b\u5176\u4e2d\u200b\u4e00\u4e9b\u200b\u5154\u5b50\u200b\uff08\u200b\u53ef\u80fd\u200b\u662f\u200b\u5168\u90e8\u200b\uff09\u200b\u544a\u8bc9\u200b\u4f60\u200b\u8fd8\u6709\u200b\u591a\u5c11\u200b\u5176\u4ed6\u200b\u7684\u200b\u5154\u5b50\u200b\u548c\u200b\u81ea\u5df1\u200b\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u989c\u8272\u200b\u3002\u200b\u6211\u4eec\u200b\u5c06\u200b\u8fd9\u4e9b\u200b\u56de\u7b54\u200b\u653e\u5728\u200b\u00a0answers
\u00a0\u200b\u6570\u7ec4\u200b\u91cc\u200b\u3002
\u200b\u8fd4\u56de\u200b\u68ee\u6797\u200b\u4e2d\u200b\u5154\u5b50\u200b\u7684\u200b\u6700\u5c11\u200b\u6570\u91cf\u200b\u3002
\u200b\u793a\u4f8b\u200b:
\u200b\u8f93\u5165\u200b: answers = [1, 1, 2]\n\u200b\u8f93\u51fa\u200b: 5\n\u200b\u89e3\u91ca\u200b:\n\u200b\u4e24\u53ea\u200b\u56de\u7b54\u200b\u4e86\u200b \"1\" \u200b\u7684\u200b\u5154\u5b50\u200b\u53ef\u80fd\u200b\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u989c\u8272\u200b\uff0c\u200b\u8bbe\u200b\u4e3a\u200b\u7ea2\u8272\u200b\u3002\n\u200b\u4e4b\u540e\u200b\u56de\u7b54\u200b\u4e86\u200b \"2\" \u200b\u7684\u200b\u5154\u5b50\u200b\u4e0d\u4f1a\u200b\u662f\u200b\u7ea2\u8272\u200b\uff0c\u200b\u5426\u5219\u200b\u4ed6\u4eec\u200b\u7684\u200b\u56de\u7b54\u200b\u4f1a\u200b\u76f8\u4e92\u200b\u77db\u76fe\u200b\u3002\n\u200b\u8bbe\u200b\u56de\u7b54\u200b\u4e86\u200b \"2\" \u200b\u7684\u200b\u5154\u5b50\u200b\u4e3a\u200b\u84dd\u8272\u200b\u3002\n\u200b\u6b64\u5916\u200b\uff0c\u200b\u68ee\u6797\u200b\u4e2d\u200b\u8fd8\u200b\u5e94\u6709\u200b\u53e6\u5916\u200b 2 \u200b\u53ea\u200b\u84dd\u8272\u200b\u5154\u5b50\u200b\u7684\u200b\u56de\u7b54\u200b\u6ca1\u6709\u200b\u5305\u542b\u200b\u5728\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u3002\n\u200b\u56e0\u6b64\u200b\u68ee\u6797\u200b\u4e2d\u200b\u5154\u5b50\u200b\u7684\u200b\u6700\u5c11\u200b\u6570\u91cf\u200b\u662f\u200b 5: 3 \u200b\u53ea\u200b\u56de\u7b54\u200b\u7684\u200b\u548c\u200b 2 \u200b\u53ea\u200b\u6ca1\u6709\u200b\u56de\u7b54\u200b\u7684\u200b\u3002\n\n\u200b\u8f93\u5165\u200b: answers = [10, 10, 10]\n\u200b\u8f93\u51fa\u200b: 11\n\n\u200b\u8f93\u5165\u200b: answers = []\n\u200b\u8f93\u51fa\u200b: 0\n
\u200b\u8bf4\u660e\u200b:
answers
\u00a0\u200b\u7684\u200b\u957f\u5ea6\u200b\u6700\u5927\u200b\u4e3a\u200b1000
\u3002 answers[i]
\u00a0\u200b\u662f\u200b\u5728\u200b\u00a0[0, 999]
\u00a0\u200b\u8303\u56f4\u200b\u5185\u200b\u7684\u200b\u6574\u6570\u200b\u3002
Reference
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/781/#_2","title":"\u9898\u89e3","text":"\u200b\u5154\u5b50\u200b\u7684\u200b\u5206\u7c7b\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u60c5\u51b5\u200b\uff0c\u200b\u8bbe\u200b\u7b2c\u200b\\(i\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u7684\u200b\u62a5\u6570\u200b\u4e3a\u200b\\(a_i\\)\uff0c\u200b\u5219\u200b\uff1a
- \u200b\u82e5\u200b\\(a_i \\not = a_j\\)\uff0c\u200b\u5219\u200b\u7b2c\u200b\\(i\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u4e0e\u200b\u7b2c\u200b\\(j\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u5fc5\u7136\u200b\u4e0d\u200b\u5c5e\u4e8e\u200b\u4e00\u7c7b\u200b
- \u200b\u82e5\u200b\\(a_i = a_j\\)\uff0c\u200b\u5219\u200b\u7b2c\u200b\\(i\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u4e0e\u200b\u7b2c\u200b\\(j\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u53ef\u80fd\u200b\u5c5e\u4e8e\u200b\u4e00\u7c7b\u200b\uff0c
- \u200b\u7b2c\u200b\\(i\\)\u200b\u53ea\u200b\u5154\u5b50\u200b\u6240\u5c5e\u200b\u7684\u200b\u7c7b\u200b\u4e2d\u200b\u6700\u200b\u591a\u200b\u6709\u200b\\(a_i + 1\\)\u200b\u53ea\u200b\u5154\u5b50\u200b
\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5f97\u51fa\u200b\u7b97\u6cd5\u200b\uff1a\u200b\u7edf\u8ba1\u200b\u76f8\u540c\u200b\u6570\u5b57\u200b\\(a_i\\)\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b\\(b_j\\)\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u6570\u5b57\u200b\uff0c\u200b\u4e0e\u200b\u4e4b\u200b\u5bf9\u5e94\u200b\u7684\u200b\u6700\u5c11\u200b\u7684\u200b\u5154\u5b50\u200b\u6570\u91cf\u200b\u4e3a\u200b\\(b'_j\\)\uff0c\u200b\u5219\u200b\\(b'_j\\)\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\uff1a
- \\(b'_j = k \\times (a_i + 1), k\\in \\N\\)
- \\(b'_j \\geq b_j\\)
- \\(b'_j - (a_i + 1) < b_j\\)
\u200b\u5373\u200b\\(b'_j = \\left\\lceil\\frac{b_j}{a_i + 1}\\right\\rceil\\times (a_i + 1)\\)
int numRabbits(int* answers, int answersSize){\n int hash[1000] = {0}, i = 0, ret = 0;\n for (i = 0; i < answersSize; i++)\n hash[answers[i]]++;\n for (i = 0; i < 1000; i++)\n ret += (hash[i] + i) / (i + 1) * (i + 1);\n return ret;\n}\n
Python\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5185\u7f6e\u200b\u5e93\u200bcollections
\u200b\u4e2d\u200b\u7684\u200bCounter
\u200b\u7c7b\u200b\u7edf\u8ba1\u6570\u5b57\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\uff1a
import collections\n\nclass Solution:\n def numRabbits(self, answers: List[int]) -> int:\n return sum(map(\n lambda args: sum(args) // (args[0] + 1) * (args[0] + 1)\n collections.Counter(answers).items()\n ))\n
","tags":["\u54c8\u5e0c\u8868","\u6570\u5b66"]},{"location":"coding/leetcode/79/","title":"79. \u200b\u5355\u8bcd\u200b\u641c\u7d22","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/79/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u00a0m x n
\u200b\u4e8c\u7ef4\u200b\u5b57\u7b26\u200b\u7f51\u683c\u200b\u00a0board
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u5355\u8bcd\u200b\u00a0word
\u3002\u200b\u5982\u679c\u200b\u00a0word
\u200b\u5b58\u5728\u200b\u4e8e\u200b\u7f51\u683c\u200b\u4e2d\u200b\uff0c\u200b\u8fd4\u56de\u200b true
\uff1b\u200b\u5426\u5219\u200b\uff0c\u200b\u8fd4\u56de\u200b false
\u3002
\u200b\u5355\u8bcd\u200b\u5fc5\u987b\u200b\u6309\u7167\u200b\u5b57\u6bcd\u200b\u987a\u5e8f\u200b\uff0c\u200b\u901a\u8fc7\u200b\u76f8\u90bb\u200b\u7684\u200b\u5355\u5143\u683c\u200b\u5185\u200b\u7684\u200b\u5b57\u6bcd\u200b\u6784\u6210\u200b\uff0c\u200b\u5176\u4e2d\u200b\u201c\u200b\u76f8\u90bb\u200b\u201d\u200b\u5355\u5143\u683c\u200b\u662f\u200b\u90a3\u4e9b\u200b\u6c34\u5e73\u200b\u76f8\u90bb\u200b\u6216\u200b\u5782\u76f4\u200b\u76f8\u90bb\u200b\u7684\u200b\u5355\u5143\u683c\u200b\u3002\u200b\u540c\u4e00\u4e2a\u200b\u5355\u5143\u683c\u200b\u5185\u200b\u7684\u200b\u5b57\u6bcd\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u88ab\u200b\u91cd\u590d\u4f7f\u7528\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = [[\"A\",\"B\",\"C\",\"E\"],[\"S\",\"F\",\"C\",\"S\"],[\"A\",\"D\",\"E\",\"E\"]], word = \"ABCCED\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = [[\"A\",\"B\",\"C\",\"E\"],[\"S\",\"F\",\"C\",\"S\"],[\"A\",\"D\",\"E\",\"E\"]], word = \"SEE\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1aboard = [[\"A\",\"B\",\"C\",\"E\"],[\"S\",\"F\",\"C\",\"S\"],[\"A\",\"D\",\"E\",\"E\"]], word = \"ABCB\"\n\u200b\u8f93\u51fa\u200b\uff1afalse\n
\u200b\u63d0\u793a\u200b\uff1a
m == board.length
n = board[i].length
1 <= m, n <= 6
1 <= word.length <= 15
board
\u200b\u548c\u200b word
\u200b\u4ec5\u200b\u7531\u200b\u5927\u5c0f\u5199\u200b\u82f1\u6587\u5b57\u6bcd\u200b\u7ec4\u6210\u200b
\u200b\u8fdb\u9636\u200b\uff1a\u200b\u4f60\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u641c\u7d22\u200b\u526a\u679d\u200b\u7684\u200b\u6280\u672f\u200b\u6765\u200b\u4f18\u5316\u200b\u89e3\u51b3\u65b9\u6848\u200b\uff0c\u200b\u4f7f\u200b\u5176\u200b\u5728\u200b board
\u200b\u66f4\u5927\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u53ef\u4ee5\u200b\u66f4\u200b\u5feb\u200b\u89e3\u51b3\u95ee\u9898\u200b\uff1f
Reference
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/79/#_2","title":"\u9898\u89e3","text":"\u200b\u4f7f\u7528\u200b\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5728\u200b\u4e8c\u7ef4\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5bfb\u627e\u200b\u5355\u8bcd\u200b\u7b2c\u4e00\u4e2a\u200b\u5b57\u6bcd\u200b\u51fa\u73b0\u200b\u7684\u200b\u4f4d\u7f6e\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u51fa\u73b0\u200b\u4f4d\u7f6e\u200b\uff1a
- \u200b\u5c06\u200b\u5f53\u524d\u200b\u4f4d\u7f6e\u200b\u6807\u5fd7\u200b\u4e3a\u200b\u7ecf\u5386\u200b\u8fc7\u200b
- \u200b\u5bfb\u627e\u200b\u5f53\u524d\u200b\u4f4d\u7f6e\u200b\u9644\u8fd1\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u5355\u5143\u683c\u200b
- \u200b\u5355\u5143\u683c\u200b\u4e2d\u200b\u7684\u200b\u5b57\u6bcd\u200b\u7b49\u4e8e\u200b\u5355\u8bcd\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5b57\u6bcd\u200b
- \u200b\u5355\u5143\u683c\u200b\u672a\u200b\u88ab\u200b\u904d\u5386\u200b\u8fc7\u200b
- \u200b\u5982\u679c\u200b\u627e\u200b\u4e0d\u5230\u200b\u5355\u5143\u683c\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u4e8c\u7ef4\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u65e0\u6cd5\u200b\u627e\u5230\u200b\u76ee\u6807\u200b\u5355\u8bcd\u200b
- \u200b\u5982\u679c\u200b\u627e\u5230\u200b\u4e00\u4e2a\u200b\u6216\u200b\u591a\u4e2a\u200b\u5355\u5143\u683c\u200b\uff0c\u200b\u5219\u200b\u524d\u8fdb\u200b\u5230\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5355\u5143\u683c\u200b\u7ee7\u7eed\u200b\u8fdb\u884c\u200b\u5339\u914d\u200b
- \u200b\u5982\u679c\u200b\u5355\u8bcd\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5b57\u6bcd\u200b\u6210\u529f\u200b\u5339\u914d\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u5339\u914d\u200b\u6210\u529f\u200b
bool dfs(char **board, int boardSize, int* boardColSize, char *word, int posX, int posY, int **map)\n{\n if (*word == 0)\n return true;\n bool ret = false;\n if (posX > 0 && board[posX - 1][posY] == *word && map[posX - 1][posY] == 0)\n {\n map[posX - 1][posY] = 1;\n ret = ret || dfs(board, boardSize, boardColSize, word + 1, posX - 1, posY, map);\n map[posX - 1][posY] = 0;\n }\n if (posX < boardSize - 1 && board[posX + 1][posY] == *word && map[posX + 1][posY] == 0)\n {\n map[posX + 1][posY] = 1;\n ret = ret || dfs(board, boardSize, boardColSize, word + 1, posX + 1, posY, map);\n map[posX + 1][posY] = 0;\n }\n if (posY > 0 && board[posX][posY - 1] == *word && map[posX][posY - 1] == 0)\n {\n map[posX][posY - 1] = 1;\n ret = ret || dfs(board, boardSize, boardColSize, word + 1, posX, posY - 1, map);\n map[posX][posY - 1] = 0;\n }\n if (posY < boardColSize[0] - 1 && board[posX][posY + 1] == *word && map[posX][posY + 1] == 0)\n {\n map[posX][posY + 1] = 1;\n ret = ret || dfs(board, boardSize, boardColSize, word + 1, posX, posY + 1, map);\n map[posX][posY + 1] = 0;\n }\n return ret;\n}\nbool exist(char** board, int boardSize, int* boardColSize, char * word){\n bool ret = false;\n int i = 0, j = 0, **map = (int **)malloc(sizeof(int *) * boardSize);\n for (i = 0; i < boardSize; i++)\n map[i] = (int *)memset(malloc(sizeof(int) * boardColSize[i]), 0, sizeof(int) * boardColSize[i]);\n for (i = 0; i < boardSize && !ret; i++)\n {\n for (j = 0; j < boardColSize[0] && !ret; j++)\n {\n if (board[i][j] == *word)\n {\n map[i][j] = 1;\n ret = ret || dfs(board, boardSize, boardColSize, word + 1, i, j, map);\n map[i][j] = 0;\n }\n }\n }\n return ret;\n}\n
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/8/","title":"8. \u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u6574\u6570\u200b (atoi)","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/8/#_1","title":"\u9898\u76ee","text":"\u200b\u8bf7\u200b\u4f60\u200b\u6765\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200batoi
\u200b\u51fd\u6570\u200b\uff0c\u200b\u4f7f\u200b\u5176\u80fd\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u6210\u200b\u6574\u6570\u200b\u3002
\u200b\u9996\u5148\u200b\uff0c\u200b\u8be5\u200b\u51fd\u6570\u200b\u4f1a\u200b\u6839\u636e\u200b\u9700\u8981\u200b\u4e22\u5f03\u200b\u65e0\u7528\u200b\u7684\u200b\u5f00\u5934\u200b\u7a7a\u683c\u200b\u5b57\u7b26\u200b\uff0c\u200b\u76f4\u5230\u200b\u5bfb\u627e\u200b\u5230\u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u683c\u200b\u7684\u200b\u5b57\u7b26\u200b\u4e3a\u6b62\u200b\u3002\u200b\u63a5\u4e0b\u6765\u200b\u7684\u200b\u8f6c\u5316\u200b\u89c4\u5219\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u5982\u679c\u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u5b57\u7b26\u200b\u4e3a\u200b\u6b63\u200b\u6216\u8005\u200b\u8d1f\u53f7\u200b\u65f6\u200b\uff0c\u200b\u5219\u200b\u5c06\u200b\u8be5\u200b\u7b26\u53f7\u200b\u4e0e\u200b\u4e4b\u200b\u540e\u9762\u200b\u5c3d\u53ef\u80fd\u200b\u591a\u200b\u7684\u200b\u8fde\u7eed\u200b\u6570\u5b57\u200b\u5b57\u7b26\u200b\u7ec4\u5408\u200b\u8d77\u6765\u200b\uff0c\u200b\u5f62\u6210\u200b\u4e00\u4e2a\u200b\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\u3002
- \u200b\u5047\u5982\u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u5b57\u7b26\u200b\u662f\u200b\u6570\u5b57\u200b\uff0c\u200b\u5219\u200b\u76f4\u63a5\u200b\u5c06\u200b\u5176\u200b\u4e0e\u200b\u4e4b\u540e\u200b\u8fde\u7eed\u200b\u7684\u200b\u6570\u5b57\u200b\u5b57\u7b26\u200b\u7ec4\u5408\u200b\u8d77\u6765\u200b\uff0c\u200b\u5f62\u6210\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u3002
- \u200b\u8be5\u200b\u5b57\u7b26\u4e32\u200b\u5728\u200b\u6709\u6548\u200b\u7684\u200b\u6574\u6570\u200b\u90e8\u5206\u200b\u4e4b\u540e\u200b\u4e5f\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u5b58\u5728\u200b\u591a\u4f59\u200b\u7684\u200b\u5b57\u7b26\u200b\uff0c\u200b\u90a3\u4e48\u200b\u8fd9\u4e9b\u200b\u5b57\u7b26\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u5ffd\u7565\u200b\uff0c\u200b\u5b83\u4eec\u200b\u5bf9\u200b\u51fd\u6570\u200b\u4e0d\u200b\u5e94\u8be5\u200b\u9020\u6210\u200b\u5f71\u54cd\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u5047\u5982\u200b\u8be5\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u683c\u200b\u5b57\u7b26\u200b\u4e0d\u662f\u200b\u4e00\u4e2a\u200b\u6709\u6548\u200b\u6574\u6570\u200b\u5b57\u7b26\u200b\u3001\u200b\u5b57\u7b26\u4e32\u200b\u4e3a\u7a7a\u200b\u6216\u200b\u5b57\u7b26\u4e32\u200b\u4ec5\u200b\u5305\u542b\u200b\u7a7a\u767d\u200b\u5b57\u7b26\u200b\u65f6\u200b\uff0c\u200b\u5219\u200b\u4f60\u200b\u7684\u200b\u51fd\u6570\u200b\u4e0d\u200b\u9700\u8981\u200b\u8fdb\u884c\u200b\u8f6c\u6362\u200b\uff0c\u200b\u5373\u200b\u65e0\u6cd5\u200b\u8fdb\u884c\u200b\u6709\u6548\u200b\u8f6c\u6362\u200b\u3002
\u200b\u5728\u200b\u4efb\u4f55\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u82e5\u200b\u51fd\u6570\u200b\u4e0d\u80fd\u200b\u8fdb\u884c\u200b\u6709\u6548\u200b\u7684\u200b\u8f6c\u6362\u200b\u65f6\u200b\uff0c\u200b\u8bf7\u200b\u8fd4\u56de\u200b 0 \u3002
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u672c\u9898\u200b\u4e2d\u200b\u7684\u200b\u7a7a\u767d\u200b\u5b57\u7b26\u200b\u53ea\u200b\u5305\u62ec\u200b\u7a7a\u683c\u200b\u5b57\u7b26\u200b
' '
\u3002 - \u200b\u5047\u8bbe\u200b\u6211\u4eec\u200b\u7684\u200b\u73af\u5883\u200b\u53ea\u80fd\u200b\u5b58\u50a8\u200b 32 \u200b\u4f4d\u200b\u5927\u5c0f\u200b\u7684\u200b\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\uff0c\u200b\u90a3\u4e48\u200b\u5176\u200b\u6570\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\([\u22122^{31},\u00a0 2^{31}\u00a0\u2212 1]\\)\u3002\u200b\u5982\u679c\u200b\u6570\u503c\u200b\u8d85\u8fc7\u200b\u8fd9\u4e2a\u200b\u8303\u56f4\u200b\uff0c\u200b\u8bf7\u200b\u8fd4\u56de\u200b
INT_MAX
(\\(2^{31}\u00a0\u2212 1\\))\u200b\u6216\u200bINT_MIN
(\\(\u22122^{31}\\)) \u3002 \u00a0
\u200b\u793a\u4f8b\u200b\u00a01:
\u200b\u8f93\u5165\u200b: \"42\"\n\u200b\u8f93\u51fa\u200b: 42\n
\u200b\u793a\u4f8b\u200b\u00a02:
\u200b\u8f93\u5165\u200b: \" -42\"\n\u200b\u8f93\u51fa\u200b: -42\n\u200b\u89e3\u91ca\u200b: \u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u767d\u200b\u5b57\u7b26\u200b\u4e3a\u200b '-', \u200b\u5b83\u200b\u662f\u200b\u4e00\u4e2a\u200b\u8d1f\u53f7\u200b\u3002\n\u00a0 \u200b\u6211\u4eec\u200b\u5c3d\u53ef\u80fd\u200b\u5c06\u200b\u8d1f\u53f7\u200b\u4e0e\u200b\u540e\u9762\u200b\u6240\u6709\u200b\u8fde\u7eed\u200b\u51fa\u73b0\u200b\u7684\u200b\u6570\u5b57\u200b\u7ec4\u5408\u200b\u8d77\u6765\u200b\uff0c\u200b\u6700\u540e\u200b\u5f97\u5230\u200b -42 \u3002\n
\u200b\u793a\u4f8b\u200b\u00a03:
\u200b\u8f93\u5165\u200b: \"4193 with words\"\n\u200b\u8f93\u51fa\u200b: 4193\n\u200b\u89e3\u91ca\u200b: \u200b\u8f6c\u6362\u200b\u622a\u6b62\u200b\u4e8e\u200b\u6570\u5b57\u200b '3' \uff0c\u200b\u56e0\u4e3a\u200b\u5b83\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u4e0d\u200b\u4e3a\u200b\u6570\u5b57\u200b\u3002\n
\u200b\u793a\u4f8b\u200b\u00a04:
\u200b\u8f93\u5165\u200b: \"words and 987\"\n\u200b\u8f93\u51fa\u200b: 0\n\u200b\u89e3\u91ca\u200b: \u200b\u7b2c\u4e00\u4e2a\u200b\u975e\u200b\u7a7a\u5b57\u7b26\u200b\u662f\u200b 'w', \u200b\u4f46\u200b\u5b83\u200b\u4e0d\u662f\u200b\u6570\u5b57\u200b\u6216\u200b\u6b63\u200b\u3001\u200b\u8d1f\u53f7\u200b\u3002\n \u200b\u56e0\u6b64\u200b\u65e0\u6cd5\u200b\u6267\u884c\u200b\u6709\u6548\u200b\u7684\u200b\u8f6c\u6362\u200b\u3002\n
\u200b\u793a\u4f8b\u200b\u00a05:
\u200b\u8f93\u5165\u200b: \"-91283472332\"\n\u200b\u8f93\u51fa\u200b: -2147483648\n\u200b\u89e3\u91ca\u200b: \u200b\u6570\u5b57\u200b \"-91283472332\" \u200b\u8d85\u8fc7\u200b 32 \u200b\u4f4d\u6709\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\u8303\u56f4\u200b\u3002 \n\u00a0 \u200b\u56e0\u6b64\u200b\u8fd4\u56de\u200b INT_MIN (\u2212231) \u3002\n
Reference
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/8/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a
- \u200b\u6ce8\u610f\u200b\u4e00\u4e2a\u200b\u6709\u6548\u200b\u7684\u200b\u6570\u5b57\u200b\u5b57\u7b26\u4e32\u200b\u53ef\u4ee5\u200b\u4ee5\u200b
0-9
\u3001'-'
\u3001'+'
\u200b\u548c\u200b\u7a7a\u683c\u200b' '
\u200b\u5f00\u5934\u200b\u3002 - \u200b\u4e3a\u4e86\u200b\u907f\u514d\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u5e94\u5f53\u200b\u4f7f\u7528\u200b
long
\u200b\u7c7b\u578b\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
int myAtoi(char * str){\n int flag = 0;\n char *cur = str;\n while (*cur && *cur == ' ')\n cur++;\n if (*cur == '-' || *cur == '+')\n flag = *(cur++) - '+';\n if (*cur < '0' || *cur > '9')\n return 0;\n long ret = 0;\n while(*cur >= '0' && *cur <= '9')\n {\n ret *= 10;\n ret += *cur - '0';\n cur++;\n if (ret >= -(long)INT_MIN || (ret == (long)INT_MAX && !flag))\n return flag ? INT_MIN : INT_MAX;\n }\n return flag ? -ret : ret;\n}\n
","tags":["\u6570\u5b66","\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/87/","title":"87. \u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u56f0\u96be\u200b
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/87/#_1","title":"\u9898\u76ee","text":"\u200b\u4f7f\u7528\u200b\u4e0b\u9762\u200b\u63cf\u8ff0\u200b\u7684\u200b\u7b97\u6cd5\u200b\u53ef\u4ee5\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b s
\u200b\u5f97\u5230\u200b\u5b57\u7b26\u4e32\u200b t
\uff1a
- \u200b\u5982\u679c\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e3a\u200b 1 \uff0c\u200b\u7b97\u6cd5\u200b\u505c\u6b62\u200b
- \u200b\u5982\u679c\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u957f\u5ea6\u200b > 1 \uff0c\u200b\u6267\u884c\u200b\u4e0b\u8ff0\u200b\u6b65\u9aa4\u200b\uff1a
- \u200b\u5728\u200b\u4e00\u4e2a\u200b\u968f\u673a\u200b\u4e0b\u6807\u200b\u5904\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u5206\u5272\u200b\u6210\u200b\u4e24\u4e2a\u200b\u975e\u7a7a\u200b\u7684\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u3002\u200b\u5373\u200b\uff0c\u200b\u5982\u679c\u200b\u5df2\u77e5\u200b\u5b57\u7b26\u4e32\u200b
s
\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5176\u200b\u5206\u6210\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b x
\u200b\u548c\u200b y
\uff0c\u200b\u4e14\u200b\u6ee1\u8db3\u200b s = x + y
\u3002 - \u200b\u968f\u673a\u200b \u200b\u51b3\u5b9a\u200b\u662f\u200b\u8981\u200b\u300c\u200b\u4ea4\u6362\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u300d\u200b\u8fd8\u662f\u200b\u8981\u200b\u300c\u200b\u4fdd\u6301\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u987a\u5e8f\u200b\u4e0d\u53d8\u200b\u300d\u3002\u200b\u5373\u200b\uff0c\u200b\u5728\u200b\u6267\u884c\u200b\u8fd9\u4e00\u200b\u6b65\u9aa4\u200b\u4e4b\u540e\u200b\uff0c
s
\u200b\u53ef\u80fd\u200b\u662f\u200b s = x + y
\u200b\u6216\u8005\u200b s = y + x
\u3002 - \u200b\u5728\u200b
x
\u200b\u548c\u200b y
\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u4e0a\u200b\u7ee7\u7eed\u200b\u4ece\u200b\u6b65\u9aa4\u200b 1 \u200b\u5f00\u59cb\u200b\u9012\u5f52\u200b\u6267\u884c\u200b\u6b64\u200b\u7b97\u6cd5\u200b\u3002
\u200b\u7ed9\u200b\u4f60\u200b\u4e24\u4e2a\u200b \u200b\u957f\u5ea6\u200b\u76f8\u7b49\u200b \u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b s1
\u200b\u548c\u200b\u00a0s2
\uff0c\u200b\u5224\u65ad\u200b\u00a0s2
\u00a0\u200b\u662f\u5426\u662f\u200b\u00a0s1
\u00a0\u200b\u7684\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\u3002\u200b\u5982\u679c\u200b\u662f\u200b\uff0c\u200b\u8fd4\u56de\u200b true
\uff1b\u200b\u5426\u5219\u200b\uff0c\u200b\u8fd4\u56de\u200b false
\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1as1 = \"great\", s2 = \"rgeat\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n\u200b\u89e3\u91ca\u200b\uff1as1 \u200b\u4e0a\u200b\u53ef\u80fd\u200b\u53d1\u751f\u200b\u7684\u200b\u4e00\u79cd\u200b\u60c5\u5f62\u200b\u662f\u200b\uff1a\n\"great\" --> \"gr/eat\" // \u200b\u5728\u200b\u4e00\u4e2a\u200b\u968f\u673a\u200b\u4e0b\u6807\u200b\u5904\u200b\u5206\u5272\u200b\u5f97\u5230\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\n\"gr/eat\" --> \"gr/eat\" // \u200b\u968f\u673a\u200b\u51b3\u5b9a\u200b\uff1a\u300c\u200b\u4fdd\u6301\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u987a\u5e8f\u200b\u4e0d\u53d8\u200b\u300d\n\"gr/eat\" --> \"g/r / e/at\" // \u200b\u5728\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u4e0a\u200b\u9012\u5f52\u200b\u6267\u884c\u200b\u6b64\u200b\u7b97\u6cd5\u200b\u3002\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u5206\u522b\u200b\u5728\u200b\u968f\u673a\u200b\u4e0b\u6807\u200b\u5904\u200b\u8fdb\u884c\u200b\u4e00\u8f6e\u200b\u5206\u5272\u200b\n\"g/r / e/at\" --> \"r/g / e/at\" // \u200b\u968f\u673a\u200b\u51b3\u5b9a\u200b\uff1a\u200b\u7b2c\u4e00\u7ec4\u200b\u300c\u200b\u4ea4\u6362\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u300d\uff0c\u200b\u7b2c\u4e8c\u7ec4\u200b\u300c\u200b\u4fdd\u6301\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u987a\u5e8f\u200b\u4e0d\u53d8\u200b\u300d\n\"r/g / e/at\" --> \"r/g / e/ a/t\" // \u200b\u7ee7\u7eed\u200b\u9012\u5f52\u200b\u6267\u884c\u200b\u6b64\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u5c06\u200b \"at\" \u200b\u5206\u5272\u200b\u5f97\u5230\u200b \"a/t\"\n\"r/g / e/ a/t\" --> \"r/g / e/ a/t\" // \u200b\u968f\u673a\u200b\u51b3\u5b9a\u200b\uff1a\u300c\u200b\u4fdd\u6301\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u987a\u5e8f\u200b\u4e0d\u53d8\u200b\u300d\n\u200b\u7b97\u6cd5\u200b\u7ec8\u6b62\u200b\uff0c\u200b\u7ed3\u679c\u200b\u5b57\u7b26\u4e32\u200b\u548c\u200b s2 \u200b\u76f8\u540c\u200b\uff0c\u200b\u90fd\u200b\u662f\u200b \"rgeat\"\n\u200b\u8fd9\u662f\u200b\u4e00\u79cd\u200b\u80fd\u591f\u200b\u6270\u4e71\u200b s1 \u200b\u5f97\u5230\u200b s2 \u200b\u7684\u200b\u60c5\u5f62\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8ba4\u4e3a\u200b s2 \u200b\u662f\u200b s1 \u200b\u7684\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u8fd4\u56de\u200b true\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1as1 = \"abcde\", s2 = \"caebd\"\n\u200b\u8f93\u51fa\u200b\uff1afalse\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1as1 = \"a\", s2 = \"a\"\n\u200b\u8f93\u51fa\u200b\uff1atrue\n
\u200b\u63d0\u793a\u200b\uff1a
s1.length == s2.length
1 <= s1.length <= 30
s1
\u200b\u548c\u200b s2
\u200b\u7531\u200b\u5c0f\u5199\u200b\u82f1\u6587\u5b57\u6bcd\u200b\u7ec4\u6210\u200b
Reference
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/87/#_2","title":"\u9898\u89e3","text":"\u200b\u8003\u8651\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\\(s_1, s_2\\)\uff0c\u200b\u51fd\u6570\u200b\\(f(x, y)\\)\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
\\[ f(x, y) = \\left\\{ \\begin{aligned} & T & y\\mathrm{\u200b\u662f\u200b}x\\mathrm{\u200b\u7684\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b} \\\\ & F & y\\mathrm{\u200b\u4e0d\u662f\u200b}x\\mathrm{\u200b\u7684\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b} \\end{aligned} \\right . \\] \u200b\u5219\u200b\u5bf9\u4e8e\u200b\u51fd\u6570\u200b\\(f(x, y)\\)\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \\(f(s_1, s_2) = f(s_2, s_1)\\)
- \\(f(s_1, s_1) = T\\)
- \\(f(s_1, s_2) \\land f(s_2, s_3)\\rightarrow f(s_1, s_3)\\)
\u200b\u5373\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\u5173\u7cfb\u200b\u662f\u200b\u7b49\u4ef7\u5173\u7cfb\u200b\u3002
\u200b\u5b9a\u4e49\u200b\u53e6\u200b\u4e00\u79cd\u200b\u7b49\u4ef7\u5173\u7cfb\u200b\\(g(x, y)\\)\uff1a
\\[ g(x, y) = \\left\\{ \\begin{aligned} & T & x, y \\mathrm{\u200b\u5404\u200b\u5b57\u6bcd\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u76f8\u540c\u200b} \\\\ & F & x, y \\mathrm{\u200b\u5404\u200b\u5b57\u6bcd\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u4e0d\u540c\u200b} \\end{aligned} \\right . \\] \u200b\u6839\u636e\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\u64cd\u4f5c\u200b \u200b\u4e0d\u4f1a\u200b \u200b\u6539\u53d8\u200b
- \u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u957f\u5ea6\u200b
- \u200b\u5b57\u7b26\u4e32\u200b\u5185\u200b\u5404\u200b\u5b57\u6bcd\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b
\u200b\u5982\u679c\u200b\\(s_1, s_2\\)\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e0d\u200b\u5339\u914d\u200b\u6216\u200b\u5b57\u6bcd\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u4e0d\u200b\u5339\u914d\u200b\uff0c\\(f(s_1, s_2)\\)\u200b\u5373\u53ef\u200b\u63d0\u524d\u200b\u8fd4\u56de\u200b\\(F\\)\u3002
\u200b\u8003\u8651\u200b\u5206\u5272\u200b\u540e\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u5c06\u200b\\(s_1\\)\u200b\u5728\u200b\u4e0b\u6807\u200b\\(i\\)\u200b\u4e0e\u200b\u4e0b\u6807\u200b\\(i + 1\\)\u200b\u5904\u200b\u5206\u5272\u200b\u5f97\u5230\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u79f0\u4e3a\u200b \\(s_{1, i}, s'_{1, i}\\)\uff0c\\(s_{1, i}\\)\u200b\u4f4d\u4e8e\u200b\u5de6\u4fa7\u200b\uff0c\\(s'_{1, i}\\)\u200b\u4f4d\u4e8e\u200b\u53f3\u4fa7\u200b\u3002\u200b\u5bf9\u4e8e\u200b\\(s_2\\)\uff0c\u200b\u6709\u200b\u540c\u6837\u200b\u7684\u200b\u5206\u5272\u200b \u200b\u65b9\u6cd5\u200b\u5f97\u5230\u200b\\(s_{2, i}, s'_{2, i}\\)\u3002\u200b\u8bbe\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(s\\)\uff0c\u200b\u4ee4\u200b\\(-i\\)\u200b\u4e3a\u200b\u4ece\u200b\u5b57\u7b26\u4e32\u200b\u53f3\u4fa7\u200b\u5f00\u59cb\u200b\u7684\u200b\u4e0b\u6807\u200b\\(i\\)\u3002
\u200b\u6839\u636e\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u82e5\u4efb\u200b\u4e00\u7ec4\u200b\u5206\u5272\u200b\u540e\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u6ee1\u8db3\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5173\u7cfb\u200b\uff0c\u200b\u5219\u200b\u539f\u6765\u200b\u7684\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u6ee1\u8db3\u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5173\u7cfb\u200b \uff0c\u200b\u5e76\u4e14\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5173\u7cfb\u200b\u4e0e\u200b\u539f\u200b\u5b57\u7b26\u4e32\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5173\u7cfb\u200b\u65e0\u5173\u200b\uff0c\u200b\u4e0d\u4f1a\u200b\u76f8\u4e92\u5f71\u54cd\u200b\u3002\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u91c7\u7528\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\uff0c\u200b\u5c06\u200b\u539f\u200b \u200b\u95ee\u9898\u200b\u5206\u5272\u200b\u4e3a\u200b\u4e00\u7cfb\u5217\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5b50\u200b\u95ee\u9898\u200b\u3002
\u200b\u7531\u4e8e\u200b\\(f(s_1, s_2)\\)\u200b\u5b58\u5728\u200b\u5bf9\u79f0\u6027\u200b\uff0c\u200b\u4e0d\u59a8\u200b\u56fa\u5b9a\u200b\\(s_1\\)\u200b\u7684\u200b\u5206\u5272\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u8003\u8651\u200b\\(s_2\\)\u200b\u7684\u200b\u5206\u5272\u200b\u65b9\u5f0f\u200b\u3002\\(s_2\\)\u200b\u6709\u200b\u4e24\u79cd\u200b\u5206\u5272\u200b \u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5373\u200b\u201c\u200b\u4fdd\u6301\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u987a\u5e8f\u200b\u4e0d\u53d8\u200b\u201d\u200b\u6216\u200b\u201c\u200b\u4ea4\u6362\u200b\u4e24\u4e2a\u200b\u5b50\u200b\u5b57\u7b26\u4e32\u200b\u201d\u3002\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\u5982\u4e0b\u200b\u60c5\u51b5\u200b\uff1a
- \\(s_{1, i}\\)\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\\(s_{2, i}\\)\uff0c\\(s'_{1, i}\\)\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\\(s'_{2, i}\\)\u3002
- \\(s_{1, i}\\)\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\\(s'_{2, -i}\\)\uff0c\\(s'_{1, i}\\)\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\\(s_{2, -i}\\)\u3002
\u200b\u5219\u200b\\(f(s_1, s_2)\\)\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u65b9\u5f0f\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u8bbe\u200b\\(\\mathrm{len}(s_1) = \\mathrm{len}(s_2) = s\\)\u3002
\\[ f(s_1, s_2) = \\left\\{ \\begin{aligned} & F & \\lnot g(s_1, s_2) \\\\ & T & s\\leq 3 \\land g(s_1, s_2) \\\\ & \\left(\\bigvee_{i} f(s_{1, i}, s_{2, i})\\land f(s'_{1, i}, s'_{2, i})\\right) \\lor \\left(\\bigvee_{i} f(s_{1, i}, s'_{2, -i})\\land f(s'_{1, i}, s_{2, -i})\\right) & s > 3 \\land g(s_1, s_2)\\\\ \\end{aligned} \\right . \\] \u200b\u7531\u6b64\u200b\u5373\u53ef\u200b\u5f97\u51fa\u200b\u521d\u6b65\u200b\u7684\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u4f46\u200b\u591a\u6b21\u200b\u9012\u5f52\u200b\u4f1a\u200b\u4f7f\u5f97\u200b\u7b97\u6cd5\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e0a\u5347\u200b\uff0c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u6570\u7ec4\u200b\u4fdd\u5b58\u200b\u5b50\u200b\u95ee\u9898\u200b\u7684\u200b\u89e3\u200b\u3002\u200b\u5171\u6709\u200b \\(\\mathcal O(n^3)\\)\u200b\u89c4\u6a21\u200b\u7684\u200b\u5b50\u200b\u95ee\u9898\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u82b1\u8d39\u200b\\(\\mathcal O(n^3)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u590d\u6742\u5ea6\u200b\u4e0e\u200b\u7a7a\u95f4\u200b\u590d\u6742\u5ea6\u200b\u3002
inline int hash(char *s, int len)\n{\n int i, hashMap[26] = {0};\n unsigned long long ret = 0;\n for (i = 0; i < len; i++)\n hashMap[s[i] - 'a']++;\n for (i = 0; i < 26; i++)\n {\n ret *= 31;\n ret += hashMap[i] + 1;\n if (ret > INT_MAX)\n ret = ret & INT_MAX;\n }\n return (int)ret;\n}\n\nbool helper(char *s1, int offset1, char *s2, int offset2, int len, int ***dp)\n{\n if (dp[offset1][offset2][len - 1] >= 0)\n return dp[offset1][offset2][len - 1];\n else if (len < 4)\n {\n dp[offset1][offset2][len - 1] = hash(s1 + offset1, len) == hash(s2 + offset2, len);\n return dp[offset1][offset2][len - 1];\n }\n int flag = false, a, i;\n dp[offset1][offset2][len - 1] = 0;\n for (i = 1; i < len; i++)\n {\n a = hash(s1 + offset1, i);\n if (a == hash(s2 + offset2, i))\n flag = flag || (\n helper(s1, offset1, s2, offset2, i, dp) && \n helper(s1, offset1 + i, s2, offset2 + i, len - i, dp)\n );\n if (!flag && a == hash(s2 + offset2 + len - i, i))\n flag = flag || (\n helper(s1, offset1, s2, offset2 + len - i, i, dp) && \n helper(s1, offset1 + i, s2, offset2, len - i, dp)\n );\n if (flag)\n break;\n }\n dp[offset1][offset2][len - 1] = flag;\n return dp[offset1][offset2][len - 1];\n}\n\nbool isScramble(char * s1, char * s2){\n int len = strlen(s1), i, j,\n ***dp = (int ***)malloc(sizeof(int **) * len),\n **_dp = (int **)malloc(sizeof(int *) * len * len),\n *__dp = (int *)malloc(sizeof(int) * len * len * len);\n memset(__dp, 0xff, sizeof(int) * len * len * len);\n for (i = 0; i < len; i++)\n {\n dp[i] = _dp + i * len;\n for (j = 0; j < len; j++)\n dp[i][j] = __dp + i * len * len + j * len;\n }\n return helper(s1, 0, s2, 0, strlen(s1), dp);\n}\n
","tags":["\u5b57\u7b26\u4e32","\u52a8\u6001\u89c4\u5212"]},{"location":"coding/leetcode/88/","title":"88. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u6570\u7ec4","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/88/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b\u00a0nums1
\u200b\u548c\u200b nums2
\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u5c06\u200b nums2
\u200b\u5408\u5e76\u200b\u5230\u200b\u00a0nums1
\u00a0\u200b\u4e2d\u200b\uff0c\u200b\u4f7f\u200b nums1
\u200b\u6210\u4e3a\u200b\u4e00\u4e2a\u200b\u6709\u5e8f\u200b\u6570\u7ec4\u200b\u3002
\u200b\u8bf4\u660e\u200b:
- \u200b\u521d\u59cb\u5316\u200b\u00a0
nums1
\u200b\u548c\u200b nums2
\u200b\u7684\u200b\u5143\u7d20\u200b\u6570\u91cf\u200b\u5206\u522b\u200b\u4e3a\u200b\u00a0m
\u200b\u548c\u200b n
\u3002 - \u200b\u4f60\u200b\u53ef\u4ee5\u200b\u5047\u8bbe\u200b\u00a0
nums1
\u00a0\u200b\u6709\u200b\u8db3\u591f\u200b\u7684\u200b\u7a7a\u95f4\u200b\uff08\u200b\u7a7a\u95f4\u200b\u5927\u5c0f\u200b\u5927\u4e8e\u200b\u6216\u200b\u7b49\u4e8e\u200b\u00a0m + n
\uff09\u200b\u6765\u200b\u4fdd\u5b58\u200b nums2
\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u3002
\u200b\u793a\u4f8b\u200b\uff1a
\u200b\u8f93\u5165\u200b:\nnums1 = [1,2,3,0,0,0], m = 3\nnums2 = [2,5,6], n = 3\n\n\u200b\u8f93\u51fa\u200b:\u00a0[1,2,2,3,5,6]\n
Reference
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/88/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u76f4\u63a5\u200b\u5728\u200bnums1
\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u4e0a\u200b\u4ece\u200b\u540e\u200b\u5411\u524d\u200b\u539f\u4f4d\u200b\u5408\u5e76\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
#define MAX(x, y) (x > y ? x : y)\nvoid merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){\n int x = m - 1, y = n - 1;\n while(y >= 0 && x >= 0)\n {\n nums1[x + y + 1] = MAX(nums1[x], nums2[y]);\n if (nums1[x] > nums2[y])\n x--;\n else\n y--;\n }\n if (y >= 0)\n memcpy(nums1, nums2, sizeof(int) * (y + 1));\n}\n
","tags":["\u6570\u7ec4","\u53cc\u6307\u9488"]},{"location":"coding/leetcode/9/","title":"9. \u200b\u56de\u6587\u200b\u6570","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/9/#_1","title":"\u9898\u76ee","text":"\u200b\u5224\u65ad\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u662f\u5426\u662f\u200b\u56de\u6587\u200b\u6570\u200b\u3002\u200b\u56de\u6587\u200b\u6570\u662f\u200b\u6307\u6b63\u200b\u5e8f\u200b\uff08\u200b\u4ece\u200b\u5de6\u5411\u53f3\u200b\uff09\u200b\u548c\u200b\u5012\u5e8f\u200b\uff08\u200b\u4ece\u53f3\u200b\u5411\u200b\u5de6\u200b\uff09\u200b\u8bfb\u200b\u90fd\u200b\u662f\u200b\u4e00\u6837\u200b\u7684\u200b\u6574\u6570\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b: 121\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b: -121\n\u200b\u8f93\u51fa\u200b: false\n\u200b\u89e3\u91ca\u200b: \u200b\u4ece\u200b\u5de6\u5411\u53f3\u200b\u8bfb\u200b, \u200b\u4e3a\u200b -121 \u3002 \u200b\u4ece\u53f3\u200b\u5411\u200b\u5de6\u8bfb\u200b, \u200b\u4e3a\u200b 121- \u3002\u200b\u56e0\u6b64\u200b\u5b83\u200b\u4e0d\u662f\u200b\u4e00\u4e2a\u200b\u56de\u6587\u200b\u6570\u200b\u3002\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b: 10\n\u200b\u8f93\u51fa\u200b: false\n\u200b\u89e3\u91ca\u200b: \u200b\u4ece\u53f3\u200b\u5411\u200b\u5de6\u8bfb\u200b, \u200b\u4e3a\u200b 01 \u3002\u200b\u56e0\u6b64\u200b\u5b83\u200b\u4e0d\u662f\u200b\u4e00\u4e2a\u200b\u56de\u6587\u200b\u6570\u200b\u3002\n
\u200b\u8fdb\u9636\u200b\uff1a
\u200b\u4f60\u200b\u80fd\u200b\u4e0d\u200b\u5c06\u200b\u6574\u6570\u200b\u8f6c\u4e3a\u200b\u5b57\u7b26\u4e32\u200b\u6765\u200b\u89e3\u51b3\u200b\u8fd9\u4e2a\u200b\u95ee\u9898\u200b\u5417\u200b\uff1f
Reference
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/9/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a
- \u200b\u5c0f\u4e8e\u200b0\u200b\u7684\u200b\u6570\u200b\u5fc5\u7136\u200b\u4e0d\u662f\u200b\u56de\u6587\u200b\u6570\u200b\uff1b
- \u200b\u5bf9\u4e8e\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\uff0c\u200b\u53ea\u200b\u9700\u8981\u200b\u5224\u65ad\u200b\u6309\u4f4d\u200b\u53cd\u8f6c\u200b\u540e\u200b\u7684\u200b\u6570\u503c\u200b\u4e0e\u200b\u539f\u200b\u6570\u503c\u200b\u662f\u5426\u200b\u76f8\u7b49\u200b\u5373\u53ef\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
bool isPalindrome(int x){\n if (x < 0)\n return false;\n long transformed = 0, original = x;\n while (x)\n {\n transformed *= 10;\n transformed += x % 10;\n x /= 10;\n }\n return transformed == original;\n}\n
","tags":["\u6570\u5b66"]},{"location":"coding/leetcode/90/","title":"90. \u200b\u5b50\u96c6\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/90/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\u6570\u7ec4\u200b nums
\uff0c\u200b\u5176\u4e2d\u200b\u53ef\u80fd\u200b\u5305\u542b\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b\uff0c\u200b\u8bf7\u200b\u4f60\u200b\u8fd4\u56de\u200b\u8be5\u200b\u6570\u7ec4\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u5b50\u96c6\u200b\uff08\u200b\u5e42\u96c6\u200b\uff09\u3002
\u200b\u89e3\u96c6\u200b \u200b\u4e0d\u80fd\u200b \u200b\u5305\u542b\u200b\u91cd\u590d\u200b\u7684\u200b\u5b50\u96c6\u200b\u3002\u200b\u8fd4\u56de\u200b\u7684\u200b\u89e3\u200b\u96c6\u4e2d\u200b\uff0c\u200b\u5b50\u96c6\u200b\u53ef\u4ee5\u200b\u6309\u200b \u200b\u4efb\u610f\u200b\u987a\u5e8f\u200b \u200b\u6392\u5217\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [1,2,2]\n\u200b\u8f93\u51fa\u200b\uff1a[[],[1],[1,2],[1,2,2],[2],[2,2]]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1anums = [0]\n\u200b\u8f93\u51fa\u200b\uff1a[[],[0]]\n
\u200b\u63d0\u793a\u200b\uff1a
1 <= nums.length <= 10
-10 <= nums[i] <= 10
Reference
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/90/#_2","title":"\u9898\u89e3","text":"\u200b\u5148\u200b\u7edf\u8ba1\u200b\u96c6\u5408\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u7684\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\uff0c\u200b\u518d\u200b\u6839\u636e\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u8fdb\u884c\u200b\u56de\u6eaf\u200b\uff0c\u200b\u6700\u540e\u200b\u91cd\u65b0\u200b\u751f\u6210\u200b\u6bcf\u4e2a\u200b\u96c6\u5408\u200b\u3002
/**\n * Return an array of arrays of size *returnSize.\n * The sizes of the arrays are returned as *returnColumnSizes array.\n * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().\n */\nint *convert(int *count, int countLen, int *returnSize)\n{\n int i = 0, j = 0, k = 0;\n *returnSize = 0;\n for (i = 0; i < countLen; i++)\n (*returnSize) += count[i];\n int *ret = (int *)malloc(sizeof(int) * *returnSize);\n for (i = 0; i < countLen; i++)\n for (j = 0; j < count[i]; j++)\n ret[k++] = i - 10;\n return ret;\n}\n\nvoid dfs(int **ret, int *retSize, int *count, int *current, int currentPos, int maxPos, int *number)\n{\n if (currentPos == maxPos)\n {\n ret[*number] = convert(current, maxPos, retSize + *number);\n (*number)++;\n }\n else\n {\n if (count[currentPos] == 0)\n dfs(ret, retSize, count, current, currentPos + 1, maxPos, number);\n else\n {\n int i = 0;\n for (i = 0; i <= count[currentPos]; i++)\n {\n current[currentPos] = i;\n dfs(ret, retSize, count, current, currentPos + 1, maxPos, number);\n current[currentPos] = 0;\n }\n }\n }\n}\n\nint** subsetsWithDup(int* nums, int numsSize, int* returnSize, int** returnColumnSizes){\n int *count = (int *)malloc(sizeof(int) * 21), *buffer = (int *)malloc(sizeof(int) * 21),\n i = 0, **ret = NULL;\n memset(count, 0, sizeof(int) * 21);\n memset(buffer, 0, sizeof(int) * 21);\n *returnSize = 1;\n for (i = 0; i < numsSize; i++)\n count[nums[i] + 10]++;\n for (i = 0; i < 21; i++)\n *returnSize *= count[i] + 1;\n *returnColumnSizes = (int *)malloc(sizeof(int) * *returnSize);\n ret = (int **)malloc(sizeof(int *) * *returnSize);\n i = 0;\n dfs(ret, *returnColumnSizes, count, buffer, 0, 21, &i);\n return ret;\n}\n
","tags":["\u6570\u7ec4","\u56de\u6eaf\u7b97\u6cd5"]},{"location":"coding/leetcode/917/","title":"917. \u200b\u4ec5\u4ec5\u200b\u53cd\u8f6c\u200b\u5b57\u6bcd","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u7b80\u5355\u200b
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/917/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u00a0S
\uff0c\u200b\u8fd4\u56de\u200b\u00a0\u201c\u200b\u53cd\u8f6c\u200b\u540e\u200b\u7684\u200b\u201d\u00a0\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u5176\u4e2d\u200b\u4e0d\u662f\u200b\u5b57\u6bcd\u200b\u7684\u200b\u5b57\u7b26\u200b\u90fd\u200b\u4fdd\u7559\u200b\u5728\u200b\u539f\u5730\u200b\uff0c\u200b\u800c\u200b\u6240\u6709\u200b\u5b57\u6bcd\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u53d1\u751f\u200b\u53cd\u8f6c\u200b\u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1a\"ab-cd\"\n\u200b\u8f93\u51fa\u200b\uff1a\"dc-ba\"\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1a\"a-bC-dEf-ghIj\"\n\u200b\u8f93\u51fa\u200b\uff1a\"j-Ih-gfE-dCba\"\n
\u200b\u793a\u4f8b\u200b 3\uff1a
\u200b\u8f93\u5165\u200b\uff1a\"Test1ng-Leet=code-Q!\"\n\u200b\u8f93\u51fa\u200b\uff1a\"Qedo1ct-eeLg=ntse-T!\"\n
\u200b\u63d0\u793a\u200b\uff1a
S.length <= 100
33 <= S[i].ASCIIcode <= 122
S
\u200b\u4e2d\u200b\u4e0d\u200b\u5305\u542b\u200b\u00a0\\
or \"
Reference
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/917/#_2","title":"\u9898\u89e3","text":"\u200b\u548c\u200b\u53cd\u8f6c\u200b\u5b57\u7b26\u4e32\u200b\u4f7f\u7528\u200b\u76f8\u540c\u200b\u7684\u200b\u601d\u8def\u200b\uff0c\u200b\u53ea\u200b\u9700\u200b\u52a0\u4e0a\u200b\u5bf9\u200b\u5f53\u524d\u200b\u5b57\u7b26\u200b\u7684\u200b\u5224\u65ad\u200b\u5373\u53ef\u200b\u3002
bool isChar(char *s)\n{\n return (*s >= 'a' && *s <= 'z') || (*s >= 'A' && *s <= 'Z');\n}\nchar * reverseOnlyLetters(char * S) {\n int len = strlen(S);\n char *head = S, *tail = S + len - 1, temp;\n while (tail > head)\n {\n while (!isChar(head) && head < tail)\n head++;\n while (!isChar(tail) && head < tail)\n tail--;\n temp = *head;\n *head = *tail;\n *tail = temp;\n head++;\n tail--;\n }\n return S;\n}\n
","tags":["\u5b57\u7b26\u4e32"]},{"location":"coding/leetcode/92/","title":"92. \u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b II","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/92/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u200b\u4f60\u200b\u5355\u94fe\u200b\u8868\u200b\u7684\u200b\u5934\u200b\u8282\u70b9\u200b\u00a0head
\u200b\u548c\u200b\u4e24\u4e2a\u200b\u6574\u6570\u200b\u00a0left
\u200b\u548c\u200b right
\uff0c\u200b\u5176\u4e2d\u200b\u00a0left <= right
\u3002\u200b\u8bf7\u200b\u4f60\u200b\u53cd\u8f6c\u200b\u4ece\u200b\u4f4d\u7f6e\u200b left
\u200b\u5230\u200b\u4f4d\u7f6e\u200b right
\u200b\u7684\u200b\u94fe\u8868\u200b\u8282\u70b9\u200b\uff0c\u200b\u8fd4\u56de\u200b \u200b\u53cd\u8f6c\u200b\u540e\u200b\u7684\u200b\u94fe\u8868\u200b \u3002
\u200b\u793a\u4f8b\u200b 1\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [1,2,3,4,5], left = 2, right = 4\n\u200b\u8f93\u51fa\u200b\uff1a[1,4,3,2,5]\n
\u200b\u793a\u4f8b\u200b 2\uff1a
\u200b\u8f93\u5165\u200b\uff1ahead = [5], left = 1, right = 1\n\u200b\u8f93\u51fa\u200b\uff1a[5]\n
\u200b\u63d0\u793a\u200b\uff1a
- \u200b\u94fe\u8868\u200b\u4e2d\u200b\u8282\u70b9\u200b\u6570\u76ee\u200b\u4e3a\u200b
n
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n
Reference
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/92/#_2","title":"\u9898\u89e3","text":"\u200b\u5148\u200b\u8003\u8651\u200b\u53cd\u8f6c\u200b\u6574\u4e2a\u200b\u94fe\u8868\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e09\u200b\u6307\u9488\u200b\u6cd5\u5728\u200b\\(\\mathcal O(N)\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u5185\u200b\u4f7f\u7528\u200b\\(\\mathcal O(1)\\)\u200b\u7684\u200b\u7a7a\u95f4\u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b
\u200b\u94fe\u8868\u200b\u53cd\u8f6c\u200b\u7684\u200b\u4e09\u200b\u6307\u9488\u200b\u6cd5\u200b\uff1a\u200b\u5b9a\u4e49\u200bcur1, cur2, cur3
\u200b\u4e09\u4e2a\u200b\u6307\u9488\u200b\uff0c\u200b\u5206\u522b\u200b\u6307\u5411\u200b\u94fe\u8868\u200b\u7684\u200b\u5934\u200b\u8282\u70b9\u200b\u3001\u200b\u7b2c\u4e8c\u4e2a\u200b\u8282\u70b9\u200b\u4e0e\u200b\u7b2c\u4e09\u4e2a\u200b\u8282\u70b9\u200b\u3002\u200b\u6307\u9488\u200bcur1, cur2
\u200b\u7528\u4e8e\u200b\u4ea4\u6362\u200b\u94fe\u8868\u200b\u8282\u70b9\u200b\u7684\u200b\u8fde\u63a5\u200b\u65b9\u5411\u200b\u3002\u200b\u7531\u4e8e\u200b\u4ea4\u6362\u200b\u8282\u70b9\u200b\u64cd\u4f5c\u200b\u7834\u574f\u200b\u4e86\u200b\u539f\u6709\u200b\u7684\u200b\u8fde\u63a5\u7ed3\u6784\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u4e00\u4e2a\u200b\u989d\u5916\u200b\u7684\u200b\u6307\u9488\u200bcur3
\u200b\u7528\u4e8e\u200b\u79fb\u52a8\u200b\u6307\u9488\u200b\u3002
\u200b\u4e09\u200b\u6307\u9488\u200b\u6cd5\u200b\u7684\u200b\u4e3b\u8981\u200b\u6d41\u7a0b\u200b\u5982\u4e0b\u200b\u56fe\u200b\uff1a
- \u200b\u521d\u59cb\u5316\u200b
cur1, cur2, cur3
\uff0c\u200b\u7f6e\u200bcur1->next
\u200b\u4e3a\u200bNULL
- \u200b\u4ee4\u200b
cur2->next = cur1
\uff0c\u200b\u5b8c\u6210\u200b\u4ea4\u6362\u200b\u64cd\u4f5c\u200b - \u200b\u4ee4\u200b
cur1 = cur2
- \u200b\u4ee4\u200b
cur2 = cur3
- \u200b\u5982\u679c\u200b
cur3
\u200b\u4e0d\u200b\u4e3a\u200bNULL
\uff0ccur3
\u200b\u5728\u200b\u94fe\u8868\u200b\u4e0a\u200b\u5411\u524d\u200b\u79fb\u52a8\u200b\uff0c\u200b\u7136\u540e\u200b\u8fd4\u56de\u200b2 - \u200b\u5982\u679c\u200b
cur3
\u200b\u4e3a\u200bNULL
\uff0c\u200b\u7ed3\u675f\u200b - \u200b\u8fd4\u56de\u200b
cur2
\u200b\u53cd\u8f6c\u200b\u7ed9\u5b9a\u200b\u8303\u56f4\u200b\u5185\u200b\u7684\u200b\u94fe\u8868\u200b\uff0c\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b\u5982\u4e0b\u200b\u60c5\u51b5\u200b\uff1a
- \u200b\u5982\u679c\u200b\u53cd\u8f6c\u200b\u533a\u95f4\u200b\u4ece\u200b\u7b2c\u4e00\u4e2a\u200b\u8282\u70b9\u200b\u5f00\u59cb\u200b\uff0c\u200b\u94fe\u8868\u200b\u7684\u200b\u5934\u200b\u8282\u70b9\u200b\u4f1a\u200b\u6539\u53d8\u200b\uff0c\u200b\u5426\u5219\u200b\u4e0d\u200b\u6539\u53d8\u200b
- \u200b\u5982\u679c\u200b\u533a\u95f4\u200b\u957f\u5ea6\u200b\u4e3a\u200b1\uff0c\u200b\u5219\u200b\u65e0\u9700\u200b\u53cd\u8f6c\u200b
- \u200b\u53cd\u8f6c\u200b\u540e\u200b\u9700\u8981\u200b\u66f4\u65b0\u200b\u53cd\u8f6c\u200b\u533a\u95f4\u200b\u524d\u540e\u200b\u7684\u200b\u8282\u70b9\u200b\u8fde\u63a5\u200b\u5173\u7cfb\u200b
\u200b\u6574\u4f53\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for singly-linked list.\n * struct ListNode {\n * int val;\n * struct ListNode *next;\n * };\n */\nstruct ListNode* reverseBetween(struct ListNode* head, int left, int right){\n if (left == right)\n return head;\n struct ListNode *cur = head, *prev = NULL;\n left--;\n right--;\n while (left)\n {\n left--;\n right--;\n prev = cur;\n cur = cur->next;\n }\n struct ListNode * cur2 = cur->next, *cur3 = cur2->next, *tail = cur;\n while (right)\n {\n cur2->next = cur;\n cur = cur2;\n cur2 = cur3;\n if (cur3)\n cur3 = cur3->next;\n else\n break;\n right--;\n }\n tail->next = cur2;\n if (prev)\n prev->next = cur;\n return prev ? head : cur;\n}\n
","tags":["\u94fe\u8868"]},{"location":"coding/leetcode/98/","title":"98. \u200b\u9a8c\u8bc1\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811","text":"\u200b\u96be\u5ea6\u200b\uff1a\u200b\u4e2d\u7b49\u200b
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52"]},{"location":"coding/leetcode/98/#_1","title":"\u9898\u76ee","text":"\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u4e8c\u53c9\u6811\u200b\uff0c\u200b\u5224\u65ad\u200b\u5176\u200b\u662f\u5426\u662f\u200b\u4e00\u4e2a\u200b\u6709\u6548\u200b\u7684\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b\u3002
\u200b\u5047\u8bbe\u200b\u4e00\u4e2a\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u7279\u5f81\u200b\uff1a
- \u200b\u8282\u70b9\u200b\u7684\u200b\u5de6\u5b50\u200b\u6811\u200b\u53ea\u200b\u5305\u542b\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u6570\u200b\u3002
- \u200b\u8282\u70b9\u200b\u7684\u200b\u53f3\u5b50\u200b\u6811\u200b\u53ea\u200b\u5305\u542b\u200b\u5927\u4e8e\u200b\u5f53\u524d\u200b\u8282\u70b9\u200b\u7684\u200b\u6570\u200b\u3002
- \u200b\u6240\u6709\u200b\u5de6\u5b50\u200b\u6811\u200b\u548c\u200b\u53f3\u5b50\u200b\u6811\u200b\u81ea\u8eab\u200b\u5fc5\u987b\u200b\u4e5f\u200b\u662f\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b\u3002
\u200b\u793a\u4f8b\u200b\u00a01\uff1a
\u200b\u8f93\u5165\u200b:\n 2\n / \\\n 1 3\n\u200b\u8f93\u51fa\u200b: true\n
\u200b\u793a\u4f8b\u200b\u00a02\uff1a
\u200b\u8f93\u5165\u200b:\n 5\n / \\\n 1 4\n\u00a0 / \\\n\u00a0 3 6\n\u200b\u8f93\u51fa\u200b: false\n\u200b\u89e3\u91ca\u200b: \u200b\u8f93\u5165\u200b\u4e3a\u200b: [5,1,4,null,null,3,6]\u3002\n\u00a0 \u200b\u6839\u200b\u8282\u70b9\u200b\u7684\u200b\u503c\u200b\u4e3a\u200b 5 \uff0c\u200b\u4f46\u662f\u200b\u5176\u53f3\u5b50\u200b\u8282\u70b9\u200b\u503c\u4e3a\u200b 4 \u3002\n
Reference
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52"]},{"location":"coding/leetcode/98/#_2","title":"\u9898\u89e3","text":"\u200b\u57fa\u672c\u601d\u8def\u200b\uff1a \u200b\u5c06\u200b\u4e8c\u53c9\u200b\u67e5\u627e\u200b\u6811\u4e2d\u5e8f\u200b\u5c55\u5f00\u200b\u4e3a\u200b\u94fe\u8868\u200b\uff0c\u200b\u5224\u65ad\u200b\u94fe\u8868\u200b\u662f\u5426\u662f\u200b\u6709\u5e8f\u200b\u7684\u200b\u3002
\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
/**\n * Definition for a binary tree node.\n * struct TreeNode {\n * int val;\n * struct TreeNode *left;\n * struct TreeNode *right;\n * };\n */\nstruct ListNode *insert(struct ListNode *List, int val)\n{\n struct ListNode *ret = malloc(sizeof(struct ListNode));\n ret->val = val;\n ret->next = List;\n return ret;\n}\nstruct ListNode *toList(struct TreeNode *root, struct ListNode *List)\n{\n if (root == NULL)\n return List;\n List = toList(root->right, List);\n List = insert(List, root->val);\n List = toList(root->left, List);\n return List;\n}\nbool isValidBST(struct TreeNode* root){\n if (root == NULL)\n return true;\n struct ListNode *rec = toList(root, NULL), *cur = rec;\n do\n {\n if (cur->next == NULL)\n break;\n if (cur->val >= cur->next->val)\n return false;\n cur = cur->next;\n }\n while (true);\n return true;\n}\n
","tags":["\u6811","\u6df1\u5ea6\u4f18\u5148\u641c\u7d22","\u9012\u5f52"]},{"location":"coding/leetcode/tags/","title":"Leetcode \u200b\u9898\u76ee","text":"\u200b\u70b9\u51fb\u200b\u53f3\u4fa7\u200b\u76ee\u5f55\u200b\u53ef\u4ee5\u200b\u8df3\u8f6c\u200b\u5230\u200b\u5bf9\u5e94\u200b\u7684\u200b\u6807\u7b7e\u200b
"},{"location":"coding/leetcode/tags/#_1","title":"\u6570\u7ec4","text":"\u200b\u6570\u7ec4\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b31\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6570\u7ec4\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 1. \u200b\u4e24\u6570\u200b\u4e4b\u200b\u548c\u200b 26. \u200b\u5220\u9664\u200b\u6392\u5e8f\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u91cd\u590d\u200b\u9879\u200b 27. \u200b\u79fb\u9664\u200b\u5143\u7d20\u200b 35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b 42. \u200b\u63a5\u200b\u96e8\u6c34\u200b 48. \u200b\u65cb\u8f6c\u200b\u56fe\u50cf\u200b 53. \u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c\u200b 55. \u200b\u8df3\u8dc3\u200b\u6e38\u620f\u200b 56. \u200b\u5408\u5e76\u200b\u533a\u95f4\u200b 59. \u200b\u87ba\u65cb\u200b\u77e9\u9635\u200b II 62. \u200b\u4e0d\u540c\u200b\u8def\u5f84\u200b 64. \u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 66. \u200b\u52a0\u4e00\u200b 73. \u200b\u77e9\u9635\u200b\u7f6e\u200b\u96f6\u200b 74. \u200b\u641c\u7d22\u200b\u4e8c\u7ef4\u200b\u77e9\u9635\u200b 75. \u200b\u989c\u8272\u200b\u5206\u7c7b\u200b 78. \u200b\u5b50\u96c6\u200b 79. \u200b\u5355\u8bcd\u200b\u641c\u7d22\u200b 88. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u6570\u7ec4\u200b 90. \u200b\u5b50\u96c6\u200b II 118. \u200b\u6768\u8f89\u4e09\u89d2\u200b 119. \u200b\u6768\u8f89\u4e09\u89d2\u200b II 120. \u200b\u4e09\u89d2\u5f62\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 121. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b 122. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b II 189. \u200b\u65cb\u8f6c\u200b\u6570\u7ec4\u200b 217. \u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b 384. \u200b\u6253\u4e71\u200b\u6570\u7ec4\u200b 509. \u200b\u6590\u6ce2\u200b\u90a3\u200b\u5951\u6570\u200b 1011. \u200b\u5728\u200b D \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u5305\u88f9\u200b\u7684\u200b\u80fd\u529b\u200b 1300. \u200b\u8f6c\u53d8\u200b\u6570\u7ec4\u200b\u540e\u200b\u6700\u200b\u63a5\u8fd1\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u6570\u7ec4\u200b\u548c"},{"location":"coding/leetcode/tags/#_2","title":"\u5b57\u7b26\u4e32","text":"\u200b\u5b57\u7b26\u4e32\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b16\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u5b57\u7b26\u4e32\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b 8. \u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u6574\u6570\u200b (atoi) 13. \u200b\u7f57\u9a6c\u6570\u5b57\u200b\u8f6c\u200b\u6574\u6570\u200b 14. \u200b\u6700\u957f\u200b\u516c\u5171\u200b\u524d\u7f00\u200b 17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b 20. \u200b\u6709\u6548\u200b\u7684\u200b\u62ec\u53f7\u200b 22. \u200b\u62ec\u53f7\u200b\u751f\u6210\u200b 28. \u200b\u5b9e\u73b0\u200b strStr() 38. \u200b\u5916\u89c2\u200b\u6570\u5217\u200b 43. \u200b\u5b57\u7b26\u4e32\u200b\u76f8\u4e58\u200b 87. \u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b 115. \u200b\u4e0d\u540c\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b 125. \u200b\u9a8c\u8bc1\u200b\u56de\u6587\u200b\u4e32\u200b 344. \u200b\u53cd\u8f6c\u200b\u5b57\u7b26\u4e32\u200b 387. \u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u5b57\u7b26\u200b 917. \u200b\u4ec5\u4ec5\u200b\u53cd\u8f6c\u200b\u5b57\u6bcd"},{"location":"coding/leetcode/tags/#_3","title":"\u6570\u5b66","text":"\u200b\u6570\u5b66\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b15\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6570\u5b66\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 2. \u200b\u4e24\u200b\u6570\u200b\u76f8\u52a0\u200b 7. \u200b\u6574\u6570\u200b\u53cd\u8f6c\u200b 8. \u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u6574\u6570\u200b (atoi) 9. \u200b\u56de\u6587\u200b\u6570\u200b 11. \u200b\u76db\u200b\u6700\u591a\u6c34\u200b\u7684\u200b\u5bb9\u5668\u200b 13. \u200b\u7f57\u9a6c\u6570\u5b57\u200b\u8f6c\u200b\u6574\u6570\u200b 14. \u200b\u6700\u957f\u200b\u516c\u5171\u200b\u524d\u7f00\u200b 43. \u200b\u5b57\u7b26\u4e32\u200b\u76f8\u4e58\u200b 50. Pow(x, n) 69. x \u200b\u7684\u200b\u5e73\u65b9\u6839\u200b 204. \u200b\u8ba1\u6570\u200b\u8d28\u6570\u200b 368. \u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b 781. \u200b\u68ee\u6797\u200b\u4e2d\u200b\u7684\u200b\u5154\u5b50\u200b 1006. \u200b\u7b28\u200b\u9636\u4e58\u200b 1835. \u200b\u6240\u6709\u200b\u6570\u5bf9\u200b\u6309\u4f4d\u200b\u4e0e\u200b\u7ed3\u679c\u200b\u7684\u200b\u5f02\u6216\u200b\u548c"},{"location":"coding/leetcode/tags/#_4","title":"\u53cc\u200b\u6307\u9488","text":"\u200b\u53cc\u200b\u6307\u9488\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b14\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u53cc\u200b\u6307\u9488\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b 11. \u200b\u76db\u200b\u6700\u591a\u6c34\u200b\u7684\u200b\u5bb9\u5668\u200b 19. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u7684\u200b\u5012\u6570\u7b2c\u200bN\u200b\u4e2a\u200b\u8282\u70b9\u200b 26. \u200b\u5220\u9664\u200b\u6392\u5e8f\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u91cd\u590d\u200b\u9879\u200b 27. \u200b\u79fb\u9664\u200b\u5143\u7d20\u200b 28. \u200b\u5b9e\u73b0\u200b strStr() 42. \u200b\u63a5\u200b\u96e8\u6c34\u200b 61. \u200b\u65cb\u8f6c\u200b\u94fe\u8868\u200b 75. \u200b\u989c\u8272\u200b\u5206\u7c7b\u200b 88. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u6570\u7ec4\u200b 125. \u200b\u9a8c\u8bc1\u200b\u56de\u6587\u200b\u4e32\u200b 234. \u200b\u56de\u6587\u200b\u94fe\u8868\u200b 344. \u200b\u53cd\u8f6c\u200b\u5b57\u7b26\u4e32\u200b 350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II"},{"location":"coding/leetcode/tags/#_5","title":"\u52a8\u6001\u200b\u89c4\u5212","text":"\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b13\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u52a8\u6001\u200b\u89c4\u5212\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 42. \u200b\u63a5\u200b\u96e8\u6c34\u200b 53. \u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c\u200b 62. \u200b\u4e0d\u540c\u200b\u8def\u5f84\u200b 64. \u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 70. \u200b\u722c\u697c\u68af\u200b 87. \u200b\u6270\u4e71\u200b\u5b57\u7b26\u4e32\u200b 115. \u200b\u4e0d\u540c\u200b\u7684\u200b\u5b50\u200b\u5e8f\u5217\u200b 120. \u200b\u4e09\u89d2\u5f62\u200b\u6700\u5c0f\u200b\u8def\u5f84\u200b\u548c\u200b 121. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b 198. \u200b\u6253\u5bb6\u52ab\u820d\u200b 368. \u200b\u6700\u5927\u200b\u6574\u9664\u200b\u5b50\u96c6\u200b 377. \u200b\u7ec4\u5408\u200b\u603b\u548c\u200b \u2163 403. \u200b\u9752\u86d9\u200b\u8fc7\u6cb3"},{"location":"coding/leetcode/tags/#_6","title":"\u54c8\u5e0c\u200b\u8868","text":"\u200b\u54c8\u5e0c\u200b\u8868\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b12\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u54c8\u5e0c\u200b\u8868\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 1. \u200b\u4e24\u6570\u200b\u4e4b\u200b\u548c\u200b 3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32\u200b 36. \u200b\u6709\u6548\u200b\u7684\u200b\u6570\u72ec\u200b 37. \u200b\u89e3\u6570\u200b\u72ec\u200b 136. \u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u7684\u200b\u6570\u5b57\u200b 204. \u200b\u8ba1\u6570\u200b\u8d28\u6570\u200b 217. \u200b\u5b58\u5728\u200b\u91cd\u590d\u200b\u5143\u7d20\u200b 242. \u200b\u6709\u6548\u200b\u7684\u200b\u5b57\u6bcd\u200b\u5f02\u4f4d\u200b\u8bcd\u200b 350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II 387. \u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u5b57\u7b26\u200b 433. \u200b\u6700\u5c0f\u200b\u57fa\u56e0\u200b\u53d8\u5316\u200b 781. \u200b\u68ee\u6797\u200b\u4e2d\u200b\u7684\u200b\u5154\u5b50"},{"location":"coding/leetcode/tags/#_7","title":"\u94fe\u8868","text":"\u200b\u94fe\u8868\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b11\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u94fe\u8868\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 2. \u200b\u4e24\u200b\u6570\u200b\u76f8\u52a0\u200b 19. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u7684\u200b\u5012\u6570\u7b2c\u200bN\u200b\u4e2a\u200b\u8282\u70b9\u200b 21. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u94fe\u8868\u200b 23. \u200b\u5408\u5e76\u200bK\u200b\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868\u200b 24. \u200b\u4e24\u200b\u4e24\u200b\u4ea4\u6362\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b 25. K \u200b\u4e2a\u200b\u4e00\u7ec4\u200b\u7ffb\u8f6c\u200b\u94fe\u8868\u200b 61. \u200b\u65cb\u8f6c\u200b\u94fe\u8868\u200b 92. \u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b II 206. \u200b\u53cd\u8f6c\u200b\u94fe\u8868\u200b 234. \u200b\u56de\u6587\u200b\u94fe\u8868\u200b 237. \u200b\u5220\u9664\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9"},{"location":"coding/leetcode/tags/#_8","title":"\u4e8c\u5206\u200b\u67e5\u627e","text":"\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b9\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 35. \u200b\u641c\u7d22\u200b\u63d2\u5165\u200b\u4f4d\u7f6e\u200b 50. Pow(x, n) 69. x \u200b\u7684\u200b\u5e73\u65b9\u6839\u200b 74. \u200b\u641c\u7d22\u200b\u4e8c\u7ef4\u200b\u77e9\u9635\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570\u200b 350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II 1011. \u200b\u5728\u200b D \u200b\u5929\u200b\u5185\u200b\u9001\u8fbe\u200b\u5305\u88f9\u200b\u7684\u200b\u80fd\u529b\u200b 1283. \u200b\u4f7f\u200b\u7ed3\u679c\u200b\u4e0d\u200b\u8d85\u8fc7\u200b\u9608\u503c\u200b\u7684\u200b\u6700\u5c0f\u200b\u9664\u6570\u200b 1300. \u200b\u8f6c\u53d8\u200b\u6570\u7ec4\u200b\u540e\u200b\u6700\u200b\u63a5\u8fd1\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u6570\u7ec4\u200b\u548c"},{"location":"coding/leetcode/tags/#_9","title":"\u56de\u6eaf\u200b\u7b97\u6cd5","text":"\u200b\u56de\u6eaf\u200b\u7b97\u6cd5\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b7\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u56de\u6eaf\u200b\u7b97\u6cd5\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b 22. \u200b\u62ec\u53f7\u200b\u751f\u6210\u200b 37. \u200b\u89e3\u6570\u200b\u72ec\u200b 46. \u200b\u5168\u200b\u6392\u5217\u200b 78. \u200b\u5b50\u96c6\u200b 79. \u200b\u5355\u8bcd\u200b\u641c\u7d22\u200b 90. \u200b\u5b50\u96c6\u200b II"},{"location":"coding/leetcode/tags/#_10","title":"\u9012\u5f52","text":"\u200b\u9012\u5f52\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b6\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u9012\u5f52\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 2. \u200b\u4e24\u200b\u6570\u200b\u76f8\u52a0\u200b 17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b 21. \u200b\u5408\u5e76\u200b\u4e24\u4e2a\u200b\u6709\u5e8f\u200b\u94fe\u8868\u200b 24. \u200b\u4e24\u200b\u4e24\u200b\u4ea4\u6362\u200b\u94fe\u8868\u200b\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b 98. \u200b\u9a8c\u8bc1\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b 779. \u200b\u7b2c\u200bK\u200b\u4e2a\u200b\u8bed\u6cd5\u200b\u7b26\u53f7"},{"location":"coding/leetcode/tags/#_11","title":"\u6808","text":"\u200b\u6808\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b5\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6808\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 20. \u200b\u6709\u6548\u200b\u7684\u200b\u62ec\u53f7\u200b 42. \u200b\u63a5\u200b\u96e8\u6c34\u200b 150. \u200b\u9006\u200b\u6ce2\u5170\u200b\u8868\u8fbe\u5f0f\u200b\u6c42\u503c\u200b 155. \u200b\u6700\u5c0f\u200b\u6808\u200b 341. \u200b\u6241\u5e73\u5316\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u8fed\u4ee3\u200b\u5668"},{"location":"coding/leetcode/tags/#_12","title":"\u6392\u5e8f","text":"\u200b\u6392\u5e8f\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b5\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6392\u5e8f\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 56. \u200b\u5408\u5e76\u200b\u533a\u95f4\u200b 75. \u200b\u989c\u8272\u200b\u5206\u7c7b\u200b 242. \u200b\u6709\u6548\u200b\u7684\u200b\u5b57\u6bcd\u200b\u5f02\u4f4d\u200b\u8bcd\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570\u200b 350. \u200b\u4e24\u4e2a\u200b\u6570\u7ec4\u200b\u7684\u200b\u4ea4\u96c6\u200b II"},{"location":"coding/leetcode/tags/#_13","title":"\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22","text":"\u200b\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b4\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 17. \u200b\u7535\u8bdd\u53f7\u7801\u200b\u7684\u200b\u5b57\u6bcd\u7ec4\u5408\u200b 98. \u200b\u9a8c\u8bc1\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b 101. \u200b\u5bf9\u79f0\u200b\u4e8c\u53c9\u6811\u200b 488. \u200b\u7956\u739b\u200b\u6e38\u620f"},{"location":"coding/leetcode/tags/#_14","title":"\u6811","text":"\u200b\u6811\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b3\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6811\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 98. \u200b\u9a8c\u8bc1\u200b\u4e8c\u53c9\u200b\u641c\u7d22\u200b\u6811\u200b 101. \u200b\u5bf9\u79f0\u200b\u4e8c\u53c9\u6811\u200b 102. \u200b\u4e8c\u53c9\u6811\u200b\u7684\u200b\u5c42\u5e8f\u200b\u904d\u5386"},{"location":"coding/leetcode/tags/#_15","title":"\u5e7f\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22","text":"\u200b\u5e7f\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b3\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u5e7f\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 101. \u200b\u5bf9\u79f0\u200b\u4e8c\u53c9\u6811\u200b 102. \u200b\u4e8c\u53c9\u6811\u200b\u7684\u200b\u5c42\u5e8f\u200b\u904d\u5386\u200b 433. \u200b\u6700\u5c0f\u200b\u57fa\u56e0\u200b\u53d8\u5316"},{"location":"coding/leetcode/tags/#_16","title":"\u8bbe\u8ba1","text":"\u200b\u8bbe\u8ba1\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b3\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u8bbe\u8ba1\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 155. \u200b\u6700\u5c0f\u200b\u6808\u200b 341. \u200b\u6241\u5e73\u5316\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u8fed\u4ee3\u200b\u5668\u200b 1603. \u200b\u8bbe\u8ba1\u200b\u505c\u8f66\u200b\u7cfb\u7edf"},{"location":"coding/leetcode/tags/#_17","title":"\u5206\u6cbb\u200b\u7b97\u6cd5","text":"\u200b\u5206\u6cbb\u200b\u7b97\u6cd5\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b3\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u5206\u6cbb\u200b\u7b97\u6cd5\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 23. \u200b\u5408\u5e76\u200bK\u200b\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868\u200b 53. \u200b\u6700\u5927\u200b\u5b50\u5e8f\u200b\u548c\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570"},{"location":"coding/leetcode/tags/#_18","title":"\u8d2a\u5fc3\u200b\u7b97\u6cd5","text":"\u200b\u8d2a\u5fc3\u200b\u7b97\u6cd5\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b2\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u8d2a\u5fc3\u200b\u7b97\u6cd5\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 55. \u200b\u8df3\u8dc3\u200b\u6e38\u620f\u200b 122. \u200b\u4e70\u5356\u200b\u80a1\u7968\u200b\u7684\u200b\u6700\u4f73\u65f6\u673a\u200b II"},{"location":"coding/leetcode/tags/#_19","title":"\u4f4d\u200b\u8fd0\u7b97","text":"\u200b\u4f4d\u200b\u8fd0\u7b97\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b2\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u4f4d\u200b\u8fd0\u7b97\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 78. \u200b\u5b50\u96c6\u200b 136. \u200b\u53ea\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u7684\u200b\u6570\u5b57"},{"location":"coding/leetcode/tags/#_20","title":"\u5806","text":"\u200b\u5806\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b1\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u5806\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 23. \u200b\u5408\u5e76\u200bK\u200b\u4e2a\u200b\u5347\u5e8f\u200b\u94fe\u8868"},{"location":"coding/leetcode/tags/#sliding-window","title":"Sliding Window","text":"Sliding Window\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b1\u200b\u9053\u200b\u9898\u76ee\u200b
Sliding Window \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 3. \u200b\u65e0\u200b\u91cd\u590d\u200b\u5b57\u7b26\u200b\u7684\u200b\u6700\u957f\u200b\u5b50\u4e32"},{"location":"coding/leetcode/tags/#_21","title":"\u6811\u72b6\u200b\u6570\u7ec4","text":"\u200b\u6811\u72b6\u200b\u6570\u7ec4\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b1\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u6811\u72b6\u200b\u6570\u7ec4\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570"},{"location":"coding/leetcode/tags/#_22","title":"\u7ebf\u6bb5\u200b\u6811","text":"\u200b\u7ebf\u6bb5\u200b\u6811\u200b\u6807\u7b7e\u200b\u4e0b\u200b\u5171\u6709\u200b1\u200b\u9053\u200b\u9898\u76ee\u200b
\u200b\u7ebf\u6bb5\u200b\u6811\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b \u200b\u9898\u76ee\u200b 315. \u200b\u8ba1\u7b97\u200b\u53f3\u4fa7\u200b\u5c0f\u4e8e\u200b\u5f53\u524d\u200b\u5143\u7d20\u200b\u7684\u200b\u4e2a\u6570"},{"location":"coding/machine-learning/","title":"\u673a\u5668\u200b\u5b66\u4e60","text":"\u200b\u90e8\u5206\u200b\u673a\u5668\u200b\u5b66\u4e60\u200b\u7b97\u6cd5\u200b\u7684\u200bPython\u200b\u5b9e\u73b0\u200b
- \u200b\u7ebf\u6027\u200b\u6a21\u578b\u200b
- \u200b\u51b3\u7b56\u6811\u200b
- \u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b
- \u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b
- \u200b\u7b97\u6cd5\u200b\u6d41\u7a0b\u200b
- \u200b\u4e3b\u9898\u200b\u6a21\u578b\u200b
- VAE-NTM
"},{"location":"coding/machine-learning/bayesian-optimization/","title":"\u8d1d\u53f6\u65af\u200b\u4f18\u5316","text":"In\u00a0[1]: Copied! import numpy as np\nfrom scipy.stats import norm\n\ndef objective(x):\n return norm.pdf(x, 3, 2) * 1.5 + norm.pdf(x, 7, 1) + norm.pdf(x, 11, 2)\n
import numpy as np from scipy.stats import norm def objective(x): return norm.pdf(x, 3, 2) * 1.5 + norm.pdf(x, 7, 1) + norm.pdf(x, 11, 2) \u200b\u521d\u6b65\u200b\u5bf9\u200b\u8be5\u200b\u51fd\u6570\u200b\u8fdb\u884c\u200b\u53ef\u89c6\u5316\u200b
In\u00a0[2]: Copied! from matplotlib import pyplot as plt\n%config InlineBackend.figure_format = 'svg'\n\nx = np.linspace(-5, 20, 50)\nplt.plot(x, objective(x))\nplt.xlabel('x')\nplt.ylabel('f(x)')\nplt.title('Objective function')\nplt.show()\n
from matplotlib import pyplot as plt %config InlineBackend.figure_format = 'svg' x = np.linspace(-5, 20, 50) plt.plot(x, objective(x)) plt.xlabel('x') plt.ylabel('f(x)') plt.title('Objective function') plt.show() \u200b\u91c7\u96c6\u200b\u51fd\u6570\u200b\u7684\u200b\u76ee\u6807\u200b\u662f\u200b\u9009\u51fa\u200b\u540e\u9a8c\u200b\u4e2d\u200b\u6700\u4f18\u200b\u7684\u200b\u70b9\u200b\u3002\u200b\u5728\u200b\u6b64\u5904\u200b\uff0c\u200b\u6211\u4eec\u200b\u4f7f\u7528\u200b\u671f\u671b\u200b\u6539\u8fdb\u200b\uff08Expected Improvement, EI\uff09\u200b\u6765\u200b\u9009\u62e9\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u91c7\u96c6\u200b\u70b9\u200b\u3002EI\u200b\u7684\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
$$ \\begin{aligned} \\text{EI}(x) &= \\mathbb{E}[\\max(0, \\tilde f(x) - f(x^*) - \\xi)] \\\\ \\end{aligned} $$
\u200b\u5176\u4e2d\u200b$\\tilde f(x)$\u200b\u662f\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u5728\u200b$x$\u200b\u5904\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b\uff0c$f(x^*)$\u200b\u662f\u200b\u5f53\u524d\u200b\u6700\u4f18\u200b\u7684\u200b\u51fd\u6570\u200b\u503c\u200b\uff0c$\\xi$\u200b\u662f\u200b\u4e00\u4e2a\u200b\u63a7\u5236\u200b\u63a2\u7d22\u200b\u548c\u200b\u5f00\u53d1\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5f53\u200b$\\xi$\u200b\u8f83\u5927\u200b\u65f6\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u66f4\u200b\u503e\u5411\u200b\u4e8e\u200b\u63a2\u7d22\u200b\uff0c\u200b\u5f53\u200b$\\xi$\u200b\u8f83\u200b\u5c0f\u65f6\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u66f4\u200b\u503e\u5411\u200b\u4e8e\u200b\u5f00\u53d1\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u9ad8\u65af\u5206\u5e03\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u7ed9\u5b9a\u200b$x$, $\\tilde f(x)$\u200b\u7684\u200b\u5206\u5e03\u200b\u662f\u200b\u4e00\u4e2a\u200b\u9ad8\u65af\u5206\u5e03\u200b\uff0c\u200b\u5176\u200b\u5747\u503c\u200b\u4e3a\u200b$\\mu(x)$\uff0c\u200b\u65b9\u5dee\u200b\u4e3a\u200b$\\sigma^2(x)$\uff0c\u200b\u4ee4\u200b
$$ z(x) = \\frac{\\mu(x) - f(x^*) - \\xi}{\\sigma(x)} $$
\u200b\u5219\u200b\u671f\u671b\u200b\u6539\u8fdb\u200b\u4e3a\u200b
$$ \\text{EI}(x) = \\sigma(x)[z(x)\\Phi(z(x)) + \\phi(z(x))] $$
In\u00a0[3]: Copied! from typing import Callable\nfrom sklearn.gaussian_process import GaussianProcessRegressor\n\nGP = GaussianProcessRegressor\nAcquisition = Callable[[np.ndarray, GP, float], np.ndarray]\n\ndef expected_improvement(x: np.ndarray, gp: GP, y_max: float, xi: float = 0.01):\n x = np.array(x).reshape(-1, 1)\n mu, sigma = gp.predict(x, return_std=True) # type: ignore\n sigma = sigma.reshape(-1, 1)\n mu = mu.reshape(-1, 1)\n\n with np.errstate(divide='warn'):\n Z = (mu - y_max - xi) / sigma # Normalized Z-score\n ei = sigma * (Z * norm.cdf(Z) + norm.pdf(Z))\n\n return ei\n
from typing import Callable from sklearn.gaussian_process import GaussianProcessRegressor GP = GaussianProcessRegressor Acquisition = Callable[[np.ndarray, GP, float], np.ndarray] def expected_improvement(x: np.ndarray, gp: GP, y_max: float, xi: float = 0.01): x = np.array(x).reshape(-1, 1) mu, sigma = gp.predict(x, return_std=True) # type: ignore sigma = sigma.reshape(-1, 1) mu = mu.reshape(-1, 1) with np.errstate(divide='warn'): Z = (mu - y_max - xi) / sigma # Normalized Z-score ei = sigma * (Z * norm.cdf(Z) + norm.pdf(Z)) return ei \u200b\u6839\u636e\u200b\u91c7\u96c6\u200b\u51fd\u6570\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u5728\u200b\u8303\u56f4\u200b\u4e2d\u200b\u9009\u62e9\u200b\u4e00\u4e2a\u70b9\u200b\u4f7f\u5f97\u200bEI\u200b\u6700\u5927\u200b\uff0c\u200b\u7136\u540e\u200b\u89c2\u6d4b\u200b\u8be5\u70b9\u200b\u7684\u200b\u51fd\u6570\u200b\u503c\u200b\uff0c\u200b\u66f4\u65b0\u200b\u540e\u9a8c\u200b\uff0c\u200b\u91cd\u590d\u200b\u8fd9\u4e2a\u200b\u8fc7\u7a0b\u200b\u76f4\u5230\u200b\u8fbe\u5230\u200b\u8fed\u4ee3\u200b\u6b21\u6570\u200b\u3002
In\u00a0[4]: Copied! def next_point(\n x_min: float, x_max: float, n_samples: int,\n acquisition: Acquisition, gp: GP, y_max: float\n):\n x = np.random.uniform(x_min, x_max, n_samples).reshape(-1, 1)\n ei = acquisition(x, gp, y_max)\n return x[np.argmax(ei)]\n
def next_point( x_min: float, x_max: float, n_samples: int, acquisition: Acquisition, gp: GP, y_max: float ): x = np.random.uniform(x_min, x_max, n_samples).reshape(-1, 1) ei = acquisition(x, gp, y_max) return x[np.argmax(ei)] \u200b\u6b64\u540e\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u6765\u200b\u62df\u5408\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u3002sklearn
\u200b\u4e2d\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u5b9e\u73b0\u200b\u3002
In\u00a0[5]: Copied! from sklearn.gaussian_process.kernels import RBF\n\nkernel = RBF(length_scale=1.0, length_scale_bounds=(1e-2, 1e2))\ngp = GP(kernel=kernel, alpha=1e-5, n_restarts_optimizer=10)\n\ndef plot_gp(ax, gp: GP, x_min: float, x_max: float, ci: float = 0.95):\n x = np.linspace(x_min, x_max, 50).reshape(-1, 1)\n y, sigma = gp.predict(x, return_std=True)\n\n ci_coef = norm.ppf((1 + ci) / 2)\n\n ax.plot(x, y, linewidth=1)\n ax.fill_between(x.flatten(), y - ci_coef * sigma, y + ci_coef * sigma, alpha=0.2)\n ax.set_xlabel('x')\n ax.set_ylabel('f(x)')\n\nfig, ax = plt.subplots(1, 1)\nplot_gp(ax, gp, -5, 20)\nfig.show()\n
from sklearn.gaussian_process.kernels import RBF kernel = RBF(length_scale=1.0, length_scale_bounds=(1e-2, 1e2)) gp = GP(kernel=kernel, alpha=1e-5, n_restarts_optimizer=10) def plot_gp(ax, gp: GP, x_min: float, x_max: float, ci: float = 0.95): x = np.linspace(x_min, x_max, 50).reshape(-1, 1) y, sigma = gp.predict(x, return_std=True) ci_coef = norm.ppf((1 + ci) / 2) ax.plot(x, y, linewidth=1) ax.fill_between(x.flatten(), y - ci_coef * sigma, y + ci_coef * sigma, alpha=0.2) ax.set_xlabel('x') ax.set_ylabel('f(x)') fig, ax = plt.subplots(1, 1) plot_gp(ax, gp, -5, 20) fig.show() /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_54343/3771838051.py:19: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
\u200b\u6b64\u540e\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u8fed\u4ee3\u200b\u5730\u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u3002
In\u00a0[6]: Copied! fig, ax = plt.subplots(4, 4, sharex=False, sharey=False, figsize=(9, 9))\nax_flatten = ax.flatten()\n\nx_min = -5\nx_max = 20\nx_samples = np.random.uniform(x_min, x_max, 3).reshape(-1, 1)\ny_samples = objective(x_samples)\ny_max = y_samples.max()\ngp = gp.fit(x_samples, y_samples)\n\nfor i, current_ax in enumerate(ax_flatten):\n # Setup plot\n current_ax.set_xlim(x_min, x_max)\n current_ax.set_ylim(-1, 1)\n if i // 4 != 3:\n current_ax.get_xaxis().set_visible(False)\n if i % 4 != 0:\n current_ax.get_yaxis().set_visible(False)\n\n # Plot prediction\n plot_gp(current_ax, gp, x_min, x_max)\n\n # Plot function\n x_grid = np.linspace(x_min, x_max, 50).reshape(-1, 1)\n\n # Plot samples\n current_ax.plot(\n x_grid, objective(x_grid), '--', color='gray', linewidth=0.5\n )\n current_ax.scatter(x_samples, y_samples, color='red', s=4, zorder=10)\n\n # Plot optimal point\n x_optimal = x_samples[np.argmax(y_samples)].item()\n current_ax.scatter(x_optimal, y_max, color='green', s=10, zorder=20)\n current_ax.text(\n 0.5, 0.9,\n f'Best: x={x_optimal:.2f}, y={y_max:.2f}',\n ha='center', transform=current_ax.transAxes\n )\n\n point = next_point(x_min, x_max, 100, expected_improvement, gp, y_max)\n\n # Plot next point\n current_ax.plot(\n [point, point], [-0.8, 0.8], '--', color='red', linewidth=0.5\n )\n current_ax.text(\n 0.5, 0.05,\n f'Next x: {point[0]:.2f}',\n ha='center', transform=current_ax.transAxes\n )\n\n # Update samples\n y = objective(point).item()\n x_samples = np.vstack([x_samples, point])\n y_samples = np.append(y_samples, y)\n\n y_max = max(y_max, y)\n\n # Re-fit model\n gp = gp.fit(x_samples, y_samples)\n\nfig.show()\n
fig, ax = plt.subplots(4, 4, sharex=False, sharey=False, figsize=(9, 9)) ax_flatten = ax.flatten() x_min = -5 x_max = 20 x_samples = np.random.uniform(x_min, x_max, 3).reshape(-1, 1) y_samples = objective(x_samples) y_max = y_samples.max() gp = gp.fit(x_samples, y_samples) for i, current_ax in enumerate(ax_flatten): # Setup plot current_ax.set_xlim(x_min, x_max) current_ax.set_ylim(-1, 1) if i // 4 != 3: current_ax.get_xaxis().set_visible(False) if i % 4 != 0: current_ax.get_yaxis().set_visible(False) # Plot prediction plot_gp(current_ax, gp, x_min, x_max) # Plot function x_grid = np.linspace(x_min, x_max, 50).reshape(-1, 1) # Plot samples current_ax.plot( x_grid, objective(x_grid), '--', color='gray', linewidth=0.5 ) current_ax.scatter(x_samples, y_samples, color='red', s=4, zorder=10) # Plot optimal point x_optimal = x_samples[np.argmax(y_samples)].item() current_ax.scatter(x_optimal, y_max, color='green', s=10, zorder=20) current_ax.text( 0.5, 0.9, f'Best: x={x_optimal:.2f}, y={y_max:.2f}', ha='center', transform=current_ax.transAxes ) point = next_point(x_min, x_max, 100, expected_improvement, gp, y_max) # Plot next point current_ax.plot( [point, point], [-0.8, 0.8], '--', color='red', linewidth=0.5 ) current_ax.text( 0.5, 0.05, f'Next x: {point[0]:.2f}', ha='center', transform=current_ax.transAxes ) # Update samples y = objective(point).item() x_samples = np.vstack([x_samples, point]) y_samples = np.append(y_samples, y) y_max = max(y_max, y) # Re-fit model gp = gp.fit(x_samples, y_samples) fig.show() /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_54343/3753732084.py:63: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
"},{"location":"coding/machine-learning/bayesian-optimization/","title":"\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u00b6","text":"\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u662f\u200b\u4e00\u7c7b\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u4f18\u5316\u200b\u9ed1\u76d2\u200b\u51fd\u6570\u200b\u7684\u200b\u4f18\u5316\u200b\u65b9\u6cd5\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u9ed1\u76d2\u200b\u51fd\u6570\u200b\u6765\u8bf4\u200b\uff0c\u200b\u6211\u4eec\u200b\u65e0\u6cd5\u200b\u5f97\u77e5\u200b\u5176\u200b\u663e\u5f0f\u200b\u7684\u200b\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200b\u8f93\u5165\u200b\u4e00\u4e2a\u200b\u6570\u636e\u200b\uff0c\u200b\u89c2\u6d4b\u200b\u5176\u200b\u8f93\u51fa\u200b\u7684\u200b\u65b9\u6cd5\u200b\u5bfb\u627e\u200b\u5b83\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u3002\u200b\u501f\u52a9\u4e8e\u200b\u8d1d\u53f6\u65af\u200b\u7edf\u8ba1\u200b\u7684\u200b\u601d\u60f3\u200b\uff0c\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u6700\u521d\u200b\u8ba4\u4e3a\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5b8c\u5168\u200b\u968f\u673a\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e0d\u65ad\u200b\u5730\u200b\u89c2\u6d4b\u200b\u6765\u200b\u66f4\u65b0\u200b\u5bf9\u200b\u51fd\u6570\u200b\u7684\u200b\u4f30\u8ba1\u200b\uff08\u200b\u540e\u9a8c\u200b\uff09\u3002\u200b\u5728\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u8fed\u4ee3\u200b\u4e2d\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u6839\u636e\u200b\u5f53\u524d\u200b\u7684\u200b\u540e\u9a8c\u200b\uff0c\u200b\u901a\u8fc7\u200b\u91c7\u96c6\u200b\u51fd\u6570\u200b\u6765\u200b\u9009\u62e9\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u89c2\u6d4b\u200b\u7684\u200b\u70b9\u200b\u3002\u200b\u8d1d\u53f6\u65af\u200b\u4f18\u5316\u200b\u7684\u200b\u4f18\u70b9\u200b\u662f\u200b\u53ef\u4ee5\u200b\u5728\u200b\u8f83\u200b\u5c11\u200b\u7684\u200b\u8fed\u4ee3\u200b\u6b21\u6570\u200b\u5185\u200b\u627e\u5230\u200b\u5168\u5c40\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5728\u200b\u5b9e\u9645\u200b\u5e94\u7528\u200b\u4e2d\u200b\u88ab\u200b\u5e7f\u6cdb\u200b\u4f7f\u7528\u200b\u3002
\u200b\u5047\u8bbe\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7684\u200b\u5f62\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
"},{"location":"coding/machine-learning/decision-tree/","title":"\u51b3\u7b56\u6811","text":"In\u00a0[30]: Copied! import numpy as np\nimport pandas as pd\nimport typing as T\n
import numpy as np import pandas as pd import typing as T \u200b\u4ee5\u4e0b\u200b\u8003\u8651\u200b\u897f\u74dc\u200b\u6570\u636e\u200b\u96c6\u200b3.0\u200b\u4e2d\u200b\u7b2c\u4e00\u6b65\u200b\u5212\u5206\u200b\u7684\u200b\u5c5e\u6027\u200b\u9009\u62e9\u200b\u3002
In\u00a0[31]: Copied! df = pd.read_csv('data/melon3.0a.csv')\nattributes = ['\u200b\u8272\u6cfd\u200b', '\u200b\u6839\u8482\u200b', '\u200b\u6572\u58f0\u200b', '\u200b\u7eb9\u7406\u200b', '\u200b\u8110\u90e8\u200b', '\u200b\u89e6\u611f\u200b']\ncategory = '\u200b\u597d\u74dc\u200b'\n
df = pd.read_csv('data/melon3.0a.csv') attributes = ['\u200b\u8272\u6cfd\u200b', '\u200b\u6839\u8482\u200b', '\u200b\u6572\u58f0\u200b', '\u200b\u7eb9\u7406\u200b', '\u200b\u8110\u90e8\u200b', '\u200b\u89e6\u611f\u200b'] category = '\u200b\u597d\u74dc\u200b' \u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b\u57fa\u4e8e\u200b\u4fe1\u606f\u71b5\u200b\uff0c\u200b\u5728\u200b\u6bcf\u200b\u4e00\u6b21\u200b\u5212\u5206\u200b\u540e\u200b\uff0c\u200b\u96c6\u5408\u200b\u7684\u200b\u4fe1\u606f\u71b5\u200b\u4e4b\u200b\u548c\u200b\uff08\u200b\u6309\u200b\u6bd4\u4f8b\u200b\u52a0\u6743\u200b\uff09\u200b\u4f1a\u200b\u51cf\u5c0f\u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b\u5373\u200b\u4e3a\u200b\u539f\u200b\u4fe1\u606f\u71b5\u200b\u4e0e\u200b\u5212\u5206\u200b\u540e\u200b\u7684\u200b\u4fe1\u606f\u71b5\u200b\u4e4b\u5dee\u200b\u3002
In\u00a0[32]: Copied! def entropy(df, target_col):\n p = df[target_col].value_counts() / len(df)\n return -sum(p * np.log2(p))\n\ndef conditional_entropy(df, discrete_col, target_col):\n ret = 0\n for val in df[discrete_col].unique():\n p = len(df[df[discrete_col] == val]) / len(df) # \u200b\u6bd4\u4f8b\u200b\n ret += p * entropy(df[df[discrete_col] == val], target_col)\n return ret\n\ndef calc_gain(df, attributes, category) -> T.Dict[str, float]:\n entropy_original = entropy(df, category)\n return {\n k: entropy_original - conditional_entropy(df, k, category)\n for k in attributes\n }\n\ngain = pd.DataFrame([calc_gain(df, attributes, category)], index=['\u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b'])\ngain\n
def entropy(df, target_col): p = df[target_col].value_counts() / len(df) return -sum(p * np.log2(p)) def conditional_entropy(df, discrete_col, target_col): ret = 0 for val in df[discrete_col].unique(): p = len(df[df[discrete_col] == val]) / len(df) # \u200b\u6bd4\u4f8b\u200b ret += p * entropy(df[df[discrete_col] == val], target_col) return ret def calc_gain(df, attributes, category) -> T.Dict[str, float]: entropy_original = entropy(df, category) return { k: entropy_original - conditional_entropy(df, k, category) for k in attributes } gain = pd.DataFrame([calc_gain(df, attributes, category)], index=['\u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b']) gain Out[32]: \u200b\u8272\u6cfd\u200b \u200b\u6839\u8482\u200b \u200b\u6572\u58f0\u200b \u200b\u7eb9\u7406\u200b \u200b\u8110\u90e8\u200b \u200b\u89e6\u611f\u200b \u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b 0.108125 0.142675 0.140781 0.380592 0.289159 0.006046 \u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b\u4f1a\u200b\u66f4\u52a0\u200b\u503e\u5411\u200b\u4e8e\u200b\u9009\u62e9\u200b\u5305\u542b\u200b\u7c7b\u522b\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u5c5e\u6027\u200b\uff0c\u200b\u4f7f\u7528\u200b\u589e\u76ca\u200b\u7387\u200b\u6307\u6807\u200b\u53ef\u4ee5\u200b\u5e73\u8861\u200b\u4e0d\u540c\u200b\u7c7b\u522b\u200b\u4e4b\u95f4\u200b\u7684\u200b\u6743\u91cd\u200b\u3002\u200b\u589e\u76ca\u200b\u7387\u200b\u6307\u6807\u200b\u4e3a\u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b\u4e0e\u200b\u5c5e\u6027\u200b\u56fa\u6709\u200b\u503c\u200b $\\mathrm{IV}$ \u200b\u4e4b\u200b\u6bd4\u200b\u3002
In\u00a0[33]: Copied! def iv(df, discrete_col):\n p = df[discrete_col].value_counts() / len(df)\n return -sum(p * np.log2(p))\n\ndef calc_gain_ratio(df, attributes, category) -> T.Dict[str, float]:\n entropy_original = entropy(df, category)\n return {k: (entropy_original - conditional_entropy(df, k, category)) / iv(df, k)\n for k in attributes\n }\n\ngain_ratio = pd.DataFrame(\n [calc_gain_ratio(df, attributes, category)], index=['\u200b\u589e\u76ca\u200b\u7387\u200b']\n)\ngain_ratio\n
def iv(df, discrete_col): p = df[discrete_col].value_counts() / len(df) return -sum(p * np.log2(p)) def calc_gain_ratio(df, attributes, category) -> T.Dict[str, float]: entropy_original = entropy(df, category) return {k: (entropy_original - conditional_entropy(df, k, category)) / iv(df, k) for k in attributes } gain_ratio = pd.DataFrame( [calc_gain_ratio(df, attributes, category)], index=['\u200b\u589e\u76ca\u200b\u7387\u200b'] ) gain_ratio Out[33]: \u200b\u8272\u6cfd\u200b \u200b\u6839\u8482\u200b \u200b\u6572\u58f0\u200b \u200b\u7eb9\u7406\u200b \u200b\u8110\u90e8\u200b \u200b\u89e6\u611f\u200b \u200b\u589e\u76ca\u200b\u7387\u200b 0.06844 0.101759 0.105627 0.263085 0.186727 0.006918 \u200b\u57fa\u5c3c\u200b\u6307\u6570\u200b\u8861\u91cf\u200b\u4ece\u200b\u6570\u636e\u200b\u96c6\u4e2d\u200b\u968f\u673a\u200b\u62bd\u53d6\u200b\u4e24\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u6807\u7b7e\u200b\u53d6\u503c\u200b\u4e0d\u540c\u200b\u7684\u200b\u6982\u7387\u200b\u3002
In\u00a0[34]: Copied! def gini(df, target_col):\n p = df[target_col].value_counts() / len(df)\n return 1 - sum(p ** 2)\n\ndef gini_conditional(df, discrete_col, target_col):\n ret = 0\n for col in df[discrete_col].unique():\n p = len(df[df[discrete_col] == col]) / len(df)\n ret += p * gini(df[df[discrete_col] == col], target_col)\n return ret\n\ndef calc_gini_index(df, attributes, category) -> T.Dict[str, float]:\n return {\n k: sum((df[k].value_counts() / len(df)) * gini_conditional(df, k, category))\n for k in attributes\n }\n\ngini_index = pd.DataFrame([calc_gini_index(df, attributes, category)], index=['\u200b\u57fa\u5c3c\u200b\u6307\u6570\u200b'])\ngini_index\n
def gini(df, target_col): p = df[target_col].value_counts() / len(df) return 1 - sum(p ** 2) def gini_conditional(df, discrete_col, target_col): ret = 0 for col in df[discrete_col].unique(): p = len(df[df[discrete_col] == col]) / len(df) ret += p * gini(df[df[discrete_col] == col], target_col) return ret def calc_gini_index(df, attributes, category) -> T.Dict[str, float]: return { k: sum((df[k].value_counts() / len(df)) * gini_conditional(df, k, category)) for k in attributes } gini_index = pd.DataFrame([calc_gini_index(df, attributes, category)], index=['\u200b\u57fa\u5c3c\u200b\u6307\u6570\u200b']) gini_index Out[34]: \u200b\u8272\u6cfd\u200b \u200b\u6839\u8482\u200b \u200b\u6572\u58f0\u200b \u200b\u7eb9\u7406\u200b \u200b\u8110\u90e8\u200b \u200b\u89e6\u611f\u200b \u200b\u57fa\u5c3c\u200b\u6307\u6570\u200b 0.427451 0.422269 0.423529 0.277124 0.344538 0.494118 In\u00a0[35]: Copied! class TreeNode():\n\n def __init__(self, key):\n self.key = key\n self.mapping = {}\n\n def add_child(self, value, child):\n self.mapping[value] = child\n\n def predict(self, x):\n if self.key not in x or x[self.key] not in self.mapping:\n return None\n if isinstance(self.mapping[x[self.key]], TreeNode):\n return self.mapping[x[self.key]].predict(x)\n return self.mapping[x[self.key]]\n\ndef build_tree(df, attributes, category):\n if len(df[category].unique()) == 1:\n return df[category].unique()[0]\n if len(attributes) == 0:\n return df[category].value_counts().index[0]\n gain = calc_gain(df, attributes, category)\n best_attr = max(gain, key=lambda _: gain[_])\n for attr in attributes:\n if entropy(df, category) - conditional_entropy(df, attr, category) > entropy(df, category) - conditional_entropy(df, best_attr, category):\n best_attr = attr\n tree = TreeNode(best_attr)\n for value in df[best_attr].unique():\n tree.add_child(value, build_tree(df[df[best_attr] == value], [attr for attr in attributes if attr != best_attr], category))\n return tree\n\ntree = build_tree(df, attributes, category)\n
class TreeNode(): def __init__(self, key): self.key = key self.mapping = {} def add_child(self, value, child): self.mapping[value] = child def predict(self, x): if self.key not in x or x[self.key] not in self.mapping: return None if isinstance(self.mapping[x[self.key]], TreeNode): return self.mapping[x[self.key]].predict(x) return self.mapping[x[self.key]] def build_tree(df, attributes, category): if len(df[category].unique()) == 1: return df[category].unique()[0] if len(attributes) == 0: return df[category].value_counts().index[0] gain = calc_gain(df, attributes, category) best_attr = max(gain, key=lambda _: gain[_]) for attr in attributes: if entropy(df, category) - conditional_entropy(df, attr, category) > entropy(df, category) - conditional_entropy(df, best_attr, category): best_attr = attr tree = TreeNode(best_attr) for value in df[best_attr].unique(): tree.add_child(value, build_tree(df[df[best_attr] == value], [attr for attr in attributes if attr != best_attr], category)) return tree tree = build_tree(df, attributes, category) \u200b\u51b3\u7b56\u6811\u200b\u91c7\u53d6\u200b\u81ea\u9876\u5411\u4e0b\u200b\u7684\u200bpredict\u200b\u65b9\u5f0f\u200b
In\u00a0[36]: Copied! assert isinstance(tree, TreeNode)\ntree.predict({\n '\u200b\u8272\u6cfd\u200b': '\u200b\u9752\u7eff\u200b',\n '\u200b\u6839\u8482\u200b': '\u200b\u8737\u7f29\u200b',\n '\u200b\u6572\u58f0\u200b': '\u200b\u6d4a\u54cd\u200b',\n '\u200b\u7eb9\u7406\u200b': '\u200b\u6e05\u6670\u200b',\n '\u200b\u8110\u90e8\u200b': '\u200b\u51f9\u9677\u200b',\n '\u200b\u89e6\u611f\u200b': '\u200b\u786c\u6ed1\u200b'\n})\n
assert isinstance(tree, TreeNode) tree.predict({ '\u200b\u8272\u6cfd\u200b': '\u200b\u9752\u7eff\u200b', '\u200b\u6839\u8482\u200b': '\u200b\u8737\u7f29\u200b', '\u200b\u6572\u58f0\u200b': '\u200b\u6d4a\u54cd\u200b', '\u200b\u7eb9\u7406\u200b': '\u200b\u6e05\u6670\u200b', '\u200b\u8110\u90e8\u200b': '\u200b\u51f9\u9677\u200b', '\u200b\u89e6\u611f\u200b': '\u200b\u786c\u6ed1\u200b' }) Out[36]: '\u200b\u662f\u200b'
In\u00a0[119]: Copied! from sklearn.model_selection import train_test_split\n\ndef no_split(train, test, attributes, category):\n return train[category].value_counts().index[0]\n\ndef build_pre_prune(train, test, attributes, category, tree_root=None):\n if len(train[category].unique()) == 1:\n return train[category].unique()[0]\n no_split_result = no_split(train, test, attributes, category)\n no_split_metric = np.sum(test[category] == no_split_result)\n if len(attributes) == 0:\n return no_split_result\n\n # \u200b\u9009\u62e9\u200b\u5212\u5206\u200b\u5c5e\u6027\u200b\n gain = calc_gain(train, attributes, category)\n best_attr = max(gain, key=lambda _: gain[_])\n\n # \u200b\u521b\u5efa\u200b\u8282\u70b9\u200b\n tree = TreeNode(best_attr)\n if tree_root is None:\n tree_root = tree\n for value in train[best_attr].unique():\n tree.add_child(value, no_split(\n train[train[best_attr] == value], test,\n [attr for attr in attributes if attr != best_attr], category\n ))\n\n # \u200b\u8ba1\u7b97\u200b\u526a\u679d\u200b\u6548\u679c\u200b\n result = []\n for row in test[attributes].itertuples():\n row_dict = row._asdict()\n result.append(tree_root.predict(row_dict))\n split_metric = np.sum([a == b for a, b in zip(result, test[category])])\n\n # \u200b\u526a\u679d\u200b\n print(f'\u200b\u526a\u679d\u200b\u524d\u200b: {no_split_metric}, \u200b\u526a\u679d\u200b\u540e\u200b: {split_metric}')\n if split_metric < no_split_metric:\n print('\u200b\u4e0d\u200b\u526a\u679d\u200b')\n return no_split_result\n print('\u200b\u526a\u679d\u200b')\n for value in train[best_attr].unique():\n child = build_pre_prune(\n train[train[best_attr] == value], test,\n [attr for attr in attributes if attr != best_attr], category,\n tree_root\n )\n tree.add_child(value, child)\n return tree\n\ntrain, test = train_test_split(df, test_size=0.5)\ntree = build_pre_prune(train, test, attributes, category)\n\nresult = [\n tree.predict(row._asdict()) if isinstance(tree, TreeNode) else tree\n for row in test[attributes].itertuples()\n]\nsplit_metric = np.mean([a == b for a, b in zip(result, test[category])])\nsplit_metric\n
from sklearn.model_selection import train_test_split def no_split(train, test, attributes, category): return train[category].value_counts().index[0] def build_pre_prune(train, test, attributes, category, tree_root=None): if len(train[category].unique()) == 1: return train[category].unique()[0] no_split_result = no_split(train, test, attributes, category) no_split_metric = np.sum(test[category] == no_split_result) if len(attributes) == 0: return no_split_result # \u200b\u9009\u62e9\u200b\u5212\u5206\u200b\u5c5e\u6027\u200b gain = calc_gain(train, attributes, category) best_attr = max(gain, key=lambda _: gain[_]) # \u200b\u521b\u5efa\u200b\u8282\u70b9\u200b tree = TreeNode(best_attr) if tree_root is None: tree_root = tree for value in train[best_attr].unique(): tree.add_child(value, no_split( train[train[best_attr] == value], test, [attr for attr in attributes if attr != best_attr], category )) # \u200b\u8ba1\u7b97\u200b\u526a\u679d\u200b\u6548\u679c\u200b result = [] for row in test[attributes].itertuples(): row_dict = row._asdict() result.append(tree_root.predict(row_dict)) split_metric = np.sum([a == b for a, b in zip(result, test[category])]) # \u200b\u526a\u679d\u200b print(f'\u200b\u526a\u679d\u200b\u524d\u200b: {no_split_metric}, \u200b\u526a\u679d\u200b\u540e\u200b: {split_metric}') if split_metric < no_split_metric: print('\u200b\u4e0d\u200b\u526a\u679d\u200b') return no_split_result print('\u200b\u526a\u679d\u200b') for value in train[best_attr].unique(): child = build_pre_prune( train[train[best_attr] == value], test, [attr for attr in attributes if attr != best_attr], category, tree_root ) tree.add_child(value, child) return tree train, test = train_test_split(df, test_size=0.5) tree = build_pre_prune(train, test, attributes, category) result = [ tree.predict(row._asdict()) if isinstance(tree, TreeNode) else tree for row in test[attributes].itertuples() ] split_metric = np.mean([a == b for a, b in zip(result, test[category])]) split_metric \u200b\u526a\u679d\u200b\u524d\u200b: 4, \u200b\u526a\u679d\u200b\u540e\u200b: 4\n\u200b\u526a\u679d\u200b\n\u200b\u526a\u679d\u200b\u524d\u200b: 5, \u200b\u526a\u679d\u200b\u540e\u200b: 0\n\u200b\u4e0d\u200b\u526a\u679d\u200b\n
Out[119]: 0.4444444444444444
In\u00a0[120]: Copied! def build_post_prune(train, test, attributes, category):\n tree = build_tree(train, attributes, category)\n # TODO: apply post pruning\n
def build_post_prune(train, test, attributes, category): tree = build_tree(train, attributes, category) # TODO: apply post pruning"},{"location":"coding/machine-learning/decision-tree/","title":"\u51b3\u7b56\u6811\u200b\u00b6","text":"\u200b\u51b3\u7b56\u6811\u200b\u662f\u200b\u4e00\u7c7b\u200b\u57fa\u4e8e\u200b\u89c4\u5219\u200b\u7684\u200b\u673a\u5668\u200b\u5b66\u4e60\u200b\u7b97\u6cd5\u200b
"},{"location":"coding/machine-learning/decision-tree/","title":"\u5212\u5206\u200b\u6307\u6807\u200b\u00b6","text":"\u200b\u51b3\u7b56\u6811\u200b\u7b97\u6cd5\u200b\u4e2d\u200b\u7684\u200b\u6838\u5fc3\u200b\u662f\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u5212\u5206\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u5c5e\u6027\u200b\u7684\u200b\u9009\u62e9\u200b\uff0c\u200b\u6bcf\u200b\u4e00\u6b65\u200b\u5212\u5206\u200b\u9700\u8981\u200b\u53d6\u5f97\u200b\u6700\u5927\u200b\u7684\u200b\u5212\u5206\u200b\u6548\u679c\u200b\uff0c\u200b\u5373\u200b\u4ea7\u751f\u200b\u7684\u200b\u5b50\u96c6\u200b\u201c\u200b\u7eaf\u5ea6\u200b\u201d\u200b\u6700\u9ad8\u200b\u3002\u200b\u5e38\u89c1\u200b\u7684\u200b\u4e09\u79cd\u200b\u8861\u91cf\u200b\u96c6\u5408\u200b\u201c\u200b\u7eaf\u5ea6\u200b\u201d\u200b\u7684\u200b\u6307\u6807\u200b\u4e3a\u200b\u4fe1\u606f\u200b\u589e\u76ca\u200b\u3001\u200b\u589e\u76ca\u200b\u7387\u200b\u4e0e\u200b\u57fa\u5c3c\u200b\u6307\u6570\u200b\u3002
"},{"location":"coding/machine-learning/decision-tree/","title":"\u51b3\u7b56\u6811\u200b\u6784\u5efa\u200b\u00b6","text":"\u200b\u672c\u200b\u8282\u200b\u5b9e\u73b0\u200b\u539f\u4e66\u56fe\u200b4.2\u200b\u7684\u200b\u51b3\u7b56\u6811\u200b\u5b66\u4e60\u200b\u7b97\u6cd5\u200b\u3002
"},{"location":"coding/machine-learning/decision-tree/","title":"\u51b3\u7b56\u6811\u200b\u526a\u679d\u200b\u5904\u7406\u200b\u00b6","text":"\u200b\u51b3\u7b56\u6811\u200b\u6709\u9884\u200b\u526a\u679d\u200b\u548c\u200b\u540e\u200b\u526a\u679d\u200b\u4e24\u4e2a\u200b\u526a\u679d\u200b\u6b65\u9aa4\u200b\uff0c\u200b\u526a\u679d\u200b\u53ef\u4ee5\u200b\u7f13\u89e3\u200b\u6a21\u578b\u200b\u51fa\u73b0\u200b\u7684\u200b\u8fc7\u200b\u62df\u5408\u200b\u73b0\u8c61\u200b\u3002
"},{"location":"coding/machine-learning/decision-tree/","title":"\u9884\u200b\u526a\u679d\u200b\u00b6","text":"\u200b\u9884\u200b\u526a\u679d\u200b\u5728\u200b\u6a21\u578b\u200b\u7684\u200b\u8bad\u7ec3\u200b\u9636\u6bb5\u200b\u5c31\u200b\u901a\u8fc7\u200b\u9a8c\u8bc1\u200b\u96c6\u200b\u7684\u200b\u51c6\u786e\u6027\u200b\u6765\u200b\u51b3\u5b9a\u200b\u662f\u5426\u200b\u8fdb\u884c\u200b\u5212\u5206\u200b\u3002
"},{"location":"coding/machine-learning/decision-tree/","title":"\u540e\u200b\u526a\u679d\u200b\u00b6","text":"\u200b\u540e\u200b\u526a\u679d\u200b\u5728\u200b\u51b3\u7b56\u6811\u200b\u751f\u6210\u200b\u540e\u200b\u518d\u200b\u904d\u5386\u200b\u51b3\u7b56\u6811\u200b\uff0c\u200b\u5220\u53bb\u200b\u8fc7\u591a\u200b\u7684\u200b\u8282\u70b9\u200b
"},{"location":"coding/machine-learning/gaussian-process/","title":"\u9ad8\u65af\u200b\u8fc7\u7a0b","text":"In\u00a0[1]: Copied! from scipy.stats import norm\nfrom matplotlib import pyplot as plt\nimport numpy as np\n\n%config InlineBackend.figure_format = 'svg'\n
from scipy.stats import norm from matplotlib import pyplot as plt import numpy as np %config InlineBackend.figure_format = 'svg' \u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\uff08Gaussian Process\uff0cGP\uff09\u200b\u662f\u200b\u5c06\u200b\u591a\u200b\u53d8\u91cf\u200b\u9ad8\u65af\u5206\u5e03\u200b\u63a8\u5e7f\u200b\u5230\u200b\u65e0\u9650\u200b\u7ef4\u5ea6\u200b$\\mathcal X\\subseteq \\mathbb R^n$\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\u3002\u200b\u5177\u4f53\u200b\u5730\u200b\uff0c\u200b\u5bf9\u4e8e\u200b$X = \\{x_1, \\ldots, x_n\\}\\subseteq \\mathcal X$\uff0c\u200b\u968f\u673a\u53d8\u91cf\u200b$f(x_1), \\ldots, f(x_n)$\u200b\u670d\u4ece\u200b\u591a\u5143\u200b\u9ad8\u65af\u5206\u5e03\u200b$\\mathcal N(\\mu(X), \\Sigma(X))$\u3002\u200b\u5176\u4e2d\u200b\uff0c$\\mu(X)$\u200b\u4e3a\u200b\u5747\u503c\u200b\u51fd\u6570\u200b\uff0c$\\Sigma(X)$\u200b\u4e3a\u200b\u534f\u65b9\u5dee\u200b\u51fd\u6570\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u9ad8\u65af\u5206\u5e03\u200b\u7814\u7a76\u200b\u7684\u200b\u662f\u200b\u51fd\u6570\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\u3002
\u200b\u591a\u5143\u200b\u9ad8\u65af\u5206\u5e03\u200b\u7684\u200b\u6761\u4ef6\u200b\u5206\u5e03\u200b\u4f9d\u7136\u200b\u662f\u200b\u9ad8\u65af\u5206\u5e03\u200b\u3002\u200b\u8bbe\u200b\u968f\u673a\u53d8\u91cf\u200b$X = (X_1, X_2)$\u200b\u670d\u4ece\u200b\u591a\u5143\u200b\u9ad8\u65af\u5206\u5e03\u200b$\\mathcal N(\\mu, \\Sigma)$\uff0c\u200b\u5176\u4e2d\u200b$\\mu = (\\mu_1, \\mu_2)$\uff0c$\\Sigma = \\begin{bmatrix} \\Sigma_{11} & \\Sigma_{12} \\\\ \\Sigma_{21} & \\Sigma_{22} \\end{bmatrix}$\uff0c\u200b\u5219\u200b\u7ed9\u5b9a\u200b$X_1 = x_1$\u200b\u540e\u200b\uff0c$X_2$\u200b\u7684\u200b\u6761\u4ef6\u200b\u5206\u5e03\u200b\u4e3a\u200b\uff1a
$$ (X_2\\mid X_1 = x_1) \\sim \\mathcal N(\\mu_2 + \\Sigma_{21}\\Sigma_{11}^{-1}(x_1 - \\mu_1), \\Sigma_{22} - \\Sigma_{21}\\Sigma_{11}^{-1}\\Sigma_{12}) $$
\u200b\u8bbe\u200b\u4e00\u7ec4\u200b\u89c2\u6d4b\u200b\u6570\u636e\u200b\u6570\u636e\u200b$\\boldsymbol X = x_1, \\ldots, x_n$\u200b\u53ca\u5176\u200b\u5bf9\u5e94\u200b\u7684\u200b\u51fd\u6570\u200b\u503c\u200b$\\boldsymbol Y = y_1, \\ldots, y_n$\u3002\u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u6570\u636e\u200b\u70b9\u200b$x$\uff0c\u200b\u8981\u200b\u9884\u6d4b\u200b\u5176\u200b\u5bf9\u5e94\u200b\u7684\u200b\u51fd\u6570\u200b\u503c\u200b$y = f(x)$\u200b\u7684\u200b\u5206\u5e03\u200b\u3002\u200b\u5982\u679c\u200b\u6211\u4eec\u200b\u80fd\u200b\u8ba1\u7b97\u200b\u51fa\u200b\u89c2\u6d4b\u200b\u6570\u636e\u200b$\\boldsymbol Y$\u200b\u548c\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b$y$\u200b\u4e4b\u95f4\u200b\u7684\u200b\u534f\u65b9\u5dee\u200b\uff0c\u200b\u4fbf\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u9ad8\u65af\u5206\u5e03\u200b\u7684\u200b\u6761\u4ef6\u200b\u5206\u5e03\u200b\u8ba1\u7b97\u200b\u5f97\u5230\u200b$f(x)$\u200b\u7684\u200b\u5747\u503c\u200b\u548c\u200b\u65b9\u5dee\u200b\u3002
\u200b\u6b64\u5904\u200b\u4ee4\u200b$n = 1$\uff0c\u200b\u5373\u200b$X$\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\u6574\u4e2a\u200b\u5b9e\u6570\u200b\u57df\u200b\u3002
In\u00a0[2]: Copied! def y_posterior(x, x_obs, y_obs, kernel_func):\n # x: (num_features)\n # x_obs: (num_observations, num_features)\n # y_obs: (num_observations)\n\n sigma_21 = kernel_func(x, x_obs) # dim: (num_observations)\n sigma_22 = kernel_func(x, x) # dim: scalar\n # dim: (num_observations, num_observations)\n sigma_11 = kernel_func(x_obs, x_obs)\n\n inv_11 = np.linalg.inv(sigma_11 + 1e-8 * np.eye(sigma_11.shape[0]))\n mu = np.einsum('i,ij,j->', sigma_21, inv_11, y_obs)\n sigma = sigma_22 - np.einsum('j,jk,k->', sigma_21, inv_11, sigma_21)\n return mu, sigma\n\ndef generate_samples(num_samples=5, target_function=None, sigma=1):\n X = np.random.uniform(-5, 5, num_samples).reshape(-1, 1)\n Y = np.random.normal(0, sigma, num_samples)\n if target_function is not None:\n Y += target_function(X)\n return X, Y\n\ndef plot_posterior(kernel, num_samples=5, X_obs=None, Y_obs=None, ax=None, grid_size=200):\n if X_obs is None != Y_obs is None:\n raise ValueError('X_obs must be provided if Y_obs is provided.')\n if (X_obs is None or Y_obs is None) and num_samples is None:\n raise ValueError('num_samples must be provided if X_obs is provided.')\n if X_obs is None:\n assert Y_obs is None\n X_obs, Y_obs = generate_samples(num_samples)\n assert X_obs is not None and Y_obs is not None\n if X_obs.shape[0] != Y_obs.shape[0]:\n raise ValueError('The number of observations must be the same.')\n\n X_min, X_max = np.min(X_obs), np.max(X_obs)\n alpha_95 = norm.ppf(0.975)\n\n if ax is None:\n fig, ax = plt.subplots()\n else:\n fig = None\n\n X = np.linspace(X_min, X_max, grid_size)\n y = [y_posterior(x, X_obs, Y_obs, kernel) for x in X.reshape(-1, 1)]\n ax.plot(X, [y[0] for y in y], linewidth=1, label='Function')\n ax.scatter(X_obs, Y_obs, s=20, label='Observations')\n ax.fill_between(X,\n [y[0] - np.sqrt(y[1]) * alpha_95 for y in y],\n [y[0] + np.sqrt(y[1]) * alpha_95 for y in y],\n alpha=0.5, label='95% CI'\n )\n\n ax.set_xlabel('x')\n ax.set_xlabel('y')\n ax.legend()\n if fig is not None:\n fig.show()\n
def y_posterior(x, x_obs, y_obs, kernel_func): # x: (num_features) # x_obs: (num_observations, num_features) # y_obs: (num_observations) sigma_21 = kernel_func(x, x_obs) # dim: (num_observations) sigma_22 = kernel_func(x, x) # dim: scalar # dim: (num_observations, num_observations) sigma_11 = kernel_func(x_obs, x_obs) inv_11 = np.linalg.inv(sigma_11 + 1e-8 * np.eye(sigma_11.shape[0])) mu = np.einsum('i,ij,j->', sigma_21, inv_11, y_obs) sigma = sigma_22 - np.einsum('j,jk,k->', sigma_21, inv_11, sigma_21) return mu, sigma def generate_samples(num_samples=5, target_function=None, sigma=1): X = np.random.uniform(-5, 5, num_samples).reshape(-1, 1) Y = np.random.normal(0, sigma, num_samples) if target_function is not None: Y += target_function(X) return X, Y def plot_posterior(kernel, num_samples=5, X_obs=None, Y_obs=None, ax=None, grid_size=200): if X_obs is None != Y_obs is None: raise ValueError('X_obs must be provided if Y_obs is provided.') if (X_obs is None or Y_obs is None) and num_samples is None: raise ValueError('num_samples must be provided if X_obs is provided.') if X_obs is None: assert Y_obs is None X_obs, Y_obs = generate_samples(num_samples) assert X_obs is not None and Y_obs is not None if X_obs.shape[0] != Y_obs.shape[0]: raise ValueError('The number of observations must be the same.') X_min, X_max = np.min(X_obs), np.max(X_obs) alpha_95 = norm.ppf(0.975) if ax is None: fig, ax = plt.subplots() else: fig = None X = np.linspace(X_min, X_max, grid_size) y = [y_posterior(x, X_obs, Y_obs, kernel) for x in X.reshape(-1, 1)] ax.plot(X, [y[0] for y in y], linewidth=1, label='Function') ax.scatter(X_obs, Y_obs, s=20, label='Observations') ax.fill_between(X, [y[0] - np.sqrt(y[1]) * alpha_95 for y in y], [y[0] + np.sqrt(y[1]) * alpha_95 for y in y], alpha=0.5, label='95% CI' ) ax.set_xlabel('x') ax.set_xlabel('y') ax.legend() if fig is not None: fig.show() \u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u5047\u8bbe\u200b\u66f4\u200b\u76f8\u4f3c\u200b\u7684\u200b$x$\u200b\u6709\u200b\u66f4\u200b\u76f8\u4f3c\u200b\u7684\u200b$y$\uff0c\u200b\u5373\u200b$\\text{Cov}(f(x), f(x')) = d_{x, x'}$\u3002\u200b\u7528\u4e8e\u200b\u63cf\u8ff0\u200b$x$\u200b\u4e4b\u95f4\u200b\u76f8\u4f3c\u200b\u5ea6\u200b\u7684\u200b\u51fd\u6570\u200b\u79f0\u4e3a\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$d_{x, x'} = k(x, x')$\u3002\u200b\u6838\u200b\u51fd\u6570\u200b\u7684\u200b\u6570\u503c\u200b\u8d8a\u5927\u200b\uff0c\u200b\u8bf4\u660e\u200b$x$\u200b\u548c\u200b$x'$\u200b\u8d8a\u200b\u76f8\u4f3c\u200b\uff0c\u200b\u5426\u5219\u200b\u8d8a\u200b\u4e0d\u200b\u76f8\u4f3c\u200b\u3002
In\u00a0[3]: Copied! import functools\n\ndef kernel_wrapper(*args, **kwargs):\n if args:\n _kernel = args[0]\n if kwargs:\n _kernel = functools.partial(_kernel, **kwargs)\n\n @functools.wraps(_kernel)\n def new_kernel(a, b):\n if a.shape[-1] != b.shape[-1]:\n raise ValueError('The last dimension of a and b must be the same.')\n\n num_a = 1 if a.ndim == 1 else a.shape[0]\n num_b = 1 if b.ndim == 1 else b.shape[0]\n num_hidden = a.shape[-1]\n target_shape = (num_a, num_b, num_hidden)\n\n x_a = np.broadcast_to(a.reshape((num_a, 1, num_hidden)), target_shape)\n x_b = np.broadcast_to(b.reshape((1, num_b, num_hidden)), target_shape)\n\n result = _kernel(x_a, x_b)\n result_shape = [\n *([] if a.ndim == 1 else [num_a]),\n *([] if b.ndim == 1 else [num_b])\n ]\n result = result.reshape(result_shape)\n return result\n\n return new_kernel\n else:\n return functools.partial(kernel_wrapper, **kwargs)\n\n# Use the following method to define a kernel function\n# @kernel_wrapper - for kernels with no hyperparameters\n# @kernel_wrapper(hyperparameter=value) - for kernels with hyperparameters\n
import functools def kernel_wrapper(*args, **kwargs): if args: _kernel = args[0] if kwargs: _kernel = functools.partial(_kernel, **kwargs) @functools.wraps(_kernel) def new_kernel(a, b): if a.shape[-1] != b.shape[-1]: raise ValueError('The last dimension of a and b must be the same.') num_a = 1 if a.ndim == 1 else a.shape[0] num_b = 1 if b.ndim == 1 else b.shape[0] num_hidden = a.shape[-1] target_shape = (num_a, num_b, num_hidden) x_a = np.broadcast_to(a.reshape((num_a, 1, num_hidden)), target_shape) x_b = np.broadcast_to(b.reshape((1, num_b, num_hidden)), target_shape) result = _kernel(x_a, x_b) result_shape = [ *([] if a.ndim == 1 else [num_a]), *([] if b.ndim == 1 else [num_b]) ] result = result.reshape(result_shape) return result return new_kernel else: return functools.partial(kernel_wrapper, **kwargs) # Use the following method to define a kernel function # @kernel_wrapper - for kernels with no hyperparameters # @kernel_wrapper(hyperparameter=value) - for kernels with hyperparameters \u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u5e38\u7528\u200b\u7684\u200b\u6838\u200b\u51fd\u6570\u200b\u6709\u200b\uff1a
- \u200b\u7ebf\u6027\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$k(x, x'; v) = vx^Tx'$\uff0c\u200b\u5176\u4e2d\u200b$v$\u200b\u4e3a\u200b\u8d85\u200b\u53c2\u6570\u200b\u3002
In\u00a0[4]: Copied! def linear_kernel(a, b, nu=1):\n # Input: a, b: (num_a, num_b, num_hidden)\n return np.einsum('ijk,ijk->ij', a, b) * nu\n\nplot_posterior(kernel_wrapper(nu=1)(linear_kernel), grid_size=10)\n
def linear_kernel(a, b, nu=1): # Input: a, b: (num_a, num_b, num_hidden) return np.einsum('ijk,ijk->ij', a, b) * nu plot_posterior(kernel_wrapper(nu=1)(linear_kernel), grid_size=10) /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:48: RuntimeWarning: invalid value encountered in sqrt\n [y[0] - np.sqrt(y[1]) * alpha_95 for y in y],\n/var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:49: RuntimeWarning: invalid value encountered in sqrt\n [y[0] + np.sqrt(y[1]) * alpha_95 for y in y],\n/var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:57: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
- \u200b\u5e73\u65b9\u200b\u6307\u6570\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$k(x, x'; \\sigma, l) = \\sigma^2\\exp\\left(-\\frac{\\|x - x'\\|^2}{2l^2}\\right)$\uff0c$\\sigma$\u200b\u4e3a\u200b\u5e45\u5ea6\u200b\u53c2\u6570\u200b\uff0c\u200b\u63a7\u5236\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u968f\u673a\u200b\u6ce2\u52a8\u200b\u8303\u56f4\u200b\uff1b$l$\u200b\u4e3a\u200b\u957f\u5ea6\u200b\u53c2\u6570\u200b\uff0c\u200b\u63a7\u5236\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u968f\u673a\u200b\u6ce2\u52a8\u200b\u9891\u7387\u200b\u3002
In\u00a0[5]: Copied! def rbf_kernel(a, b, sigma, l):\n # Input: a, b: (num_a, num_b, num_hidden)\n return sigma ** 2 * np.exp(\n -0.5 * np.linalg.norm(a - b, axis=-1) ** 2 / l ** 2\n )\n\nplot_posterior(kernel_wrapper(sigma=1, l=1)(rbf_kernel), grid_size=80)\n
def rbf_kernel(a, b, sigma, l): # Input: a, b: (num_a, num_b, num_hidden) return sigma ** 2 * np.exp( -0.5 * np.linalg.norm(a - b, axis=-1) ** 2 / l ** 2 ) plot_posterior(kernel_wrapper(sigma=1, l=1)(rbf_kernel), grid_size=80) /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:57: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
- Matern\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$k(x, x'; \\sigma, l, \\nu) = \\frac{2^{1-\\nu}}{\\Gamma(\\nu)}\\left(\\frac{\\sqrt{2\\nu}\\|x - x'\\|}{l}\\right)^\\nu K_\\nu\\left(\\frac{\\sqrt{2\\nu}\\|x - x'\\|}{l}\\right)$\uff0c\u200b\u5176\u4e2d\u200b$\\nu$\u200b\u4e3a\u200b\u8d85\u200b\u53c2\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u63a7\u5236\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u5149\u6ed1\u5ea6\u200b\uff1b$K_\\nu$\u200b\u4e3a\u200b\u4fee\u6b63\u200bBessel\u200b\u51fd\u6570\u200b\u3002
In\u00a0[6]: Copied! from scipy.special import kn, gamma\n\ndef matern_kernel(a, b, l, nu):\n # Input: a, b: (num_a, num_b, num_hidden)\n x = (np.sqrt(2 * nu) * np.linalg.norm(a - b, axis=-1) / l)\n y = 2 ** (1 - nu) / gamma(nu) * x ** nu * kn(nu, x)\n # Replace inf with 1\n y = np.where(x < 1e-6, 1, y)\n return y\n\nplot_posterior(kernel_wrapper(l=1, nu=2)(matern_kernel), 4, grid_size=80)\n
from scipy.special import kn, gamma def matern_kernel(a, b, l, nu): # Input: a, b: (num_a, num_b, num_hidden) x = (np.sqrt(2 * nu) * np.linalg.norm(a - b, axis=-1) / l) y = 2 ** (1 - nu) / gamma(nu) * x ** nu * kn(nu, x) # Replace inf with 1 y = np.where(x < 1e-6, 1, y) return y plot_posterior(kernel_wrapper(l=1, nu=2)(matern_kernel), 4, grid_size=80) /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/497016935.py:6: RuntimeWarning: invalid value encountered in multiply\n y = 2 ** (1 - nu) / gamma(nu) * x ** nu * kn(nu, x)\n/var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:57: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
- \u200b\u5468\u671f\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$k(x, x'; \\sigma, l, p) = \\sigma^2\\exp\\left(-\\frac{2\\sin^2(\\pi\\|x - x'\\|/p)}{l^2}\\right)$\uff0c\u200b\u5176\u4e2d\u200b$p$\u200b\u4e3a\u200b\u5468\u671f\u200b\u53c2\u6570\u200b\uff0c$l$\u200b\u4e3a\u200b\u957f\u5ea6\u200b\u53c2\u6570\u200b\uff0c$\\sigma$\u200b\u4e3a\u200b\u5e45\u5ea6\u200b\u53c2\u6570\u200b\u3002
In\u00a0[7]: Copied! def periodic_kernel(a, b, sigma, l, p):\n # Input: a, b: (num_a, num_b, num_hidden)\n return sigma ** 2 * np.exp(\n -2 * np.sin(np.pi * np.linalg.norm(a - b, axis=-1) / p) ** 2 / l ** 2\n )\n\nplot_posterior(kernel_wrapper(sigma=1, l=1, p=2)(periodic_kernel), 4, grid_size=150)\n
def periodic_kernel(a, b, sigma, l, p): # Input: a, b: (num_a, num_b, num_hidden) return sigma ** 2 * np.exp( -2 * np.sin(np.pi * np.linalg.norm(a - b, axis=-1) / p) ** 2 / l ** 2 ) plot_posterior(kernel_wrapper(sigma=1, l=1, p=2)(periodic_kernel), 4, grid_size=150) /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:57: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
\u200b\u566a\u58f0\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a$k(x, x'; \\sigma, l) = \\sigma^2\\delta_{x, x'}$\uff0c\u200b\u5176\u4e2d\u200b$\\delta_{x, x'}$\u200b\u4e3a\u200bKronecker delta\u200b\u51fd\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u6355\u83b7\u200b\u89c2\u6d4b\u200b\u6570\u636e\u200b\u7684\u200b\u566a\u58f0\u200b\u3002
$$ \\delta(x, x') = \\begin{cases} 1, & x = x' \\\\ 0, & x \\neq x' \\end{cases} $$
In\u00a0[8]: Copied! def noise_kernel(a, b, sigma):\n return sigma ** 2 * np.all((a == b), axis=-1)\n\nplot_posterior(kernel_wrapper(sigma=1)(noise_kernel), 5)\n
def noise_kernel(a, b, sigma): return sigma ** 2 * np.all((a == b), axis=-1) plot_posterior(kernel_wrapper(sigma=1)(noise_kernel), 5) /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:57: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
\u200b\u5728\u200b\u5b9e\u9645\u200b\u5e94\u7528\u200b\u4e2d\u200b\uff0c\u200b\u9700\u8981\u200b\u6839\u636e\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u5df2\u77e5\u200b\u7684\u200b\u7279\u6027\u200b\uff0c\u200b\u8bbe\u8ba1\u200b\u5408\u9002\u200b\u7684\u200b\u6838\u200b\u51fd\u6570\u200b\uff1a\u200b\u5982\u679c\u200b\u51fd\u6570\u200b\u4e2d\u200b\u5305\u542b\u200b\u5468\u671f\u6027\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5468\u671f\u200b\u6838\u200b\u51fd\u6570\u200b\uff1b\u200b\u5982\u679c\u200b\u51fd\u6570\u200b\u503c\u200b\u5728\u200b\u76f8\u4f3c\u200b\u7684\u200b$x$\u200b\u4e4b\u95f4\u200b\u53d8\u5316\u200b\u8f83\u200b\u5c0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5e73\u65b9\u200b\u6307\u6570\u200b\u6838\u200b\u51fd\u6570\u200b\u3002
\u200b\u5982\u200b\u5bf9\u4e8e\u200b\u51fd\u6570\u200b
$$ f(x) = \\sin(\\pi x) + 0.3 x^2 + \\varepsilon $$
\u200b\u9700\u8981\u200b\u540c\u65f6\u200b\u5f15\u5165\u200b\u5468\u671f\u200b\u6838\u200b\u51fd\u6570\u200b\u548c\u200b\u5e73\u65b9\u200b\u6307\u6570\u200b\u6838\u200b\u51fd\u6570\u200b\uff0c\u200b\u624d\u80fd\u200b\u8f83\u200b\u597d\u200b\u5730\u200b\u9884\u6d4b\u200b\u51fd\u6570\u200b\u503c\u200b\u3002
In\u00a0[9]: Copied! def target_function(X):\n x = X.reshape(-1)\n return np.sin(x * 2 * 3.14 / 2) + x ** 2 * 0.3\n\n\ndef plot_function(func, ax, X_min=-5, X_max=5, grid_size=200, **kwargs):\n X = np.linspace(X_min, X_max, grid_size)\n Y = func(X.reshape(-1, 1))\n ax.plot(X, Y, **kwargs)\n\nfig, ax = plt.subplots(figsize=(4, 4))\nplot_function(target_function, ax, grid_size=100)\nax.set_xlabel('x')\nax.set_ylabel('y')\nax.set_title('Target Function')\nfig.show()\n
def target_function(X): x = X.reshape(-1) return np.sin(x * 2 * 3.14 / 2) + x ** 2 * 0.3 def plot_function(func, ax, X_min=-5, X_max=5, grid_size=200, **kwargs): X = np.linspace(X_min, X_max, grid_size) Y = func(X.reshape(-1, 1)) ax.plot(X, Y, **kwargs) fig, ax = plt.subplots(figsize=(4, 4)) plot_function(target_function, ax, grid_size=100) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_title('Target Function') fig.show() /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/4237481582.py:16: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
In\u00a0[10]: Copied! periodic = kernel_wrapper(sigma=1, l=1, p=2)(periodic_kernel)\nrbf = kernel_wrapper(sigma=1, l=1)(rbf_kernel)\nnoise = kernel_wrapper(sigma=0.1)(noise_kernel)\n\ndef added(a, b):\n return periodic(a, b) + rbf(a, b) + noise(a, b)\n\nkernels = {\n 'Periodic': periodic,\n 'RBF': rbf,\n 'Hybrid': added\n}\n\nX_obs, Y_obs = generate_samples(10, target_function, sigma=0.5)\nX_min, X_max = np.min(X_obs), np.max(X_obs)\n\nfig, axes = plt.subplots(1, 3, figsize=(10, 3))\nfor ax, (name, kernel) in zip(axes, kernels.items()):\n plot_posterior(kernel, X_obs=X_obs, Y_obs=Y_obs, ax=ax, grid_size=150)\n plot_function(target_function, ax, X_min, X_max, color='red', label='Target Function', grid_size=100)\n ax.set_title(f'{name} Kernel')\n ax.get_legend().remove()\nfig.show()\n
periodic = kernel_wrapper(sigma=1, l=1, p=2)(periodic_kernel) rbf = kernel_wrapper(sigma=1, l=1)(rbf_kernel) noise = kernel_wrapper(sigma=0.1)(noise_kernel) def added(a, b): return periodic(a, b) + rbf(a, b) + noise(a, b) kernels = { 'Periodic': periodic, 'RBF': rbf, 'Hybrid': added } X_obs, Y_obs = generate_samples(10, target_function, sigma=0.5) X_min, X_max = np.min(X_obs), np.max(X_obs) fig, axes = plt.subplots(1, 3, figsize=(10, 3)) for ax, (name, kernel) in zip(axes, kernels.items()): plot_posterior(kernel, X_obs=X_obs, Y_obs=Y_obs, ax=ax, grid_size=150) plot_function(target_function, ax, X_min, X_max, color='red', label='Target Function', grid_size=100) ax.set_title(f'{name} Kernel') ax.get_legend().remove() fig.show() /var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:48: RuntimeWarning: invalid value encountered in sqrt\n [y[0] - np.sqrt(y[1]) * alpha_95 for y in y],\n/var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/2131638459.py:49: RuntimeWarning: invalid value encountered in sqrt\n [y[0] + np.sqrt(y[1]) * alpha_95 for y in y],\n/var/folders/wg/gb8y92_d43j60wvfw6bs_cz00000gn/T/ipykernel_96329/1232705018.py:23: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n fig.show()\n
\u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u4e0d\u9002\u200b\u7528\u4e8e\u200b\u4ee5\u4e0b\u200b\u573a\u666f\u200b\uff1a
- \u200b\u6570\u636e\u91cf\u200b\u8f83\u5927\u200b\u65f6\u200b\uff0c\u200b\u7531\u4e8e\u200b\u8ba1\u7b97\u200b$m$\u200b\u7ef4\u200b\u77e9\u9635\u200b\u9006\u200b\u7684\u200b\u590d\u6742\u5ea6\u200b\u4e3a\u200b$O(m^3)$\uff0c\u200b\u8ba1\u7b97\u200b\u590d\u6742\u5ea6\u200b\u8f83\u200b\u9ad8\u200b\u3002
- \u200b\u6570\u636e\u200b\u7ef4\u5ea6\u200b\u8f83\u200b\u9ad8\u65f6\u200b\uff0c\u200b\u7ef4\u5ea6\u200b\u707e\u96be\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u6838\u200b\u51fd\u6570\u200b\u5bb9\u6613\u200b\u9000\u5316\u200b\uff0c\u200b\u65e0\u6cd5\u200b\u6355\u83b7\u200b\u6570\u636e\u200b\u4e4b\u95f4\u200b\u7684\u200b\u76f8\u4f3c\u6027\u200b\u3002
- \u200b\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u9884\u6d4b\u200b\u7ed3\u679c\u200b\u662f\u200b\u8fde\u7eed\u200b\u7684\u200b\uff0c\u200b\u65e0\u6cd5\u200b\u76f4\u63a5\u200b\u5904\u7406\u200b\u8fde\u7eed\u200b\u6570\u636e\u200b\u3002
"},{"location":"coding/machine-learning/gaussian-process/","title":"\u9ad8\u65af\u200b\u8fc7\u7a0b\u200b\u00b6","text":""},{"location":"coding/machine-learning/linear-models/","title":"\u7ebf\u6027\u200b\u6a21\u578b","text":"In\u00a0[\u00a0]: Copied! import numpy as np\nimport pandas as pd\n\ndf = pd.read_csv('data/melon3.0a.csv')\nX_rcol, y_rcol = df.columns[1:-2], df.columns[-2] # columns used for regression\nX_ccol, y_ccol = df.columns[1:-1], df.columns[-1] # columns used for classification\nvalue_map = {\n '\u200b\u8272\u6cfd\u200b': {'\u200b\u6d45\u767d\u200b': 0, '\u200b\u9752\u7eff\u200b': 1, '\u200b\u4e4c\u9ed1\u200b': 2},\n '\u200b\u6839\u8482\u200b': {'\u200b\u8737\u7f29\u200b': 0, '\u200b\u7a0d\u200b\u8737\u200b': 1, '\u200b\u786c\u633a\u200b': 2},\n '\u200b\u6572\u58f0\u200b': {'\u200b\u6c89\u95f7\u200b': 0, '\u200b\u6d4a\u54cd\u200b': 1, '\u200b\u6e05\u8106\u200b': 2},\n '\u200b\u7eb9\u7406\u200b': {'\u200b\u6a21\u7cca\u200b': 0, '\u200b\u7a0d\u7cca\u200b': 1, '\u200b\u6e05\u6670\u200b': 2},\n '\u200b\u8110\u90e8\u200b': {'\u200b\u51f9\u9677\u200b': 0, '\u200b\u7a0d\u200b\u51f9\u200b': 1, '\u200b\u5e73\u5766\u200b': 2},\n '\u200b\u89e6\u611f\u200b': {'\u200b\u786c\u6ed1\u200b': 0, '\u200b\u8f6f\u200b\u7c98\u200b': 1},\n '\u200b\u597d\u74dc\u200b': {'\u200b\u662f\u200b': 1, '\u200b\u5426\u200b': 0},\n}\nfor col in value_map:\n df[col] = df[col].map(value_map[col])\n\nX = np.concatenate([df[X_rcol].values, np.ones((df.shape[0], 1))], axis=1)\ny = df[y_rcol].values.reshape(-1, 1)\n\ndef linear_regression(X, y):\n return np.linalg.inv(X.T @ X) @ X.T @ y\n\nlinear_regression(X, y).T\n
import numpy as np import pandas as pd df = pd.read_csv('data/melon3.0a.csv') X_rcol, y_rcol = df.columns[1:-2], df.columns[-2] # columns used for regression X_ccol, y_ccol = df.columns[1:-1], df.columns[-1] # columns used for classification value_map = { '\u200b\u8272\u6cfd\u200b': {'\u200b\u6d45\u767d\u200b': 0, '\u200b\u9752\u7eff\u200b': 1, '\u200b\u4e4c\u9ed1\u200b': 2}, '\u200b\u6839\u8482\u200b': {'\u200b\u8737\u7f29\u200b': 0, '\u200b\u7a0d\u200b\u8737\u200b': 1, '\u200b\u786c\u633a\u200b': 2}, '\u200b\u6572\u58f0\u200b': {'\u200b\u6c89\u95f7\u200b': 0, '\u200b\u6d4a\u54cd\u200b': 1, '\u200b\u6e05\u8106\u200b': 2}, '\u200b\u7eb9\u7406\u200b': {'\u200b\u6a21\u7cca\u200b': 0, '\u200b\u7a0d\u7cca\u200b': 1, '\u200b\u6e05\u6670\u200b': 2}, '\u200b\u8110\u90e8\u200b': {'\u200b\u51f9\u9677\u200b': 0, '\u200b\u7a0d\u200b\u51f9\u200b': 1, '\u200b\u5e73\u5766\u200b': 2}, '\u200b\u89e6\u611f\u200b': {'\u200b\u786c\u6ed1\u200b': 0, '\u200b\u8f6f\u200b\u7c98\u200b': 1}, '\u200b\u597d\u74dc\u200b': {'\u200b\u662f\u200b': 1, '\u200b\u5426\u200b': 0}, } for col in value_map: df[col] = df[col].map(value_map[col]) X = np.concatenate([df[X_rcol].values, np.ones((df.shape[0], 1))], axis=1) y = df[y_rcol].values.reshape(-1, 1) def linear_regression(X, y): return np.linalg.inv(X.T @ X) @ X.T @ y linear_regression(X, y).T \u200b\u635f\u5931\u200b\u51fd\u6570\u200b\u4e3a\u5747\u65b9\u200b\u8bef\u5dee\u200b
In\u00a0[\u00a0]: Copied! def mse_loss(X, y, w):\n return np.mean((X @ w - y) ** 2)\n\nmse_loss(X, y, linear_regression(X, y))\n
def mse_loss(X, y, w): return np.mean((X @ w - y) ** 2) mse_loss(X, y, linear_regression(X, y)) \u200b\u5f53\u200b\u6837\u672c\u200b\u77e9\u9635\u200b\u975e\u6ee1\u200b\u79e9\u65f6\u200b\uff0c\u200b\u5b58\u5728\u200b\u591a\u4e2a\u200b\u6ee1\u8db3\u200b\u8bad\u7ec3\u200b\u96c6\u200b\u7684\u200b\u6a21\u578b\u200b\uff0c\u200b\u6b64\u65f6\u200b\u53ef\u4ee5\u200b\u5728\u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\u4e2d\u200b\u52a0\u5165\u200b\u6b63\u5219\u200b\u5316\u9879\u200b\uff0c\u200b\u5982\u200bL2-norm\u200b\u5373\u200b\u52a0\u5165\u200b\u6743\u91cd\u200b\u7684\u200b\u5e73\u65b9\u200b\u4e4b\u200b\u548c\u200b\u3002\u200b\u7136\u540e\u200b\u4f7f\u7528\u200b\u68af\u5ea6\u200b\u4e0b\u964d\u200b\u7b49\u200b\u6570\u503c\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u8ba1\u7b97\u200b\u3002
In\u00a0[\u00a0]: Copied! class SGD():\n def __init__(self, d, lr=0.01, epochs=1000):\n self.d = d\n self.lr = lr\n self.epochs = epochs\n\n def __call__(self, X, y):\n w = np.random.normal(0, 1, size=(X.shape[1], 1))\n for _ in range(self.epochs):\n w -= self.lr * self.d(X, y, w)\n return w\n\noptim_l2 = SGD(lambda X, y, w: X.T @ (X @ w - y) + 0.1 * w)\n\nw = optim_l2(X, y)\nprint(w.T, mse_loss(X, y, w))\n
class SGD(): def __init__(self, d, lr=0.01, epochs=1000): self.d = d self.lr = lr self.epochs = epochs def __call__(self, X, y): w = np.random.normal(0, 1, size=(X.shape[1], 1)) for _ in range(self.epochs): w -= self.lr * self.d(X, y, w) return w optim_l2 = SGD(lambda X, y, w: X.T @ (X @ w - y) + 0.1 * w) w = optim_l2(X, y) print(w.T, mse_loss(X, y, w)) \u200b\u5bf9\u7387\u200b\u56de\u5f52\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u7ebf\u6027\u200b\u6a21\u578b\u200b\u5e94\u7528\u200b\u5230\u200b\u4e8c\u200b\u5206\u7c7b\u200b\u95ee\u9898\u200b\u4e0a\u200b\u3002\u200b\u5bf9\u7387\u200b\u56de\u5f52\u200b\u9700\u8981\u200b\u7528\u5230\u200blogit\u200b\u51fd\u6570\u200b\u5c06\u200b\u8fde\u7eed\u200b\u7684\u200b\u56de\u5f52\u200b\u503c\u200b\u6620\u5c04\u200b\u5230\u200b $(0, 1)$ \u200b\u4e0a\u200b
$$ f(x) = \\frac{1}{1 + e^{-x}} $$
In\u00a0[\u00a0]: Copied! X = df[X_ccol].values\ny = df[y_ccol].values.reshape(-1, 1)\n\ndef sigmoid(x):\n return 1 / (1 + np.exp(-x))\n\ndef precision(X, y, w):\n return np.mean((sigmoid(X @ w) > 0.5) == y)\n
X = df[X_ccol].values y = df[y_ccol].values.reshape(-1, 1) def sigmoid(x): return 1 / (1 + np.exp(-x)) def precision(X, y, w): return np.mean((sigmoid(X @ w) > 0.5) == y) \u200b\u4f7f\u7528\u200b\u6781\u5927\u200b\u4f3c\u7136\u6cd5\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u5bf9\u7387\u200b\u56de\u5f52\u200b\u7684\u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b
$$ l(\\boldsymbol w) = \\sum_{i=1}^m \\left(-\\boldsymbol y_i\\boldsymbol \\beta^\\top \\boldsymbol x_i + \\ln \\left(1 + e^{\\boldsymbol \\beta^\\top \\boldsymbol x_i}\\right) \\right) $$
In\u00a0[\u00a0]: Copied! optim_logit = SGD(lambda X, y, w: X.T @ (sigmoid(X @ w) - y))\n\nw = optim_logit(X, y)\nprint(w.T, precision(X, y, w))\n
optim_logit = SGD(lambda X, y, w: X.T @ (sigmoid(X @ w) - y)) w = optim_logit(X, y) print(w.T, precision(X, y, w)) In\u00a0[\u00a0]: Copied! def cov(X, a, b):\n return np.mean((X[:, a] - np.mean(X[:, a])) * (X[:, b] - np.mean(X[:, b])))\n\ndef cov_matrix(X):\n return np.array([\n [\n cov(X, i, j)\n for i in range(X.shape[1])\n ]\n for j in range(X.shape[1])\n ])\n\nsw = cov_matrix(X[y[:, 0] == 0]) + cov_matrix(X[y[:, 0] == 1])\nmu0, mu1 = np.mean(X[y[:, 0] == 0], axis=0), np.mean(X[y[:, 0] == 1], axis=0)\nw = np.linalg.inv(sw) @ (mu0 - mu1).reshape(-1, 1)\nc0, c1 = w.T @ mu0, w.T @ mu1\n\ndef precision(X, y, w):\n return np.mean((X @ w < (c0 + c1) / 2) == y)\n\nprecision(X, y, w)\n
def cov(X, a, b): return np.mean((X[:, a] - np.mean(X[:, a])) * (X[:, b] - np.mean(X[:, b]))) def cov_matrix(X): return np.array([ [ cov(X, i, j) for i in range(X.shape[1]) ] for j in range(X.shape[1]) ]) sw = cov_matrix(X[y[:, 0] == 0]) + cov_matrix(X[y[:, 0] == 1]) mu0, mu1 = np.mean(X[y[:, 0] == 0], axis=0), np.mean(X[y[:, 0] == 1], axis=0) w = np.linalg.inv(sw) @ (mu0 - mu1).reshape(-1, 1) c0, c1 = w.T @ mu0, w.T @ mu1 def precision(X, y, w): return np.mean((X @ w < (c0 + c1) / 2) == y) precision(X, y, w)"},{"location":"coding/machine-learning/linear-models/","title":"\u7ebf\u6027\u200b\u6a21\u578b\u200b\u00b6","text":"\u200b\u4ee5\u4e0b\u200b\u4f7f\u7528\u200bPython\u200b\u5b9e\u73b0\u200b\u57fa\u4e8e\u200b\u7ebf\u6027\u5173\u7cfb\u200b\u7684\u200b\u5404\u79cd\u200b\u673a\u5668\u200b\u5b66\u4e60\u200b\u6a21\u578b\u200b
"},{"location":"coding/machine-learning/linear-models/","title":"\u591a\u5143\u200b\u7ebf\u6027\u200b\u56de\u5f52\u200b\u00b6","text":"\u200b\u591a\u5143\u200b\u7ebf\u6027\u200b\u56de\u5f52\u200b\u7684\u200b\u4e00\u822c\u200b\u5f62\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
$$ \\hat{\\boldsymbol y} = f(\\boldsymbol x) = \\boldsymbol w^\\top \\boldsymbol x + b $$
\u200b\u5f53\u200b\u6837\u672c\u200b\u77e9\u9635\u200b$\\boldsymbol X$\u200b\u6ee1\u200b\u79e9\u65f6\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u4e3a\u200b
$$ \\newcommand{\\bmX}{\\boldsymbol X} \\hat{\\boldsymbol w}^* = (\\bmX^\\top\\bmX)^{-1}\\bmX^\\top \\boldsymbol y $$
"},{"location":"coding/machine-learning/linear-models/#lda","title":"LDA\u00b6","text":"LDA\u200b\u662f\u200b\u7ebf\u6027\u200b\u5224\u522b\u5206\u6790\u200b\u7684\u200b\u7b80\u79f0\u200b\uff0c\u200b\u5c5e\u4e8e\u200b\u5206\u7c7b\u200b\u7b97\u6cd5\u200b\u3002\u200b\u8be5\u200b\u7b97\u6cd5\u200b\u7684\u200b\u6838\u5fc3\u200b\u601d\u8def\u200b\u4e3a\u200b\u5c06\u200b\u6837\u672c\u200b\u70b9\u200b\u6295\u5f71\u200b\u5230\u200b $n$ \u200b\u7ef4\u7a7a\u95f4\u200b\u7684\u200b\u5e73\u9762\u200b\u4e0a\u200b\uff0c\u200b\u901a\u8fc7\u200b\u9009\u62e9\u200b\u5e73\u9762\u200b\uff0c\u200b\u6700\u5c0f\u5316\u200b\u540c\u4e00\u200b\u7c7b\u522b\u200b\u5185\u200b\u6837\u672c\u200b\u70b9\u200b\u6295\u5f71\u200b\u7684\u200b\u8ddd\u79bb\u200b\uff0c\u200b\u540c\u65f6\u200b\u6700\u5927\u5316\u200b\u4e0d\u540c\u200b\u7c7b\u522b\u200b\u6837\u672c\u200b\u70b9\u200b\u6295\u5f71\u200b\u7684\u200b\u8ddd\u79bb\u200b\u3002
"},{"location":"coding/python/","title":"Python","text":" - \u200b\u5173\u95ed\u200bPython\u200b\u7ebf\u7a0b\u200b
- Python\u200b\u4e2d\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b
- \u200b\u5e8f\u5217\u200b\u7c7b\u578b\u200b
- \u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b
- \u200b\u5b57\u8282\u200b\u7c7b\u578b\u200b
- \u200b\u51fd\u6570\u200b
"},{"location":"coding/python/bytes/","title":"Python\u200b\u4e2d\u200b\u7684\u200b\u5b57\u8282\u200b\u7c7b\u578b","text":"Python\u200b\u4e2d\u200b\u7684\u200b\u5b57\u8282\u200b\u7c7b\u578b\u200b\u5305\u62ec\u200b\u5b57\u8282\u200b\u6d41\u200b\u4e0e\u200b\u5b57\u7b26\u4e32\u200b\u3002
\u200b\u5b57\u7b26\u4e32\u200b\u662f\u200b\u7531\u200b\u5b57\u7b26\u200b\u7ec4\u6210\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002\u200b\u5b57\u7b26\u200b\u662f\u200b\u7ec4\u6210\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u57fa\u672c\u200b\u5355\u4f4d\u200b\uff0c\u200b\u5bf9\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5207\u7247\u200b\u7b49\u200b\u64cd\u4f5c\u200b\u4ee5\u200b\u5b57\u7b26\u200b\u4e3a\u200b\u5355\u4f4d\u200b\u8fdb\u884c\u200b\u3002\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u7531\u200b\u4e24\u4e2a\u200b\u90e8\u5206\u200b\u8fdb\u884c\u200b\u5b9a\u4e49\u200b\uff1a
- \u200b\u7801\u4f4d\u200b\uff0c\u200b\u5373\u200b\u5b57\u7b26\u200b\u7684\u200b\u5b57\u8282\u200b\u6570\u503c\u200b\u3002
- \u200b\u7f16\u7801\u65b9\u5f0f\u200b\uff0c\u200b\u5373\u200b\u5b57\u8282\u200b\u6570\u503c\u200b\u4e0e\u200b\u5b57\u7b26\u200b\u7684\u200b\u5bf9\u5e94\u200b\u5173\u7cfb\u200b\u3002
\u200b\u901a\u8fc7\u200b\u7f16\u7801\u200b\u4e0e\u200b\u89e3\u7801\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u5b57\u7b26\u4e32\u200b\u4e0e\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u4e4b\u95f4\u200b\u7684\u200b\u8f6c\u6362\u200b\uff1a
>>> \"abc\".encode() \nb'abc'\n>>> b\"abc\".decode()\n'abc'\n>>>\n
Python\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4e24\u79cd\u200b\u5b57\u8282\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5373\u200bbytes
\u200b\u4e0e\u200bbytearray
\uff0c\u200b\u4e24\u8005\u200b\u90fd\u200b\u662f\u200b\u7531\u200b\u65e0\u200b\u7b26\u53f7\u200b\u5b57\u8282\u200b\uff08\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b0~255\uff09\u200b\u4e3a\u200b\u5355\u4f4d\u200b\u7ec4\u6210\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002bytes
\u200b\u662f\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\u3002
>>> b\"\\xff\\xff\"[0]\n255\n>>> bytes(3)[0]=1 \nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: 'bytes' object does not support item assignment\n>>>\n
New in version 3.5
bytes
\u200b\u5bf9\u8c61\u200b\u4e0e\u200bbytearray
\u200b\u5bf9\u8c61\u200b\u6dfb\u52a0\u200b\u4e86\u200bhex
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5b57\u8282\u200b\u7684\u200b\u5341\u516d\u8fdb\u5236\u200b\u8868\u793a\u200b\u5f62\u5f0f\u200b\u3002\u200b\u8be5\u200b\u51fd\u6570\u200b\u4e0e\u200bbytes
\u200b\u5bf9\u8c61\u200b\u7684\u200bfromhex
\u200b\u65b9\u6cd5\u200b\u76f8\u53cd\u200b\u3002
>>> import random\n>>> seq = random.randbytes(8) # New in Python 3.9\n>>> seq.hex() # doctest: +SKIP\n'f04be4376519e9ce'\n>>>\n
Changed in version 3.8
hex
\u200b\u65b9\u6cd5\u200b\u65b0\u589e\u200b\u4e86\u200b\u53ef\u9009\u200b\u7684\u200bsep
\u200b\u53c2\u6570\u200b\u4e0e\u200bbytes_per_sep
\u200b\u53c2\u6570\u200b\u3002
sep
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\u533a\u6bb5\u200b\u95f4\u200b\u7684\u200b\u8fde\u63a5\u200b\u5b57\u7b26\u4e32\u200b\uff1b bytes_per_sep
\u200b\u53c2\u6570\u200b\u7528\u4e8e\u200b\u5212\u5206\u200b\u8fde\u7eed\u200b\u7684\u200b\u5b57\u8282\u200b\u6bb5\u200b\uff0c\u200b\u5b57\u8282\u200b\u6bb5\u200b\u4ece\u200b\u53f3\u200b\u5f80\u200b\u5de6\u200b\u8fdb\u884c\u200b\u5212\u5206\u200b\u3002
# Following the previous example\n>>> seq.hex('-') # doctest: +SKIP\n'f0-4b-e4-37-65-19-e9-ce'\n>>> seq.hex('-', 2) # doctest: +SKIP\n'f04b-e437-6519-e9ce'\n>>> seq.hex('-', 3) # doctest: +SKIP\n'f04b-e43765-19e9ce'\n>>>\n
\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u5b57\u8282\u200b\u6709\u200b\u4e09\u79cd\u200b\u8868\u793a\u200b\u65b9\u5f0f\u200b\uff1a
- ASCII\u200b\u4e2d\u200b\u89c4\u5b9a\u200b\u7684\u200b\u53ef\u200b\u6253\u5370\u200b\u5b57\u7b26\u200b\uff0c\u200b\u4f7f\u7528\u200b\u8be5\u200b\u5b57\u7b26\u200b\u672c\u8eab\u200b
- \u200b\u5236\u8868\u7b26\u200b\u3001\u200b\u6362\u884c\u7b26\u200b\u3001\u200b\u56de\u8f66\u7b26\u200b\u4e0e\u200b\u53cd\u200b\u659c\u6760\u200b\u4f7f\u7528\u200b\u5bf9\u5e94\u200b\u7684\u200b\u8f6c\u4e49\u5e8f\u5217\u200b\u8868\u793a\u200b\uff0c\u200b\u5373\u200b
\\t, \\n, \\r, \\\\
- \u200b\u6240\u6709\u200b\u5b57\u8282\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5341\u516d\u8fdb\u5236\u200b\u8f6c\u4e49\u5e8f\u5217\u200b\u8868\u793a\u200b\uff0c\u200b\u5982\u200b
\\x00
>>> b\"\\t\" == b\"\\x09\"\nTrue\n>>>\n
\u200b\u5b57\u7b26\u4e32\u200b\u4e0e\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200b\u533a\u522b\u200b\u5728\u4e8e\u200b\uff1a\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u7d22\u5f15\u200b\u4e0e\u200b\u5207\u7247\u200b\u64cd\u4f5c\u200b\u8fd4\u56de\u200b\u7684\u200b\u5bf9\u8c61\u200b\u90fd\u200b\u662f\u200b\u5b57\u7b26\u4e32\u200b\u7c7b\u578b\u200b\uff1b\u200b\u800c\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200b\u7d22\u5f15\u200b\u64cd\u4f5c\u200b\u8fd4\u56de\u200bint
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5207\u7247\u200b\u64cd\u4f5c\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u3002
"},{"location":"coding/python/bytes/#_1","title":"\u6784\u9020","text":"\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u6784\u9020\u200b\u975e\u5e38\u7b80\u5355\u200b\uff0c\u200b\u6b64\u5904\u200b\u4e0d\u200b\u505a\u200b\u8ba8\u8bba\u200b\u3002\u200b\u5728\u200b\u5b57\u7b26\u4e32\u200b\u524d\u52a0\u200br
\u200b\u53ef\u4ee5\u200b\u53d6\u6d88\u200b\u5b57\u7b26\u4e32\u200b\u5185\u90e8\u200b\u7684\u200b\u8f6c\u4e49\u200b\uff0c\u200b\u5982\u200b\uff1a
>>> print(r\"ab\\n\") \nab\\n\n>>>\n
\u200b\u5728\u200b\u5b57\u7b26\u4e32\u200b\u524d\u52a0\u200bb
\u200b\u53ef\u4ee5\u200b\u6784\u9020\u200b\u4e00\u4e2a\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u3002\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u53ea\u80fd\u200b\u5305\u542b\u200bASCII\u200b\u53ef\u200b\u6253\u5370\u200b\u5b57\u7b26\u200b\u3002
\u200b\u9664\u6b64\u4e4b\u5916\u200b\uff0c\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u8fd8\u6709\u200b\u5982\u4e0b\u200b\u6784\u9020\u200b\u65b9\u5f0f\u200b\uff1a
- \u200b\u6307\u5b9a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u548c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7f16\u7801\u65b9\u5f0f\u200b\uff0c\u200b\u5c06\u200b\u8be5\u200b\u5b57\u7b26\u4e32\u200b\u7f16\u7801\u200b\u4e3a\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b
- \u200b\u4e00\u4e2a\u200b\u4ec5\u200b\u5305\u542b\u200b
0~255
\u200b\u5185\u200b\u6570\u503c\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b - \u200b\u4e00\u4e2a\u200b\u5b9e\u73b0\u200b\u7f13\u51b2\u200b\u534f\u8bae\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5c06\u200b\u8be5\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u590d\u5236\u5230\u200b\u65b0\u200b\u7684\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u4e2d\u200b\uff08\u200b\u53ef\u80fd\u200b\u6d89\u53ca\u200b\u7c7b\u578b\u8f6c\u6362\u200b\uff09
- \u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\uff0c\u200b\u521b\u5efa\u200b\u5bf9\u5e94\u200b\u957f\u5ea6\u200b\u7684\u200b\u7a7a\u200b\u5b57\u8282\u200b\u5bf9\u8c61\u200b
\u200b\u5982\u200b\uff0c\u200b\u4ece\u200barray.array
\u200b\u5bf9\u8c61\u200b\u521b\u5efa\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\uff1a
>>> import array \n>>> import random\n>>> a = array.array(\"H\", [51417, 45016, 65120, 9976])\n>>> b = bytes(a)\n>>> b\nb'\\xd9\\xc8\\xd8\\xaf`\\xfe\\xf8&'\n>>>\n
"},{"location":"coding/python/bytes/#_2","title":"\u7ed3\u6784\u200b\u4f53","text":"struct
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5c06\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u5b57\u6bb5\u200b\u7684\u200b\u5143\u7ec4\u200b\uff0c\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bC\u200b\u8bed\u8a00\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u529f\u80fd\u200b\u3002
"},{"location":"coding/python/bytes/#_3","title":"\u7ed3\u6784\u200b\u5b9a\u4e49","text":"\u200b\u7ed3\u6784\u200b\u5b9a\u4e49\u200b\u5305\u542b\u200b\u4e24\u4e2a\u200b\u90e8\u5206\u200b\uff0c\u200b\u5373\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\u4e0e\u200b\u5b57\u200b\u6bb5\u200b\u3002struct
\u200b\u6a21\u5757\u200b\u5141\u8bb8\u200b\u591a\u79cd\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b
\u200b\u5b57\u7b26\u200b \u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b \u200b\u5927\u5c0f\u200b \u200b\u5bf9\u9f50\u200b\u65b9\u5f0f\u200b @
native native native =
native standard none <
little-endian standard none >
big-endian standard none !
network (= big-endian) standard none \u200b\u9ed8\u8ba4\u200b\u7684\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\u4e3a\u200b@
\u3002
struct
\u200b\u6a21\u5757\u200b\u7684\u200b\u5b57\u200b\u6bb5\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff0c\u200b\u6240\u6709\u200b\u7684\u200b\u5b57\u200b\u6bb5\u200b\u5728\u200bC\u200b\u8bed\u8a00\u200b\u4e2d\u200b\u90fd\u200b\u6709\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7c7b\u578b\u200b\uff1a
\u200b\u5b57\u7b26\u200b C \u200b\u7c7b\u578b\u200b Python \u200b\u7c7b\u578b\u200b \u200b\u5b57\u200b\u5bbd\u200b x
\uff08\u200b\u586b\u5145\u200b\u5b57\u8282\u200b\uff09 N/A c
char
\u200b\u957f\u5ea6\u200b\u4e3a\u200b1\u200b\u7684\u200b\u5b57\u8282\u200b 1 b
signed char
int
1 B
unsigned char
int
1 ?
_Bool
bool
1 h
short
int
2 H
unsigned short
int
2 i
int
int
4 I
unsigned int
int
4 l
long
int
4 L
unsigned long
int
4 q
long long
int
8 Q
unsigned long long
int
8 n
ssize_t
int
\uff08\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u9ed8\u8ba4\u200b\u6216\u200b@
\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\uff09 N
size_t
int
\uff08\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u9ed8\u8ba4\u200b\u6216\u200b@
\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\uff09 e
\uff08\u200b\u534a\u200b\u7cbe\u5ea6\u200b\uff09 float
2 f
float
float
4 d
double
float
8 s
char[]
bytes
\u200b\u4e0e\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u6709\u5173\u200b p
char[]
bytes
\u200b\u4e0e\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u6709\u5173\u200b P
void *
int
\u200b\u5f53\u200b\u8bd5\u56fe\u200b\u5c06\u200b\u975e\u200b\u6574\u6570\u200b\u5bf9\u8c61\u200b\u6253\u5305\u200b\u4e3a\u200b\u6574\u6570\u200b\u7c7b\u578b\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u7684\u200b__index__
\u200b\u65b9\u6cd5\u200b\u3002
\u200b\u4e00\u4e2a\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u5b9a\u4e49\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u7ed3\u6784\u200b\u7ec4\u7ec7\u200b\uff1a
- \u200b\u7b2c\u4e00\u4e2a\u200b\u5b57\u7b26\u200b\u8868\u793a\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b
- \u200b\u6b64\u540e\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\u8868\u793a\u200b\u7ed3\u6784\u200b\u4f53\u4e2d\u200b\u7684\u200b\u5b57\u200b\u6bb5\u200b\u7c7b\u578b\u200b
- \u200b\u9664\u200b
s
\u200b\u548c\u200bp
\u200b\u4ee5\u5916\u200b\uff0c\u200b\u5b57\u6bcd\u200b\u524d\u200b\u7684\u200b\u6570\u5b57\u200b\u8868\u660e\u200b\u8be5\u5b57\u6bb5\u200b\u91cd\u590d\u200b\u51fa\u73b0\u200b\u7684\u200b\u6b21\u6570\u200b s
\u3001p
\u200b\u524d\u200b\u7684\u200b\u6570\u5b57\u200b\u8868\u660e\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u957f\u5ea6\u200b
\u200b\u7ed3\u6784\u200b\u4f53\u200b\u5b57\u7b26\u4e32\u200b\u53ef\u4ee5\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200bstruct.Struct
\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u4e24\u8005\u200b\u5b9e\u73b0\u200b\u76f8\u540c\u200b\u7684\u200b\u529f\u80fd\u200b\u3002
"},{"location":"coding/python/bytes/#_4","title":"\u7ed3\u6784\u200b\u64cd\u4f5c","text":"\u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u5b9a\u4e49\u200b\u7684\u200b\u7ed3\u6784\u200b\u4f53\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u6570\u636e\u200b\u6309\u7167\u200b\u7ed3\u6784\u200b\u4f53\u200b\u8fdb\u884c\u200b\u6253\u5305\u200b\uff0c\u200b\u6216\u200b\u5c06\u200b\u7ed3\u6784\u200b\u4f53\u4e2d\u200b\u7684\u200b\u6570\u636e\u200b\u89e3\u5305\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u663e\u793a\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u5927\u5c0f\u200b\u3002
>>> import struct \n>>> struct.pack('<hhf', 1, 2, 3)\nb'\\x01\\x00\\x02\\x00\\x00\\x00@@'\n>>> struct.unpack('<hhf', b'\\x01\\x00\\x02\\x00\\x00\\x00@@')\n(1, 2, 3.0)\n>>>\n
New in version 3.4
struct
\u200b\u5bf9\u8c61\u200b\u65b0\u589e\u200b\u4e86\u200biter_unpack
\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u4e0d\u540c\u4e8e\u200bunpack
\u200b\u51fd\u6570\u200b\uff0citer_unpack
\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002
struct
\u200b\u6a21\u5757\u200b\u4e0d\u4f1a\u200b\u5bf9\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\u8fdb\u884c\u200b\u68c0\u6d4b\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5bf9\u4e8e\u200b\u540c\u4e00\u4e2a\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e0d\u540c\u200b\u7684\u200b\u7ed3\u6784\u200b\u4f53\u200b\u5b9a\u4e49\u200b\u5728\u200b\u89e3\u5305\u200b\u540e\u4f1a\u200b\u6709\u200b\u4e0d\u540c\u200b\u7684\u200b\u7ed3\u679c\u200b\uff1a
>>> struct.unpack('>hhf', b'\\x01\\x00\\x02\\x00\\x00\\x00@@') \n(256, 512, 2.304855714121459e-41)\n>>>\n
\u200b\u6bcf\u4e2a\u200b\u5b57\u6bb5\u200b\u90fd\u200b\u6709\u200b\u8303\u56f4\u200b\u9650\u5236\u200b\uff0c\u200b\u5f53\u200b\u4f20\u5165\u200b\u7684\u200b\u53c2\u6570\u200b\u8d85\u8fc7\u200b\u5b57\u6bb5\u200b\u6240\u200b\u5141\u8bb8\u200b\u7684\u200b\u8303\u56f4\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u629b\u51fa\u200b\u5f02\u5e38\u200b\uff1a
>>> struct.pack('<hhf', 32768, -32769, 3)\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nstruct.error: short format requires (-32768) <= number <= 32767\n>>>\n
\u200b\u5f53\u200b\u89e3\u5305\u200b\u7684\u200b\u5b57\u8282\u200b\u957f\u5ea6\u200b\u4e0e\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e0d\u200b\u5bf9\u5e94\u200b\u65f6\u200b\uff0c\u200b\u4e5f\u200b\u4f1a\u200b\u629b\u51fa\u200b\u5f02\u5e38\u200b\uff1a
>>> struct.unpack('>hhf', b'\\x01\\x00\\x02\\x00\\x00\\x00@') \nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nstruct.error: unpack requires a buffer of 8 bytes\n>>>\n
\u200b\u5bf9\u4e8e\u200b\u4efb\u4f55\u200b\u7ed3\u6784\u200b\u4f53\u200b\uff0cstruct
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200bcalcsize
\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u68c0\u67e5\u200b\u7ed3\u6784\u200b\u4f53\u200b\u957f\u5ea6\u200b\u3002
"},{"location":"coding/python/bytes/#_5","title":"\u5185\u5b58\u200b\u89c6\u56fe","text":"\u200b\u5185\u5b58\u200b\u89c6\u56fe\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5728\u200b\u4e0d\u540c\u200b\u5bf9\u8c61\u200b\u95f4\u200b\u5171\u4eab\u5185\u5b58\u200b\u7684\u200b\u65b9\u5f0f\u200b\u3002
\u200b\u6709\u5173\u200b\u5185\u5b58\u200b\u89c6\u56fe\u200b\u7684\u200b\u5185\u5bb9\u200b\uff0c\u200b\u8bf7\u200b\u53c2\u89c1\u200b\u5e8f\u5217\u200b\u7c7b\u578b\u200b\u7684\u200b\u5185\u5b58\u200b\u89c6\u56fe\u200b\u90e8\u5206\u200b\u3002
"},{"location":"coding/python/bytes/#_6","title":"\u5b57\u7b26\u4e32","text":"\u200b\u6b64\u5904\u200b\u7740\u91cd\u200b\u8ba8\u8bba\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u76f8\u5173\u200b\u95ee\u9898\u200b
"},{"location":"coding/python/bytes/#_7","title":"\u7f16\u7801\u200b\u4e0e\u200b\u89e3\u7801","text":"\u200b\u5982\u524d\u6240\u8ff0\u200b\uff0cstr.encode
\u200b\u65b9\u6cd5\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4ece\u200b\u5b57\u7b26\u4e32\u200b\u5230\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200b\u8f6c\u6362\u200b\u65b9\u5f0f\u200b\uff0cencoding
\u200b\u53c2\u6570\u200b\u6307\u660e\u200b\u4e86\u200b\u6240\u200b\u4f7f\u7528\u200b\u7684\u200b\u7f16\u7801\u5668\u200b\u3002
>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"utf-8\") \nb'\\xe6\\xb5\\x8b\\xe8\\xaf\\x95'\n>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"utf-16\")\nb'\\xff\\xfeKm\\xd5\\x8b'\n>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"gb2312\") \nb'\\xb2\\xe2\\xca\\xd4'\n>>>\n
\u200b\u5f53\u200b\u7f16\u7801\u200b\u8fc7\u7a0b\u200b\u51fa\u73b0\u200b\u9519\u8bef\u200b\uff0c\u200b\u5982\u200b\u7f16\u7801\u5668\u200b\u65e0\u6cd5\u200b\u8bc6\u522b\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u5b57\u7b26\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u629b\u51fa\u200bUnicodeEncodeError
\u200b\u5f02\u5e38\u200b\u3002
>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"latin-1\")\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nUnicodeEncodeError: 'latin-1' codec can't encode characters in position 0-1: ordinal not in range(256)\n>>>\n
\u200b\u51fa\u73b0\u200b\u9519\u8bef\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\u4ee5\u4e0b\u200b\u89e3\u51b3\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200berrors
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\uff1a
ignore
\uff1a\u200b\u8df3\u8fc7\u200b\u65e0\u6cd5\u200b\u7f16\u7801\u200b\u7684\u200b\u5b57\u7b26\u200b replace
\uff1a\u200b\u5c06\u200b\u65e0\u6cd5\u200b\u7f16\u7801\u200b\u7684\u200b\u5b57\u7b26\u200b\u66ff\u6362\u200b\u4e3a\u200b?
xmlcharrefreplace
\uff1a\u200b\u5c06\u200b\u65e0\u6cd5\u200b\u7f16\u7801\u200b\u7684\u200b\u5b57\u7b26\u200b\u66ff\u6362\u200b\u4e3a\u200bxml
\u200b\u5b9e\u4f53\u200b\uff08\u200b\u5373\u200bXML\u200b\u4e2d\u200b\u6240\u200b\u4f7f\u7528\u200b\u7684\u200b\u5b57\u7b26\u200b\u8f6c\u6362\u200b\u65b9\u5f0f\u200b\uff09
>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"latin-1\", errors=\"ignore\")\nb''\n>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"latin-1\", errors=\"replace\")\nb'??'\n>>> \"\u200b\u6d4b\u8bd5\u200b\".encode(\"latin-1\", errors=\"xmlcharrefreplace\")\nb'测试'\n>>>\n
\u200b\u5bf9\u5e94\u200b\u5730\u200b\uff0c\u200b\u89e3\u7801\u5668\u200b\u65e0\u6cd5\u200b\u8bc6\u522b\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200b\u5b57\u8282\u200b\u65f6\u4f1a\u200b\u4ea7\u751f\u200bUnicodeDecodeError
\u200b\u5f02\u5e38\u200b\u3002\u200b\u4f46\u200b\u4e0d\u200b\u629b\u51fa\u200b\u5f02\u5e38\u200b\u4e0d\u200b\u4ee3\u8868\u200b\u89e3\u7801\u200b\u6210\u529f\u200b\uff0c\u200b\u89e3\u7801\u200b\u5f97\u5230\u200b\u7684\u200b\u6570\u636e\u200b\u53ef\u80fd\u200b\u662f\u200b\u65e0\u7528\u200b\u6570\u636e\u200b\u3002errors
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\u4e86\u200b\u89e3\u7801\u5668\u200b\u5728\u200b\u51fa\u9519\u200b\u65f6\u200b\u7684\u200b\u884c\u4e3a\u200b\uff0creplace
\u200b\u5c06\u200b\u65e0\u6cd5\u200b\u7f16\u7801\u200b\u7684\u200b\u5b57\u7b26\u200b\u66ff\u6362\u200b\u4e3a\u200b\ufffd
\u3002
chardet
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u57fa\u4e8e\u200bPython\u200b\u7684\u200b\u5b57\u7b26\u200b\u7f16\u7801\u200b\u68c0\u6d4b\u5de5\u5177\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e8c\u8fdb\u5236\u200b\u5e8f\u5217\u200b\u5bf9\u200b\u539f\u59cb\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u7f16\u7801\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u63a8\u65ad\u200b\u3002\u200b\u4e0d\u8fc7\u200b\u63a8\u65ad\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u8f83\u200b\u957f\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u56e0\u4e3a\u200b\u4efb\u4f55\u200b\u5b57\u7b26\u4e32\u200b\u4f1a\u200b\u6709\u200b\u591a\u4e2a\u200b\u7f16\u7801\u65b9\u5f0f\u200b\u9002\u7528\u200b\u4e8e\u200b\u540c\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u6240\u4ee5\u200b\u65e0\u6cd5\u200b\u5b8c\u5168\u200b\u786e\u5b9a\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u7f16\u7801\u65b9\u5f0f\u200b\u3002
"},{"location":"coding/python/bytes/#bom","title":"BOM","text":"BOM\u200b\u662f\u200b\u5b57\u8282\u200b\u5e8f\u200b\u6807\u8bb0\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200bUnicode\u200b\u5b57\u7b26\u200b\u4e3a\u200bU+FEFF
\uff08\u200b\u4e0d\u200b\u5b58\u5728\u200bU+FFFE
\u200b\u5b57\u7b26\u200b\uff0c\u200b\u56e0\u6b64\u200b\u8be5\u200b\u5b57\u7b26\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u63a8\u65ad\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\uff09
\u200b\u5728\u200bUTF-16\u200b\u7f16\u7801\u200b\u7684\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u5f00\u5934\u200b\u4f1a\u200b\u5199\u5165\u200bBOM\uff0c\u200b\u5982\u679c\u200b\u5f00\u5934\u200b\u662f\u200bb'\\xff\\xfe'
\u200b\u4e24\u4e2a\u200b\u5b57\u8282\u200b\uff0c\u200b\u6307\u660e\u200b\u7f16\u7801\u200b\u65f6\u200b\u4f7f\u7528\u200blittle endian\u200b\u5b57\u8282\u200b\u7f16\u7801\u200b\u987a\u5e8f\u200b\u3002\u200b\u5982\u679c\u200b\u662f\u200bb'\\xfe\\xff'
\u200b\u4e24\u4e2a\u200b\u5b57\u8282\u200b\uff0c\u200b\u8bf4\u660e\u200b\u7f16\u7801\u200b\u65f6\u200b\u4f7f\u7528\u200b\u7684\u200b\u662f\u200bbig endian\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\u3002\u200b\u5982\u679c\u200b\u6307\u660e\u200bUTF-16\u200b\u6240\u200b\u4f7f\u7528\u200b\u7684\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\uff0c\u200b\u5982\u200bUTF-16LE\u200b\u6216\u200bUTF-16BE\uff0c\u200b\u5219\u200b\u4e0d\u4f1a\u200b\u751f\u6210\u200bBOM\u3002
BOM\u200b\u4ec5\u200b\u7528\u4e8e\u200b\u63a8\u65ad\u200b\u5b57\u8282\u200b\u987a\u5e8f\u200b\u800c\u200b\u4e0d\u4f1a\u200b\u51fa\u73b0\u200b\u5728\u200b\u6700\u7ec8\u200b\u89e3\u7801\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\u3002
"},{"location":"coding/python/bytes/#_8","title":"\u6587\u672c\u6587\u4ef6","text":"\u200b\u4f7f\u7528\u200bopen
\u200b\u51fd\u6570\u200b\u4ee5\u200b\u6587\u672c\u200b\u6a21\u5f0f\u200b\u6253\u5f00\u200b\u4e00\u4e2a\u200b\u6587\u4ef6\u200b\u65f6\u200b\uff0c\u200b\u6700\u597d\u200b\u6307\u5b9a\u200b\u6587\u4ef6\u200b\u7684\u200b\u7f16\u7801\u65b9\u5f0f\u200b\u3002
\u200b\u4e0d\u8981\u200b\u4f7f\u7528\u200b\u4e8c\u8fdb\u5236\u200b\u65b9\u5f0f\u200b\u6253\u5f00\u200b\u6587\u672c\u6587\u4ef6\u200b\u3002
"},{"location":"coding/python/bytes/#unicode","title":"Unicode\u200b\u89c4\u8303\u5316","text":"\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff1a
>>> a = 'caf\u00e9'\n>>> b = 'cafe\\u0301' \n>>> print(a, b)\ncaf\u00e9 cafe\u0301\n>>> a == b\nFalse\n>>>\n
\u200b\u76f8\u540c\u200b\u7684\u200b\u6253\u5370\u200b\u7ed3\u679c\u200b\uff0c\u200b\u5374\u200b\u5bf9\u5e94\u200b\u4e0d\u540c\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u539f\u56e0\u200b\u5728\u4e8e\u200b\u5b57\u7b26\u4e32\u200bb
\u200b\u4f7f\u7528\u200b\u4e86\u200bU+0301
\u200b\u5b57\u7b26\u200b\u4f5c\u4e3a\u200b\u91cd\u97f3\u200b\u6807\u8bb0\u200b\uff08\u200b\u7ec4\u5408\u200b\u5b57\u7b26\u200b\uff09\uff0c\u200b\u591a\u200b\u4f7f\u7528\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u5b57\u8282\u200b\u3002\u200b\u5bf9\u4e8e\u200bPython\u200b\u800c\u8a00\u200b\uff0c\u200b\u8fd9\u200b\u4e00\u6bb5\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u5e76\u4e0d\u76f8\u540c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u8ba4\u4e3a\u200ba != b
\u3002
>>> a.encode(\"utf-8\") \nb'caf\\xc3\\xa9'\n>>> b.encode(\"utf-8\") \nb'cafe\\xcc\\x81'\n>>>\n
unicodedata
\u200b\u6a21\u5757\u200b\u4e2d\u200b\u7684\u200bnormalize
\u200b\u51fd\u6570\u200b\u63d0\u4f9b\u200b\u4e86\u200bUnicode\u200b\u89c4\u8303\u5316\u200b\u7684\u200b\u529f\u80fd\u200b\uff0c\u200b\u8be5\u200b\u51fd\u6570\u200b\u63a5\u6536\u200b\u5982\u4e0b\u200b\u53c2\u6570\u200b\u7528\u4e8e\u200b\u786e\u5b9a\u200b\u8f6c\u6362\u200b\u6807\u51c6\u200b\uff1a
'NFC'
\uff1a\u200b\u4f7f\u7528\u200b\u6700\u5c11\u200b\u7801\u4f4d\u200b\u6784\u6210\u200b\u7b49\u4ef7\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b 'NFD'
\uff1a\u200b\u5c06\u200b\u7ec4\u5408\u200b\u5b57\u7b26\u200b\u5206\u89e3\u200b\u4e3a\u57fa\u200b\u5b57\u7b26\u200b\u4e0e\u200b\u5355\u72ec\u200b\u7684\u200b\u7ec4\u5408\u200b\u5b57\u7b26\u200b\uff08\u200b\u5982\u200bU+0301
\uff09\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u53bb\u9664\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u53d8\u97f3\u200b\u7b26\u53f7\u200b NFKC
\u3001NFKD
\u200b\u4f1a\u200b\u989d\u5916\u200b\u5c06\u200b\u517c\u5bb9\u200b\u5b57\u7b26\u200b\u5206\u89e3\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u6216\u200b\u591a\u4e2a\u200b\u517c\u5bb9\u200b\u5206\u89e3\u200b\uff0c\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u6570\u636e\u200b\u635f\u5931\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
>>> from unicodedata import normalize\n>>> normalize('NFKC', '\u337f') \n'\u200b\u682a\u5f0f\u4f1a\u793e\u200b'\n>>>\n
NKFC
\u3001NFKD
\u200b\u89c4\u8303\u5316\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u539f\u610f\u200b\u53d8\u5316\u200b\uff0c\u200b\u4f46\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u641c\u7d22\u5f15\u64ce\u200b\u3002
str.casefold
\u200b\u51fd\u6570\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u53e6\u200b\u4e00\u79cd\u200b\u89c4\u8303\u5316\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5373\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5927\u5199\u5b57\u6bcd\u200b\u8f6c\u4e3a\u200b\u5c0f\u5199\u200b\u3002\u200b\u4e0e\u200bstr.lower
\u200b\u4e0d\u540c\u200b\uff0c\u200b\u90e8\u5206\u200b\u5b57\u7b26\u200b\u4f1a\u200b\u88ab\u200b\u66ff\u6362\u6210\u200b\u65b0\u200b\u7684\u200b\u5b57\u7b26\u200b\u3002
"},{"location":"coding/python/bytes/#_9","title":"\u5b57\u7b26\u4e32\u200b\u6392\u5e8f","text":"\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u6392\u5e8f\u200b\u4e0e\u200b\u5176\u4ed6\u200b\u6570\u636e\u200b\u7684\u200b\u6392\u5e8f\u200b\u65b9\u5f0f\u200b\u76f8\u540c\u200b\uff0c\u200b\u90fd\u200b\u662f\u200b\u6309\u7167\u200b\u7801\u4f4d\u200b\u5347\u5e8f\u200b\u6392\u5e8f\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u975e\u200bASCII
\u200b\u5b57\u7b26\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u4e00\u4e9b\u200b\u95ee\u9898\u200b\uff0c\u200b\u5982\u200b\uff1a
>>> sorted(['caf\u00e9', 'cafu']) \n['cafu', 'caf\u00e9']\n>>>\n
\u200b\u6a21\u5757\u200blocale
\u200b\u63d0\u4f9b\u200b\u4e86\u200bstrxfrm
\u200b\u51fd\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u6309\u7167\u200b\u533a\u57df\u200b\u8bbe\u7f6e\u200b\u5bf9\u200b\u5b57\u7b26\u4e32\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\u3002\u200b\u5982\u679c\u200b\u64cd\u4f5c\u7cfb\u7edf\u200b\u652f\u6301\u200b\uff0c\u200b\u533a\u57df\u200b\u8bbe\u7f6e\u200b\u53ef\u4ee5\u200b\u5728\u200bsetlocale
\u200b\u51fd\u6570\u200b\u4e2d\u200b\u5168\u5c40\u200b\u6307\u5b9a\u200b\u3002
>>> import locale\n>>> locale.setlocale(locale.LC_COLLATE, \"en_US.UTF-8\")\n'en_US.UTF-8'\n>>> sorted(['caf\u00e9', 'cafu'], key=locale.strxfrm)\n['caf\u00e9', 'cafu']\n>>>\n
"},{"location":"coding/python/bytes/#api","title":"API","text":"\u200b\u90e8\u5206\u200b\u6d89\u53ca\u200b\u5230\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u4e00\u4e9b\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u8f93\u5165\u200b\u5b57\u7b26\u4e32\u200b\u6216\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u3002
"},{"location":"coding/python/bytes/#re","title":"re\u200b\u6a21\u5757","text":"\u200b\u4e0d\u540c\u4e8e\u200b\u4f7f\u7528\u200b\u5b57\u7b26\u4e32\u200b\u6784\u9020\u200b\u7684\u200b\u6b63\u5219\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u4f7f\u7528\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u6784\u9020\u200b\u7684\u200b\u6b63\u5219\u8868\u8fbe\u5f0f\u200b\uff0c\\d
\u200b\u4e0e\u200b\\w
\u200b\u53ea\u80fd\u200b\u5339\u914d\u200bASCII\u200b\u5b57\u7b26\u200b\u3002
"},{"location":"coding/python/bytes/#os","title":"os\u200b\u6a21\u5757","text":"os
\u200b\u6a21\u5757\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5b57\u7b26\u4e32\u200b\u53c2\u6570\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u66ff\u6362\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u51fd\u6570\u200b\u4f1a\u200b\u4f7f\u7528\u200bsys.getfilesystemencoding()
\u200b\u51fd\u6570\u200b\u53d6\u5f97\u200b\u5408\u9002\u200b\u7684\u200b\u7f16\u7801\u5668\u200b\u3002\u200b\u6b64\u5916\u200b\uff0cos
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200bfsencode
\u200b\u4e0e\u200bfsdecode
\u200b\u51fd\u6570\u200b\u7528\u4e8e\u200b\u624b\u52a8\u200b\u8fdb\u884c\u200b\u7f16\u7801\u200b\u4e0e\u200b\u89e3\u7801\u200b\u64cd\u4f5c\u200b\u3002
"},{"location":"coding/python/decorator/","title":"\u88c5\u9970\u200b\u5668","text":"\u200b\u88c5\u9970\u200b\u5668\u662f\u200b\u4e00\u4e2a\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u5e76\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u5982\u4e0b\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u88c5\u9970\u200b\u5668\u200b\uff1a
>>> def decorator(x):\n... print(x)\n... return x\n...\n>>>\n
\u200b\u88c5\u9970\u200b\u5668\u200b\u5728\u200b\u51fd\u6570\u200b\u5b9a\u4e49\u200b\u524d\u200b\u4f7f\u7528\u200b\uff0c@
\u200b\u6807\u8bb0\u200b\u4e00\u4e2a\u200b\u88c5\u9970\u200b\u5668\u200b\uff1a
>>> @decorator \n... def target(x):\n... return x + 1\n... \n<function target at ...>\n>>>\n
@decorator
\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\uff0c\u200b\u51fd\u6570\u200b\u88ab\u200b\u88c5\u9970\u200b\u5668\u200b\u8fd4\u56de\u200b\u7684\u200b\u51fd\u6570\u200b\u66ff\u6362\u200b
>>> def target(x):\n... return x + 1\n... \n>>> target = decorator(target)\n<function target at ...>\n>>>\n
\u200b\u88c5\u9970\u200b\u5668\u200b\u5728\u200b\u88ab\u200b\u4fee\u9970\u200b\u7684\u200b\u51fd\u6570\u200b\u5b9a\u4e49\u200b\u540e\u200b\u7acb\u5373\u200b\u8fd0\u884c\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5f53\u200b\u5bfc\u5165\u200b\u6a21\u5757\u200b\u65f6\u200b\uff0c\u200b\u88c5\u9970\u200b\u5668\u200b\u51fd\u6570\u200b\u4f1a\u200b\u7acb\u5373\u200b\u6267\u884c\u200b\uff0c\u200b\u800c\u200b\u88ab\u200b\u88c5\u9970\u200b\u7684\u200b\u51fd\u6570\u200b\u53ea\u4f1a\u200b\u8c03\u7528\u200b\u6267\u884c\u200b\u3002
>>> src = \"\"\"def decorator(_):\n... print(_)\n... return _\n... print(\"Before A\")\n... @decorator\n... def a():\n... return 1\n... print(\"Before B\")\n... @decorator \n... def b():\n... return 1\n... print(\"After B\")\n... \"\"\"\n>>> exec(src)\nBefore A\n<function a at ...>\nBefore B\n<function b at ...>\nAfter B\n>>>\n
"},{"location":"coding/python/decorator/#_2","title":"\u53d8\u91cf\u200b\u7684\u200b\u4f5c\u7528\u57df","text":"Python\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u5224\u65ad\u200b\u51fd\u6570\u200b\u4ee3\u7801\u200b\u4e2d\u200b\u7684\u200b\u53d8\u91cf\u200b\u662f\u5426\u200b\u4e3a\u200b\u5c40\u90e8\u53d8\u91cf\u200b\u3002\u200b\u6240\u6709\u200b\u5728\u200b\u51fd\u6570\u200b\u4ee3\u7801\u200b\u5185\u200b\u51fa\u73b0\u200b\u7684\u200b\u53d8\u91cf\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u5c40\u90e8\u53d8\u91cf\u200b\u3002
>>> b = 2\n>>> def A():\n... print(b)\n... \n>>> def B():\n... print(b)\n... b = 2\n... \n>>> A()\n2\n>>> B()\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\n File \"<stdin>\", line 2, in B\nUnboundLocalError: local variable 'b' referenced before assignment\n>>>\n
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5982\u679c\u200b\u9700\u8981\u200b\u5728\u200b\u51fd\u6570\u200b\u5185\u90e8\u200b\u8bbf\u95ee\u200b\u5168\u5c40\u53d8\u91cf\u200b\uff0c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bglobal
\u200b\u5173\u952e\u5b57\u200b\u58f0\u660e\u200b\u3002
>>> def C():\n... global b\n... print(b)\n... b = 3\n... \n>>> b\n2\n>>> C()\n2\n>>> b\n3\n>>>\n
\u200b\u68c0\u67e5\u200b\u7f16\u8bd1\u200b\u540e\u200b\u7684\u200b\u5b57\u8282\u200b\u7801\u200b\uff0c\u200b\u53d1\u73b0\u200bglobal
\u200b\u5173\u952e\u5b57\u200b\u58f0\u660e\u200b\u53d8\u91cf\u200b\u7531\u200bLOAD_FAST
\u200b\u4e0e\u200bSTORE_FAST
\u200b\u6539\u4e3a\u200b\u4e86\u200bLOAD_GLOBAL
\u200b\u4e0e\u200bSTORE_GLOBAL
\uff1a
"},{"location":"coding/python/decorator/#_3","title":"\u95ed\u5305","text":"\u200b\u95ed\u5305\u200b\u662f\u200b\u6269\u5c55\u200b\u4e86\u200b\u51fd\u6570\u200b\u4f5c\u7528\u57df\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8bbf\u95ee\u200b\u51fd\u6570\u200b\u5b9a\u4e49\u200b\u4e4b\u5916\u200b\u7684\u200b\u5c40\u90e8\u53d8\u91cf\u200b\u3002\u200b\u4ee5\u4e0b\u200b\u901a\u8fc7\u200b\u4e0d\u540c\u200b\u65b9\u5f0f\u200b\u5b9e\u73b0\u200b\u6ed1\u52a8\u200b\u5e73\u5747\u503c\u200b\u7684\u200b\u8ba1\u7b97\u200b\uff1a
- \u200b\u4f7f\u7528\u200b\u7c7b\u200b
>>> class avg1():\n... def __init__(self):\n... self.values = []\n... def __call__(self, value):\n... self.values.append(value)\n... return sum(self.values) / len(self.values)\n... \n>>> avg = avg1()\n>>> avg(10)\n10.0\n>>> avg(11)\n10.5\n>>>\n
- \u200b\u4f7f\u7528\u200b\u9ad8\u9636\u200b\u51fd\u6570\u200b
>>> def avg2():\n... values = []\n... def avg(value): \n... values.append(value)\n... return sum(values) / len(values)\n... return avg\n>>> \n>>> avg = avg2()\n>>> avg(10)\n10.0\n>>> avg(11)\n10.5\n>>>\n
\u200b\u5728\u200bavg2
\u200b\u51fd\u6570\u200b\u7ed3\u675f\u200b\u540e\u200b\uff0c\u200b\u5c40\u90e8\u53d8\u91cf\u200bvalues
\u200b\u539f\u6709\u200b\u7684\u200b\u4f5c\u7528\u57df\u200b\u6d88\u5931\u200b\uff0c\u200b\u6210\u4e3a\u200b\u81ea\u7531\u200b\u53d8\u91cf\u200b\u3002\u200b\u81ea\u7531\u200b\u53d8\u91cf\u200b\u6307\u200b\u6ca1\u6709\u200b\u5728\u200b\u672c\u5730\u200b\u4f5c\u7528\u57df\u200b\u4e2d\u200b\u7ed1\u5b9a\u200b\u7684\u200b\u53d8\u91cf\u200b\u3002values
\u200b\u53d8\u91cf\u200b\u7684\u200b\u5f15\u7528\u200b\u5b58\u50a8\u200b\u5728\u200bavg
\u200b\u51fd\u6570\u200b\u7684\u200b__closure__
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\u3002\u200b\u5373\u4f7f\u200bavg2
\u200b\u51fd\u6570\u200b\u5df2\u7ecf\u200b\u7ed3\u675f\u200b\u6267\u884c\u200b\uff0cavg
\u200b\u51fd\u6570\u200b\u4ecd\u7136\u200b\u80fd\u200b\u8bbf\u95ee\u200bvalues
\u200b\u53d8\u91cf\u200b\u3002
"},{"location":"coding/python/functions/","title":"Python\u200b\u4e2d\u200b\u7684\u200b\u51fd\u6570","text":"\u201c\u200b\u4e00\u7b49\u200b\u5bf9\u8c61\u200b\u201d\u200b\u6307\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff1a
- \u200b\u5728\u200b\u7a0b\u5e8f\u6267\u884c\u200b\u65f6\u200b\u521b\u5efa\u200b
- \u200b\u80fd\u591f\u200b\u8d4b\u503c\u200b\u7ed9\u200b\u53d8\u91cf\u200b\u6216\u200b\u6570\u636e\u7ed3\u6784\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b
- \u200b\u80fd\u200b\u4f5c\u4e3a\u200b\u51fd\u6570\u53c2\u6570\u200b\u4e0e\u200b\u8fd4\u56de\u503c\u200b
Python\u200b\u4e2d\u200b\u7684\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u7b49\u200b\u5bf9\u8c61\u200b
"},{"location":"coding/python/functions/#_1","title":"\u51fd\u6570\u200b\u4e0e\u200b\u9ad8\u9636\u200b\u51fd\u6570","text":"\u200b\u51fd\u6570\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u901a\u5e38\u200b\u4f7f\u7528\u200bdef
\u200b\u5173\u952e\u5b57\u200b\u5b9a\u4e49\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff1a
>>> def constant(): \n... return 1\n... \n>>> type(constant)\n<class 'function'>\n>>>\n
\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u5728\u200b\u5176\u4ed6\u200b\u51fd\u6570\u200b\u5185\u90e8\u200b\uff1a
>>> def outer():\n... def inner():\n... return \"ok\"\n... return inner\n... \n>>> func = outer()\n>>> func()\n'ok'\n>>>\n
\u200b\u9ad8\u9636\u200b\u51fd\u6570\u200b\u662f\u200b\u63a5\u53d7\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u6216\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5982\u200bmap
\u3001filter
\u200b\u7b49\u200b\u3002
\u200b\u9664\u200b\u4f7f\u7528\u200bdef
\u200b\u5173\u952e\u5b57\u200b\u5b9a\u4e49\u200b\u51fd\u6570\u200b\u4ee5\u5916\u200b\uff0clambda
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u53e6\u200b\u4e00\u79cd\u200b\u521b\u5efa\u200b\u7b80\u5355\u200b\u51fd\u6570\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8fd9\u79cd\u200b\u65b9\u6cd5\u200b\u5e38\u7528\u200b\u4e8e\u200b\u5411\u200b\u9ad8\u9636\u200b\u51fd\u6570\u200b\u4f20\u9012\u200b\u53c2\u6570\u200b\u3002lambda
\u200b\u8868\u8fbe\u5f0f\u200b\u53ea\u80fd\u200b\u52a0\u5165\u200b\u8868\u8fbe\u5f0f\u200b\u800c\u200b\u65e0\u6cd5\u200b\u6dfb\u52a0\u200b\u63a7\u5236\u200b\u903b\u8f91\u200b\uff1a
>>> a = lambda : \"ok\" \n>>> a()\n'ok'\n>>>\n
lambda
\u200b\u8868\u8fbe\u5f0f\u200b\u53ef\u4ee5\u200b\u521b\u5efa\u200b\u4e0d\u540c\u200b\u53c2\u6570\u200b\u6570\u91cf\u200b\u7684\u200b\u51fd\u6570\u200b\uff1a
- \u200b\u6ca1\u6709\u200b\u53c2\u6570\u200b\uff0c\u200b\u5982\u200b
lambda : \"ok\"
- \u200b\u7ed9\u5b9a\u200b\u6570\u91cf\u200b\u53c2\u6570\u200b\uff0c\u200b\u5982\u200b
lambda x, y : x + y
- \u200b\u4efb\u610f\u200b\u53c2\u6570\u200b\uff0c\u200b\u5982\u200b
lambda *_ : sum(_)
\uff08\u200b\u65e0\u540d\u200b\u53c2\u6570\u200b\uff09\u200b\u6216\u200blambda **_ : sum(_)
\uff08\u200b\u5177\u540d\u200b\u53c2\u6570\u200b\uff09
\u200b\u82e5\u200blambda
\u200b\u8868\u8fbe\u5f0f\u200b\u7684\u200b\u53f3\u4fa7\u200b\u662f\u200b\u9017\u53f7\u200b\u5206\u9694\u200b\u7684\u200b\u8868\u8fbe\u5f0f\u200b\uff0c\u200b\u751f\u6210\u200b\u7684\u200b\u662f\u200blambda
\u200b\u5bf9\u8c61\u200b\u7ec4\u6210\u200b\u7684\u200b\u5143\u7ec4\u200b\u3002
\u200b\u4f7f\u7528\u200bdir()
\u200b\u67e5\u770b\u200b\u51fd\u6570\u200b\u7684\u200b\u5185\u7f6e\u200b\u5c5e\u6027\u200b\u3002\u200b\u76f8\u6bd4\u200b\u4e8e\u200b\u4e00\u822c\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u51fd\u6570\u200b\u6709\u200b\u4ee5\u4e0b\u200b\u7684\u200b\u989d\u5916\u200b\u5c5e\u6027\u200b\uff1a
>>> class Obj():\n... pass\n... \n>>> def func():\n... pass\n... \n>>> sorted(list(set(dir(func)) - set(dir(Obj())))) # doctest: +SKIP\n['__annotations__', '__call__', '__closure__', '__code__', '__defaults__', '__get__', '__globals__', '__kwdefaults__', '__name__', '__qualname__']\n>>>\n
"},{"location":"coding/python/functions/#_2","title":"\u5e7f\u4e49\u200b\u51fd\u6570","text":"\u200b\u4efb\u4f55\u200b\u5b9e\u73b0\u200b\u4e86\u200b__call__
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5bf9\u8c61\u200b\u90fd\u200b\u662f\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u7c7b\u4f3c\u200b\u4e8e\u200b\u51fd\u6570\u8c03\u7528\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u8c03\u7528\u200b\u3002\u200b\u4ee5\u4e0b\u200b\u7c7b\u578b\u200b\u4e3a\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\uff1a
- \u200b\u51fd\u6570\u200b\u6216\u200b
lambda
\u200b\u8868\u8fbe\u5f0f\u200b - \u200b\u5185\u7f6e\u200b\u51fd\u6570\u200b\u6216\u200b\u7c7b\u578b\u200b\u65b9\u6cd5\u200b
- \u200b\u7c7b\u578b\u200b\u65b9\u6cd5\u200b
- \u200b\u7c7b\u200b\uff08\u200b\u76f8\u5f53\u4e8e\u200b\u4e00\u4e2a\u200b\u8fd4\u56de\u200b\u7c7b\u200b\u5bf9\u8c61\u200b\u7684\u200b\u51fd\u6570\u200b\uff09
- \u200b\u5b9e\u73b0\u200b\u4e86\u200b
__call__
\u200b\u7684\u200b\u5bf9\u8c61\u200b - \u200b\u751f\u6210\u5668\u200b\u51fd\u6570\u200b
\u200b\u5185\u7f6e\u200b\u51fd\u6570\u200bcallable()
\u200b\u7528\u4e8e\u200b\u68c0\u6d4b\u200b\u4e00\u4e2a\u200b\u5bf9\u8c61\u200b\u662f\u5426\u662f\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u3002
"},{"location":"coding/python/functions/#_3","title":"\u51fd\u6570\u200b\u7684\u200b\u53c2\u6570","text":"Python\u200b\u4e2d\u200b\uff0c\u200b\u51fd\u6570\u200b\u7684\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\uff1a
- \u200b\u9017\u53f7\u200b\u5206\u9694\u200b\uff0c\u200b\u6309\u200b\u51fd\u6570\u200b\u58f0\u660e\u200b\u987a\u5e8f\u200b\u4f20\u5165\u200b\u53c2\u6570\u200b
- \u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\uff0c\u200b\u5373\u200b\u53c2\u6570\u200b\u540d\u200b=\u200b\u53c2\u6570\u503c\u200b
- \u200b\u6709\u200b\u9ed8\u8ba4\u503c\u200b\u7684\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b
*
\u200b\u89e3\u5305\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff08\u200b\u6309\u200b\u53c2\u6570\u200b\u4f4d\u7f6e\u200b\u4f20\u9012\u200b\uff09\u200b\u6216\u200b**
\u200b\u89e3\u5305\u200b\u6620\u5c04\u200b\u5bf9\u8c61\u200b\uff08\u200b\u6309\u200b\u5173\u952e\u5b57\u200b\u4f20\u9012\u200b\uff09
\u200b\u5bf9\u5e94\u200b\u5730\u200b\uff0c\u200b\u51fd\u6570\u200b\u5bf9\u200b\u53c2\u6570\u200b\u6709\u200b\u5982\u4e0b\u200b\u5904\u7406\u200b\u65b9\u5f0f\u200b\uff1a
- \u200b\u6309\u7167\u200b\u53c2\u6570\u200b\u4f4d\u7f6e\u200b\u4e0e\u200b\u53c2\u6570\u200b\u540d\u200b\u83b7\u53d6\u200b\u53c2\u6570\u200b
- \u200b\u5176\u4ed6\u200b\u7684\u200b\u65e0\u8bb0\u540d\u200b\u53c2\u6570\u200b\u88ab\u200b
*
\u200b\u53c2\u6570\u200b\u83b7\u53d6\u200b\uff0c\u200b\u5355\u4e2a\u200b*
\u200b\u6216\u200b*
\u200b\u53c2\u6570\u200b\u540e\u200b\u7684\u200b\u666e\u901a\u200b\u53c2\u6570\u200b\u53ea\u80fd\u200b\u6309\u7167\u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\u7684\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b - \u200b\u5176\u4ed6\u200b\u7684\u200b\u8bb0\u540d\u200b\u53c2\u6570\u200b\u88ab\u200b
**
\u200b\u53c2\u6570\u200b\u83b7\u53d6\u200b
\u200b\u51fd\u6570\u200b\u58f0\u660e\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u7684\u200b\u5355\u4e2a\u200b*
\u200b\u4e0d\u4f1a\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u53c2\u6570\u200b\uff0c\u200b\u53ea\u200b\u7528\u4e8e\u200b\u9650\u5b9a\u200b\u6b64\u540e\u200b\u6240\u6709\u200b\u53c2\u6570\u200b\u7684\u200b\u4f20\u5165\u200b\u65b9\u5f0f\u200b\uff1a
>>> def a(*, a, b):\n... return a + b\n... \n>>> a(1, 2) \nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: a() takes 0 positional arguments but 2 were given\n>>> a(a=1, b=2)\n3\n>>>\n
\u200b\u51fd\u6570\u200b\u4f20\u53c2\u6709\u200b\u4e24\u79cd\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5373\u503c\u200b\u4f20\u9012\u200b\u4e0e\u200b\u5f15\u7528\u200b\u4f20\u9012\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u53ef\u53d8\u200b\u5bf9\u8c61\u200b\u6309\u200b\u5f15\u7528\u200b\u4f20\u9012\u200b\uff0c\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5bf9\u8c61\u200b\u6309\u503c\u200b\u4f20\u9012\u200b\uff1a
>>> def argPass(x):\n... x += x \n... \n>>> a = \"test\" \n>>> b = [\"test\"]\n>>> argPass(a)\n>>> argPass(b)\n>>> a\n'test'\n>>> b\n['test', 'test']\n>>>\n
"},{"location":"coding/python/functions/#_4","title":"\u51fd\u6570\u200b\u5185\u7701","text":"\u200b\u51fd\u6570\u200b\u5bf9\u8c61\u200b\u7279\u6709\u200b\u7684\u200b\u5c5e\u6027\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u6709\u5173\u200b\u51fd\u6570\u200b\u7684\u200b\u4fe1\u606f\u200b\uff1a
\u200b\u5c5e\u6027\u200b\u540d\u200b \u200b\u5c5e\u6027\u200b\u7c7b\u578b\u200b \u200b\u5c5e\u6027\u200b\u8bf4\u660e\u200b __annotations__
dict
\u200b\u51fd\u6570\u53c2\u6570\u200b\u548c\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u7c7b\u578b\u200b\u6ce8\u89e3\u200b\uff0c\u200b\u952e\u4e3a\u200b\u53c2\u6570\u200b\u540d\u200b\uff0c\u200b\u503c\u4e3a\u200b\u53c2\u6570\u200b\u7c7b\u578b\u200b __call__
method-wrapper
\u200b\u5b9e\u73b0\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u7684\u200b\u8c03\u7528\u200b\u65b9\u6cd5\u200b __closure__
tuple
\u200b\u51fd\u6570\u200b\u95ed\u5305\u200b\uff0c\u200b\u53c2\u89c1\u200b\u76f8\u5173\u200b\u7ae0\u8282\u200b __code__
code
\u200b\u7f16\u8bd1\u6210\u200b\u4e8c\u8fdb\u5236\u200b\u683c\u5f0f\u200b\u7684\u200b\u51fd\u6570\u200b\u5143\u200b\u6570\u636e\u200b\u548c\u200b\u5b9a\u4e49\u200b\u4f53\u200b __defaults__
tuple
\u200b\u5f62\u53c2\u200b\u7684\u200b\u9ed8\u8ba4\u503c\u200b\u5217\u8868\u200b __get__
method-wrapper
\u200b\u5b9e\u73b0\u200b\u53ea\u8bfb\u200b\u63cf\u8ff0\u7b26\u200b\u534f\u8bae\u200b __globals__
dict
\u200b\u51fd\u6570\u200b\u6240\u5728\u200b\u6a21\u5757\u200b\u4e2d\u200b\u7684\u200b\u5168\u5c40\u53d8\u91cf\u200b __kwdefaults__
dict
\u200b\u9650\u5b9a\u200b\u5173\u952e\u5b57\u200b\u5f62\u5f0f\u200b\u8bbf\u95ee\u200b\u7684\u200b\u5f62\u53c2\u200b\u9ed8\u8ba4\u503c\u200b __name__
str
\u200b\u51fd\u6570\u200b\u540d\u79f0\u200b __qualname__
str
\u200b\u51fd\u6570\u200b\u7684\u200b\u9650\u5b9a\u200b\u540d\u79f0\u200b >>> def dummy(a, b: int, c = 10, *args, d, e=50, **kwargs):\n... return (a, b, c, args, d, e, kwargs) \n... \n>>> dummy.__annotations__\n{'b': <class 'int'>}\n>>> dummy.__defaults__\n(10,)\n>>> dummy.__kwdefaults__\n{'e': 50}\n>>>\n
\u200b\u51fd\u6570\u200b\u7684\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u4e0e\u200b\u6570\u91cf\u200b\u5b58\u50a8\u200b\u5728\u200b__code__
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\uff1a
>>> dummy.__code__.co_varnames\n('a', 'b', 'c', 'd', 'e', 'args', 'kwargs')\n>>> dummy.__code__.co_argcount\n3\n>>>\n
inspect
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u68c0\u67e5\u200b\u51fd\u6570\u53c2\u6570\u200b\u4fe1\u606f\u200b\u7684\u200b\u5de5\u5177\u200b\u3002
>>> import inspect\n>>> inspect.signature(dummy)\n<Signature (a, b: int, c=10, *args, d, e=50, **kwargs)>\n>>> sig = inspect.signature(dummy) \n>>> sig.parameters\nmappingproxy(OrderedDict([('a', <Parameter \"a\">), ('b', <Parameter \"b: int\">), ('c', <Parameter \"c=10\">), ('args', <Parameter \"*args\">), ('d', <Parameter \"d\">), ('e', <Parameter \"e=50\">), ('kwargs', <Parameter \"**kwargs\">)]))\n>>>\n
parameters
\u200b\u5b58\u50a8\u200b\u4e86\u200b\u53c2\u6570\u200b\u540d\u200b\u4e0e\u200b\u53c2\u6570\u4fe1\u606f\u200b\u7684\u200b\u6620\u5c04\u200b\u5173\u7cfb\u200b\u3002\u200b\u6bcf\u4e2a\u200bParameter
\u200b\u5bf9\u8c61\u200b\u6709\u200bname
\u3001default
\u200b\u548c\u200bkind
\u200b\u5c5e\u6027\u200b\u3002dummy
\u200b\u51fd\u6570\u200b\u5404\u4e2a\u200b\u53c2\u6570\u200b\u7684\u200b\u5c5e\u6027\u200b\u4fe1\u606f\u200b\u5982\u4e0b\u200b\uff0cinspect._empty
\u200b\u8868\u793a\u200b\u53c2\u6570\u200b\u6ca1\u6709\u200b\u9ed8\u8ba4\u503c\u200b\uff1a
>>> par = sig.parameters \n>>> for parName in par:\n... print(par[parName].name, par[parName].default, par[parName].kind)\n... \na <class 'inspect._empty'> POSITIONAL_OR_KEYWORD\nb <class 'inspect._empty'> POSITIONAL_OR_KEYWORD\nc 10 POSITIONAL_OR_KEYWORD\nargs <class 'inspect._empty'> VAR_POSITIONAL\nd <class 'inspect._empty'> KEYWORD_ONLY\ne 50 KEYWORD_ONLY\nkwargs <class 'inspect._empty'> VAR_KEYWORD\n>>>\n
\u200b\u4ece\u200b\u8f93\u51fa\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u770b\u51fa\u200b\uff0cdummy
\u200b\u5171\u6709\u200b\u56db\u79cd\u200b\u7c7b\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5373\u200b\uff1a
POSITIONAL_OR_KEYWORD
\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u5b9a\u4f4d\u200b\u53c2\u6570\u200b\u6216\u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\u4f20\u5165\u200b VAR_POSITIONAL
\uff0c\u200b\u591a\u4f59\u200b\u7684\u200b\u5b9a\u4f4d\u200b\u53c2\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u5143\u7ec4\u200b KEYWORD_ONLY
\uff0c\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\u4f20\u5165\u200b VAR_KEYWORD
\uff0c\u200b\u591a\u4f59\u200b\u7684\u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u5b57\u5178\u200b
\u200b\u53e6\u200b\u4e00\u79cd\u200b\u53c2\u6570\u200b\u7c7b\u578b\u200b\u662f\u200b\u53ea\u80fd\u200b\u901a\u8fc7\u200b\u5b9a\u4f4d\u200b\u53c2\u6570\u200b\u4f20\u5165\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5373\u200bPOSITIONAL_ONLY
\uff0cPython\u200b\u8bed\u6cd5\u200b\u4e0d\u200b\u652f\u6301\u200b\u58f0\u660e\u200b\u8fd9\u79cd\u200b\u7c7b\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5728\u200bC\u200b\u8bed\u8a00\u200bAPI\u200b\u4e2d\u200b\u53ef\u80fd\u200b\u51fa\u73b0\u200b\u3002
Changed in version 3.8
\u200b\u5728\u200b\u51fd\u6570\u200b\u5b9a\u4e49\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b/
\u200b\u5206\u9694\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\uff0c\u200b\u51fa\u73b0\u200b\u5728\u200b/
\u200b\u4e4b\u524d\u200b\u7684\u200b\u53c2\u6570\u200b\u5fc5\u987b\u200b\u901a\u8fc7\u200b\u5b9a\u4f4d\u200b\u53c2\u6570\u200b\u4f20\u5165\u200b\u3002
>>> def test(a, /, b, *args, c, **kwargs):\n... pass\n...\n>>> import inspect\n>>> sig = inspect.signature(test)\n>>> for val in sig.parameters.values():\n... print(val.name, val.kind)\n...\na POSITIONAL_ONLY\nb POSITIONAL_OR_KEYWORD\nargs VAR_POSITIONAL\nc KEYWORD_ONLY\nkwargs VAR_KEYWORD\n>>>\n
"},{"location":"coding/python/functions/#_5","title":"\u53c2\u6570\u200b\u7684\u200b\u7c7b\u578b\u200b\u9650\u5236","text":"Python\u200b\u4e2d\u200b\u5bf9\u200b\u51fd\u6570\u53c2\u6570\u200b\u7684\u200b\u7c7b\u578b\u200b\u68c0\u67e5\u200b\u4ee5\u200b\u51fd\u6570\u200b\u6ce8\u89e3\u200b\u7684\u200b\u5f62\u5f0f\u200b\u5b9e\u73b0\u200b\u3002\u200b\u51fd\u6570\u200b\u6ce8\u89e3\u200b\u89c4\u5b9a\u200b\u4e86\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u63a5\u53d7\u200b\u7684\u200b\u53c2\u6570\u200b\u7c7b\u578b\u200b\u3002
\u200b\u51fd\u6570\u200b\u6ce8\u89e3\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u7c7b\u578b\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u3002:
\u200b\u7528\u4e8e\u200b\u5bf9\u200b\u53c2\u6570\u200b\u7684\u200b\u6ce8\u89e3\u200b\uff0c->
\u200b\u8868\u793a\u200b\u5bf9\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u6ce8\u89e3\u200b\uff1a
>>> def another_dummy(x: int) -> int: \n... return -x\n... \n>>>\n
\u200b\u6ce8\u610f\u200b\uff0c\u200b\u6ce8\u89e3\u200b\u5e76\u200b\u4e0d\u4f1a\u200b\u5bfc\u81f4\u200bPython\u200b\u5bf9\u200b\u4f20\u5165\u200b\u53c2\u6570\u200b\u7684\u200b\u7c7b\u578b\u200b\u8fdb\u884c\u200b\u68c0\u67e5\u200b\u3002
>>> another_dummy(0.5) \n-0.5\n>>>\n
\u200b\u6240\u6709\u200b\u7684\u200b\u6ce8\u89e3\u200b\u5b58\u50a8\u200b\u5728\u200b\u51fd\u6570\u200b\u7684\u200b__annotations__
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\u3002
>>> another_dummy.__annotations__\n{'x': <class 'int'>, 'return': <class 'int'>}\n>>>\n
"},{"location":"coding/python/functions/#_6","title":"\u51fd\u6570\u200b\u5f0f\u200b\u7f16\u7a0b","text":""},{"location":"coding/python/functions/#operator","title":"operator\u200b\u6a21\u5757","text":"operator
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200bPython\u200b\u4e2d\u200b\u90e8\u5206\u200b\u8fd0\u7b97\u7b26\u200b\u6216\u200b\u64cd\u4f5c\u200b\u7684\u200b\u51fd\u6570\u200b\u5f0f\u200b\u5b9e\u73b0\u200b\u3002
>>> import operator\n>>> operator.add(5, 3)\n8\n>>>\n
\u200b\u6b64\u5916\u200b\uff0c__getitem__
\u3001__getattribute__
\u200b\u65b9\u6cd5\u200b\u5728\u200boperator
\u200b\u6a21\u5757\u200b\u4e2d\u200b\u4e5f\u200b\u6709\u200b\u5bf9\u5e94\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u4e3a\u200bitemgetter
\u3001attrgetter
\u3002methodcaller
\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u5185\u200b\u7684\u200b\u67d0\u4e2a\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u4e0e\u200boperator
\u200b\u6a21\u5757\u200b\u4e2d\u200b\u7684\u200b\u5176\u4ed6\u200b\u51fd\u6570\u200b\u4e0d\u540c\u200b\uff0c\u200b\u8c03\u7528\u200b\u8be5\u200b\u51fd\u6570\u200b\u4f1a\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u3002
>>> sort = operator.methodcaller('sort')\n>>> sort_rev = operator.methodcaller('sort', reverse=True)\n>>> a = [1, 3, 2]\n>>> sort(a)\n>>> a\n[1, 2, 3]\n>>> sort_rev(a)\n>>> a\n[3, 2, 1]\n>>>\n
"},{"location":"coding/python/functions/#functools","title":"functools\u200b\u6a21\u5757","text":"functools\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4e0e\u200b\u51fd\u6570\u200b\u5f0f\u200b\u7f16\u7a0b\u200b\u76f8\u5173\u200b\u7684\u200b\u4e00\u7cfb\u5217\u200b\u51fd\u6570\u200b\u5de5\u5177\u200b\u3002
partial
\u200b\u7528\u4e8e\u200b\u9501\u5b9a\u200b\u51fd\u6570\u200b\u7684\u200b\u4e00\u90e8\u5206\u200b\u53c2\u6570\u200b\u3002\u200b\u5176\u4f59\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u5728\u200b\u8c03\u7528\u200b\u65f6\u200b\u6307\u5b9a\u200b\uff08\u200b\u5b9a\u4f4d\u200b\u53c2\u6570\u200b\u53ea\u80fd\u200b\u6309\u200b\u987a\u5e8f\u200b\u6307\u5b9a\u200b\uff0c\u200b\u5173\u952e\u5b57\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u4efb\u610f\u200b\u6307\u5b9a\u200b\uff09\uff1a
>>> from functools import partial\n>>> part = partial(divmod, 3) \n>>> part(2)\n(1, 1)\n>>>\n
reduce
\u200b\u5c06\u200b\u63a5\u53d7\u200b\u4e24\u4e2a\u200b\u53c2\u6570\u200b\u7684\u200b\u51fd\u6570\u200b\u5e94\u7528\u200b\u5230\u200b\u4e00\u4e2a\u200b\u5e8f\u5217\u200b\u4e0a\u200b\uff0c\u200b\u5f97\u5230\u200b\u4e00\u4e2a\u200b\u7ed3\u679c\u200b\u3002\u200b\u501f\u52a9\u200boperator
\u200b\u6a21\u5757\u200b\u4e2d\u200b\u63d0\u4f9b\u200b\u7684\u200b\u8fd0\u7b97\u7b26\u200b\uff0creduce
\u200b\u6a21\u5757\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u9636\u4e58\u200b\u7b49\u200b\u9700\u8981\u200b\u5faa\u73af\u200b\u624d\u80fd\u200b\u5b9e\u73b0\u200b\u7684\u200b\u8fd0\u7b97\u200b\u64cd\u4f5c\u200b\uff1a
>>> from functools import reduce\n>>> def fact(x: int):\n... return reduce(operator.mul, range(1, x + 1))\n... \n>>> fact(5)\n120\n>>>\n
"},{"location":"coding/python/killable-thread/","title":"Python\u200b\u5173\u95ed\u200b\u7ebf\u7a0b","text":"\u200b\u4f7f\u7528\u200bPyThreadState_SetAsyncExc
\u200b\u51fd\u6570\u200b\u5728\u5b50\u200b\u7ebf\u7a0b\u200b\u4e2d\u200b\u5f15\u53d1\u200b\u5f02\u5e38\u200b\uff0c\u200b\u4ece\u800c\u200b\u4f7f\u200b\u7ebf\u7a0b\u200b\u63d0\u524d\u7ed3\u675f\u200b\u3002
\u200b\u793a\u4f8b\u200b\u4ee3\u7801\u200b\u5982\u4e0b\u200b\uff1a
import threading \nimport ctypes \nimport time \n\nclass thread_with_exception(threading.Thread): \n def __init__(self, name): \n threading.Thread.__init__(self) \n self.name = name \n\n def run(self): \n\n # target function of the thread class \n try: \n while True: \n print('running ' + self.name) \n finally: \n print('ended') \n\n def get_id(self): \n\n # returns id of the respective thread \n if hasattr(self, '_thread_id'): \n return self._thread_id \n for id, thread in threading._active.items(): \n if thread is self: \n return id\n\n def raise_exception(self): \n thread_id = self.get_id() \n res = ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, \n ctypes.py_object(SystemExit)) \n if res > 1: \n ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, 0) \n print('Exception raise failure') \n\nt1 = thread_with_exception('Thread 1') \nt1.start() \ntime.sleep(2) \nt1.raise_exception() \nt1.join() \n
\u200b\u628a\u200brun()
\u200b\u4e2d\u200b\u6267\u884c\u200b\u7684\u200b\u64cd\u4f5c\u200b\u4ee5\u200b\u53c2\u6570\u200b\u7684\u200b\u5f62\u5f0f\u200b\u4f20\u9012\u200b\uff1a
class KillableThread(threading.Thread):\n \"\"\"\n A thread class extending threading.Thread, provides a kill() method to stop the thread and a getResult() method to get the return value of the thread.\n \"\"\"\n\n def __init__(self, func: Callable, *args, **kwargs):\n super().__init__()\n self.func: Callable = func\n self.funcArg: dict = kwargs\n self.funcTup: Tuple = args\n self.result: Any = None\n self.exception: Any = None\n\n def run(self):\n \"\"\"\n Executes the function here\n \"\"\"\n try:\n self.result = self.func(*self.funcTup, **self.funcArg)\n except BaseException as e:\n self.exception = e\n\n def get_id(self):\n \"\"\"\n Get the id of the thread\n \"\"\"\n if hasattr(self, '_thread_id'):\n return self._thread_id\n for id, thread in threading._active.items():\n if thread is self:\n return id\n\n def kill(self):\n \"\"\"\n Stops the thread\n \"\"\"\n thread_id = self.get_id()\n res = ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id,\n ctypes.py_object(SystemExit))\n if res > 1:\n ctypes.pythonapi.PyThreadState_SetAsyncExc(thread_id, 0)\n print('Exception raise failure')\n\n def getResult(self):\n if self.exception is None:\n return self.result\n else:\n raise self.exception\n
\u200b\u6765\u6e90\u200b\uff1ahttps://www.geeksforgeeks.org/python-different-ways-to-kill-a-thread
"},{"location":"coding/python/magic-functions/","title":"\u9b54\u672f\u200b\u65b9\u6cd5","text":"\u200b\u672c\u6587\u200b\u4e3b\u8981\u200b\u6db5\u76d6\u200bPython\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\u3002\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\u662f\u200b\u7c7b\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u4e00\u79cd\u200b\u7279\u6b8a\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u65b9\u6cd5\u200b\u62e5\u6709\u200b\u56fa\u5b9a\u200b\u7684\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u548c\u200b\u7279\u6b8a\u200b\u7684\u200b\u8c03\u7528\u200b\u65f6\u673a\u200b\u3002
\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\u4ee5\u53cc\u200b\u4e0b\u5212\u7ebf\u200b__
\u200b\u5f00\u5934\u200b\uff0c\u200b\u4ee5\u53cc\u200b\u4e0b\u5212\u7ebf\u200b\u7ed3\u5c3e\u200b\u3002
Python\u200b\u4e2d\u200b\u7684\u200b\u8fd0\u7b97\u7b26\u200b\u91cd\u8f7d\u200b\u901a\u8fc7\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\u5206\u4e3a\u200b\u4e0e\u200b\u8fd0\u7b97\u7b26\u200b\u65e0\u5173\u200b\u7684\u200b\u7279\u6b8a\u200b\u65b9\u6cd5\u200b\u53ca\u200b\u4e0e\u200b\u8fd0\u7b97\u7b26\u200b\u6709\u5173\u200b\u7684\u200b\u7279\u6b8a\u200b\u65b9\u6cd5\u200b
"},{"location":"coding/python/magic-functions/#_2","title":"\u4e0e\u200b\u8fd0\u7b97\u7b26\u200b\u65e0\u5173\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5","text":"\u200b\u6d89\u53ca\u200b\u5230\u200b\u5b57\u7b26\u4e32\u200b\u4e0e\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\uff1a
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __repr__
self
\u200b\u5f53\u200b\u8c03\u7528\u200brepr()
\u200b\u51fd\u6570\u200b\u65f6\u200b str
\u200b\u8fd4\u56de\u503c\u200b\u5e94\u4e3a\u200b\u91cd\u5efa\u200b\u8be5\u200b\u5bf9\u8c61\u200b\u7684\u200bPython\u200b\u8868\u8fbe\u5f0f\u200b\uff08\u200b\u5982\u679c\u200b\u53ef\u80fd\u200b\uff09\uff0c\u200b\u6216\u200b\u5305\u542b\u200b\u5176\u4ed6\u200b\u4fe1\u606f\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200b<...>
__str__
self
\u200b\u5f53\u200b\u8c03\u7528\u200bstr()
\u200b\u51fd\u6570\u200b\u65f6\u200b str
\u200b\u8c03\u7528\u200bprint()
\u200b\u7b49\u200b\u5176\u4ed6\u200b\u51fd\u6570\u200b\u65f6\u4f1a\u200b\u9690\u5f0f\u200b\u8c03\u7528\u200b__str__()
\uff0c\u200b\u5f53\u200b\u4e0d\u200b\u5b58\u5728\u200b__str__()
\u200b\u65f6\u4f1a\u200b\u81ea\u52a8\u200b\u8c03\u7528\u200b__repr__()
__format__
self, format_spec
\u200b\u5f53\u200b\u8c03\u7528\u200bformat()
\u200b\u51fd\u6570\u200b\u65f6\u200b str
object.__format__(x, '')
\u200b\u7b49\u4ef7\u200b\u4e8e\u200bstr(x)
__bytes__
self
\u200b\u5f53\u200b\u8c03\u7528\u200bbytes()
\u200b\u51fd\u6570\u200b\u65f6\u200b bytes
\u200b\u8fd4\u56de\u503c\u200b\u662f\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5b57\u8282\u200b\u8868\u793a\u200b \u200b\u6d89\u53ca\u200b\u5230\u200b\u6570\u503c\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5\u200b\uff1a
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __bool__
self
\u200b\u8c03\u7528\u200bbool()
\u200b\u51fd\u6570\u200b\u65f6\u200b bool
\u200b\u5f53\u200b__bool__
\u200b\u51fd\u6570\u200b\u6ca1\u6709\u200b\u5b9a\u4e49\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u9690\u5f0f\u200b\u8c03\u7528\u200b__len__
\uff0c\u200b\u5982\u679c\u200b__len__
\u200b\u4e5f\u200b\u6ca1\u6709\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bTrue
__complex__
self
\u200b\u8c03\u7528\u200bcommplex()
\u200b\u51fd\u6570\u200b\u65f6\u200b complex
__int__
self
\u200b\u8c03\u7528\u200bint()
\u200b\u51fd\u6570\u200b\u65f6\u200b int
__float__
self
\u200b\u8c03\u7528\u200bfloat()
\u200b\u51fd\u6570\u200b\u65f6\u200b float
__hash__
self
\u200b\u8c03\u7528\u200bhash()
\u200b\u51fd\u6570\u200b\u65f6\u200b hash()
\u200b\u51fd\u6570\u200b\u5c06\u200b__hash__()
\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u622a\u65ad\u200b\u5230\u200bPy_ssize_t
\u200b\u7684\u200b\u8303\u56f4\u200b\u5185\u200b\uff0c64\u200b\u4f4d\u200b\u7cfb\u7edf\u200b\u4e0b\u200bPy_ssize_t
\u200b\u4e3a\u200b8\u200b\u5b57\u8282\u200b\uff1bset
\u200b\u7b49\u200b\u7c7b\u578b\u200b\u7684\u200b\u64cd\u4f5c\u200b\u4e5f\u200b\u4f1a\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u7684\u200b__hash__
\u200b\u51fd\u6570\u200b __index__
self
\u200b\u8c03\u7528\u200boperator.index()
\u200b\u6216\u200bPython\u200b\u9700\u8981\u200b\u6574\u6570\u200b\u503c\u65f6\u200b int
\u200b\u5f53\u200b__int__
\u3001__float__
\u3001__complex__
\u200b\u6ca1\u6709\u200b\u5b9e\u73b0\u200b\u65f6\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u51fd\u6570\u200b\u9690\u5f0f\u200b\u5730\u200b\u8c03\u7528\u200b__index__
\u200b\u96c6\u5408\u200b\u76f8\u5173\u200b\u64cd\u4f5c\u200b
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __len__
self
\u200b\u8c03\u7528\u200blen()
\u200b\u51fd\u6570\u200b\u65f6\u200b int
\u200b\u8fd4\u56de\u503c\u200b\u5fc5\u987b\u200b\u4e3a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\uff0c\u200b\u5728\u200bCPython\u200b\u4e2d\u200b\u8fd4\u56de\u503c\u200b\u4e0d\u80fd\u200b\u8d85\u8fc7\u200bsys.maxsize
\u200b\u4e2d\u200b\u5b9a\u4e49\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u5426\u5219\u200blen()
\u200b\u7b49\u200b\u51fd\u6570\u200b\u4f1a\u200b\u629b\u51fa\u200bOverflowError
\u200b\u7b49\u200b\u5f02\u5e38\u200b __getitemm__
self, key
\u200b\u4f7f\u7528\u200b[]
\u200b\u8fd0\u7b97\u7b26\u200b\u65f6\u200b\uff08\u200b\u53f3\u503c\u200b\uff09 key
\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u5408\u6cd5\u200b\u7684\u200b\u6570\u7ec4\u200b\u4e0b\u6807\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u53cd\u5411\u200b\u7684\u200b\u4e0b\u6807\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u5e8f\u5217\u200b\u7684\u200b\u5207\u7247\u200b\uff0c\u200b\u8be5\u200b\u51fd\u6570\u200b\u5e94\u200b\u5728\u200bkey
\u200b\u7c7b\u578b\u200b\u4e0d\u200b\u5bf9\u5e94\u200b\u65f6\u200b\u629b\u51fa\u200bTypeError
\uff0ckey
\u200b\u8d85\u51fa\u8303\u56f4\u200b\u65f6\u200b\u629b\u51fa\u200bIndexError
\u200b\u6216\u200bKeyError
\uff08\u200b\u5bf9\u4e8e\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\uff09 __setitem__
self, key, value
\u200b\u4f7f\u7528\u200b[]
\u200b\u8fd0\u7b97\u7b26\u200b\u65f6\u200b\uff08\u200b\u5de6\u503c\u200b\uff09 None
key
\u200b\u53c2\u6570\u200b\u7684\u200b\u53d6\u503c\u200b\u53ca\u200b\u5f02\u5e38\u200b\u5904\u7406\u200b\u4e0e\u200b__getitem__
\u200b\u51fd\u6570\u200b\u76f8\u540c\u200b __delitem__
self, key
\u200b\u4f7f\u7528\u200bdel
\u200b\u5220\u9664\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u65f6\u200b None
\u200b\u5bf9\u4e8e\u200b\u4e0d\u53ef\u200b\u5220\u9664\u200b\u7684\u200b\u5e8f\u5217\u200b\u6216\u200b\u6620\u5c04\u200b\uff0c\u200b\u65e0\u9700\u200b\u5b9e\u73b0\u200b\u8be5\u200b\u51fd\u6570\u200b\uff0c\u200b\u5176\u4ed6\u200b\u540c\u200b__getitem__
__contains__
self, item
\u200b\u4f7f\u7528\u200bin
\u200b\u4f5c\u4e3a\u200b\u8fd0\u7b97\u7b26\u200b\u65f6\u200b bool
\u200b\u5bf9\u4e8e\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\uff0c__contains__
\u200b\u63a5\u6536\u200b\u7684\u200bitem
\u200b\u53c2\u6570\u200b\u5bf9\u5e94\u200b\u6620\u5c04\u200b\u7684\u200bkey
\u200b\u90e8\u5206\u200b\u800c\u200b\u4e0d\u662f\u200bvalue
\u200b\u90e8\u5206\u200b\u3002\u200b\u82e5\u200b\u6ca1\u6709\u200b\u5b9a\u4e49\u200b\u8be5\u200b\u51fd\u6570\u200b\uff0cPython\u200b\u9996\u5148\u200b\u901a\u8fc7\u200b__iter__
\u200b\u8fdb\u884c\u200b\u67e5\u627e\u200b\uff0c\u200b\u5176\u6b21\u200b\u4f7f\u7528\u200b__getitem__
\u200b\u8fdb\u884c\u200b\u67e5\u627e\u200b \u200b\u8fed\u4ee3\u200b\u5668\u200b\u4e0e\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __iter__
self
\u200b\u8c03\u7528\u200biter()
\u200b\u51fd\u6570\u200b\u6216\u200b\u4f7f\u7528\u200b\u5faa\u73af\u200b\u65f6\u200b \u200b\u8fd4\u56de\u503c\u200b\u5e94\u4e3a\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff0c__iter__
\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u81ea\u8eab\u200b __reversed__
self
\u200b\u8c03\u7528\u200breversed()
\u200b\u51fd\u6570\u200b\u65f6\u200b \u200b\u8fd4\u56de\u503c\u200b\u5e94\u4e3a\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u4e14\u200b\u662f\u200b\u539f\u200b\u5e8f\u5217\u200b\u7684\u200b\u9006\u5e8f\u200b __next__
self
\u200b\u8c03\u7528\u200bnext()
\u200b\u51fd\u6570\u200b\u65f6\u200b \u200b\u8fd4\u56de\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u5f53\u200b\u5230\u8fbe\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u65f6\u200b\u629b\u51fa\u200bStopIteration
\u200b\u51fd\u6570\u8c03\u7528\u200b
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __call__
self, *args, **kwargs
\u200b\u5f53\u200b\u5bf9\u8c61\u200b\u4ee5\u200b\u51fd\u6570\u200b\u7684\u200b\u65b9\u5f0f\u200b\u88ab\u200b\u8c03\u7528\u200b\u65f6\u200b \u200b\u5b9a\u4e49\u200b\u4e86\u200b__call__
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5bf9\u8c61\u200b\u5c5e\u4e8e\u200btyping.Callable
\u200b\u7c7b\u578b\u200b \u200b\u4e0a\u4e0b\u6587\u200b\u7ba1\u7406\u200b\uff08with
\uff09\u200b\u5173\u952e\u8bcd\u200b\uff1a
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __enter__
self
\u200b\u4f7f\u7528\u200bwith
\u200b\u5173\u952e\u8bcd\u200b\u58f0\u660e\u200b\u4e0a\u4e0b\u6587\u200b\u65f6\u200b Any
\u200b\u8fd4\u56de\u503c\u200b\u5206\u914d\u200b\u7ed9\u200bas
\u200b\u5173\u952e\u8bcd\u200b\u6307\u660e\u200b\u7684\u200b\u5bf9\u8c61\u200b __exit__
self, exc_type, exc_value, traceback
\u200b\u79bb\u5f00\u200bwith
\u200b\u5757\u200b\u65f6\u200b Any
\u200b\u82e5\u200bwith
\u200b\u5757\u200b\u6267\u884c\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u6ca1\u6709\u200b\u51fa\u73b0\u5f02\u5e38\u200b\uff0c\u200b\u5219\u200bexc_type, exc_value, traceback
\u200b\u53c2\u6570\u5747\u200b\u4e3a\u200bNone
\uff0c\u200b\u5426\u5219\u200bexit
\u200b\u5757\u200b\u53ef\u4ee5\u200b\u5bf9\u200b\u5f02\u5e38\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b \u200b\u5bf9\u8c61\u200b\u7ba1\u7406\u200b
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __new__
cls[, ...]
\u200b\u521b\u5efa\u200b\u7c7b\u200b\u5b9e\u4f8b\u200b\u65f6\u200b Any
__new__
\u200b\u4e3a\u200b\u9759\u6001\u65b9\u6cd5\u200b\u4e14\u200b\u5148\u4e8e\u200b__init__
\u200b\u6267\u884c\u200b\uff0c__new__
\u200b\u7684\u200b\u5176\u4f59\u200b\u53c2\u6570\u200b\u4f1a\u200b\u4f20\u9012\u200b\u7ed9\u200b__init__
\u3002\u200b\u82e5\u200b__new__
\u200b\u8fd4\u56de\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e0e\u200b\u521b\u5efa\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e0d\u200b\u5bf9\u5e94\u200b\uff0c\u200b\u5219\u200b\u4e0d\u4f1a\u200b\u6267\u884c\u200b__init__
__init__
self, ...
\u200b\u521d\u59cb\u5316\u200b\u7c7b\u200b\u5b9e\u4f8b\u200b\u65f6\u200b None
\u200b\u82e5\u200b\u57fa\u7c7b\u200b\u5b9a\u4e49\u200b\u4e86\u200b__init__
\uff0c\u200b\u5219\u200b\u5728\u200b\u5b50\u7c7b\u200b\u7684\u200b__init__
\u200b\u4e2d\u200b\u5fc5\u987b\u200b\u6709\u200bsuper().__init()
\u200b\u7684\u200b\u663e\u5f0f\u200b\u8c03\u7528\u200b __del__
self
\u200b\u5bf9\u8c61\u200b\u9500\u6bc1\u200b\u65f6\u200b None
\u200b\u5f53\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5f15\u7528\u200b\u8ba1\u6570\u200b\u51cf\u200b\u4e3a\u200b0\u200b\u65f6\u200b\uff0c\u200b\u5bf9\u8c61\u200b\u624d\u200b\u53ef\u80fd\u200b\u88ab\u200b\u5220\u9664\u200b \u200b\u5c5e\u6027\u200b\u7ba1\u7406\u200b
\u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u53c2\u6570\u200b\u5217\u8868\u200b \u200b\u8c03\u7528\u200b\u65f6\u673a\u200b \u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b \u200b\u5907\u6ce8\u200b __getattribute__
self, name
\u200b\u4f7f\u7528\u200bself.name
\u200b\u8bbf\u95ee\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5c5e\u6027\u200b\u65f6\u200b Any
\u200b\u4e3a\u200b\u907f\u514d\u200b\u65e0\u9650\u200b\u9012\u5f52\u200b\uff0c\u200b\u5b50\u7c7b\u200b\u7684\u200b__getattribute__
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5b9e\u73b0\u200b\u4e2d\u200b\u5fc5\u987b\u200b\u5305\u542b\u200b\u7236\u7c7b\u200b\u7684\u200b__getattribute__
\u200b\u65b9\u6cd5\u200b\u8c03\u7528\u200b __getattr__
self, name
\u200b\u4f7f\u7528\u200bself.name
\u200b\u8bbf\u95ee\u200b\u5bf9\u8c61\u200b\u7684\u200b\u4e0d\u200b\u5b58\u5728\u200b\u5c5e\u6027\u200b\u6216\u200b__getattribute__
\u200b\u51fd\u6570\u200b\u629b\u51fa\u200bAttributeError
\u200b\u5f02\u5e38\u200b Any
\u200b\u5f53\u200b__getattribute__
\u200b\u6b63\u5e38\u200b\u6267\u884c\u200b\u65f6\u200b__getattr__
\u200b\u4e0d\u4f1a\u200b\u6267\u884c\u200b __setattr__
self, name, value
\u200b\u4f7f\u7528\u200bself.name
\u200b\u8bbe\u7f6e\u200b\u5c5e\u6027\u200b\u7684\u200b\u503c\u65f6\u200b None
\u200b\u5f53\u200b\u8bd5\u56fe\u200b\u901a\u8fc7\u200b__setattr__
\u200b\u5411\u200b\u5bf9\u8c61\u200b\u8bbe\u7f6e\u200b\u5c5e\u6027\u200b\u503c\u65f6\u200b\u5fc5\u987b\u200b\u901a\u8fc7\u200b\u7c7b\u578b\u200b\u7684\u200b__setattr__
\u200b\u65b9\u6cd5\u200b\u8fdb\u884c\u200b\u8bbe\u7f6e\u200b __delattr__
self, name
\u200b\u6267\u884c\u200bdel self.name
\u200b\u65f6\u200b None
\u200b\u4ec5\u5f53\u200bdel self.name
\u200b\u8bed\u53e5\u200b\u6709\u200b\u610f\u4e49\u200b\u65f6\u200b\uff0c\u200b\u624d\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200b\u8be5\u200b\u65b9\u6cd5\u200b __dir__
self
\u200b\u6267\u884c\u200bdir()
\u200b\u51fd\u6570\u200b\u65f6\u200b Sequence
dir()
\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\u5904\u7406"},{"location":"coding/python/magic-functions/#_3","title":"\u4e0e\u200b\u8fd0\u7b97\u7b26\u200b\u6709\u5173\u200b\u7684\u200b\u9b54\u672f\u200b\u65b9\u6cd5","text":"\u200b\u4e00\u5143\u200b\u8fd0\u7b97\u7b26\u200b
\u200b\u63cf\u8ff0\u200b \u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u8fd0\u7b97\u7b26\u200b \u200b\u53d6\u8d1f\u200b __neg__
-
\u200b\u53d6\u6b63\u200b __pos__
+
\u200b\u7edd\u5bf9\u503c\u200b __abs__
abs()
\u200b\u6bd4\u8f83\u200b\u8fd0\u7b97\u7b26\u200b
\u200b\u63cf\u8ff0\u200b \u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u8fd0\u7b97\u7b26\u200b \u200b\u5c0f\u4e8e\u200b __lt__
<
\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b __le__
<=
\u200b\u7b49\u4e8e\u200b __eq__
==
\u200b\u4e0d\u200b\u7b49\u4e8e\u200b __ne__
!=
\u200b\u5927\u4e8e\u200b __gt__
>
\u200b\u5927\u4e8e\u200b\u7b49\u4e8e\u200b __ge__
>=
\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u7b26\u200b
\u200b\u63cf\u8ff0\u200b \u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u8fd0\u7b97\u7b26\u200b \u200b\u76f8\u52a0\u200b __add__
+
\u200b\u76f8\u51cf\u200b __sub__
-
\u200b\u76f8\u4e58\u200b __mul__
*
\u200b\u5b9e\u6570\u200b\u9664\u200b __truediv__
/
\u200b\u6574\u6570\u200b\u9664\u200b __floordiv__
//
\u200b\u53d6\u4f59\u200b __mod__
%
\u200b\u6574\u6570\u200b\u9664\u200b+\u200b\u53d6\u4f59\u200b __divmod__
divmod()
\u200b\u4e58\u65b9\u200b __pow__
**
\u200b\u53d6\u6574\u200b __round__
round()
\u200b\u53cd\u5411\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u7b26\u200b\u5728\u200b\u65b9\u6cd5\u200b\u540d\u200b\u524d\u9762\u200b\u52a0\u200br
\uff0c\u200b\u5982\u200b__radd__
\u3002\u200b\u589e\u91cf\u200b\u8d4b\u503c\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u7b26\u200b\u5728\u200b\u65b9\u6cd5\u200b\u540d\u200b\u524d\u9762\u200b\u52a0\u200bi
\uff0c\u200b\u5982\u200b__iadd__
\u3002
\u200b\u4f4d\u200b\u8fd0\u7b97\u7b26\u200b
\u200b\u63cf\u8ff0\u200b \u200b\u65b9\u6cd5\u200b\u540d\u200b \u200b\u8fd0\u7b97\u7b26\u200b \u200b\u6309\u4f4d\u200b\u53d6\u53cd\u200b __invert__
~
\u200b\u5de6\u79fb\u200b __lshift__
<<
\u200b\u53f3\u79fb\u200b __rshift__
>>
\u200b\u6309\u4f4d\u200b\u4e0e\u200b __and__
&
\u200b\u6309\u4f4d\u200b\u6216\u200b __or__
|
\u200b\u6309\u4f4d\u200b\u5f02\u6216\u200b __xor__
^
\u200b\u53cd\u5411\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u7b26\u200b\u5728\u200b\u65b9\u6cd5\u200b\u540d\u200b\u524d\u9762\u200b\u52a0\u200br
\uff0c\u200b\u589e\u91cf\u200b\u8d4b\u503c\u200b\u7b97\u672f\u200b\u8fd0\u7b97\u7b26\u200b\u5728\u200b\u65b9\u6cd5\u200b\u540d\u200b\u524d\u9762\u200b\u52a0\u200bi
\u3002
"},{"location":"coding/python/mapping/","title":"Python\u200b\u4e2d\u200b\u7684\u200b\u6620\u5c04\u200b\u7c7b\u578b","text":"Python\u200b\u4e2d\u200b\u6700\u200b\u5e38\u89c1\u200b\u7684\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\u662f\u200b\u5b57\u5178\u200b\u3002\u200b\u672c\u6587\u200b\u5c06\u200b\u4ece\u200b\u5b57\u5178\u200b\u5165\u624b\u200b\u5bf9\u200bPython\u200b\u4e2d\u200b\u7684\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\u8fdb\u884c\u200b\u63a2\u8ba8\u200b\u3002
"},{"location":"coding/python/mapping/#_1","title":"\u5b57\u5178","text":"\u200b\u5b57\u5178\u200b\u7c7b\u578b\u200bdict
\u200b\u5bf9\u5e94\u200b\u7684\u200b\u62bd\u8c61\u200b\u57fa\u7c7b\u200b\u4e3a\u200bMutableMapping
\u3002\u200b\u800c\u200bMutableMapping
\u200b\u662f\u200bMapping
\u200b\u7684\u200b\u5b50\u7c7b\u200b\u3002
dict
\u200b\u4e2d\u200b\u7684\u200b\u6570\u636e\u7ec4\u7ec7\u200b\u4e3a\u952e\u200b-\u200b\u503c\u200b\u5bf9\u200b\u7684\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u5b57\u5178\u200b\u5bf9\u503c\u200b\u7684\u200b\u7c7b\u578b\u200b\u6ca1\u6709\u200b\u8981\u6c42\u200b\uff0c\u200b\u4f46\u200b\u8981\u6c42\u200b\u952e\u200b\u7684\u200b\u7c7b\u578b\u200b\u5fc5\u987b\u200b\u53ef\u6563\u5217\u200b\uff08hashable\uff09\u3002\u200b\u7531\u6b64\u53ef\u89c1\u200b\uff0c\u200b\u5b57\u5178\u200b\u7ed3\u6784\u200b\u7684\u200b\u5e95\u5c42\u200b\u5b9e\u73b0\u200b\u7c7b\u4f3c\u200b\u6563\u200b\u5217\u8868\u200b\uff0c\u200b\u4ee5\u200b\u52a0\u5feb\u200b\u5b57\u5178\u200b\u5185\u200b\u5143\u7d20\u200b\u7684\u200b\u8bbf\u95ee\u901f\u5ea6\u200b\u3002\u200b\u5b57\u5178\u200b\u7684\u200b\u6267\u884c\u200b\u6548\u7387\u200b\u8fdc\u9ad8\u4e8e\u200b\u5217\u8868\u200b\u3002
Python 3.6\u200b\u53ca\u200b\u4ee5\u540e\u200b\uff0cdict
\u200b\u7c7b\u578b\u200b\u5728\u200b\u5b9e\u73b0\u200b\u4e0a\u200b\u662f\u200b\u6709\u5e8f\u200b\u7684\u200b\uff0c\u200b\u952e\u200b\u7684\u200b\u987a\u5e8f\u200b\u53d6\u51b3\u4e8e\u200b\u6dfb\u52a0\u200b\u987a\u5e8f\u200b\uff0c\u200b\u4f46\u200b\u6807\u51c6\u200b\u5e76\u200b\u6ca1\u6709\u200b\u89c4\u5b9a\u200bdict
\u200b\u7c7b\u578b\u200b\u7684\u200b\u6709\u5e8f\u6027\u200b\u3002\u200b\u56e0\u6b64\u200b\u4e24\u4e2a\u200b\u952e\u200b\u987a\u5e8f\u200b\u4e0d\u540c\u200b\u7684\u200b\u5b57\u5178\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u76f8\u540c\u200b\u3002
>>> a = {1: 2, 2: 1}\n>>> b = {2: 1, 1: 2}\n>>> a == b\nTrue\n>>>\n
New in version 3.9
Python 3.9\u200b\u4e2d\u200b\uff0c\u200b\u5b57\u5178\u200b\u5bf9\u8c61\u200b\u652f\u6301\u200b|
\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u7528\u4e8e\u200b\u5c06\u200b\u4e24\u4e2a\u200b\u5b57\u5178\u200b\u5408\u5e76\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u3002\u200b\u5f53\u200b\u4e24\u4e2a\u200b\u5b57\u5178\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u91cd\u590d\u200b\u503c\u65f6\u200b\u53f3\u4fa7\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u4f18\u5148\u200b\u3002
>>> import sys \n>>> ver = sys.version_info\n>>> if ver.major == 3 and ver.minor > 8:\n... a = {1: 2}\n... b = {3: 4}\n... print(a | b == {1: 2, 3: 4})\n... else:\n... print(True)\nTrue\n>>>\n
"},{"location":"coding/python/mapping/#_2","title":"\u8fed\u4ee3","text":"dict
\u200b\u5bf9\u8c61\u200b\u662f\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5f53\u5bf9\u200bdict
\u200b\u5bf9\u8c61\u200b\u8fdb\u884c\u200b\u8fed\u4ee3\u200b\u65f6\u200b\uff0c\u200b\u5b9e\u9645\u4e0a\u200b\u662f\u200b\u8fed\u4ee3\u200bdict
\u200b\u7684\u200b\u952e\u200b\u3002
>>> for key in {1: 2, 3: 4}:\n... print(key)\n...\n1\n3\n>>>\n
dict.keys()
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u7531\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7684\u200b\u952e\u200b\u7ec4\u6210\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff1b dict.values()
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u7531\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u7ec4\u6210\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff1b dict.items()
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u7531\u952e\u200b-\u200b\u503c\u200b\u5143\u7ec4\u200b\u7ec4\u6210\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u8c03\u7528\u200bvalues
\u200b\u65b9\u6cd5\u200b\u65f6\u200b\uff0c\u200b\u90fd\u200b\u4f1a\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5373\u4f7f\u200b\u662f\u200b\u5bf9\u200b\u540c\u4e00\u4e2a\u200b\u5b57\u5178\u200b\u8c03\u7528\u200b\u591a\u6b21\u200bvalues
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5176\u200b\u8fd4\u56de\u503c\u200b\u4e5f\u200b\u4e0d\u60f3\u200b\u7b49\u200b\u3002
Changed in version 3.8
\u200b\u5185\u7f6e\u200b\u51fd\u6570\u200breversed
\u200b\u652f\u6301\u200b\u4f20\u9012\u200b\u5b57\u5178\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7684\u200b\u952e\u200b\u9006\u5e8f\u200b\u7ec4\u6210\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u3002
\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\u901a\u5e38\u200b\u662f\u200b\u53ef\u200b\u4fee\u6539\u200b\u7684\u200b\uff0c\u200b\u4f7f\u7528\u200btypes.MappingProxyType
\u200b\u4f1a\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u539f\u200b\u6620\u5c04\u200b\u7684\u200b\u89c6\u56fe\u200b\u3002\u200b\u5bf9\u539f\u200b\u6620\u5c04\u200b\u7684\u200b\u4efb\u4f55\u200b\u4fee\u6539\u200b\u90fd\u200b\u4f1a\u200b\u53cd\u6620\u200b\u5728\u200b\u89c6\u56fe\u200b\u4e2d\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u80fd\u200b\u5bf9\u200b\u89c6\u56fe\u200b\u8fdb\u884c\u200b\u4efb\u4f55\u200b\u76f4\u63a5\u200b\u7684\u200b\u4fee\u6539\u200b\u3002\u200b\u6b64\u200b\u65b9\u6cd5\u200b\u95f4\u63a5\u200b\u5730\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u4e0d\u53ef\u200b\u4fee\u6539\u200b\u7684\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\u3002
>>> from types import MappingProxyType\n>>> a = {1: 2, 3: 4}\n>>> b = MappingProxyType(a)\n>>> b\nmappingproxy({1: 2, 3: 4})\n>>> a.update({1: 5})\n>>> b\nmappingproxy({1: 5, 3: 4})\n>>> b[1] = 2\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: 'mappingproxy' object does not support item assignment\n>>>\n
"},{"location":"coding/python/mapping/#_3","title":"\u53ef\u6563\u5217\u200b\u7c7b\u578b","text":"\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u5bf9\u8c61\u200b\u79f0\u4e3a\u200b\u53ef\u6563\u5217\u200b\u5bf9\u8c61\u200b\uff1a
- \u200b\u5982\u679c\u200b\u8be5\u200b\u5bf9\u8c61\u200b\u53ef\u6563\u5217\u200b\uff0c\u200b\u5219\u200b\u5728\u200b\u5176\u200b\u751f\u547d\u5468\u671f\u200b\u4e2d\u200b\uff0c\u200b\u8be5\u6563\u200b\u5217\u503c\u200b\u4e0d\u53d8\u200b
- \u200b\u5bf9\u8c61\u200b\u5b9e\u73b0\u200b\u4e86\u200b
__hash__()
\u200b\u4e0e\u200b__eq__()
\u200b\u65b9\u6cd5\u200b\uff08\u200b\u6ca1\u6709\u200b\u5b9e\u73b0\u200b__eq__()
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5bf9\u8c61\u200b\u4e0d\u200b\u5e94\u200b\u5b9e\u73b0\u200b__hash__()
\u200b\u65b9\u6cd5\u200b\uff09 - \u200b\u5982\u679c\u200b\u5b83\u200b\u548c\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u5bf9\u8c61\u200b\u76f8\u7b49\u200b\uff0c\u200b\u5219\u200b\u4e24\u8005\u200b\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u6563\u5217\u503c\u200b
\u200b\u5982\u200b\uff1a
>>> a = \"abc\"\n>>> b = \"\".join([\"a\", \"b\", \"c\"])\n>>> a is b\nFalse\n>>> hash(a) == hash(b)\nTrue\n>>>\n
\u200b\u6ce8\u200b\uff1a\u200b\u82e5\u200b\u4e00\u4e2a\u200b\u81ea\u5b9a\u4e49\u200b\u7c7b\u578b\u5b9a\u4e49\u200b\u4e86\u200b__eq__
\uff0c\u200b\u4e14\u200b\u6ca1\u6709\u200b\u5b9a\u4e49\u200b__hash__
\uff0c__hash__
\u200b\u4f1a\u200b\u88ab\u200b\u8bbe\u4e3a\u200bNone
\u3002\u200b\u53ef\u6563\u5217\u200b\u7684\u200b\u81ea\u5b9a\u4e49\u200b\u5bf9\u8c61\u200b\u5fc5\u987b\u200b\u6709\u200b__hash__
\u200b\u65b9\u6cd5\u200b\u3002
\u200b\u4ee5\u4e0b\u5185\u5bb9\u200b\u6765\u81ea\u200b\u4e8e\u200bPython\u200b\u6587\u6863\u200b
\u200b\u6839\u636e\u200b\u5982\u200b\u4e0a\u200b\u89c4\u5219\u200b\u53ef\u4ee5\u200b\u5224\u65ad\u200b\u4e00\u4e9b\u200b\u5185\u7f6e\u200b\u6570\u636e\u7ed3\u6784\u200b\u662f\u5426\u200b\u4e3a\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b
- \u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u5728\u200b\u751f\u547d\u5468\u671f\u200b\u4e2d\u200b\u5e8f\u5217\u200b\u7684\u200b\u5185\u5bb9\u200b\u53ef\u80fd\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\uff08\u200b\u5982\u200b
list
\u3001set
\u200b\u7b49\u200b\uff09\u200b\u4e0d\u662f\u200b\u53ef\u6563\u5217\u200b\u5bf9\u8c61\u200b\u3002 - \u200b\u539f\u5b50\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u6570\u636e\u7c7b\u578b\u200b\u6ee1\u8db3\u200b\u5982\u200b\u4e0a\u200b\u6240\u6709\u200b\u6761\u4ef6\u200b\uff0c\u200b\u662f\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b
- \u200b\u5bb9\u5668\u200b
frozenset
\u200b\u8981\u6c42\u200b\u5176\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u5747\u200b\u4e3a\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5176\u4e2d\u200b\u5185\u5bb9\u200b\u5728\u200b\u6574\u4e2a\u200b\u751f\u547d\u5468\u671f\u200b\u4e2d\u200b\u4e0d\u4f1a\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u56e0\u6b64\u200b\u662f\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b - \u200b\u5bb9\u5668\u200b
tuple
\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u5bb9\u7eb3\u200b\u4e0d\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u56e0\u6b64\u200btuple
\u200b\u4e0d\u662f\u200b\u53ef\u6563\u5217\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u200b\u542b\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5143\u7ec4\u200b\u662f\u200b\u53ef\u200b\u6563\u5217\u200b\u5bf9\u8c61\u200b\u3002
>>> t1 = hash((1, 2))\n>>> t2 = hash((1, [2]))\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: unhashable type: 'list'\n>>>\n
\u200b\u4f7f\u7528\u200bhash
\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u53d6\u5f97\u200b\u53ef\u6563\u5217\u200b\u5bf9\u8c61\u200b\u7684\u200b\u6563\u5217\u503c\u200b\u3002\u200b\u4e3a\u4e86\u200b\u907f\u514d\u200bDOS\u200b\u653b\u51fb\u200b\uff0c\u200b\u5728\u200b\u8ba1\u7b97\u200b\u6563\u5217\u503c\u200b\u65f6\u4f1a\u200b\u52a0\u4e0a\u200b\u4e00\u4e2a\u200b\u968f\u673a\u200b\u7684\u200b\u566a\u58f0\u200b\u3002\u200b\u566a\u58f0\u200b\u7684\u200b\u503c\u200b\u4ec5\u200b\u5728\u200b\u540c\u4e00\u200bPython\u200b\u5b9e\u4f8b\u200b\u4e2d\u200b\u76f8\u540c\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u6574\u6570\u200b\uff0c\u200b\u82e5\u200b\u5b83\u200b\u7684\u200b\u503c\u200b\u5c0f\u4e8e\u200b\u6563\u5217\u503c\u200b\u6240\u200b\u5141\u8bb8\u200b\u7684\u200b\u6700\u5927\u503c\u200b\uff08\u200b\u5373\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u653e\u8fdb\u200b\u6563\u5217\u503c\u200b\u6240\u200b\u9650\u5b9a\u200b\u7684\u200b\u7a7a\u95f4\u200b\u5185\u200b\uff09\uff0c\u200b\u5219\u200b\u6563\u5217\u200b\u7684\u200b\u503c\u200b\u5c31\u662f\u200b\u8be5\u200b\u6574\u6570\u200b\u7684\u200b\u503c\u200b\u3002
\u200b\u6563\u200b\u5217\u8868\u200b\u7684\u200b\u4f7f\u7528\u200b\u662f\u200b\u201c\u200b\u7a7a\u95f4\u200b\u6362\u200b\u65f6\u95f4\u200b\u201d\u200b\u7b56\u7565\u200b\u7684\u200b\u5178\u578b\u200b\u4f53\u73b0\u200b\u3002\u200b\u4e3a\u4e86\u200b\u5c3d\u53ef\u80fd\u51cf\u5c11\u200b\u51b2\u7a81\u200b\uff0c\u200b\u6563\u200b\u5217\u8868\u200b\u5fc5\u987b\u200b\u6709\u200b\u8f83\u200b\u4f4e\u200b\u7684\u200b\u88c5\u586b\u200b\u56e0\u5b50\u200b\uff0c\u200b\u8fd9\u200b\u610f\u5473\u7740\u200b\u6563\u200b\u5217\u8868\u200b\u4f1a\u200b\u5360\u7528\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u3002
"},{"location":"coding/python/mapping/#_4","title":"\u6784\u9020","text":"\u200b\u5b57\u5178\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u591a\u79cd\u200b\u6784\u9020\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6784\u9020\u200b\u5b57\u5178\u200b{'a': 1, 'b': 2}
- \u200b\u82b1\u200b\u62ec\u53f7\u200b\u6784\u9020\u200b\uff0c\u200b\u5982\u200b
{'a': 1, 'b': 2}
- \u200b\u901a\u8fc7\u200b\u7c7b\u200b\u6784\u9020\u51fd\u6570\u200b\uff0c\u200b\u5982\u200b
dict(a=1, b=2)
- \u200b\u901a\u8fc7\u200b\u5143\u7ec4\u200b/\u200b\u5217\u8868\u200b\uff08\u200b\u53ea\u200b\u9700\u200b\u662f\u200b\u957f\u5ea6\u200b\u4e3a\u200b2\u200b\u7684\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff09\u200b\u6784\u9020\u200b\uff0c\u200b\u5982\u200b
dict([('a', 1), ['b', 2]])
- \u200b\u901a\u8fc7\u200b
zip
\u200b\u6253\u5305\u200b\u6784\u9020\u200b\uff0c\u200b\u5982\u200bdict(zip(['a', 'b'], [1, 2]))
- \u200b\u901a\u8fc7\u200b\u5b57\u5178\u200b\u63a8\u5bfc\u200b\u6784\u9020\u200b\uff0c\u200b\u5982\u200b
{chr(97 + _): _ + 1 for _ in range(2)}
"},{"location":"coding/python/mapping/#_5","title":"\u53d8\u79cd","text":"collections
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5b57\u5178\u200b\u7684\u200b\u4e24\u4e2a\u200b\u53d8\u79cd\u200b\uff0c\u200b\u5373\u200bdefaultdict
\u200b\u4e0e\u200bOrderDict
"},{"location":"coding/python/mapping/#defaultdict","title":"defaultdict","text":"\u200b\u5f53\u200b\u5728\u200b\u4e00\u4e2a\u200b\u5b57\u5178\u200bd
\u200b\u4e2d\u200b\u627e\u200b\u4e0d\u5230\u200b\u952e\u200bk
\u200b\u65f6\u200b\uff0cPython\u200b\u4f1a\u200b\u4ea7\u751f\u200bKeyError
\u200b\u5f02\u5e38\u200b\u3002\u200b\u4f7f\u7528\u200bd.get(k, default)
\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u627e\u200b\u4e0d\u5230\u200b\u7684\u200b\u952e\u200b\u8bbe\u7f6e\u200b\u9ed8\u8ba4\u200b\u8fd4\u56de\u503c\u200b\u3002\u200b\u4f46\u200bdict.get
\u200b\u51fd\u6570\u200b\u4e0d\u4f1a\u200b\u5bf9\u200b\u5b57\u5178\u200b\u8fdb\u884c\u200b\u66f4\u65b0\u200b\uff0c\u200b\u63d2\u5165\u200b\u627e\u200b\u4e0d\u5230\u200b\u7684\u200b\u952e\u200b\u3002
dict.setdefault
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u53e6\u200b\u4e00\u79cd\u200b\u4ece\u200b\u5b57\u5178\u200b\u4e2d\u200b\u83b7\u53d6\u200b\u503c\u200b\u7684\u200b\u65b9\u6cd5\u200b\u3002setdefault
\u200b\u63a5\u6536\u200b\u4e24\u4e2a\u200b\u53c2\u6570\u200b\uff0c\u200b\u7b2c\u4e00\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200bkey
\uff0c\u200b\u7b2c\u4e8c\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200b\u53ef\u9009\u200b\u7684\u200b\u9ed8\u8ba4\u503c\u200bdefault
\u3002\u200b\u5f53\u200b\u5b57\u5178\u200b\u4e2d\u200b\u627e\u5230\u200bkey
\u200b\u6240\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5143\u7d20\u200b\u65f6\u200b\uff0csetdefault
\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200b\u8be5\u503c\u200b\uff0c\u200b\u5426\u5219\u200bsetdefault
\u200b\u4f1a\u200b\u5728\u200b\u5b57\u5178\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u952e\u503c\u200b\u5bf9\u200bkey: default
\uff0c\u200b\u7136\u540e\u200b\u8fd4\u56de\u200bdefault
\u3002
>>> a = {}\n>>> a.setdefault(0, True)\nTrue\n>>> a[0] = False\n>>> a.setdefault(0, False) \nFalse\n>>>\n
\u200b\u4f7f\u7528\u200bsetdefault
\u200b\u4ece\u200b\u5b57\u5178\u200b\u4e2d\u200b\u83b7\u53d6\u200b\u503c\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u51cf\u5c11\u200b\u5b57\u5178\u200b\u7684\u200b\u67e5\u8be2\u200b\u6b21\u6570\u200b\uff0c\u200b\u63d0\u9ad8\u200b\u5b57\u5178\u200b\u6267\u884c\u200b\u7684\u200b\u6548\u7387\u200b\uff1a
>>> a = {}\n>>> try:\n... a[0].append(True)\n... except KeyError:\n... a[0] = []\n... a[0].append(True)\n... \n>>> a\n{0: [True]}\n>>>\n
\u200b\u5982\u200b\u4e0a\u200b\u4f7f\u7528\u200btry-except
\u200b\u7ed3\u6784\u200b\u5904\u7406\u200b\u5b57\u5178\u200b\u4e2d\u200b\u627e\u200b\u4e0d\u5230\u200b\u503c\u200b\u7684\u200b\u7ed3\u679c\u200b\uff0c\u200b\u5982\u679c\u200b\u4f7f\u7528\u200bsetdefault
\u200b\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u6709\u6548\u200b\u51cf\u5c11\u200b\u4ee3\u7801\u200b\u957f\u5ea6\u200b\uff0c\u200b\u589e\u52a0\u200b\u4ee3\u7801\u200b\u53ef\u8bfb\u6027\u200b\u3002
>>> a = {}\n>>> a.setdefault(0, []).append(True)\n>>> a\n{0: [True]}\n>>>\n
defaultdict
\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u5904\u7406\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7f3a\u5931\u200b\u7684\u200b\u952e\u200b\u3002\u200b\u51c6\u786e\u200b\u5730\u8bf4\u200b\uff0cdefaultdict
\u200b\u5728\u200b\u521b\u5efa\u200b\u65f6\u200b\u9700\u8981\u200b\u63d0\u4f9b\u200b\u4e00\u4e2a\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\uff0c\u200b\u5b57\u5178\u200b\u4e2d\u200b\u627e\u200b\u4e0d\u5230\u200b\u952e\u65f6\u200b\uff0cdefaultdict
\u200b\u4f1a\u200b\u901a\u8fc7\u200b\u8c03\u7528\u200b\u8fd9\u4e2a\u200b\u53ef\u200b\u8c03\u7528\u200b\u5bf9\u8c61\u200b\u6765\u200b\u5f97\u5230\u200b\u8be5\u952e\u200b\u5bf9\u5e94\u200b\u7684\u200b\u9ed8\u8ba4\u503c\u200b\u3002
>>> from collections import defaultdict\n>>> a = defaultdict(list)\n>>> a\ndefaultdict(<class 'list'>, {})\n>>> a[False] = {}\n>>> a[False]\n{}\n>>> a[True]\n[]\n>>> a\ndefaultdict(<class 'list'>, {False: {}, True: []})\n>>>\n
\u200b\u5982\u679c\u200b\u521b\u5efa\u200bdefaultdict
\u200b\u65f6\u200b\u6ca1\u6709\u200b\u6307\u5b9a\u200b\u53c2\u6570\u200b\uff0c\u200b\u8bbf\u95ee\u200b\u4e0d\u200b\u5b58\u5728\u200b\u7684\u200b\u952e\u200b\u65f6\u200b\u4ecd\u4f1a\u200b\u629b\u51fa\u200bKeyError
\u3002
\u200b\u4e8b\u5b9e\u4e0a\u200b\uff0c__getitem__
\u200b\u901a\u8fc7\u200b\u7279\u6b8a\u200b\u65b9\u6cd5\u200b__missing__
\u200b\u5904\u7406\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7f3a\u5931\u200b\u7684\u200b\u952e\u200b\u3002\u200b\u624b\u52a8\u200b\u8c03\u7528\u200b__missing__
\u200b\u65b9\u6cd5\u200b\u80fd\u200b\u5b9e\u73b0\u200b\u76f8\u540c\u200b\u7684\u200b\u6548\u679c\u200b\uff1a
>>> from collections import defaultdict \n>>> a = defaultdict(list)\n>>> a \ndefaultdict(<class 'list'>, {})\n>>> a.__missing__(0) \n[]\n>>> a\ndefaultdict(<class 'list'>, {0: []})\n>>>\n
__missing__
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u53c2\u6570\u200b\u4e3a\u200bself, key
\uff0c\u200b\u5176\u4e2d\u200bkey
\u200b\u4e3a\u200b\u7f3a\u5931\u200b\u7684\u200b\u952e\u200b\u3002\u200b\u5373\u4f7f\u200b__missing__
\u200b\u6b63\u5e38\u200b\u6267\u884c\u200b\uff0c\u200b\u8fd4\u56de\u503c\u200b\u4e5f\u200b\u4e0d\u4f1a\u200b\u88ab\u200b\u6dfb\u52a0\u200b\u5230\u200b\u5b57\u5178\u200b\u4e2d\u200b\u3002
>>> class NumDict(dict):\n... def __init__(self, *args, **kwargs):\n... super().__init__(*args, **kwargs)\n... def __missing__(self, key):\n... if isinstance(key, int):\n... return 0\n... else:\n... raise KeyError(key)\n...\n>>> a = NumDict([(1, 2), (\"a\", \"b\")])\n>>> a\n{1: 2, 'a': 'b'}\n>>> a[0]\n0\n>>> a['b']\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\n File \"<stdin>\", line 8, in __missing__\nKeyError: 'b'\n>>> a\n{1: 2, 'a': 'b'}\n>>>\n
"},{"location":"coding/python/mapping/#ordereddict","title":"OrderedDict","text":"OrderedDict
\u200b\u662f\u200b\u4e25\u683c\u200b\uff08\u200b\u5728\u200b\u4efb\u4f55\u200b\u7248\u672c\u200b\u4e2d\u200b\uff09\u200b\u4fdd\u6301\u200b\u987a\u5e8f\u200b\u7684\u200b\u5b57\u5178\u200b\u3002\u200b\u5728\u200b\u8fed\u4ee3\u200b\u8fc7\u7a0b\u200b\u4e2d\u952e\u200b\u7684\u200b\u987a\u5e8f\u200b\u4fdd\u6301\u4e00\u81f4\u200b\u3002
OrderedDict
\u200b\u65b0\u589e\u200b\u4e86\u200bpopitem
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u9ed8\u8ba4\u200b\u79fb\u9664\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5b57\u5178\u200b\u4e2d\u200b\u6700\u540e\u200b\u6dfb\u52a0\u200b\u7684\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u3002\u200b\u5982\u679c\u200b\u624b\u52a8\u200b\u6307\u5b9a\u200blast
\u200b\u53c2\u6570\u200b\u4e3a\u200bFalse
\uff0c\u200b\u5219\u200b\u79fb\u9664\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7b2c\u4e00\u4e2a\u200b\u6dfb\u52a0\u200b\u7684\u200b\u5143\u7d20\u200b\u3002\u200b\u540c\u65f6\u200b\uff0cmove_to_end
\u200b\u662f\u200b\u4e0e\u200b\u4e4b\u200b\u914d\u5408\u200b\u7684\u200b\u79fb\u52a8\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5b57\u5178\u200b\u4e2d\u200b\u7684\u200b\u952e\u503c\u200b\u5bf9\u200b\uff08\u200b\u7531\u200bkey
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\uff09\u200b\u79fb\u52a8\u200b\u5230\u200b\u5b57\u5178\u200b\u4e00\u7aef\u200b\uff08\u200b\u7531\u200blast
\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\uff09\u3002
"},{"location":"coding/python/mapping/#chainmap","title":"ChainMap","text":"ChainMap
\u200b\u53ef\u4ee5\u200b\u89c6\u4e3a\u200b\u4e00\u79cd\u200b\u5bb9\u7eb3\u200b\u6620\u5c04\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002\u200b\u76f8\u6bd4\u200b\u4e8e\u200b\u4f7f\u7528\u200bdict.update()
\u200b\u6216\u200b|
\u200b\u8fd0\u7b97\u7b26\u200b\u9010\u4e2a\u200b\u5408\u5e76\u200b\u6620\u5c04\u200b\uff0cChainMap
\u200b\u6709\u200b\u66f4\u200b\u9ad8\u200b\u7684\u200b\u6548\u7387\u200b\u3002
ChainMap
\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u6620\u5c04\u200b\uff0c\u200b\u5f53\u200b\u5728\u200bChainMap
\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u67e5\u8be2\u200b\u65f6\u200b\uff0cChainMap
\u200b\u4f1a\u200b\u9010\u4e2a\u200b\u67e5\u8be2\u200b\u5176\u4e2d\u200b\u7684\u200b\u6620\u5c04\u200b\u3002\u200b\u5f53\u200b\u540c\u4e00\u4e2a\u200b\u952e\u200b\u51fa\u73b0\u200b\u5728\u200b\u4e0d\u540c\u200b\u7684\u200b\u6620\u5c04\u200b\u4e2d\u200b\u65f6\u200b\uff0cChainMap
\u200b\u8fd4\u56de\u200b\u67e5\u8be2\u200b\u5230\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u7ed3\u679c\u200b\u3002
>>> from collections import ChainMap\n>>> a = ChainMap({'a': 1, 'b': 2}, {'a': 3, 'b': 4})\n>>> a['b']\n2\n>>> a['a']\n1\n>>>\n
\u200b\u5b58\u50a8\u200b\u7684\u200b\u6620\u5c04\u200b\u5728\u200bChainMap.maps
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\uff0c\u200b\u5bf9\u200b\u8be5\u200b\u5c5e\u6027\u200b\u7684\u200b\u4fee\u6539\u200b\u4f1a\u200b\u540c\u65f6\u200b\u53cd\u6620\u200b\u5728\u200bChainMap
\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u3002parents
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u901a\u8fc7\u200b\u5c5e\u6027\u200b\u65b9\u5f0f\u200b\u8bbf\u95ee\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8fd4\u56de\u200b\u53bb\u9664\u200b\u539f\u200bChainMap
\u200b\u4e2d\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6620\u5c04\u200b\u540e\u200b\u7684\u200b\u65b0\u200bChainMap
\uff0c\u200b\u539f\u200bChainMap
\u200b\u4fdd\u6301\u200b\u4e0d\u53d8\u200b\u3002
new_child
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5411\u200bChainMap
\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u6620\u5c04\u200b\u7684\u200b\u65b9\u6cd5\u200b\u3002\u200b\u65b0\u200b\u7684\u200b\u6620\u5c04\u200b\u88ab\u200b\u6dfb\u52a0\u200b\u5230\u200bChainMap
\u200b\u7684\u200b\u5f00\u5934\u200b\uff0c\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u63d0\u4f9b\u200b\u6620\u5c04\u200b\uff0c\u200b\u5219\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u7a7a\u200b\u5b57\u5178\u200b\u3002
ChainMap
\u200b\u5e76\u200b\u6ca1\u6709\u200b\u5408\u5e76\u200b\u539f\u6709\u200b\u7684\u200b\u6620\u5c04\u200b\uff0c\u200b\u56e0\u6b64\u200b\u8fed\u4ee3\u200bChainMap
\u200b\u5bf9\u8c61\u200b\u6216\u200b\u5bf9\u200bChainMap
\u200b\u5bf9\u8c61\u200b\u8c03\u7528\u200bdict()
\u200b\u65f6\u200b\u53ea\u4f1a\u200b\u5e94\u7528\u200b\u5230\u200b\u5176\u4e2d\u200b\u5305\u542b\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u6620\u5c04\u200b\u3002
>>> dict(a)\n{'a': 1, 'b': 2}\n>>>\n
"},{"location":"coding/python/mapping/#counter","title":"Counter","text":"Counter
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5bf9\u200b\u4e00\u7cfb\u5217\u200b\u503c\u200b\u7684\u200b\u7edf\u8ba1\u200b\u65b9\u6cd5\u200b\u3002\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u521d\u59cb\u5316\u200bCounter
\u200b\u7c7b\u578b\u200b\uff0cCounter
\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u7edf\u8ba1\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u6bcf\u4e2a\u200b\u503c\u200b\u7684\u200b\u51fa\u73b0\u200b\u987a\u5e8f\u200b\u3002
Counter
\u200b\u4e0d\u4f1a\u200b\u5bf9\u200b\u8f93\u5165\u200b\u7684\u200b\u503c\u200b\u8fdb\u884c\u200b\u68c0\u67e5\u200b\uff0c\u200b\u5982\u679c\u200b\u4f7f\u7528\u200b\u5b57\u5178\u200b\u521d\u59cb\u5316\u200b\u5e76\u200b\u63d0\u4f9b\u200b\u975e\u200b\u6574\u6570\u200b\u7c7b\u578b\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u5728\u200b\u8c03\u7528\u200bCounter.most_common()
\u200b\u65b9\u6cd5\u200b\u6216\u200b\u8fed\u4ee3\u200bCounter.elements()
\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u65f6\u4f1a\u200b\u629b\u51fa\u200bTypeError
\u200b\u5f02\u5e38\u200b\u3002
>>> from collections import Counter\n>>> a = Counter({'0': '0'})\n>>> for i in a.elements():\n... pass\n...\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: 'str' object cannot be interpreted as an integer\n
\u200b\u8fd9\u200b\u4e00\u70b9\u200b\u5728\u200bPython\u200b\u6587\u6863\u200b\u4e2d\u6709\u200b\u76f8\u5e94\u200b\u8bf4\u660e\u200b\uff1a
>>> from collections import Counter \n>>> a = Counter([1, 1, 1, 2, 2, 3]) \n>>> a\nCounter({1: 3, 2: 2, 3: 1})\n>>>\n
\u200b\u66f4\u65b0\u200bCounter
\u200b\u5bf9\u8c61\u200b\u65f6\u200b\uff0c\u200b\u8ba1\u6570\u5668\u200b\u4f1a\u200b\u76f8\u5e94\u200b\u5730\u200b\u66f4\u65b0\u200b\uff1a
>>> a.update([3, 3, 3, 2, 2, 1])\n>>> a\nCounter({1: 4, 2: 4, 3: 4})\n>>>\n
Counter.elements()
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u8fed\u4ee3\u200b\u5668\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u6309\u7167\u200b\u5176\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u91cd\u590d\u200b\u3002Counter.most_common
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u8ba1\u6570\u5668\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u6b21\u6570\u200b\u6700\u591a\u200b\u7684\u200b\u5143\u7d20\u200b\u3002
Counter
\u200b\u7c7b\u578b\u200b\u63d0\u4f9b\u200b\u4e86\u200b+
\u3001-
\u3001&
\u200b\u548c\u200b|
\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u8ba1\u6570\u5668\u200b\u7684\u200b\u76f8\u52a0\u200b\u3001\u200b\u76f8\u51cf\u200b\u3001\u200b\u4ea4\u200b\u548c\u200b\u5e76\u200b\u64cd\u4f5c\u200b\u3002\u200b\u5f53\u200b+
\u3001-
\u200b\u88ab\u200b\u7528\u4f5c\u200b\u4e00\u5143\u200b\u8fd0\u7b97\u7b26\u200b\u65f6\u200b\uff0c\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u64cd\u4f5c\u6570\u200b\u9ed8\u8ba4\u200b\u4e3a\u7a7a\u200b\u8ba1\u6570\u5668\u200b\u3002
"},{"location":"coding/python/mapping/#_6","title":"\u6269\u5c55","text":"collections.UserDict
\u200b\u7c7b\u200b\u662f\u200b\u5bf9\u200bdict
\u200b\u7684\u200bPython\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u81ea\u5b9a\u4e49\u200b\u6620\u5c04\u200b\u7c7b\u578b\u200b\u7684\u200b\u5b9e\u73b0\u200b\u3002
UserDict
\u200b\u4e0d\u662f\u200bdict
\u200b\u7684\u200b\u5b50\u7c7b\u200b\uff0c\u200b\u4f46\u200bUserDict
\u200b\u4e2d\u6709\u200b\u4e00\u4e2a\u200bdict
\u200b\u7c7b\u578b\u200b\u7684\u200bdata
\u200b\u5c5e\u6027\u200b\uff0c\u200b\u662f\u200bUserDict
\u200b\u5b58\u50a8\u200b\u6570\u636e\u200b\u7684\u200b\u6700\u7ec8\u200b\u4f4d\u7f6e\u200b\u3002\u200b\u76f8\u6bd4\u200b\u4e8e\u200b\u76f4\u63a5\u200b\u5bf9\u200bdict
\u200b\u7c7b\u578b\u200b\u8fdb\u884c\u200b\u6269\u5c55\u200b\uff0cdata
\u200b\u5c5e\u6027\u200b\u4fdd\u8bc1\u200b\u4e86\u200b__getitem__
\u200b\u65b9\u6cd5\u200b\u4e0d\u4f1a\u200b\u4ea7\u751f\u200b\u5faa\u73af\u200b\u9012\u5f52\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002
UserDict
\u200b\u7c7b\u200b\u7ee7\u627f\u200b\u81ea\u200b_collections_abc.MutableMapping
\u200b\u4e0e\u200b_collections_abc.Mapping
\u200b\u7c7b\u200b\u3002MutableMapping
\u200b\u63d0\u4f9b\u200b\u4e86\u200bupdate()
\u200b\u65b9\u6cd5\u200b\u3002\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5185\u90e8\u200b\u5b9e\u73b0\u200b\u8868\u660e\u200b\uff0cupdate()
\u200b\u5728\u200b\u5185\u90e8\u200b\u901a\u8fc7\u200b__setitem__
\u200b\u5b9e\u73b0\u200b\u3002Mapping
\u200b\u63d0\u4f9b\u200b\u4e86\u200bget()
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8be5\u200b\u65b9\u6cd5\u200b\u5728\u200b\u5185\u90e8\u200b\u901a\u8fc7\u200b__getitem__
\u200b\u5b9e\u73b0\u200b\u3002
>>> from collections import UserDict\n>>> class myDict(UserDict):\n... def __init__(self, *args, **kwargs):\n... super().__init__(*args, **kwargs) \n... def __setitem__(self, index, value):\n... print(\"Modification: \", index, \":\", value)\n... super().__setitem__(index, value)\n... \n>>> a = myDict()\n>>> a.update(a=5, b=4)\nModification: a : 5\nModification: b : 4\n>>>\n
"},{"location":"coding/python/mapping/#_7","title":"\u96c6\u5408","text":"\u200b\u96c6\u5408\u200bset
\u200b\u662f\u200b\u4e00\u79cd\u200b\u5e8f\u5217\u200b\u7c7b\u578b\u200b\uff0c\u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u5404\u4e2a\u200b\u5143\u7d20\u200b\u6700\u200b\u591a\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u6b21\u200b\u3002\u200b\u4efb\u4f55\u200b\u975e\u200b\u7a7a\u96c6\u5408\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5b57\u9762\u200b\u8868\u793a\u6cd5\u200b{}
\u200b\u8fdb\u884c\u200b\u8868\u793a\u200b\uff0c\u200b\u7a7a\u96c6\u200b\u53ea\u80fd\u200b\u7528\u200bset()
\u200b\u8868\u793a\u200b\u3002\u200b\u96c6\u5408\u200b\u540c\u6837\u200b\u9002\u7528\u200b\u4e8e\u200b\u4e0e\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u76f8\u4f3c\u200b\u7684\u200b\u63a8\u5bfc\u200b\u65b9\u5f0f\u200b\u3002
\u200b\u96c6\u5408\u200b\u6709\u200b\u5bf9\u5e94\u200b\u7684\u200b\u53ea\u8bfb\u200b\u53d8\u79cd\u200bfrozenset
\u3002set
\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u5b57\u9762\u200b\u8868\u793a\u6cd5\u200b\u8fdb\u884c\u200b\u6784\u9020\u200b\uff0c\u200b\u6216\u200b\u4f7f\u7528\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u8fdb\u884c\u200b\u6784\u9020\u200b\u3002frozenset
\u200b\u53ea\u80fd\u200b\u4f7f\u7528\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u6784\u9020\u200b\u3002
\u200b\u53ef\u4ee5\u200b\u5229\u7528\u200bset
\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u552f\u4e00\u6027\u200b\u53bb\u9664\u200b\u5217\u8868\u200b\u4e2d\u200b\u7684\u200b\u91cd\u590d\u200b\u503c\u200b\uff1a
>>> src_list = [1, 1, 2, 3, 4, 2, 3]\n>>> list(set(src_list))\n[1, 2, 3, 4]\n>>>\n
\u200b\u53e6\u200b\u4e00\u79cd\u200b\u65b9\u6cd5\u200b\u662f\u200b\u901a\u8fc7\u200bcollections.Counter
\u200b\u53bb\u200b\u91cd\u200b\u3002
>>> from collections import Counter\n>>> src_list = [1, 1, 2, 3, 4, 2, 3]\n>>> list(Counter(src_list).keys())\n[1, 2, 3, 4]\n>>>\n
\u200b\u548c\u200b\u5b57\u5178\u200b\u7684\u200b\u952e\u200b\u4e00\u6837\u200b\uff0c\u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u5fc5\u987b\u200b\u662f\u200b\u53ef\u200b\u6563\u5217\u200b\u7684\u200b\u3002set
\u200b\u7c7b\u578b\u200b\u672c\u8eab\u200b\u4e0d\u53ef\u200b\u6563\u5217\u200b\uff0cfrozenset
\u200b\u7c7b\u578b\u200b\u53ef\u6563\u5217\u200b\u3002
"},{"location":"coding/python/mapping/#_8","title":"\u8fd0\u7b97","text":"\u200b\u96c6\u5408\u200b\u6709\u200b\u5982\u4e0b\u200b\u8fd0\u7b97\u200b\uff0c\u200b\u7531\u4e8e\u200b\u96c6\u5408\u200b\u7684\u200b\u5e95\u5c42\u200b\u6570\u636e\u7ed3\u6784\u200b\u662f\u200b\u6563\u200b\u5217\u8868\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u8fd0\u7b97\u200b\u65b9\u6cd5\u200b\u6709\u200b\u8f83\u200b\u9ad8\u200b\u7684\u200b\u8ba1\u7b97\u200b\u6548\u7387\u200b\u3002
- \u200b\u4ea4\u96c6\u200b\u3001\u200b\u5e76\u96c6\u200b\u3001\u200b\u5dee\u96c6\u200b\u3001\u200b\u5bf9\u79f0\u200b\u5dee\u200b\uff0c\u200b\u5373\u200b
&
\u3001|
\u3001-
\u200b\u4e0e\u200b^
\uff1b - \u200b\u5b50\u96c6\u200b\u3001\u200b\u771f\u200b\u5b50\u96c6\u200b\u3001\u200b\u8d85\u96c6\u200b\u3001\u200b\u771f\u8d85\u96c6\u200b\uff0c\u200b\u5373\u200b
<=
\u3001<
\u3001>=
\u200b\u4e0e\u200b>
\uff1b - \u200b\u5c5e\u4e8e\u200b\uff0c\u200b\u5373\u200b
in
\u200b\u4ee5\u200bin
\u200b\u64cd\u4f5c\u200b\u4e3a\u4f8b\u200b\uff0cset
\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u67e5\u8be2\u200b\u6563\u200b\u5217\u8868\u200b\u83b7\u53d6\u200b\u7ed3\u679c\u200b\uff0c\u200b\u4f46\u200blist
\u200b\u5fc5\u987b\u200b\u626b\u63cf\u200b\u4e00\u904d\u200b\u5217\u8868\u200b\u624d\u80fd\u200b\u83b7\u53d6\u200b\u7ed3\u679c\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u542b\u6709\u200b\u8bb8\u591a\u200b\u5143\u7d20\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e24\u8005\u200b\u5728\u200b\u6267\u884c\u200b\u901f\u5ea6\u200b\u4e0a\u200b\u6709\u200b\u660e\u663e\u200b\u7684\u200b\u5dee\u522b\u200b\u3002
set
\u200b\u8fd8\u200b\u652f\u6301\u200badd
\u3001clear
\u3001copy
\u3001pop
\u3001remove
\u200b\u7b49\u200b\u65b9\u6cd5\u200b\u3002
"},{"location":"coding/python/sequence/","title":"Python\u200b\u4e2d\u200b\u7684\u200b\u5e8f\u5217\u200b\u7c7b\u578b","text":"\u200b\u5e8f\u5217\u200b\u6307\u200b\u53ef\u4ee5\u200b\u5b58\u50a8\u200b\u591a\u4e2a\u200b\u6570\u636e\u200b\u7684\u200b\u6570\u636e\u7ed3\u6784\u200b\u3002
\u200b\u6309\u7167\u200b\u5b58\u50a8\u200b\u7684\u200b\u6570\u636e\u7c7b\u578b\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\uff1a
- \u200b\u5bb9\u5668\u200b\u53ef\u4ee5\u200b\u5b58\u50a8\u200b\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u6570\u636e\u200b\uff0c\u200b\u8fd9\u90e8\u5206\u200b\u7c7b\u578b\u200b\u6709\u200b
list
\u3001tuple
\u3001collections.deque
- \u200b\u6241\u5e73\u200b\u5e8f\u5217\u200b\u53ea\u80fd\u200b\u5b58\u50a8\u200b\u67d0\u79cd\u200b\u7c7b\u578b\u200b\u7684\u200b\u6570\u636e\u200b\uff0c\u200b\u8fd9\u90e8\u5206\u200b\u7c7b\u578b\u200b\u6709\u200b
str
\u3001bytes
\u3001bytearray
\u3001memoryview
\u3001array.array
\u200b\u6309\u7167\u200b\u5e8f\u5217\u200b\u662f\u5426\u200b\u53ef\u4ee5\u200b\u4fee\u6539\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b
- \u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\uff1a
list
\u3001bytearray
\u3001array.array
\u3001collections.deque
\u3001memoryview
- \u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\uff1a
tuple
\u3001str
\u3001bytes
"},{"location":"coding/python/sequence/#_1","title":"\u5217\u8868","text":"\u200b\u5217\u8868\u200b\u662f\u200b\u53ef\u4ee5\u200b\u4fee\u6539\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5b58\u50a8\u200b\u591a\u79cd\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u6570\u636e\u7ed3\u6784\u200b\u3002\u200b\u5982\u4e0b\u200b\u7740\u91cd\u200b\u8ba8\u8bba\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u7684\u200b\u4e66\u5199\u200b\u5f62\u5f0f\u200b\u3002
\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u53ef\u200b\u7528\u4e8e\u200b\u4ece\u200b\u4e00\u4e2a\u200b\u5217\u8868\u200b\u751f\u6210\u200b\u65b0\u200b\u7684\u200b\u5217\u8868\u200b\uff0c\u200b\u76f8\u6bd4\u200b\u4e8e\u200bfor\u200b\u5faa\u73af\u200b\u52a0\u200bappend()
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u7684\u200b\u5199\u6cd5\u200b\u6709\u200b\u66f4\u597d\u200b\u7684\u200b\u53ef\u8bfb\u6027\u200b\u3002
\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u793a\u4f8b\u200b\uff1a
a = [1, 2, 3]\nb = [_ ** 2 for _ in a]\n
Python 3.x\u200b\u4e2d\u200b\u7684\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u4e0d\u4f1a\u200b\u4ea7\u751f\u200b\u53d8\u91cf\u200b\u6cc4\u9732\u200b\u7684\u200b\u95ee\u9898\u200b\uff0c\u200b\u5982\u4e0b\u200b\uff1a
x = 'ABC'\ny = [x for x in x]\nprint(x)\n
\u200b\u8f93\u51fa\u200b\u4e3a\u200bABC
\uff0c\u200b\u8bf4\u660e\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u53d8\u91cf\u200bx
\u200b\u7684\u200b\u503c\u200b\u6ca1\u6709\u200b\u4f20\u9012\u200b\u5230\u200b\u5916\u90e8\u200b\u3002
\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u7b49\u4ef7\u200b\u4e8e\u200bmap
\u200b\u4e0e\u200bfilter
\u200b\u7684\u200b\u7ed3\u5408\u200b\u3002map
\u200b\u51fd\u6570\u200b\u63a5\u6536\u200b\u4e24\u4e2a\u200b\u53c2\u6570\u200b\u3002\u200b\u7b2c\u4e00\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200b\u51fd\u6570\u200b\uff0c\u200b\u7b2c\u4e8c\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u3002map
\u200b\u51fd\u6570\u200b\u8fed\u4ee3\u200b\u5730\u200b\u5c06\u200b\u51fd\u6570\u200b\u4f5c\u7528\u200b\u4e8e\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u4ece\u800c\u200b\u5f97\u5230\u200b\u7ed3\u679c\u200b\u3002
\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8ba1\u7b97\u200b\u5217\u8868\u200b\u7684\u200b\u7b1b\u5361\u5c14\u200b\u79ef\u200b\uff0c\u200b\u5982\u200b\u4e0b\u5217\u200b\u4ee3\u7801\u200b\uff1a
[(x, y) for x in range(10) for y in range(11, 20)]\n
\u200b\u5faa\u73af\u200b\u7684\u200b\u987a\u5e8f\u200b\u4e0e\u200bfor
\u200b\u5faa\u73af\u200b\u4e00\u81f4\u200b\uff0c\u200b\u5148\u200b\u6267\u884c\u200b\u5916\u5c42\u200b\u7684\u200b\u5faa\u73af\u200b\uff0c\u200b\u518d\u200b\u6267\u884c\u200b\u5185\u5c42\u200b\u7684\u200b\u5faa\u73af\u200b\u3002
\u200b\u5c06\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u7684\u200b\u65b9\u62ec\u53f7\u200b\u5706\u62ec\u53f7\u200b\uff0c\u200b\u5373\u200b\u4e3a\u200b\u751f\u6210\u5668\u200b\u8868\u8fbe\u5f0f\u200b\u3002\u200b\u5982\u679c\u200b\u751f\u6210\u5668\u200b\u8868\u8fbe\u5f0f\u200b\u662f\u200b\u51fd\u6570\u8c03\u7528\u200b\u7684\u200b\u552f\u4e00\u200b\u53c2\u6570\u200b\uff0c\u200b\u5706\u62ec\u53f7\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u3002
"},{"location":"coding/python/sequence/#_2","title":"\u5143\u7ec4","text":"\u200b\u5143\u7ec4\u200b\u662f\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7406\u89e3\u200b\u4e3a\u200b\u5b57\u200b\u6bb5\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u6570\u636e\u8868\u200b\u4e2d\u200b\u7684\u200b\u67d0\u200b\u4e00\u884c\u200b\u3002\u200b\u5982\u4e0b\u200b\u7740\u91cd\u200b\u8ba8\u8bba\u200b\u5143\u7ec4\u200b\u89e3\u5305\u200b\u7684\u200b\u5185\u5bb9\u200b\u3002
\u200b\u5e73\u884c\u200b\u8d4b\u503c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u4e00\u4e2a\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u590d\u5236\u5230\u200b\u4e00\u7ec4\u200b\u53d8\u91cf\u200b\u4e2d\u200b\u3002\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u5bf9\u8c61\u200b\u4e0d\u200b\u8981\u6c42\u200b\u662f\u200b\u5143\u7ec4\u200b\u3002\u200b\u5982\u200b\uff1a
a, b = (1, 2)\nc, d = [3, 4]\ne, f = {1: 2, 3: 4} # \u200b\u6309\u7167\u200bkey\u200b\u7684\u200b\u53d6\u503c\u200b\u8fdb\u884c\u200b\u5206\u914d\u200b\n
*
\u200b\u8fd0\u7b97\u7b26\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u89e3\u5305\u200b\u5143\u7ec4\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u4f5c\u4e3a\u200b\u51fd\u6570\u53c2\u6570\u200b\uff0c\u200b\u5982\u200b\uff1a
print(*(1, 2))\n
*
\u200b\u8fd0\u7b97\u7b26\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u4ece\u200b\u51fd\u6570\u200b\u4e2d\u200b\u83b7\u53d6\u200b\u53ef\u53d8\u200b\u6570\u91cf\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5e38\u89c1\u200b\u7528\u6cd5\u200b\u4e3a\u200b*args
\u200b\u4e0e\u200b**kwargs
\u3002
*
\u200b\u8fd0\u7b97\u7b26\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u5e73\u884c\u200b\u8d4b\u503c\u200b\u4e2d\u200b\uff0c\u200b\u4f46\u200b\u5e73\u884c\u200b\u8d4b\u503c\u200b\u4e2d\u200b\u7684\u200b\u4e00\u7ec4\u200b\u53d8\u91cf\u200b\u53ea\u80fd\u200b\u51fa\u73b0\u200b\u4e00\u4e2a\u200b*
\u200b\u8fd0\u7b97\u7b26\u200b\u3002\u200b\u5e26\u200b*
\u200b\u7684\u200b\u53d8\u91cf\u200b\u89e3\u5305\u200b\u540e\u200b\u6210\u4e3a\u200b\u5217\u8868\u200b\u3002
a, b, c, *d = range(5) # d = [3, 4]\na, b, *c, d = range(5) # c = [2, 3]\n
\u200b\u5f53\u5f85\u200b\u89e3\u5305\u200b\u7684\u200b\u5143\u7ec4\u200b\u672c\u8eab\u200b\u662f\u200b\u5143\u7ec4\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u62ec\u53f7\u200b\u89e3\u5305\u200b\uff0c\u200b\u5982\u200b\uff1a
a, (b, c), d = (1, (2, 3), 4)\n
\u200b\u5143\u7ec4\u200b\u4e0d\u200b\u652f\u6301\u200b\u5217\u8868\u200b\u7684\u200bappend
\u3001clear
\u3001copy
\u3001extend
\u3001insert
\u3001pop
\u3001remove
\u3001reverse
\u200b\u7b49\u200b\u65b9\u6cd5\u200b\u3002
"},{"location":"coding/python/sequence/#_3","title":"\u5177\u540d\u200b\u5143\u7ec4","text":"collections.namedtuple
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u7528\u4e8e\u200b\u521b\u5efa\u200b\u5177\u540d\u200b\u5143\u7ec4\u200b\u7c7b\u578b\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5176\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u5982\u4e0b\u200b\uff1a
collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)\n
typename
\u200b\u6307\u200b\u7c7b\u578b\u200b\u7684\u200b\u540d\u79f0\u200b\uff0c\u200b\u8be5\u200b\u53d8\u91cf\u200b\u88ab\u200b\u5199\u5165\u200b__repr__
\u200b\u65b9\u6cd5\u200b\u4e2d\u200b\u3002\u200b\u8be5\u200b\u53c2\u6570\u200b\u7684\u200b\u53d6\u503c\u200b\u4e0e\u200b\u4ee3\u7801\u200b\u4e2d\u200b\u7c7b\u578b\u200b\u88ab\u200b\u5b9e\u9645\u200b\u5206\u914d\u200b\u7684\u200b\u540d\u79f0\u200b\u65e0\u5173\u200b\u3002 field_names
\u200b\u662f\u200b\u5143\u7ec4\u200b\u4e2d\u5b57\u200b\u6bb5\u200b\u7684\u200b\u540d\u79f0\u200b - \u200b\u5f53\u200b
rename
\u200b\u4e3a\u200bTrue
\u200b\u91cd\u590d\u200b\u6216\u200b\u4e0e\u200b\u5173\u952e\u5b57\u200b\u51b2\u7a81\u200b\u7684\u200b\u5b57\u6bb5\u540d\u200b\u79f0\u4f1a\u200b\u88ab\u200b\u81ea\u52a8\u200b\u5904\u7406\u200b\uff0c\u200b\u5426\u5219\u200b\u4f1a\u200b\u629b\u51fa\u200bValueError
defaults
\u200b\u4e3a\u200b\u5b57\u200b\u6bb5\u200b\u7684\u200b\u9ed8\u8ba4\u503c\u200b\uff0c\u200b\u8be5\u200b\u5217\u8868\u200b\u4e0e\u200b\u5b57\u6bb5\u540d\u200b\u79f0\u200b\u5217\u8868\u200b\u6309\u53f3\u200b\u5bf9\u9f50\u200b\u8fdb\u884c\u200b\u5339\u914d\u200b\u3002 - \u200b\u82e5\u200b\u63d0\u4f9b\u200b\u4e86\u200b
module
\u200b\u53c2\u6570\u200b\uff0c\u200b\u8be5\u503c\u200b\u4f1a\u200b\u88ab\u200b\u5199\u5165\u200b__module__
\u200b\u5c5e\u6027\u200b\u4e2d\u200b\u3002
namedtuple
\u200b\u8fd4\u56de\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u521b\u5efa\u5bf9\u8c61\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002
>>> from collections import namedtuple\n>>> Point = namedtuple('Point', [\"x\", \"y\"], defaults=[1, 2]) \n>>> Point()\nPoint(x=1, y=2)\n>>> Point(2)\nPoint(x=2, y=2)\n>>> Point(2, 3)\nPoint(x=2, y=3)\n>>>\n
"},{"location":"coding/python/sequence/#_4","title":"\u5207\u7247","text":"\u200b\u5207\u7247\u200b\u662f\u200b\u5728\u200b\u5e8f\u5217\u200b\u4e0a\u200b\u6267\u884c\u200b\u7684\u200b\u64cd\u4f5c\u200b\uff0c\u200b\u5207\u7247\u200b\u64cd\u4f5c\u200b\u5f97\u5230\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002\u200b\u5207\u7247\u200b\u4ee5\u200bs[a:b:c]
\u200b\u7684\u200b\u5f62\u5f0f\u200b\u6307\u5b9a\u200b\uff0ca
\u200b\u4e3a\u200b\u8d77\u59cb\u200b\u4e0b\u6807\u200b\u3001b
\u200b\u4e3a\u200b\u7ec8\u6b62\u200b\u4e0b\u6807\u200b\uff08\u200b\u4e0d\u200b\u5305\u542b\u200b\uff09\u3001c
\u200b\u4e3a\u200b\u6b65\u957f\u200b\uff08\u200b\u53ef\u4ee5\u200b\u4e3a\u200b\u8d1f\u200b\uff09\u3002
s[::-1]
\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u53cd\u8f6c\u200bs
\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b - \u200b\u5207\u7247\u200b\u5e76\u200b\u6ca1\u6709\u200b\u521b\u5efa\u200b\u65b0\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5bf9\u200b\u5207\u7247\u200b\u7684\u200b\u4fee\u6539\u200b\u4f1a\u200b\u53cd\u6620\u200b\u5230\u200b\u539f\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u3002\u200b\u4f46\u200b\u5bf9\u200b\u5207\u7247\u200b\u7684\u200b\u4fee\u6539\u200b\u5fc5\u987b\u200b\u6ee1\u8db3\u200b\u5143\u7d20\u200b\u6570\u91cf\u200b\u76f8\u540c\u200b\u7684\u200b\u6761\u4ef6\u200b\uff0c\u200b\u5426\u5219\u200b\u4f1a\u200b\u629b\u51fa\u200b
ValueError
\u3002
\u200b\u53e6\u200b\u4e00\u79cd\u200b\u5207\u7247\u200b\u7684\u200b\u65b9\u5f0f\u200b\u4e3a\u200bs[slice(a, b, c)]
\uff0c\u200b\u7701\u7565\u200b\u7684\u200b\u53c2\u6570\u200b\u4f7f\u7528\u200bNone
\u200b\u8868\u793a\u200b\u3002\u200b\u56e0\u6b64\u200bs[::-1]
\u200b\u7b49\u4ef7\u200b\u4e8e\u200bs[slice(None, None, -1)]
\u3002\u200b\u4e8b\u5b9e\u4e0a\u200b\uff0cPython\u200b\u5728\u200b\u5904\u7406\u200b\u5f62\u200b\u5982\u200bs[a:b:c]
\u200b\u7684\u200b\u5207\u7247\u200b\u65f6\u4f1a\u200b\u8c03\u7528\u200bs.__getitem__(slice(start, stop, step))
\u200b\u5728\u200bNumPy\u200b\u6570\u7ec4\u200b\u7684\u200b\u5207\u7247\u200b\u4e2d\u200b\u6709\u65f6\u200b\u4f1a\u200b\u51fa\u73b0\u200b\u7701\u7565\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u6b64\u65f6\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b...
\u3002...
\u200b\u7b26\u53f7\u200b\u4f1a\u200b\u88ab\u200bPython\u200b\u89e3\u91ca\u200b\u4e3a\u200bEllipsisType
\u200b\u7c7b\u578b\u200b\u7684\u200b\u5e38\u91cf\u200b\u3002
"},{"location":"coding/python/sequence/#_5","title":"\u5e8f\u5217\u200b\u8fd0\u7b97","text":"\u200b\u5e8f\u5217\u200b\u901a\u5e38\u200b\u652f\u6301\u200b+
\u200b\u8fd0\u7b97\u200b\u4e0e\u200b*
\u200b\u8fd0\u7b97\u200b\u3002\u200b\u4e0e\u200b\u5207\u7247\u200b\u4e0d\u540c\u200b\uff0c\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u8fd0\u7b97\u200b\u76f4\u63a5\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002
>>> a = [1]\n>>> b = [2] \n>>> c = a + b\n>>> c is a\nFalse\n>>>\n
+
\u200b\u8fd0\u7b97\u200b\u5c40\u9650\u4e8e\u200b\u76f8\u540c\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5bf9\u4e8e\u200blist
\u200b\u7b49\u200b\u53ef\u53d8\u200b\u7c7b\u578b\u200b\uff0ca + b
\u200b\u7b49\u4ef7\u200b\u4e8e\u200ba.extend(b)
\u3002\u200b\u4f46\u200ba.extend(b)
\u200b\u65b9\u6cd5\u200b\u5bf9\u200bb
\u200b\u7684\u200b\u7c7b\u578b\u200b\u65e0\u200b\u8981\u6c42\u200b\uff0c\u200b\u4ec5\u200b\u9700\u8981\u200bb
\u200b\u53ef\u200b\u8fed\u4ee3\u200b\u3002
*
\u200b\u8fd0\u7b97\u7b26\u200b\u7684\u200b\u7b2c\u4e8c\u4e2a\u200b\u64cd\u4f5c\u6570\u200by
\u200b\u5fc5\u987b\u200b\u4e3a\u200b\u6574\u6570\u200b\uff0c\u200b\u8868\u793a\u200b\u5c06\u200b\u5e8f\u5217\u200b\u91cd\u590d\u200by
\u200b\u6b21\u200b\u3002\u200b\u82e5\u200by<=0
\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200b\u7a7a\u200b\u5217\u8868\u200b
\u200b\u6ce8\u610f\u200b\uff0c*
\u200b\u8fd0\u7b97\u7b26\u200b\u5f97\u5230\u200b\u7684\u200b\u5217\u8868\u200b\u4e2d\u200b\uff0c\u200b\u5217\u8868\u200b\u591a\u6b21\u91cd\u590d\u200b\u7684\u200b\u90e8\u5206\u200b\u4ee5\u200b\u5f15\u7528\u200b\u7684\u200b\u5f62\u5f0f\u200b\u5b58\u50a8\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
>>> b = [[]] * 3\n>>> b[0].append(1)\n>>> b\n[[1], [1], [1]]\n>>>\n
append
\u200b\u5904\u7406\u200b\u53ef\u53d8\u200b\u5bf9\u8c61\u200b\u7684\u200b\u65b9\u5f0f\u200b\u540c\u6837\u200b\u662f\u200b\u590d\u5236\u200b\u5f15\u7528\u200b\u800c\u200b\u4e0d\u662f\u200b\u590d\u5236\u200b\u503c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e5f\u200b\u4f1a\u200b\u9020\u6210\u200b\u76f8\u540c\u200b\u7684\u200b\u95ee\u9898\u200b\uff1a
>>> a = []\n>>> b = []\n>>> for i in range(3):\n... a.append(b)\n... \n>>> a[0].append(1)\n>>> a\n[[1], [1], [1]]\n>>>\n
\u200b\u56e0\u6b64\u200b\u8981\u200b\u907f\u514d\u200b\u4f7f\u7528\u200b*
\u200b\u8fd0\u7b97\u7b26\u200b\u5904\u7406\u200b\u5305\u542b\u200b\u53ef\u53d8\u200b\u5bf9\u8c61\u200b\u7684\u200b\u5217\u8868\u200b\u3002\u200b\u5efa\u8bae\u200b\u4f7f\u7528\u200b\u5217\u8868\u200b\u63a8\u5bfc\u200b\u521b\u5efa\u200b\u5d4c\u5957\u200b\u5217\u8868\u200b\u3002
\u200b\u4e0e\u200b\u5e8f\u5217\u200b\u7684\u200b\u8fd0\u7b97\u200b\u4e0d\u540c\u200b\uff0c\uff08\u200b\u53ef\u53d8\u200b\uff09\u200b\u5e8f\u5217\u200b\u7684\u200b\u589e\u91cf\u200b\u8fd0\u7b97\u200b+=
\u3001*=
\u200b\u662f\u200b\u5728\u200b\u539f\u200b\u5e8f\u5217\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\u8fdb\u884c\u200b\u7684\u200b\uff0c\u200b\u4e0d\u4f1a\u200b\u521b\u5efa\u200b\u65b0\u200b\u7684\u200b\u5e8f\u5217\u200b\u5bf9\u8c61\u200b\u3002\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\u4e0d\u200b\u652f\u6301\u200b\u589e\u91cf\u200b\u8fd0\u7b97\u200b\u3002
\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\uff1a
>>> a = [1, 2, 3]\n>>> a[2] += 5\n>>> a\n[1, 2, 8]\n>>>\n
\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u901a\u8fc7\u200b__setitem__
\u200b\u65b9\u6cd5\u200b\u5b9e\u73b0\u200b\u4e86\u200b\u5207\u7247\u200b\u7684\u200b\u4fee\u6539\u200b\u3002\u200b\u82e5\u200ba
\u200b\u4e3a\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\uff0c\u200b\u6267\u884c\u200b\u7ed3\u679c\u200b\u5e94\u200b\u4e3a\u4f55\u200b\uff1f
\u200b\u5bf9\u4e8e\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5176\u200b\u672c\u8eab\u200b\u4e0d\u200b\u652f\u6301\u200b\u5bf9\u200b\u5143\u7d20\u200b\u8fdb\u884c\u200b\u7684\u200b\u4fee\u6539\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5e8f\u5217\u200b\u672c\u8eab\u200b\u7684\u200b\u503c\u200b\u4e0d\u4f1a\u200b\u6539\u53d8\u200b\u3002
>>> a = (1, 2, 3)\n>>> a[2] += 5\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: 'tuple' object does not support item assignment\n>>> a\n(1, 2, 3)\n>>>\n
\u200b\u4f46\u200b\u5982\u679c\u200b\u8981\u200b\u4fee\u6539\u200b\u7684\u200b\u5143\u7d20\u200b\u672c\u8eab\u200b\u662f\u200b\u5f15\u7528\u200b\uff0c\u200b\u5982\u200b\u4e00\u4e2a\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\uff0c\u200b\u6b64\u65f6\u200b\u5bf9\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u7684\u200b\u4fee\u6539\u200b\u4e0d\u4f1a\u200b\u5f71\u54cd\u200b\u5230\u200b\u5f15\u7528\u200b\u672c\u8eab\u200b\uff0c\u200b\u56e0\u6b64\u200b+=
\u200b\u8fd0\u7b97\u200b\u4ecd\u4f1a\u200b\u6b63\u5e38\u200b\u4f5c\u7528\u200b\u3002\u200b\u589e\u91cf\u200b\u64cd\u4f5c\u200b\u4e0d\u662f\u200b\u539f\u5b50\u200b\u64cd\u4f5c\u200b\u3002
>>> t = (1, 2, [30, 40])\n>>> t[2] += [50, 60]\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: 'tuple' object does not support item assignment\n>>> t\n(1, 2, [30, 40, 50, 60])\n>>>\n
\u200b\u5982\u679c\u200b\u4f7f\u7528\u200bappend
\u200b\u6216\u200bextend
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u907f\u514d\u200b\u5f02\u5e38\u200b\u7684\u200b\u4ea7\u751f\u200b\u3002\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u88ab\u200b \u200b\u6b63\u5e38\u200b\u4fee\u6539\u200b \u3002\u200b\u4e3a\u200b\u4fdd\u8bc1\u6570\u636e\u200b\u4e0d\u200b\u88ab\u200b\u9519\u8bef\u200b\u5730\u200b\u4fee\u6539\u200b\uff0c\u200b\u5e94\u200b\u907f\u514d\u200b\u5728\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u5bb9\u7eb3\u200b\u53ef\u53d8\u200b\u5bf9\u8c61\u200b\u3002
"},{"location":"coding/python/sequence/#_6","title":"\u6392\u5e8f","text":"list.sort
\u200b\u65b9\u6cd5\u200b\u4f5c\u7528\u200b\u4e0e\u200b\u5217\u8868\u200b\u672c\u8eab\u200b\u800c\u200b\u4e0d\u200b\u8fd4\u56de\u200b\uff08\u200b\u8fd4\u56de\u503c\u200b\u4e3a\u200bNone
\uff09\u3002\u200b\u8981\u200b\u4ea7\u751f\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u5df2\u200b\u6392\u5e8f\u200b\u5217\u8868\u200b\u800c\u200b\u4e0d\u200b\u5f71\u54cd\u200b\u539f\u200b\u5217\u8868\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bsorted()
\u200b\u5185\u7f6e\u200b\u51fd\u6570\u200b\u3002
>>> a = [6, 3, 2, 1]\n>>> b = sorted(a)\n>>> b is a\nFalse\n>>>\n
sorted
\u200b\u4e0e\u200blist.sort
\u200b\u652f\u6301\u200b\u6309\u7167\u200b\u5176\u4ed6\u200b\u89c4\u5219\u200b\u5bf9\u200b\u5e8f\u5217\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\uff0c\u200b\u5373\u200bkey
\u200b\u53c2\u6570\u200b\u3002key
\u200b\u53c2\u6570\u200b\u4e3a\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u53c2\u6570\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5982\u200bkey=len
\u200b\u5373\u200b\u4e3a\u200b\u5bf9\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u5347\u5e8f\u200b\u6392\u5e8f\u200b\uff0ckey=lower
\u200b\u5373\u200b\u4e3a\u200b\u5ffd\u7565\u200b\u5b57\u7b26\u4e32\u200b\u5927\u5c0f\u5199\u200b\u8fdb\u884c\u200b\u5347\u5e8f\u200b\u6392\u5e8f\u200b\u3002
Python\u200b\u7684\u200bbisect
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u5bf9\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u7684\u200b\u652f\u6301\u200b\u3002bisect.bisect
\u200b\u4e3a\u200b\u4e8c\u5206\u200b\u67e5\u627e\u200b\u51fd\u6570\u200b\uff0c\u200b\u8fd4\u56de\u200b\u5728\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5927\u4e8e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u503c\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002bisect.insort
\u200b\u4e3a\u200b\u63d2\u5165\u200b\u51fd\u6570\u200b\uff0c\u200b\u5728\u200bbisect
\u200b\u51fd\u6570\u200b\u67e5\u8be2\u200b\u4f4d\u7f6e\u200b\u63d2\u5165\u200b\u5143\u7d20\u200b\u3002
bisect
\u200b\u4e0e\u200binsort
\u200b\u51fd\u6570\u200b\u6709\u200b\u53d8\u79cd\u200bbisect_left
\u200b\u4e0e\u200binsort_left
\u3002bisect_left
\u200b\u8fd4\u56de\u200b\u5728\u200b\u76ee\u6807\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u4e0d\u200b\u5927\u4e8e\u200b\u5f85\u67e5\u200b\u5143\u7d20\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u503c\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002
"},{"location":"coding/python/sequence/#_7","title":"\u5176\u4ed6\u200b\u5e8f\u5217\u200b\u7c7b\u578b","text":""},{"location":"coding/python/sequence/#_8","title":"\u6570\u7ec4","text":"array
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u6570\u7ec4\u200b\u7ed3\u6784\u200b\u7684\u200b\u652f\u6301\u200b\u3002\u200b\u6570\u7ec4\u200b\u662f\u200b\u53ea\u80fd\u200b\u5b58\u50a8\u200b\u4e00\u79cd\u200b\u7c7b\u578b\u200b\u5143\u7d20\u200b\u7684\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\uff0c\u200b\u652f\u6301\u200blist
\u200b\u7684\u200b\u591a\u6570\u200b\u65b9\u6cd5\u200b\u3002\u200b\u540c\u65f6\u200b\u6570\u7ec4\u200b\u63d0\u4f9b\u200b\u4e86\u200bfromfile, tofile
\u200b\u4e0e\u200bfrombytes, tobytes
\uff0c\u200b\u4ece\u800c\u200b\u652f\u6301\u200b\u76f4\u63a5\u200b\u8bfb\u5199\u200b\u6587\u4ef6\u200b\u6216\u200b\u6bd4\u7279\u6d41\u200b\u3002
\u200b\u5728\u200b\u521b\u5efa\u200b\u6570\u7ec4\u200b\u65f6\u200b\u9700\u8981\u200b\u6307\u5b9a\u200b\u7c7b\u578b\u200b\u7801\u200b\uff0c\u200b\u5373\u200b\u6570\u7ec4\u200b\u4e2d\u200b\u5b58\u50a8\u200b\u7684\u200b\u6570\u636e\u7c7b\u578b\u200b\u3002\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u7c7b\u578b\u200b\u7801\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7c7b\u578b\u200b\u53ea\u200b\u5360\u7528\u200b\u6709\u9650\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u3002\u200b\u5728\u200b\u5b58\u50a8\u200b\u5927\u91cf\u200b\u6570\u636e\u200b\u65f6\u200b\u4f18\u4e8e\u200b\u5217\u8868\u200b\u7b49\u200b\u5176\u4ed6\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u3002
\u200b\u7c7b\u578b\u200b\u7801\u200b C \u200b\u7c7b\u578b\u200b Python \u200b\u7c7b\u578b\u200b \u200b\u5b57\u200b\u5bbd\u200b 'b'
signed char
int
1 'B'
unsigned char
int
1 'u'
wchar_t
Unicode character 2 'h'
signed short
int
2 'H'
unsigned short
int
2 'i'
signed int
int
2 'I'
unsigned int
int
2 'l'
signed long
int
4 'L'
unsigned long
int
4 'q'
signed long long
int
8 'Q'
unsigned long long
int
8 'f'
float
float
4 'd'
double
float
8 \u200b\u6570\u7ec4\u200b\u4e0d\u200b\u652f\u6301\u200b\u5217\u8868\u200b\u7684\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
\u200b\u4f46\u200b\u6570\u7ec4\u200b\u652f\u6301\u200b\u4ece\u200b\u5217\u8868\u200b\u6dfb\u52a0\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5373\u200bfromlist
\u200b\u65b9\u6cd5\u200b\u3002\u200b\u5f53\u200b\u5217\u8868\u200b\u4e2d\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u5728\u200b\u6dfb\u52a0\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u51fa\u9519\u200b\uff0c\u200b\u5219\u200b\u6240\u6709\u200b\u7684\u200b\u6dfb\u52a0\u200b\u90fd\u200b\u4f1a\u200b\u88ab\u200b\u56de\u6eda\u200b\u3002
>>> import array\n>>> a = array.array('f')\n>>> b = [1.0, 2.0, 'a']\n>>> a\narray('f')\n>>> a.fromlist(b)\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: must be real number, not str\n>>> a\narray('f')\n>>>\n
\u200b\u6570\u7ec4\u200b\u662f\u200bbytes-like object\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u5185\u5b58\u200b\u89c6\u56fe\u200b\u4e2d\u200b\u3002
"},{"location":"coding/python/sequence/#_9","title":"\u5185\u5b58\u200b\u89c6\u56fe","text":"memoryview
\u200b\u5141\u8bb8\u200b\u4f7f\u7528\u200b\u4e0d\u540c\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8bfb\u5199\u200b\u540c\u4e00\u200b\u5757\u5185\u5b58\u200b\u7684\u200b\u6570\u636e\u200b\u3002
\u200b\u5982\u4e0b\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u6620\u5c04\u200b\u5230\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\u7684\u200bmemoryview
\uff0c\u200b\u5728\u200b\u4e0d\u200b\u6267\u884c\u200b\u64cd\u4f5c\u200b\u65f6\u200b\uff0cmemory
\u200b\u7684\u200b\u6570\u636e\u200b\u5185\u5bb9\u200b\u4e0e\u200b\u539f\u200b\u5e8f\u5217\u200b\u7684\u200b\u6570\u636e\u200b\u5185\u5bb9\u200b\u76f8\u540c\u200b\u3002
>>> a = [1, 2, 3, 4]\n>>> b = memoryview(array.array('i', a))\n>>> b[0]\n1\n>>>\n
\u200b\u4f7f\u7528\u200bmemoryview.cast
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5c06\u200bmemoryview
\u200b\u6620\u5c04\u200b\u7684\u200b\u5185\u5b58\u200b\u533a\u57df\u200b\u4ee5\u200b\u4e0d\u540c\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u89e3\u91ca\u200b\u3002
>>> c = b.cast('B')\n>>> list(c)\n[1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0]\n>>>\n
memoryview
\u200b\u7684\u200b\u53ef\u53d8\u6027\u200b\u53d6\u51b3\u4e8e\u200b\u5176\u6240\u200b\u6620\u5c04\u200b\u5185\u5b58\u200b\u533a\u57df\u200b\u7684\u200b\u6027\u8d28\u200b\uff0c\u200b\u82e5\u200b\u4f7f\u7528\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\u521b\u5efa\u200bmemoryview
\uff0c\u200b\u5219\u200bmemoryview
\u200b\u4e3a\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5e8f\u5217\u200b\u3002
>>> d = memoryview(b\"abc\") \n>>> d[0] = \"d\"\nTraceback (most recent call last):\n File \"<stdin>\", line 1, in <module>\nTypeError: cannot modify read-only memory\n>>>\n
\u200b\u4f5c\u4e3a\u200b\u53ef\u53d8\u200b\u5e8f\u5217\u200b\u7684\u200bmemoryview
\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u4fee\u6539\u200b\uff0c\u200b\u518d\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u539f\u6765\u200b\u7684\u200b\u89e3\u91ca\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u5373\u53ef\u200b\u5b9e\u73b0\u200b\u5bf9\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u67d0\u4e2a\u200b\u7279\u5b9a\u200b\u5b57\u8282\u200b\u7684\u200b\u4fee\u6539\u200b\u3002
>>> c[1] = 1 \n>>> b = c.cast(\"i\")\n>>> list(b)\n[257, 2, 3, 4]\n>>>\n
memoryview
\u200b\u7684\u200b\u5207\u7247\u200b\u662f\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200bmemoryview
\u200b\u5bf9\u8c61\u200b\uff08\u200b\u57fa\u4e8e\u200b\u539f\u200b\u5b57\u8282\u200b\u5e8f\u5217\u200b\uff09
"},{"location":"coding/python/sequence/#_10","title":"\u961f\u5217","text":"\u200b\u5217\u8868\u200b\u7684\u200bappend
\u200b\u4e0e\u200bpop
\u200b\u65b9\u6cd5\u200b\u7ec4\u5408\u200b\u4f7f\u7528\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u5bf9\u6808\u200b\u6216\u200b\u961f\u5217\u200b\u7684\u200b\u6a21\u62df\u200b\u3002collection.deque
\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u961f\u5217\u200b\u7684\u200b\u66f4\u200b\u9ad8\u6548\u200b\u7684\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u5e76\u4e14\u200b\u6ee1\u8db3\u200b\u7ebf\u7a0b\u200b\u5b89\u5168\u200b\u7684\u200b\u6761\u4ef6\u200b\u3002
\u200b\u5728\u200b\u521b\u5efa\u200b\u961f\u5217\u200b\u65f6\u200b\uff0c\u200b\u53ef\u200b\u9009\u200b\u63d0\u4f9b\u200b\u961f\u5217\u200b\u7684\u200b\u6700\u5927\u200b\u957f\u5ea6\u200bmaxlen
\u3002\u200b\u8be5\u200b\u53c2\u6570\u200b\u53ea\u80fd\u200b\u5728\u200b\u6784\u9020\u51fd\u6570\u200b\u4e2d\u200b\u6307\u5b9a\u200b\uff0c\u200b\u5728\u200b\u5bf9\u8c61\u200b\u4e2d\u200b\u53ea\u8bfb\u200b\u3002
\u200b\u961f\u5217\u200b\u63d0\u4f9b\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
rotate
\uff0c\u200b\u5f53\u200b\u53c2\u6570\u200bn > 0
\u200b\u65f6\u200b\u5c06\u200b\u961f\u5217\u200b\u53f3\u4fa7\u200b\u7684\u200bn
\u200b\u4e2a\u200b\u5143\u7d20\u200b\u79fb\u52a8\u200b\u5230\u200b\u961f\u5217\u200b\u5de6\u4fa7\u200b\uff0c\u200b\u53cd\u4e4b\u200b\u5c06\u200b\u961f\u5217\u200b\u5de6\u4fa7\u200b\u7684\u200bn
\u200b\u4e2a\u200b\u5143\u7d20\u200b\u79fb\u52a8\u200b\u5230\u200b\u961f\u5217\u200b\u53f3\u4fa7\u200b appendleft
\uff0c\u200b\u5728\u200b\u961f\u5217\u200b\u7684\u200b\u5de6\u4fa7\u200b\u6dfb\u52a0\u200b\u5143\u7d20\u200b\uff08\u200b\u5f53\u200b\u8d85\u51fa\u200b\u961f\u5217\u200b\u957f\u5ea6\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u4ece\u200b\u961f\u5217\u200b\u53e6\u4e00\u4fa7\u200b\u5220\u9664\u200b\uff09 extendleft
\uff0c\u200b\u5728\u200b\u961f\u5217\u200b\u7684\u200b\u5de6\u4fa7\u200b\u6dfb\u52a0\u200b\u4e00\u7ec4\u200b\u5143\u7d20\u200b\uff08\u200b\u5f53\u200b\u8d85\u51fa\u200b\u961f\u5217\u200b\u957f\u5ea6\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u4ece\u200b\u961f\u5217\u200b\u53e6\u4e00\u4fa7\u200b\u5220\u9664\u200b\uff09 - \u200b\u961f\u5217\u200b\u652f\u6301\u200b\u5217\u8868\u200b\u7684\u200b\u5927\u591a\u6570\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u9664\u200b
copy
\u3001sort
\u3001insert
\u3001index
\u200b\u7b49\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u961f\u5217\u200b\u4ec5\u200b\u652f\u6301\u200b+=
\u200b\u8fd0\u7b97\u7b26\u200b\u7684\u200b\u4f5c\u7528\u200b\u3002
"},{"location":"coding/reinforcement-learning/","title":"\u5f3a\u5316\u200b\u5b66\u4e60","text":"\u200b\u8bb0\u5f55\u200b\u5f3a\u5316\u200b\u5b66\u4e60\u200b\u7684\u200b\u5b66\u4e60\u200b\u8fc7\u7a0b\u200b\u3002
- \u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b
- \u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5\u200b
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/","title":"\u591a\u81c2\u200b\u8001\u864e\u673a","text":"In\u00a0[1]: Copied! import itertools\nimport random\nfrom typing import List, Optional\n\nfrom scipy.stats import norm\n\n\nclass MultiArmedBandit():\n def __init__(self, means, stds: Optional[List[float]] = None):\n self.means = means\n if stds is not None:\n if len(stds) != len(means):\n raise ValueError(\n 'The length of means and stds should be the same.')\n self.stds = stds\n else:\n self.stds = [1.0] * len(means)\n self.k = len(means)\n self.dists = [\n norm(loc=mean, scale=std) for mean, std in zip(means, self.stds)\n ]\n\n def __len__(self) -> int:\n return self.k\n\n @property\n def optimal_reward(self) -> float:\n return max(self.means)\n\n def pull(self, action: int) -> float:\n return self.dists[action].rvs()\n\nrewards = [*range(0, 10, 2)]\nstds = [*range(1, 6)]\nargs = itertools.product(rewards, stds)\nbandit = MultiArmedBandit(*zip(*args))\nprint(bandit.pull(0))\n
import itertools import random from typing import List, Optional from scipy.stats import norm class MultiArmedBandit(): def __init__(self, means, stds: Optional[List[float]] = None): self.means = means if stds is not None: if len(stds) != len(means): raise ValueError( 'The length of means and stds should be the same.') self.stds = stds else: self.stds = [1.0] * len(means) self.k = len(means) self.dists = [ norm(loc=mean, scale=std) for mean, std in zip(means, self.stds) ] def __len__(self) -> int: return self.k @property def optimal_reward(self) -> float: return max(self.means) def pull(self, action: int) -> float: return self.dists[action].rvs() rewards = [*range(0, 10, 2)] stds = [*range(1, 6)] args = itertools.product(rewards, stds) bandit = MultiArmedBandit(*zip(*args)) print(bandit.pull(0)) -1.435877863923347\n
In\u00a0[2]: Copied! import abc\nfrom typing import Tuple\n\nclass AbstractAgent(abc.ABC):\n def __init__(self, T: int, k: int):\n self.T = T\n self.k = k\n\n self.history: List[Tuple[int, float]] = []\n\n @abc.abstractmethod\n def strategy(self) -> int:\n pass\n\n def run(self, bandit: MultiArmedBandit) -> float:\n rewards = []\n for t in range(self.T):\n action = self.strategy()\n if action >= self.k:\n raise ValueError('Invalid action.')\n\n reward = bandit.pull(action)\n self.history.append((action, reward))\n rewards.append(reward)\n return self.T * bandit.optimal_reward - sum(rewards)\n
import abc from typing import Tuple class AbstractAgent(abc.ABC): def __init__(self, T: int, k: int): self.T = T self.k = k self.history: List[Tuple[int, float]] = [] @abc.abstractmethod def strategy(self) -> int: pass def run(self, bandit: MultiArmedBandit) -> float: rewards = [] for t in range(self.T): action = self.strategy() if action >= self.k: raise ValueError('Invalid action.') reward = bandit.pull(action) self.history.append((action, reward)) rewards.append(reward) return self.T * bandit.optimal_reward - sum(rewards) In\u00a0[3]: Copied! import numpy as np\n\ndef show_result(x: List[float], name: str) -> str:\n x_array = np.array(x)\n return f'{name} - Mean: {x_array.mean():.2f} Std: {x_array.std():.2f}'\n
import numpy as np def show_result(x: List[float], name: str) -> str: x_array = np.array(x) return f'{name} - Mean: {x_array.mean():.2f} Std: {x_array.std():.2f}' In\u00a0[4]: Copied! class RandomAgent(AbstractAgent):\n def strategy(self) -> int:\n return random.randint(0, self.k - 1)\n\nrandom_agents = [RandomAgent(T=100, k=len(bandit)) for _ in range(1000)]\nregrets = [agent.run(bandit) for agent in random_agents]\nshow_result(regrets, 'Random Agent')\n
class RandomAgent(AbstractAgent): def strategy(self) -> int: return random.randint(0, self.k - 1) random_agents = [RandomAgent(T=100, k=len(bandit)) for _ in range(1000)] regrets = [agent.run(bandit) for agent in random_agents] show_result(regrets, 'Random Agent') Out[4]: 'Random Agent - Mean: 399.66 Std: 44.19'
In\u00a0[5]: Copied! from typing import Dict\n\nclass EpsilonGreedyAgent(AbstractAgent):\n def __init__(self, T: int, k: int, epsilon: float):\n super().__init__(T, k)\n self.epsilon = epsilon\n\n def _random(self) -> int:\n return random.randint(0, self.k - 1)\n\n def _greedy(self) -> int:\n history_dict: Dict[int, List[float]] = {}\n for action, reward in self.history:\n if action not in history_dict:\n history_dict[action] = []\n history_dict[action].append(reward)\n return max(\n history_dict,\n key=lambda x: sum(history_dict[x]) / len(history_dict[x])\n )\n\n def strategy(self) -> int:\n if random.random() < self.epsilon or not self.history:\n return self._random()\n return self._greedy()\n\n\nepsilon_greedy = [\n EpsilonGreedyAgent(T=100, k=len(bandit), epsilon=0.2) for _ in range(1000)\n]\nregrets = [agent.run(bandit) for agent in epsilon_greedy]\nshow_result(regrets, 'Epsilon-Greedy Agent')\n
from typing import Dict class EpsilonGreedyAgent(AbstractAgent): def __init__(self, T: int, k: int, epsilon: float): super().__init__(T, k) self.epsilon = epsilon def _random(self) -> int: return random.randint(0, self.k - 1) def _greedy(self) -> int: history_dict: Dict[int, List[float]] = {} for action, reward in self.history: if action not in history_dict: history_dict[action] = [] history_dict[action].append(reward) return max( history_dict, key=lambda x: sum(history_dict[x]) / len(history_dict[x]) ) def strategy(self) -> int: if random.random() < self.epsilon or not self.history: return self._random() return self._greedy() epsilon_greedy = [ EpsilonGreedyAgent(T=100, k=len(bandit), epsilon=0.2) for _ in range(1000) ] regrets = [agent.run(bandit) for agent in epsilon_greedy] show_result(regrets, 'Epsilon-Greedy Agent') Out[5]: 'Epsilon-Greedy Agent - Mean: 155.49 Std: 79.32'
In\u00a0[6]: Copied! import math\n\nclass UCBAgent(AbstractAgent):\n def __init__(self, T: int, k: int, c: float):\n super().__init__(T, k)\n self.c = c\n\n def ucb(self, action: int) -> float:\n n = len([a for a, _ in self.history if a == action])\n if n == 0:\n return float('inf')\n mean = sum(r for a, r in self.history if a == action) / n\n std = math.sqrt(math.log(len(self.history)) / n)\n return mean + self.c * std\n\n def strategy(self) -> int:\n # If there are still unselected actions, select one of them.\n if len(self.history) < self.k:\n return len(self.history)\n\n return max(range(self.k), key=self.ucb)\n\nucb_agents = [UCBAgent(T=100, k=len(bandit), c=0.3) for _ in range(1000)]\nregrets = [agent.run(bandit) for agent in ucb_agents]\nshow_result(regrets, 'UCB Agent')\n
import math class UCBAgent(AbstractAgent): def __init__(self, T: int, k: int, c: float): super().__init__(T, k) self.c = c def ucb(self, action: int) -> float: n = len([a for a, _ in self.history if a == action]) if n == 0: return float('inf') mean = sum(r for a, r in self.history if a == action) / n std = math.sqrt(math.log(len(self.history)) / n) return mean + self.c * std def strategy(self) -> int: # If there are still unselected actions, select one of them. if len(self.history) < self.k: return len(self.history) return max(range(self.k), key=self.ucb) ucb_agents = [UCBAgent(T=100, k=len(bandit), c=0.3) for _ in range(1000)] regrets = [agent.run(bandit) for agent in ucb_agents] show_result(regrets, 'UCB Agent') Out[6]: 'UCB Agent - Mean: 116.76 Std: 29.87'
In\u00a0[7]: Copied! from scipy.stats import invgamma\n\nclass ThompsonSamplingAgent(AbstractAgent):\n def __init__(self, T: int, k: int):\n super().__init__(T, k)\n\n # We know that the reward is gaussian, so we can use normal-inverse-gamma\n self.mu = [0.0] * k\n self.lambd = [1.0] * k\n self.alpha = [1.0] * k\n self.beta = [1.0] * k\n\n def update(self, action: int, reward: float) -> None:\n self.mu[action] = (\n self.lambd[action] * self.mu[action] + reward\n ) / (self.lambd[action] + 1)\n self.lambd[action] += 1\n self.alpha[action] += 0.5\n self.beta[action] += (\n self.lambd[action] * (reward - self.mu[action]) ** 2\n ) / (self.lambd[action] + 1) / 2\n\n def strategy(self) -> int:\n if self.history:\n self.update(*self.history[-1])\n\n samples = [\n norm.rvs(\n loc=mu, scale=invgamma.rvs(a, scale=b) / math.sqrt(lambd)\n )\n for mu, lambd, a, b in zip(self.mu, self.lambd, self.alpha, self.beta)\n ]\n return max(range(self.k), key=lambda x: samples[x])\n\nthompson_sampling_agents = [\n ThompsonSamplingAgent(T=100, k=len(bandit)) for _ in range(1000)\n]\nregrets = [agent.run(bandit) for agent in thompson_sampling_agents]\nshow_result(regrets, 'Thompson Sampling Agent')\n
from scipy.stats import invgamma class ThompsonSamplingAgent(AbstractAgent): def __init__(self, T: int, k: int): super().__init__(T, k) # We know that the reward is gaussian, so we can use normal-inverse-gamma self.mu = [0.0] * k self.lambd = [1.0] * k self.alpha = [1.0] * k self.beta = [1.0] * k def update(self, action: int, reward: float) -> None: self.mu[action] = ( self.lambd[action] * self.mu[action] + reward ) / (self.lambd[action] + 1) self.lambd[action] += 1 self.alpha[action] += 0.5 self.beta[action] += ( self.lambd[action] * (reward - self.mu[action]) ** 2 ) / (self.lambd[action] + 1) / 2 def strategy(self) -> int: if self.history: self.update(*self.history[-1]) samples = [ norm.rvs( loc=mu, scale=invgamma.rvs(a, scale=b) / math.sqrt(lambd) ) for mu, lambd, a, b in zip(self.mu, self.lambd, self.alpha, self.beta) ] return max(range(self.k), key=lambda x: samples[x]) thompson_sampling_agents = [ ThompsonSamplingAgent(T=100, k=len(bandit)) for _ in range(1000) ] regrets = [agent.run(bandit) for agent in thompson_sampling_agents] show_result(regrets, 'Thompson Sampling Agent') Out[7]: 'Thompson Sampling Agent - Mean: 231.88 Std: 49.94'
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/","title":"\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u00b6","text":"\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\uff08Multi-armed bandit\uff09\u200b\u95ee\u9898\u200b\u6765\u81ea\u200b\u4e8e\u200b\u73b0\u5b9e\u200b\u4e2d\u200b\u7684\u200b\u8001\u864e\u673a\u200b\u95ee\u9898\u200b\u3002\u200b\u6bcf\u53f0\u200b\u8001\u864e\u673a\u200b\u90fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u62c9\u6746\u200b\uff0c\u200b\u62c9\u52a8\u200b\u62c9\u6746\u200b\u540e\u200b\uff0c\u200b\u8001\u864e\u200b\u673a\u4f1a\u200b\u968f\u673a\u200b\u7ed9\u51fa\u200b\u4e00\u4e2a\u200b\u5956\u52b1\u200b\u3002\u200b\u73a9\u5bb6\u200b\u7684\u200b\u4efb\u52a1\u200b\u662f\u200b\u5728\u200b\u6709\u9650\u200b\u7684\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u5185\u200b\u5c3d\u53ef\u80fd\u200b\u83b7\u5f97\u200b\u66f4\u200b\u591a\u200b\u7684\u200b\u5956\u52b1\u200b\u3002
\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u95ee\u9898\u200b\u7684\u200b\u6570\u5b66\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\uff1a\u200b\u5df2\u77e5\u200b\u4e00\u7ec4\u200b$K\\in \\mathbb N^{+}$\u200b\u4e2a\u200b\u5b9a\u4e49\u200b\u5728\u200b$\\mathbb R$\u200b\u4e0a\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b$\\mathcal B = \\{D_1, \\ldots, D_K\\}$\uff0c\u200b\u5176\u4e2d\u200b$D_k$\u200b\u8868\u793a\u200b\u7b2c\u200b$k$\u200b\u4e2a\u200b\u8001\u864e\u673a\u200b\u7ed9\u51fa\u200b\u5956\u52b1\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\uff0c$D_k$\u200b\u7684\u200b\u5747\u503c\u200b\u4e3a\u200b$\\mu_k$\u3002\u200b\u5728\u200b\u7b2c\u200b$t$\u200b\u8f6e\u4e2d\u200b\uff0c\u200b\u667a\u80fd\u200b\u4f53\u4ece\u200b$\\mathcal B$\u200b\u4e2d\u200b\u968f\u673a\u200b\u9009\u51fa\u200b\u4e00\u4e2a\u200b\u5206\u5e03\u200b$D^{(t)}\\in\\mathcal B$\uff0c\u200b\u5e76\u200b\u4ece\u4e2d\u200b\u91c7\u6837\u200b\u4e00\u4e2a\u200b\u5956\u52b1\u200b$X^{(t)}\\sim D^{(t)}$\u3002\u200b\u667a\u80fd\u200b\u4f53\u200b\u7684\u200b\u76ee\u6807\u200b\u662f\u200b\u5728\u200b\u6709\u9650\u200b\u7684\u200b\u8f6e\u6b21\u200b\u5185\u200b\u6700\u5927\u5316\u200b\u7d2f\u79ef\u200b\u5956\u52b1\u200b$\\sum_{t=1}^T X^{(t)}$\u3002\u200b\u540e\u6094\u200b\u503c\u200b$\\rho$\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\u6700\u4f18\u200b\u7b56\u7565\u200b\u7684\u200b$T$\u200b\u8f6e\u200b\u7d2f\u8ba1\u200b\u5956\u52b1\u200b\u7684\u200b\u671f\u671b\u503c\u200b\u4e0e\u200b\u667a\u80fd\u200b\u4f53\u200b\u7684\u200b$T$\u200b\u8f6e\u200b\u7d2f\u8ba1\u200b\u5956\u52b1\u200b\u4e4b\u5dee\u200b\uff0c\u200b\u5373\u200b
$$ \\rho = T\\max\\{\\mu_k\\} - \\mathbb E\\left[\\sum_{t=1}^T X^{(t)}\\right] $$
\u200b\u7528\u200bPython\u200b\u53ef\u4ee5\u200b\u7b80\u5355\u200b\u5b9e\u73b0\u200b\u4e00\u4e2a\u200b\u4e0e\u200b\u667a\u80fd\u200b\u4f53\u200b\u4ea4\u4e92\u200b\u7684\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u73af\u5883\u200b\uff1a
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/","title":"\u7b97\u6cd5\u200b\u00b6","text":"\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u7b97\u6cd5\u200b\u7684\u200b\u6838\u5fc3\u200b\u662f\u200b\u5728\u200b\u63a2\u7d22\u200b\uff08Exploration\uff09\u200b\u548c\u200b\u5229\u7528\u200b\uff08Exploitation\uff09\u200b\u4e4b\u95f4\u200b\u5bfb\u627e\u200b\u5e73\u8861\u200b\u3002\u200b\u63a2\u7d22\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u627e\u5230\u200b\uff08\u200b\u76f8\u8f83\u200b\u4e8e\u200b\u5f53\u524d\u200b\u5df2\u77e5\u200b\u7684\u200b\uff09\u200b\u66f4\u597d\u200b\u7684\u200b\u5956\u52b1\u200b\uff0c\u200b\u800c\u200b\u5229\u7528\u200b\u5219\u200b\u662f\u200b\u76f4\u63a5\u200b\u9009\u62e9\u200b\u5f53\u524d\u200b\u5df2\u77e5\u200b\u7684\u200b\u6700\u597d\u200b\u7684\u200b\u5956\u52b1\u200b\u3002
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/","title":"\u5b8c\u5168\u200b\u968f\u673a\u200b\u7b56\u7565\u200b\u00b6","text":"\u200b\u5728\u200b\u5b8c\u5168\u200b\u968f\u673a\u200b\u7b56\u7565\u200b\u4e0b\u200b\uff0c\u200b\u667a\u80fd\u200b\u4f53\u200b\u968f\u673a\u200b\u9009\u62e9\u200b\u4e00\u4e2a\u200b\u81c2\u200b\uff0c\u200b\u83b7\u53d6\u200b\u5956\u52b1\u200b\uff0c\u200b\u540e\u6094\u200b\u503c\u200b\u7684\u200b\u671f\u671b\u200b\u4e3a\u200b$\\mathbb E\\rho = \\sum_{k=1}^K (\\mu^* - \\mu_k)$\u3002
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/#epsilon-","title":"$\\epsilon$-\u200b\u8d2a\u5fc3\u200b\u7b97\u6cd5\u200b\u00b6","text":"$\\epsilon$-\u200b\u8d2a\u5fc3\u200b\u7b97\u6cd5\u200b\u662f\u200b\u6700\u200b\u7b80\u5355\u200b\u7684\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u7b97\u6cd5\u200b\u4e4b\u4e00\u200b\u3002\u200b\u5728\u200b\u6bcf\u200b\u4e00\u8f6e\u200b\u4e2d\u200b\uff0c\u200b\u4ee5\u200b$\\epsilon$\u200b\u7684\u200b\u6982\u7387\u200b\u968f\u673a\u200b\u9009\u62e9\u200b\u4e00\u4e2a\u200b\u8001\u864e\u673a\u200b\uff0c\u200b\u4ee5\u200b$1-\\epsilon$\u200b\u7684\u200b\u6982\u7387\u200b\u9009\u62e9\u200b\u5f53\u524d\u200b\u5df2\u77e5\u200b\u7684\u200b\u6700\u597d\u200b\u7684\u200b\u8001\u864e\u673a\u200b\u3002
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/","title":"\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5\u200b\u00b6","text":"\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5\u200b\uff08Upper Confidence Bound, UCB\uff09\u200b\u662f\u200b\u4e00\u79cd\u200b\u57fa\u4e8e\u200b\u7f6e\u4fe1\u533a\u95f4\u200b\u7684\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u7b97\u6cd5\u200b\u3002\u200b\u5728\u200b\u6bcf\u200b\u4e00\u8f6e\u200b\u4e2d\u200b\uff0c\u200b\u667a\u80fd\u200b\u4f53\u200b\u9009\u62e9\u200b\u4e00\u4e2a\u200b\u8001\u864e\u673a\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u8be5\u200b\u8001\u864e\u673a\u200b\u7684\u200b\u7f6e\u4fe1\u533a\u95f4\u200b\u4e0a\u200b\u754c\u200b\u6700\u5927\u200b\u3002\u200b\u7f6e\u4fe1\u533a\u95f4\u200b\u4e0a\u754c\u200b\u7684\u200b\u8ba1\u7b97\u516c\u5f0f\u200b\u4e3a\u200b
$$ \\bar X_k + c\\cdot \\sqrt{\\frac{\\log t}{N_k}} $$
\u200b\u5176\u4e2d\u200b$\\bar X_k$\u200b\u4e3a\u200b\u7b2c\u200b$k$\u200b\u4e2a\u200b\u8001\u864e\u673a\u200b\u7684\u200b\u5e73\u5747\u200b\u5956\u52b1\u200b\uff0c$N_k$\u200b\u4e3a\u200b\u7b2c\u200b$k$\u200b\u4e2a\u200b\u8001\u864e\u673a\u200b\u88ab\u200b\u9009\u62e9\u200b\u7684\u200b\u6b21\u6570\u200b\uff0c$c$\u200b\u4e3a\u200b\u4e00\u4e2a\u200b\u5e38\u6570\u200b\uff0c$t$\u200b\u4e3a\u200b\u5f53\u524d\u200b\u8f6e\u6b21\u200b\u3002\u200b\u5176\u200b\u601d\u60f3\u200b\u5728\u4e8e\u200b\uff0c\u200b\u667a\u80fd\u200b\u4f53\u4f1a\u200b\u9996\u5148\u200b\u904d\u5386\u200b\u6240\u6709\u200b\u81c2\u200b\uff0c\u200b\u4e4b\u540e\u200b\u4f18\u5148\u9009\u62e9\u200b\u90a3\u4e9b\u200b\u88ab\u200b\u9009\u62e9\u200b\u6b21\u6570\u200b\u8f83\u5c11\u200b\u7684\u200b\u8001\u864e\u673a\u200b\uff0c\u200b\u4ee5\u4fbf\u200b\u66f4\u597d\u200b\u5730\u200b\u4f30\u8ba1\u200b\u5176\u200b\u5956\u52b1\u200b\u3002
"},{"location":"coding/reinforcement-learning/multi-armed-bandit/#thompson","title":"Thompson\u200b\u91c7\u6837\u200b\u00b6","text":"Thompson\u200b\u91c7\u6837\u200b\u662f\u200b\u4e00\u79cd\u200b\u57fa\u4e8e\u200b\u8d1d\u53f6\u65af\u200b\u63a8\u65ad\u200b\u7684\u200b\u591a\u81c2\u200b\u8001\u864e\u673a\u200b\u7b97\u6cd5\u200b\uff0c\u200b\u9700\u8981\u200b\u5df2\u77e5\u200b\u6bcf\u4e2a\u200b\u8001\u864e\u673a\u200b\u7684\u200b\u5956\u52b1\u200b\u670d\u4ece\u200b\u67d0\u79cd\u200b\u5206\u5e03\u200b\u3002\u200b\u5728\u200b\u6bcf\u200b\u4e00\u8f6e\u200b\u4e2d\u200b\uff0c\u200b\u667a\u80fd\u200b\u4f53\u4ece\u200b\u6bcf\u4e2a\u200b\u8001\u864e\u673a\u200b\u7684\u200b\u5956\u52b1\u200b\u5206\u5e03\u200b\u4e2d\u200b\u91c7\u6837\u200b\u4e00\u4e2a\u200b\u5956\u52b1\u200b\uff0c\u200b\u9009\u62e9\u200b\u5956\u52b1\u200b\u6700\u5927\u200b\u7684\u200b\u8001\u864e\u673a\u200b\u3002\u200b\u6839\u636e\u200b\u73af\u5883\u200b\u7684\u200b\u53cd\u9988\u200b\uff0c\u200b\u66f4\u65b0\u200b\u6bcf\u4e2a\u200b\u8001\u864e\u673a\u200b\u7684\u200b\u540e\u9a8c\u200b\u5956\u52b1\u200b\u5206\u5e03\u200b\u3002
"},{"location":"coding/reinforcement-learning/upper-confidence-bound/","title":"\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u7b97\u6cd5","text":"\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\uff08Upper Confidence Bound, UCB\uff09\u200b\u7b97\u6cd5\u200b\u7684\u200b\u6838\u5fc3\u601d\u60f3\u200b\u662f\u200b\u5c06\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u7eb3\u5165\u200b\u8003\u8651\u200b\uff0c\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u8f83\u5c11\u200b\u7684\u200b\u52a8\u4f5c\u200b\u6709\u200b\u66f4\u200b\u5927\u200b\u7684\u200b\u4e0d\u786e\u5b9a\u6027\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u4f1a\u200b\u5c3d\u53ef\u80fd\u200b\u4e50\u89c2\u200b\u5730\u200b\u8003\u8651\u200b\u8fd9\u4e9b\u200b\u6ca1\u6709\u200b\u5c1d\u8bd5\u200b\u8fc7\u200b\u7684\u200b\u52a8\u4f5c\u200b\uff0c\u200b\u5e76\u200b\u4f18\u5148\u200b\u63a2\u7d22\u200b\u8fd9\u4e9b\u200b\u52a8\u4f5c\u200b\u3002\u200b\u5728\u200b\u6bcf\u4e2a\u200b\u52a8\u4f5c\u200b\u63a2\u7d22\u200b\u6bd4\u8f83\u200b\u6df1\u5165\u200b\u540e\u200b\uff0c\u200b\u518d\u200b\u8f6c\u5411\u200b\u5229\u7528\u200b\u5956\u52b1\u200b\u8f83\u200b\u9ad8\u200b\u7684\u200b\u52a8\u4f5c\u200b\u3002
\u200b\u5f15\u7406\u200b
\u200b\u8bbe\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X_1, \\ldots, X_n\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u5747\u503c\u200b\u4e3a\u200b\\(0\\)\uff0c\u200b\u5bf9\u200b\u5747\u503c\u200b\u7684\u200b\u4f30\u8ba1\u200b\u4e3a\u200b
\\[ \\hat \\mu = \\frac{1}{n}\\sum_{i=1}^n X_i \\] \u200b\u5219\u200b\u5bf9\u200b\u4efb\u610f\u200b\\(\\delta > 0\\)\uff0c\u200b\u6709\u200b
\\[ P(\\hat\\mu > \\delta) \\leq \\exp(-n\\delta^2 / 2) \\] \u200b\u8be5\u200b\u5f15\u7406\u200b\u79f0\u4e3a\u200bHoeffding\u200b\u4e0d\u7b49\u5f0f\u200b\u3002
\u200b\u4ee4\u200b\\(\\varepsilon = \\exp(-2n\\delta^2)\\)\uff0c\u200b\u5373\u200b\\(\\delta = \\sqrt{\\frac{-2\\log\\varepsilon}{n}}\\)
\\[ P\\left(\\hat\\mu > \\sqrt{\\frac{-2\\log\\varepsilon}{n}}\\right) \\leq \\varepsilon \\] \u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u52a8\u4f5c\u200b\\(k\\)\uff0c\u200b\u6211\u4eec\u200b\u5c1d\u8bd5\u200b\u4e86\u200b\\(n_k\\)\u200b\u6b21\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u5c1d\u8bd5\u200b\u7684\u200b\u5956\u52b1\u200b\u4e3a\u200b\\(X_1, \\ldots, X_{n_k}\\)\uff0c\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\u5e73\u5747\u200b\u5956\u52b1\u200b\u4e3a\u200b\\(\\hat\\mu_k\\)\uff0c\u200b\u5b9a\u4e49\u200b\\(\\tilde X_i = X_i - \\hat\\mu_k\\)\uff0c\u200b\u5219\u200b\\(\\tilde X_1, \\ldots, \\tilde X_{n_k}\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u5747\u503c\u200b\u4e3a\u200b\\(0\\)\u3002
\u200b\u4ee4\u200b\u5bf9\u200b\\(\\tilde X_1, \\ldots, \\tilde X_{n_k}\\)\u200b\u4f30\u8ba1\u200b\u7684\u200b\u5747\u503c\u200b\u4e3a\u200b\\(\\hat\\mu_0\\)\uff0c\u200b\u6211\u4eec\u200b\u6709\u200b\\(1 - \\varepsilon\\)\u200b\u7684\u200b\u6982\u7387\u200b\u4fdd\u8bc1\u200b\\(\\hat\\mu_0\\)\u200b\u4e0d\u200b\u8d85\u8fc7\u200b\\(\\sqrt{\\frac{-2\\log\\varepsilon}{n_k}}\\)\u3002
\\[ P\\left(\\hat\\mu_0 > \\sqrt{\\frac{-2\\log\\varepsilon}{n_k}}\\right) \\leq \\varepsilon \\] \u200b\u56e0\u6b64\u200b\uff0c\u200b\u6211\u4eec\u200b\u53d6\u200b\\(\\hat\\mu_k + \\sqrt{\\frac{-2\\log\\varepsilon}{n_k}}\\)\u200b\u4f5c\u4e3a\u200b\u52a8\u4f5c\u200b\\(k\\)\u200b\u7684\u200b\u7f6e\u4fe1\u200b\u4e0a\u200b\u754c\u200b\u3002\u200b\u901a\u8fc7\u200b\u8c03\u6574\u200b\\(\\varepsilon\\)\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u63a7\u5236\u200b\u7f6e\u4fe1\u200b\u4e0a\u754c\u200b\u7684\u200b\u5bbd\u5ea6\u200b\u4ee5\u200b\u5728\u200b\u63a2\u7d22\u200b\u548c\u200b\u5229\u7528\u200b\u4e4b\u524d\u200b\u53d6\u5f97\u200b\u5e73\u8861\u200b\u3002
\u200b\u901a\u5e38\u200b\u91c7\u53d6\u200b\u7684\u200b\u7b56\u7565\u200b\u662f\u200b\u53d6\u200b\\(\\varepsilon = 1/t\\)\uff0c\\(t\\)\u200b\u4e3a\u200b\u603b\u200b\u8f6e\u6b21\u200b\uff0c\u200b\u4ee5\u200b\u4fdd\u8bc1\u200b\u968f\u7740\u200b\u5c1d\u8bd5\u200b\u6b21\u6570\u200b\u7684\u200b\u589e\u52a0\u200b\uff0c\u200b\u7f6e\u4fe1\u200b\u4e0a\u754c\u200b\u7684\u200b\u5bbd\u5ea6\u200b\u9010\u6e10\u200b\u51cf\u5c0f\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u7b97\u6cd5\u200b\u9010\u6b65\u200b\u8f6c\u5411\u200b\u5229\u7528\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b
\\[ \\hat\\mu_k + \\sqrt{\\frac{2\\log t}{n_k}} \\] \u200b\u6b64\u5916\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5176\u4ed6\u200b\u7684\u200b\u4e0a\u754c\u200b\u5bbd\u5ea6\u200b\uff0c\u200b\u5982\u200b
\\[ \\varepsilon = \\frac{1}{1 + t\\log^2 t} \\] \u200b\u5728\u5b9e\u8df5\u4e2d\u200b\uff0c\u200b\u901a\u5e38\u200b\u8fd8\u4f1a\u200b\u5f15\u5165\u200b\u4e00\u4e2a\u200b\u53c2\u6570\u200b\\(c\\)\u200b\u63a7\u5236\u200b\u5bbd\u5ea6\u200b\uff0c\u200b\u5373\u200b
\\[ \\hat \\mu_k + c\\cdot\\sqrt{\\frac{\\log t}{n_k}} \\]"},{"location":"coding/rust/","title":"Rust","text":"\u200b\u8bb0\u5f55\u200bRust\u200b\u7684\u200b\u5b66\u4e60\u200b\u3002
- Introduction
- Variables
- Control Flows
- Complex Objects
- Lifetimes
- Error Handling
- Supplements
"},{"location":"coding/rust/0/","title":"Introduction","text":"Rust\u200b\u7b80\u4ecb\u200b
Rust\u200b\u6709\u200b\u5982\u4e0b\u200b\u4e8c\u8fdb\u5236\u200b\u6587\u4ef6\u200b
rustc
\uff1aRust\u200b\u7f16\u8bd1\u5668\u200b cargo
\uff1aRust\u200b\u5305\u200b\u7ba1\u7406\u5668\u200b\u548c\u200b\u6784\u5efa\u200b\u5de5\u5177\u200b rustup
\uff1aRust\u200b\u7248\u672c\u200b\u7ba1\u7406\u5668\u200b rustdoc
\uff1aRust\u200b\u6587\u6863\u200b rls
\uff1aRust language server rustfmt
\uff1aRust\u200b\u4ee3\u7801\u200b\u683c\u5f0f\u5316\u200b\u5de5\u5177\u200b
"},{"location":"coding/rust/0/#hello-world","title":"Hello, world!","text":" Download source code
fn main() {\n println!(\"Hello, world!\");\n}\n
println!
\u200b\u4e2d\u200b\u7684\u200b!
\u200b\u8868\u793a\u200b\u8fd9\u662f\u200b\u4e00\u4e2a\u200b\u5b8f\u200b\uff0c\u200b\u800c\u200b\u4e0d\u662f\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u3002\u200b\u5b8f\u662f\u200b\u4e00\u79cd\u200b\u5728\u200b\u7f16\u8bd1\u200b\u65f6\u200b\u6267\u884c\u200b\u7684\u200b\u4ee3\u7801\u200b\u3002println
\u200b\u6709\u200bPython\u200b\u4e2d\u200bstr.format
\u200b\u7c7b\u4f3c\u200b\u7684\u200b\u529f\u80fd\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6267\u884c\u200b\u5b57\u7b26\u4e32\u200b\u683c\u5f0f\u5316\u200b\u3002print!
\u200b\u4e0e\u200bprintln!
\u200b\u7c7b\u4f3c\u200b\uff0c\u200b\u4f46\u662f\u200b\u4e0d\u4f1a\u200b\u5728\u200b\u7ed3\u5c3e\u200b\u6dfb\u52a0\u200b\u6362\u884c\u7b26\u200b\u3002
println!(\"{} days\", 31);\nprintln!(\"{0}, this is {1}. {1}, this is {0}\", \"Alice\", \"Bob\");\nprintln!(\"{greeting}, {name}!\", greeting=\"Hello\", name=\"world\");\n
"},{"location":"coding/rust/0/#cargo","title":"Cargo","text":"Cargo\u200b\u662f\u200bRust\u200b\u7684\u200b\u5305\u200b\u7ba1\u7406\u5668\u200b\u548c\u200b\u6784\u5efa\u200b\u5de5\u5177\u200b\u3002Cargo\u200b\u7684\u200b\u5de5\u4f5c\u200b\u65b9\u5f0f\u200b\u4e0e\u200bPython\u200b\u7684\u200bpip
\u200b\u548c\u200bsetuptools
\u200b\u7c7b\u4f3c\u200b\u3002
cargo new # \u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200bRust\u200b\u9879\u76ee\u200b\ncargo init # \uff08\u200b\u5728\u200b\u5df2\u7ecf\u200b\u5b58\u5728\u200b\u7684\u200b\u76ee\u5f55\u200b\u4e2d\u200b\uff09\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200bRust\u200b\u9879\u76ee\u200b\ncargo build # \u200b\u7f16\u8bd1\u200b\u9879\u76ee\u200b\ncargo run # \u200b\u7f16\u8bd1\u200b\u5e76\u200b\u8fd0\u884c\u200b\u9879\u76ee\u200b\ncargo update # \u200b\u66f4\u65b0\u200bCargo.lock\u200b\u6587\u4ef6\u200b\u4e2d\u200b\u7684\u200b\u4f9d\u8d56\u200b\ncargo doc # \u200b\u751f\u6210\u200b\u9879\u76ee\u200b\u6587\u6863\u200b\ncargo test # \u200b\u8fd0\u884c\u200b\u9879\u76ee\u200b\u6d4b\u8bd5\u200b\n\ncargo install ...\ncargo uninstall ...\n
Rust\u200b\u7684\u200b\u4ed3\u5e93\u200b\u662f\u200bcrates.io
\uff0c\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bPython\u200b\u7684\u200bPyPI
\u3002
"},{"location":"coding/rust/0/#_1","title":"\u5305\u4e0e\u200b\u6a21\u5757","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u5305\u200b\u79f0\u4e3a\u200bcrate\u3002crate\u200b\u7684\u200b\u6839\u76ee\u5f55\u200b\u4e0b\u200b\u6709\u200b\u4e00\u4e2a\u200bCargo.toml
\u200b\u6587\u4ef6\u200b\uff0c\u200b\u5176\u4e2d\u200b\u5305\u542b\u200bcrate\u200b\u7684\u200b\u5143\u200b\u6570\u636e\u200b\u548c\u200b\u4f9d\u8d56\u200b\u3002Rust\u200b\u9879\u76ee\u200b\u7684\u200b\u6587\u4ef6\u200b\u7ed3\u6784\u200b\u5982\u4e0b\u200b\uff1a
project\n\u251c\u2500\u2500 Cargo.toml\n\u251c\u2500\u2500 Cargo.lock\n\u251c\u2500\u2500 tests\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 benches\n\u2502 \u2514\u2500\u2500 ...\n\u251c\u2500\u2500 examples\n\u2502 \u2514\u2500\u2500 ...\n\u2514\u2500\u2500 src\n \u251c\u2500\u2500 bin // \u200b\u5176\u4ed6\u200b\u7684\u200b\u4e8c\u8fdb\u5236\u200b\u7a0b\u5e8f\u200b\n \u251c\u2500\u2500 main.rs // \u200b\u9ed8\u8ba4\u200b\u7684\u200b\u4e8c\u8fdb\u5236\u200b\u7a0b\u5e8f\u200b\n \u2514\u2500\u2500 lib.rs // \u200b\u5e93\u5305\u200b\uff08\u200b\u53ea\u80fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\uff09\n
Rust\u200b\u4e2d\u200b\u7684\u200b\u6a21\u5757\u200b\u7528\u200bmod
\u200b\u5173\u952e\u5b57\u200b\u58f0\u660e\u200b\uff0c\u200b\u6a21\u5757\u200b\u53ef\u4ee5\u200b\u5d4c\u5957\u200b\u3002\u200b\u7528\u200buse
\u200b\u5f15\u7528\u200b\u6a21\u5757\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200bcrate
\u200b\u5f00\u59cb\u200b\u7684\u200b\u7edd\u5bf9\u200b\u5f15\u7528\u200b\u8def\u5f84\u200b\u548c\u200bself
\uff08\u200b\u672c\u200b\u6a21\u5757\u200b\uff09\u200b\u6216\u200bsuper
\uff08\u200b\u7236\u200b\u6a21\u5757\u200b\uff09\u200b\u5f00\u59cb\u200b\u7684\u200b\u76f8\u5bf9\u200b\u5f15\u7528\u200b\u8def\u5f84\u200b\uff0c\u200b\u6216\u8005\u200b\u7528\u200b*
\u200b\u5f15\u5165\u200b\u6a21\u5757\u200b\u7684\u200b\u6240\u6709\u200b\u5185\u5bb9\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u6a21\u5757\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u9879\u200b\u90fd\u200b\u662f\u200b\u79c1\u6709\u200b\u7684\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u5916\u754c\u200b\u8bbf\u95ee\u200b\uff0c\u200b\u9664\u975e\u200b\u7528\u200bpub
\u200b\u5173\u952e\u5b57\u200b\u58f0\u660e\u200b\u4e3a\u200b\u516c\u6709\u200b\u3002\u200b\u516c\u6709\u200b\u6a21\u5757\u200b\u5185\u200b\u6240\u6709\u200b\u7684\u200b\u9879\u200b\u5fc5\u987b\u200b\u90fd\u200b\u7528\u200bpub
\u200b\u58f0\u660e\u200b\u4e3a\u200b\u516c\u6709\u200b\u3002pub
\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u200b(in <module path>)
\u200b\u8bed\u6cd5\u200b\u58f0\u660e\u200b\u5bf9\u8c61\u200b\u4ec5\u200b\u5728\u200b<module path>
\u200b\u4e2d\u200b\u53ef\u89c1\u200b\u3002
\u200b\u6bcf\u4e2a\u200b.rs
\u200b\u6587\u4ef6\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u89c6\u4e3a\u200b\u4e00\u4e2a\u200b\u4ee5\u200b\u6587\u4ef6\u540d\u200b\u547d\u540d\u200b\u7684\u200b\u6a21\u5757\u200b\u3002\u200b\u5982\u679c\u200b\u8981\u200b\u628a\u200b\u6587\u4ef6\u5939\u200b\u4f5c\u4e3a\u200b\u6a21\u5757\u200b\uff0c\u200b\u5219\u200b\u5fc5\u987b\u200b\u5728\u200b\u6587\u4ef6\u5939\u200b\u4e2d\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200bmod.rs
\u200b\u6587\u4ef6\u200b\u6216\u200b\u4e0e\u200b\u6587\u4ef6\u5939\u200b\u540c\u540d\u200b\u7684\u200b.rs
\u200b\u6587\u4ef6\u200b\uff0c\u200b\u5176\u4e2d\u200b\u58f0\u660e\u200b\u5bf9\u5916\u5f00\u653e\u200b\u7684\u200b\u9879\u200b\u3002
\u200b\u5f53\u200b\u591a\u4e2a\u200b\u6a21\u5757\u200b\u4e2d\u200b\u5b58\u5728\u200b\u76f8\u540c\u200b\u540d\u79f0\u200b\u7684\u200b\u9879\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200b\u200b\u6a21\u5757\u200b\u540d\u200b::\u200b\u9879\u540d\u200b
\u200b\u6765\u200b\u6307\u5b9a\u200b\u5177\u4f53\u200b\u7684\u200b\u9879\u200b\uff0c\u200b\u6216\u8005\u200b\u7528\u200bas
\u200b\u58f0\u660e\u200b\u522b\u540d\u200b\u3002
"},{"location":"coding/rust/0/#_2","title":"\u6ce8\u91ca\u200b\u4e0e\u200b\u6587\u6863","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u6ce8\u91ca\u200b\u4e0e\u200bC/C++\u200b\u7c7b\u4f3c\u200b\uff0c\u200b\u7528\u200b//
\u200b\u8868\u793a\u200b\u5355\u884c\u200b\u6ce8\u91ca\u200b\uff0c\u200b\u7528\u200b/* */
\u200b\u8868\u793a\u200b\u591a\u884c\u200b\u6ce8\u91ca\u200b\u3002\u200b\u5176\u4e2d\u200b\uff0c\u200b\u5e38\u7528\u200b\u7684\u200b\u6ce8\u91ca\u200b\u65b9\u6cd5\u200b\u4e3a\u200b\uff1a
- \u200b\u5305\u200b\u6ce8\u91ca\u200b
//! ...
\u200b\u4e0e\u200b/*! ... */
\uff1a()\u200b\u7528\u4e8e\u200b\u6574\u4e2a\u200b\u5305\u200b\u7684\u200b\u6ce8\u91ca\u200b\uff08Inner comments\uff09 - \u200b\u6587\u6863\u200b\u6ce8\u91ca\u200b
/// ...
\u200b\u4e0e\u200b/** ... */
\uff1a\u200b\u7528\u4e8e\u200b\u6a21\u5757\u200b\u3001\u200b\u51fd\u6570\u200b\u3001\u200b\u7ed3\u6784\u200b\u4f53\u200b\u3001\u200b\u679a\u4e3e\u200b\u3001\u200b\u65b9\u6cd5\u200b\u548c\u200btrait\u200b\u7684\u200b\u6ce8\u91ca\u200b\uff08Outer comments\uff09 - \u200b\u901a\u5e38\u200b\u4e0d\u7528\u200b
/* */
\u200b\u6ce8\u91ca\u200b
\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200bdoc attribute\u200b\u6765\u200b\u6ce8\u91ca\u200b\uff0c\u200b\u5176\u200b\u8bed\u6cd5\u200b\u4e3a\u200b#![doc=...]
\u200b\u548c\u200b#[doc=...]
\uff0c\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200bOuter comments\u200b\u548c\u200bInner comments\u3002
Rust\u200b\u652f\u6301\u200b\u5728\u200b\u6587\u6863\u200b\u4e2d\u200b\u8fdb\u884c\u200b\u6d4b\u8bd5\u200b\uff0c\u200b\u88ab\u200b\u6d4b\u8bd5\u200b\u7684\u200b\u51fd\u6570\u200b\u5fc5\u987b\u200b\u662f\u200b\u516c\u6709\u200b\u7684\u200b\u3002\u200b\u4ee5\u200b#
\u200b\u5f00\u59cb\u200b\u7684\u200b\u884c\u200b\u8868\u793a\u200b\u8be5\u884c\u200b\u4e0d\u4f1a\u200b\u5728\u200b\u6587\u6863\u200b\u4e2d\u200b\u663e\u793a\u200b\uff0c\u200b\u53ea\u4f1a\u200b\u7528\u4e8e\u200b\u6d4b\u8bd5\u200b\u3002
// Assume the name of crate is `playground`\n\n/// ```rust\n/// assert_eq!(playground::add(1, 2), 3);\n/// ```\npub fn add(a: i32, b: i32) -> i32 {\n a + b\n}\n/// ```rust, should_panic\n/// // This function calls [`panic!`] macro.\n/// playground::panic_fn();\n/// ```\npub fn panic_fn() {\n panic!();\n}\n
"},{"location":"coding/rust/1/","title":"Variables","text":""},{"location":"coding/rust/1/#_1","title":"\u58f0\u660e","text":"Rust\u200b\u4e2d\u200b\u7528\u4e8e\u200b\u58f0\u660e\u200b\u53d8\u91cf\u200b\u7684\u200b\u5173\u952e\u5b57\u200b\u662f\u200blet
\uff0c\u200b\u5b83\u200b\u7684\u200b\u8bed\u6cd5\u200b\u5982\u4e0b\u200b\uff1a
let [mut] <variable>[: <type>] [= <value>];\n
\u200b\u5176\u4e2d\u200b\uff0c\u200b\u7c7b\u578b\u200b\u548c\u200b\u521d\u59cb\u5316\u200b\u7684\u200b\u503c\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u3002\u200b\u5982\u679c\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\u4ece\u200b\u58f0\u660e\u200b\u5f00\u59cb\u200b\u6ca1\u6709\u200b\u88ab\u200b\u8d4b\u503c\u200b\uff0c\u200b\u5c31\u200b\u4e0d\u80fd\u200b\u4f7f\u7528\u200b\u8fd9\u4e2a\u200b\u53d8\u91cf\u200b\u3002\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u6307\u5b9a\u200b\u7c7b\u578b\u200b\u4f46\u200b\u6307\u5b9a\u200b\u4e86\u200b\u521d\u59cb\u5316\u200b\u503c\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u5219\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u63a8\u65ad\u200b\u53d8\u91cf\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002Rust\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u200b{}
\u200b\u6765\u200b\u7528\u200b\u4e00\u7cfb\u5217\u200b\u8bed\u53e5\u200b\u6765\u200b\u521d\u59cb\u5316\u200b\u53d8\u91cf\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200b()
\u200b\u6765\u200b\u4e00\u6b21\u6027\u200b\u58f0\u660e\u200b\u591a\u4e2a\u200b\u53d8\u91cf\u200b\u3002\u200b\u6ca1\u6709\u200b\u7528\u200bmut
\u200b\u58f0\u660e\u200b\u7684\u200b\u53d8\u91cf\u200b\u662f\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u7684\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u4fee\u6539\u200b\u3002
Rust\u200b\u4e2d\u200b\u7528\u4e8e\u200b\u58f0\u660e\u200b\u5e38\u91cf\u200b\u7684\u200b\u5173\u952e\u5b57\u200b\u662f\u200bconst
\uff0c\u200b\u7528\u4e8e\u200b\u58f0\u660e\u200b\u9759\u6001\u200b\u53d8\u91cf\u200b\u7684\u200b\u5173\u952e\u5b57\u200b\u662f\u200bstatic
\u3002\u200b\u8bed\u6cd5\u200b\u4e0e\u200blet
\u200b\u76f8\u4f3c\u200b\uff0c\u200b\u4f46\u200b\u9700\u8981\u200b\u540c\u65f6\u200b\u6307\u5b9a\u200b\u7c7b\u578b\u200b\u548c\u200b\u521d\u59cb\u5316\u200b\u503c\u200b\u3002\u200b\u901a\u5e38\u200bconst
\u200b\u548c\u200bstatic
\u200b\u8bed\u53e5\u200b\u90fd\u200b\u662f\u200b\u5728\u200b\u5168\u5c40\u200b\u4f5c\u7528\u57df\u200b\uff08\u200b\u5373\u200b\u51fd\u6570\u200b\u5916\u200b\uff09\u200b\u4e2d\u200b\u58f0\u660e\u200b\u7684\u200b\u3002
let
\u200b\u53ef\u4ee5\u200b\u7528\u6765\u200b\u91cd\u65b0\u200b\u58f0\u660e\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\uff0c\u200b\u9690\u85cf\u200b\u4e4b\u524d\u200b\u7684\u200b\u53d8\u91cf\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200bmut
\u200b\u6765\u200b\u6539\u53d8\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\u7684\u200b\u53ef\u53d8\u6027\u200b\u3002
Download source code
fn main() {\n let x: f64 = -20.48; // float\n let x: i64 = x.floor() as i64; // int\n println!(\"{}\", x); // -21\n\n let s: &str = \"hello\"; // &str\n let s: String = s.to_uppercase(); // String\n println!(\"{}\", s) // HELLO\n}\n
"},{"location":"coding/rust/1/#_2","title":"\u53d8\u91cf\u200b\u7c7b\u578b","text":"Rust\u200b\u7684\u200b\u53d8\u91cf\u200b\u7c7b\u578b\u200b\u6709\u200b
- \u200b\u4e00\u822c\u200b\u7c7b\u578b\u200b
- \u200b\u5e03\u5c14\u200b\uff1a
bool
\uff0c\u200b\u53d6\u503c\u200b\u4e3a\u200btrue
\u200b\u6216\u200bfalse
\uff0c\u200b\u5360\u7528\u200b1\u200b\u4e2a\u200b\u5b57\u8282\u200b\u3002 - \u200b\u5b57\u7b26\u200b\uff1a
char
\uff0c\u200b\u4f7f\u7528\u200b\u5355\u5f15\u53f7\u200b\uff0c\u200b\u5360\u7528\u200b4\u200b\u4e2a\u200b\u5b57\u8282\u200b\u3002 - \u200b\u6574\u6570\u200b\uff1a
i8
\uff5ei128
\u200b\u548c\u200bisize
\uff0c\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\([-2^{n-1}, 2^{n-1} - 1]\\)\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200bmin_value()
\u200b\u548c\u200bmax_value()
\u200b\u51fd\u6570\u200b\u6765\u200b\u83b7\u53d6\u200b\u7c7b\u578b\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u3002isize
\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u548c\u200b\u7cfb\u7edf\u200b\u6307\u9488\u200b\u957f\u5ea6\u200b\u76f8\u540c\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u6574\u6570\u200b\u7c7b\u578b\u200b\u662f\u200bi32
\u3002 - \u200b\u65e0\u200b\u7b26\u53f7\u200b\u6574\u6570\u200b\uff1a
u8
\uff5eu128
\u200b\u548c\u200busize
\uff0c\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\([0, 2^n - 1]\\)\u3002 - \u200b\u6d6e\u70b9\u6570\u200b\uff1a
f32
\u200b\u548c\u200bf64
\uff0c\u200b\u5206\u522b\u200b\u4e3a\u200b\u5355\u7cbe\u5ea6\u200b\u548c\u200b\u53cc\u200b\u7cbe\u5ea6\u200b\u6d6e\u70b9\u6570\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u6d6e\u70b9\u6570\u200b\u7c7b\u578b\u200b\u662f\u200bf64
\u3002 - \u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\uff1a
str
\uff0c\u200b\u4f7f\u7528\u200b\u53cc\u5f15\u53f7\u200b\uff0c\u200b\u662f\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u7c7b\u578b\u200b\u3002\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\uff08\u200b\u53d8\u91cf\u200b\uff09\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e3a\u200b&str
\uff0c\u200b\u662f\u200b\u5f15\u7528\u200b\u7c7b\u578b\u200b\u3002 - \u200b\u5b57\u7b26\u4e32\u200b\uff1a
String
\uff0c\u200b\u662f\u200b\u53ef\u53d8\u200b\u7c7b\u578b\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u200b\u652f\u6301\u200b\u7d22\u5f15\u200b\u3002\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5f15\u7528\u200b\u6216\u200b\u5207\u7247\u200b\u7c7b\u578b\u200b\u4e3a\u200b&str
\u3002 - \u200b\u5355\u5143\u200b\u7c7b\u578b\u200b\uff1a
()
\uff0c\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u503c\u200b()
\uff0c\u200b\u6ca1\u6709\u200breturn
\u200b\u8bed\u53e5\u200b\u7684\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u4e3a\u200b()
\uff0c\u200b\u4e0d\u200b\u5360\u7528\u200b\u5185\u5b58\u200b\u3002
- \u200b\u5bb9\u5668\u200b\u53ca\u200b\u76f8\u5173\u200b\u7c7b\u578b\u200b
- \u200b\u4f7f\u7528\u200b
println!
\u200b\u6253\u5370\u200b\u5bb9\u5668\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200b{:?}
\u200b\u6216\u200b{:#?}
\uff0c\u200b\u524d\u8005\u200b\u4e3a\u200b\u4e00\u884c\u200b\u8f93\u51fa\u200b\uff0c\u200b\u540e\u8005\u200b\u5728\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u540e\u9762\u200b\u6dfb\u52a0\u200b\u6362\u884c\u7b26\u200b\u3002 - \u200b\u5b9a\u200b\u957f\u200b\u6570\u7ec4\u200b\uff1a
[T; N]
\uff0c\u200b\u5176\u4e2d\u200bT
\u200b\u4e3a\u200b\u6570\u7ec4\u200b\u5143\u7d20\u200b\u7c7b\u578b\u200b\u6216\u200b\u91cd\u590d\u200b\u7684\u200b\u6570\u7ec4\u200b\uff0cN
\u200b\u4e3a\u200b\u6570\u7ec4\u200b\u957f\u5ea6\u200b\uff0c\u200b\u5fc5\u987b\u200b\u662f\u200b\u5e38\u91cf\u200b\u3002\u200b\u53ea\u6709\u200b\u7528\u200bmut
\u200b\u58f0\u660e\u200b\u7684\u200b\u6570\u7ec4\u200b\u624d\u80fd\u200b\u4fee\u6539\u200b\u5176\u4e2d\u200b\u5143\u7d20\u200b\u3002 - \u200b\u6ce8\u610f\u200b\u4e0d\u200b\u652f\u6301\u200b
Copy
trait\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e0d\u80fd\u200b\u7528\u200b[T; N]
\u200b\u8bed\u6cd5\u200b\uff0c\u200b\u5fc5\u987b\u200b\u9010\u4e2a\u200b\u8d4b\u503c\u200b\u3002 - \u200b\u4e0d\u540c\u200b\u957f\u5ea6\u200b\u7684\u200b\u6570\u7ec4\u200b\u662f\u200b\u4e0d\u540c\u200b\u7684\u200b\u7c7b\u578b\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u76f8\u4e92\u200b\u8d4b\u503c\u200b\u3002
- \u200b\u5b9a\u200b\u957f\u200b\u5143\u7ec4\u200b\uff1a
(T1, T2, ..., Tn)
\uff0c\u200b\u5176\u4e2d\u200bT1
\uff5eTn
\u200b\u4e3a\u200b\u5143\u7ec4\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u53ea\u6709\u200b\u7528\u200bmut
\u200b\u58f0\u660e\u200b\u7684\u200b\u5143\u7ec4\u200b\u624d\u80fd\u200b\u4fee\u6539\u200b\u5176\u4e2d\u200b\u5143\u7d20\u200b\uff08\u200b\u7c7b\u578b\u200b\u5fc5\u987b\u200b\u5339\u914d\u200b\uff09\u3002\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bPython\uff0c\u200b\u5728\u200b\u53d8\u91cf\u200b\u58f0\u660e\u200b\u9636\u6bb5\u200b\u6216\u200b\u8d4b\u503c\u200b\u9636\u6bb5\u200b\uff0c\u200b\u4ec5\u200b\u5305\u542b\u200b\uff08\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u8d4b\u503c\u200b\u7684\u200b\uff09\u200b\u53d8\u91cf\u200b\u5143\u7ec4\u200b\u53ef\u4ee5\u200b\u4f5c\u4e3a\u200b\u8d4b\u503c\u200b\u8fd0\u7b97\u200b\u7684\u200b\u5de6\u7aef\u200b\u9879\u200b\uff0c\u200b\u6b64\u65f6\u200b\u4f1a\u200b\u5206\u522b\u200b\u4e3a\u200b\u6bcf\u4e2a\u200b\u53d8\u91cf\u200b\u5206\u914d\u200b\u5bf9\u5e94\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u7701\u7565\u200b\u7684\u200b\u53d8\u91cf\u200b\u7528\u200b_
\u200b\u8868\u793a\u200b\u3002\u200b\u5143\u7ec4\u200b\u652f\u6301\u200b\u5d4c\u5957\u200b\u3002\u200b\u5355\u200b\u5143\u7d20\u200b\u5143\u7ec4\u200b\u7684\u200b\u8bed\u6cd5\u200b\u4e3a\u200b(<value>,)
\u3002 - \u200b\u6570\u7ec4\u200b\u5207\u7247\u200b\uff1a
&<parent>[<start>..<end>]
\uff0c\u200b\u6ce8\u610f\u200b\u5207\u7247\u200b\u662f\u200b\u5bf9\u200b<parent>
\u200b\u7684\u200b\u5f15\u7528\u200b\uff0c\u200b\u662f\u200b\u5f15\u7528\u200b\u7c7b\u578b\u200b\u3002\u200b\u5143\u7ec4\u200b\u4e0d\u200b\u652f\u6301\u200b\u5207\u7247\u200b\uff0c\u200b\u53ea\u80fd\u200b\u7528\u200b.0
\u3001.1
\u200b\u7b49\u200b\u6765\u200b\u8bbf\u95ee\u200b\u5143\u7d20\u200b\uff0c\u200b\u7c7b\u578b\u200b\u4e3a\u200b[T]
\u3002
- \u200b\u8fed\u4ee3\u200b\u5668\u200b\uff0c\u200b\u901a\u5e38\u200b\u7531\u200b\u5bb9\u5668\u200b\u5bf9\u8c61\u200b\u7684\u200b
iter()
\u200b\u65b9\u6cd5\u200b\u751f\u6210\u200b\u3002 - \u200b\u51fd\u6570\u200b\uff1a\u200b\u9700\u8981\u200b\u7528\u200b
fn(arg1: type1, ...) -> return_type
\u200b\u8868\u793a\u200b\uff0c\u200b\u51fd\u6570\u200b\u4ee5\u200b\u5f15\u7528\u200b\u7684\u200b\u65b9\u5f0f\u200b\u4f20\u9012\u200b\u3002
"},{"location":"coding/rust/1/#_3","title":"\u6574\u6570\u200b\u7c7b\u578b","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u6574\u6570\u200b\u5b57\u9762\u200b\u91cf\u200b\u6709\u200b\u5982\u4e0b\u200b\u5199\u6cd5\u200b\uff1a
- \u200b\u5341\u8fdb\u5236\u200b\uff1a
123_456
- \u200b\u5341\u516d\u8fdb\u5236\u200b\uff1a
0x123
\uff0c0x
\u200b\u5f00\u5934\u200b\uff0c\u200b\u6570\u5b57\u200b\u4e3a\u200b0-9
\u200b\u548c\u200ba-f
- \u200b\u516b\u8fdb\u5236\u200b\uff1a
0o123
\uff0c0o
\u200b\u5f00\u5934\u200b\uff0c\u200b\u6570\u5b57\u200b\u4e3a\u200b0-7
- \u200b\u4e8c\u8fdb\u5236\u200b\uff1a
0b101
\uff0c0b
\u200b\u5f00\u5934\u200b\uff0c\u200b\u6570\u5b57\u200b\u4e3a\u200b0
\u200b\u548c\u200b1
- \u200b\u5b57\u8282\u200b\uff1a
b'A'
- \u200b\u4e0b\u5212\u7ebf\u200b
_
\u200b\u7c7b\u4f3c\u200b\u4e8e\u200b\u5343\u4f4d\u200b\u5206\u9694\u7b26\u200b\uff0c\u200b\u5b58\u5728\u200b\u4e0e\u5426\u200b\u4e0d\u200b\u5f71\u54cd\u200b\u6570\u5b57\u200b\u7684\u200b\u503c\u200b
\u200b\u6574\u6570\u200b\u6ea2\u51fa\u200b
\u200b\u5728\u200bDebug\u200b\u6a21\u5f0f\u200b\u4e0b\u200b\uff0cRust\u200b\u4f1a\u200b\u68c0\u67e5\u200b\u6574\u6570\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u5982\u679c\u200b\u53d1\u751f\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u7a0b\u5e8f\u200b\u4f1a\u200bpanic\u3002\u200b\u5728\u200bRelease\u200b\u6a21\u5f0f\u200b\u4e0b\u200b\uff0cRust\u200b\u4e0d\u4f1a\u200b\u68c0\u67e5\u200b\u6574\u6570\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u6ea2\u51fa\u200b\u540e\u200b\u4f1a\u200b\u6309\u7167\u200b\u4e8c\u8fdb\u5236\u200b\u8865\u7801\u200b\u8fdb\u884c\u200b\u5faa\u73af\u200b\u3002
\u200b\u6574\u6570\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
- \u200b\u4e0b\u6587\u200b\u4e2d\u200b\u7684\u200b
*
\u200b\u6307\u200badd
\u3001sub
\u3001mul
\u3001div
\u200b\u7b49\u200b\u8fd0\u7b97\u200b wrapping_*
\uff1a\u200b\u5982\u679c\u200b\u8fd0\u7b97\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u5219\u200b\u53d6\u200b\u6ea2\u51fa\u200b\u540e\u200b\u7684\u200b\u503c\u200b\u3002 checked_*
\uff1a\u200b\u5982\u679c\u200b\u8fd0\u7b97\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bNone
\u3002 saturating_*
\uff1a\u200b\u5982\u679c\u200b\u8fd0\u7b97\u200b\u6ea2\u51fa\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200b\u76ee\u6807\u200b\u7c7b\u578b\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u6216\u200b\u6700\u5c0f\u503c\u200b\u3002 -
overflowing_*
\uff1a\u200b\u8fd4\u56de\u200b\u8fd0\u7b97\u200b\u7ed3\u679c\u200b\u548c\u200b\u662f\u5426\u200b\u6ea2\u51fa\u200b\u7684\u200b\u6807\u8bb0\u200b
let a: i32 = 1;\nlet b: i32 = 2;\nlet (c, overflow) = a.overflowing_add(b);\nprintln!(\"{} {}\", c, overflow); // 3 false\n
"},{"location":"coding/rust/1/#_4","title":"\u6d6e\u70b9\u6570\u200b\u7c7b\u578b","text":" - \u200b\u6d6e\u70b9\u6570\u200b\u6ca1\u6709\u200b\u5b9e\u73b0\u200b
Eq
trait\uff0c\u200b\u56e0\u6b64\u200b\u4e0d\u80fd\u200b\u76f4\u63a5\u200b\u7528\u200b==
\u200b\u548c\u200b!=
\u200b\u6765\u200b\u6bd4\u8f83\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u80fd\u200b\u4f5c\u4e3a\u200b\u5b57\u5178\u200b\u7684\u200b\u952e\u200b\u3002 - \u200b\u6570\u5b66\u200b\u4e0a\u200b\u65e0\u200b\u5b9a\u4e49\u200b\u7684\u200b\u8fd0\u7b97\u200b\uff0c\u200b\u5982\u200b
0.0 / 0.0
\uff0cRust\u200b\u4f1a\u200b\u8fd4\u56de\u200bNaN
\uff08Not a Number\uff09\u3002\u200b\u4e0e\u200bNaN
\u200b\u7684\u200b\u8fd0\u7b97\u200b\u7ed3\u679c\u200b\u603b\u662f\u200bNaN
\uff0c\u200b\u5e76\u4e14\u200bNaN
\u200b\u4e0d\u80fd\u200b\u53c2\u4e0e\u200b\u6bd4\u8f83\u200b\u8fd0\u7b97\u200b\u3002 - \u200b\u7531\u4e8e\u200b
NaN
\u200b\u7684\u200b\u5b58\u5728\u200b\uff0c\u200b\u6d6e\u70b9\u6570\u200b\u6ca1\u6709\u200b\u5b9e\u73b0\u200bOrd
trait\uff0c\u200b\u56e0\u6b64\u200b\u4e0d\u80fd\u200b\u76f4\u63a5\u200b\u7528\u4e8e\u200bsort()
\u200b\u7b49\u200b\u9700\u8981\u200bOrd
trait\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200bpartial_cmp().unwrap()
\u200b\u6765\u200b\u8fdb\u884c\u200b\u6bd4\u8f83\u200b\u3002 - \u200b\u7531\u4e8e\u200b\u6d6e\u70b9\u6570\u200b\u7684\u200b\u7cbe\u5ea6\u200b\u95ee\u9898\u200b\uff0c\u200b\u6d6e\u70b9\u6570\u200b\u7684\u200b\u6bd4\u8f83\u200b\u5e94\u8be5\u200b\u7528\u200b
abs()
\u200b\u548c\u200b<
\u3001>
\u200b\u6765\u200b\u8fdb\u884c\u200b\u3002
\u200b\u6d6e\u70b9\u6570\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
is_nan()
\uff1a\u200b\u5224\u65ad\u200b\u662f\u5426\u200b\u4e3a\u200bNaN
\u3002
"},{"location":"coding/rust/1/#_5","title":"\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u7c7b\u578b","text":"\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
-
len()
\uff1a\u200b\u8fd4\u56de\u200b\u5b57\u7b26\u4e32\u200b\u957f\u5ea6\u200b\u3002
let s = \"hello\";\nprintln!(\"{}\", s.len()); // 5\n
-
lines()
\uff1a\u200b\u6309\u200b\u6362\u884c\u7b26\u200b\\n
\u200b\u5206\u5272\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u8fd4\u56de\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002
let s = \"hello\\nworld\";\nfor line in s.lines() {\n println!(\"{}\", line);\n}\n
-
split()
\uff1a\u200b\u6309\u200b\u7ed9\u5b9a\u200b\u5b57\u7b26\u200b\u5206\u5272\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u8fd4\u56de\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002
let s = \"hello world\";\nfor word in s.split(\" \") {\n println!(\"{}\", word);\n}\n
-
trim()
\uff1a\u200b\u53bb\u9664\u200b\u5b57\u7b26\u4e32\u200b\u9996\u5c3e\u200b\u7684\u200b\u7a7a\u767d\u200b\u5b57\u7b26\u200b\u3002
let s = \" hello world \";\nprintln!(\"{}\", s.trim()); // \"hello world\"\n
-
parse()
\uff1a\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u5176\u4ed6\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5982\u200bparse::<i32>()
\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u8f6c\u6362\u200b\u4e3a\u200bi32
\u200b\u7c7b\u578b\u200b\u3002\u200b\u5f53\u200b\u8f6c\u4e3a\u200b\u6570\u5b57\u200b\u65f6\u200b\uff0c\u200b\u6570\u5b57\u200b\u4e0d\u80fd\u200b\u8d85\u8fc7\u200b\u7c7b\u578b\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\uff0c\u200b\u5426\u5219\u200b\u4f1a\u200b\u62a5\u9519\u200b\u3002
let s = \"123\";\nlet n: i32 = s.parse().unwrap(); // \u200b\u8fd4\u56de\u503c\u200b\u662f\u200b`Result`\u200b\u7c7b\u578b\u200b\n
\u200b\u81ea\u5b9a\u4e49\u200b\u7c7b\u578b\u200b\u5982\u679c\u200b\u9700\u8981\u200b\u901a\u8fc7\u200bparse()
\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200bstd::str::FromStr
trait\uff0c\u200b\u53c2\u89c1\u200bImpl & Trait
-
to_string()
\uff1a\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u8f6c\u6362\u200b\u4e3a\u200bString
\u200b\u7c7b\u578b\u200b\u3002
chars()
\uff1a\u200b\u8fd4\u56de\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5b57\u7b26\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002 bytes()
\uff1a\u200b\u8fd4\u56de\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u5b57\u8282\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002
"},{"location":"coding/rust/1/#_6","title":"\u5b57\u7b26\u4e32\u200b\u7c7b\u578b","text":"\u200b\u5b57\u7b26\u4e32\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
push()
\u3001push_str()
\uff1a\u200b\u5206\u522b\u200b\u7528\u4e8e\u200b\u5728\u200b\u5b57\u7b26\u4e32\u200b\u672b\u5c3e\u200b\u6dfb\u52a0\u200b\u5b57\u7b26\u200b\u548c\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u3002 insert()
\u3001insert_str()
\uff1a\u200b\u5206\u522b\u200b\u7528\u4e8e\u200b\u5728\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u63d2\u5165\u200b\u5b57\u7b26\u200b\u548c\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u3002 replace(A, B)
\u3001replacen(A, B, n)
\uff1a\u200b\u5206\u522b\u200b\u7528\u4e8e\u200b\u5c06\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u7684\u200bA
\u200b\u66ff\u6362\u200b\u4e3a\u200bB
\uff0creplacen
\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u6307\u5b9a\u200b\u66ff\u6362\u200b\u6b21\u6570\u200bn
\uff0c\u200b\u8fd4\u56de\u200b\u66ff\u6362\u200b\u540e\u200b\u7684\u200b\u65b0\u200b\u5b57\u7b26\u4e32\u200b\u3002 replace_range(range, A)
\uff1a\u200b\u7528\u4e8e\u200b\u5c06\u200b\u539f\u200b\u5b57\u7b26\u4e32\u200b\u7684\u200b\u6307\u5b9a\u200b\u8303\u56f4\u200b\u66ff\u6362\u200b\u4e3a\u200b\u65b0\u200b\u7684\u200b\u5b57\u7b26\u4e32\u200bA
\uff0c\u200b\u8fd4\u56de\u200b\u66ff\u6362\u200b\u540e\u200b\u7684\u200b\u539f\u200b\u5b57\u7b26\u4e32\u200b\u3002 pop()
\uff1a\u200b\u5220\u9664\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5b57\u7b26\u4e32\u200b\u672b\u5c3e\u200b\u7684\u200b\u5b57\u7b26\u200b\uff0c\u200b\u5982\u679c\u200b\u5b57\u7b26\u4e32\u200b\u4e3a\u200b\u7a7a\u5219\u200b\u8fd4\u56de\u200bNone
\u3002 remove()
\uff1a\u200b\u5220\u9664\u200b\u5e76\u200b\u8fd4\u56de\u200b\u5b57\u7b26\u4e32\u200b\u4e2d\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5b57\u7b26\u200b\u3002\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u7d22\u5f15\u200b\u5fc5\u987b\u200b\u662f\u200b\u6709\u6548\u200b\u7684\u200b\u5b57\u7b26\u200b\u8fb9\u754c\u200b\u3002 truncate()
\uff1a\u200b\u5220\u9664\u200b\u4ece\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u5f00\u59cb\u200b\u5230\u200b\u5b57\u7b26\u4e32\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5168\u90e8\u200b\u5b57\u7b26\u200b\u3002 clear()
\uff1a\u200b\u6e05\u7a7a\u200b\u5b57\u7b26\u4e32\u200b\u3002 +
\u200b\u8fd0\u7b97\u7b26\u200b\uff1a\u200b\u7528\u4e8e\u200b\u8fde\u63a5\u200b\u4e24\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\uff0c\u200b\u53f3\u7aef\u200b\u9879\u4e3a\u200b&str
\u200b\u7c7b\u578b\u200b\u3002
"},{"location":"coding/rust/1/#_7","title":"\u6570\u7ec4\u200b\u7c7b\u578b","text":"\u200b\u6570\u7ec4\u200b\u8d8a\u754c\u200b
Rust\u200b\u4f1a\u200b\u68c0\u67e5\u200b\u6570\u7ec4\u200b\u8bbf\u95ee\u200b\u8d8a\u754c\u200b\u95ee\u9898\u200b\u3002
\u200b\u6570\u7ec4\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
-
std::array::from_fn()
\uff1a\u200b\u6839\u636e\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\u751f\u6210\u200b\u6570\u7ec4\u200b\u3002
let a: [String; 8] = std::array::from_fn(|_i| String::from(\"This is Rust\"));\n
"},{"location":"coding/rust/1/#_8","title":"\u8fed\u4ee3\u200b\u5668\u200b\u7c7b\u578b","text":"\u200b\u8fed\u4ee3\u200b\u5668\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
-
map(fn)
\uff1a\u200b\u5bf9\u200b\u8fed\u4ee3\u200b\u5668\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u5e94\u7528\u200b\u51fd\u6570\u200bfn
\uff0c\u200b\u8fd4\u56de\u200b\u65b0\u200b\u7684\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002
let v = vec![1, 2, 3];\nfor i in v.iter().map(|x| x * 2) {\n print!(\"{}\", i); // 246\n}\n
-
collect()
\uff1a\u200b\u5c06\u200b\u8fed\u4ee3\u200b\u5668\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u5bb9\u5668\u200b\uff08\u200b\u5b9a\u200b\u957f\u200b\u6570\u7ec4\u200b\uff09\u3002
let v = vec![1, 2, 3];\nlet v2: Vec<i32> = v.iter().map(|x| x * 2).collect();\n
"},{"location":"coding/rust/1/#_9","title":"\u8fd0\u7b97\u7b26","text":"Rust\u200b\u7684\u200b\u8fd0\u7b97\u7b26\u200b\u4e0e\u200bC/C++\u200b\u7c7b\u4f3c\u200b
- \u200b\u56db\u5219\u8fd0\u7b97\u200b\u7b26\u200b\uff1a
+ - * / %
- \u200b\u6bd4\u8f83\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
== != > < >= <=
- \u200b\u903b\u8f91\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
&& || !
- \u200b\u4f4d\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
& | ^ << >> !
\uff08!
\u200b\u4e3a\u200b\u6309\u4f4d\u200b\u53d6\u53cd\u200b\uff09 - \u200b\u539f\u4f4d\u200b\u8d4b\u503c\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
+= -= *= /= %= &= |= ^= <<= >>=
\u200b\u7b49\u200b - \u200b\u7c7b\u578b\u8f6c\u6362\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
as
\uff0c\u200b\u5982\u200blet b = (a as f64) / 2.0;
- \u200b\u5f15\u7528\u200b\u4e0e\u200b\u89e3\u200b\u5f15\u7528\u200b\u8fd0\u7b97\u7b26\u200b\uff1a
& &mut *
\uff0c\u200b\u5176\u4e2d\u200b&
\u200b\u7528\u4e8e\u200b\u83b7\u53d6\u200b\u53d8\u91cf\u200b\u7684\u200b\u5f15\u7528\u200b\uff08borrow\uff09\uff0c&mut
\u200b\u7528\u4e8e\u200b\u83b7\u53d6\u200b\u53d8\u91cf\u200b\u7684\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\uff0c*
\u200b\u7528\u4e8e\u200b\u89e3\u200b\u5f15\u7528\u200b\u3002
"},{"location":"coding/rust/2/","title":"Control Flows","text":"\u200b\u672c\u200b\u8282\u200b\u4ecb\u7ecd\u200bRust\u200b\u4e2d\u200b\u7684\u200b\u51fd\u6570\u200b\u548c\u200b\u63a7\u5236\u6d41\u200b\u8bed\u53e5\u200b\u3002
"},{"location":"coding/rust/2/#_1","title":"\u51fd\u6570\u200b\u4e0e\u200b\u51fd\u6570\u6307\u9488","text":"Rust\u200b\u4e2d\u200b\uff0c\u200b\u7528\u200b\u5173\u952e\u5b57\u200bfn
\u200b\u58f0\u660e\u200b\u51fd\u6570\u200b\uff0c\u200b\u51fd\u6570\u200b\u7684\u200b\u683c\u5f0f\u200b\u4e3a\u200b\uff1a
fn <function name>([<parameter name>: <parameter type>, ...]) -> [<return type>] {\n <function body>\n}\n
\u200b\u5176\u4e2d\u200b\uff0c\u200b\u51fd\u6570\u200b\u5fc5\u987b\u200b\u6307\u660e\u200b\u6240\u6709\u200b\u53c2\u6570\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u6307\u660e\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5219\u200b\u9ed8\u8ba4\u200b\u4e3a\u200b()
\uff0c\u200b\u5373\u7a7a\u200b\u5143\u7ec4\u200b\u3002\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200breturn
\u200b\u5173\u952e\u5b57\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u7684\u200b\u8868\u8fbe\u5f0f\u200b\u8fd4\u56de\u503c\u200b\u3002\u200b\u4efb\u4f55\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u5982\u679c\u200b\u901a\u8fc7\u200b\u8868\u8fbe\u5f0f\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5219\u200b\u4e0d\u80fd\u200b\u52a0\u5206\u200b\u53f7\u200b;
\u3002
Download source code
fn add(a: i32, b: i32) -> i32 {\n a + b // Return by expression\n}\nfn sub(a: i32, b: i32) -> i32 {\n return a - b; // Return by return keyword\n}\n\nfn main() {\n let (a, b) = (2, 1);\n println!(\"{} + {} = {}\", a, b, add(a, b));\n println!(\"{} - {} = {}\", a, b, sub(a, b));\n}\n
\u200b\u51fd\u6570\u6307\u9488\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e3a\u200bfn(<parameter type>, ...) -> <return type>
\uff0c\u200b\u5c06\u200b\u51fd\u6570\u200b\u8d4b\u503c\u200b\u7ed9\u200b\u51fd\u6570\u6307\u9488\u200b\u65f6\u200b\uff0c\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u548c\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u5fc5\u987b\u200b\u5168\u90e8\u200b\u5339\u914d\u200b\u3002
\u200b\u5728\u200b\u51fd\u6570\u200b\u5185\u90e8\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u58f0\u660e\u200b\u51fd\u6570\u200b\uff0c\u200b\u79f0\u4e3a\u200blambda\u200b\u51fd\u6570\u200b\uff0c\u200b\u58f0\u660e\u200b\u65b9\u5f0f\u200b\u4e3a\u200b
let <function name> = |[<parameter name>: <parameter type>, ...]| -> [<return type>] {\n <function body>\n}\n
\u200b\u5176\u4e2d\u200b\uff1a
-
\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u7c7b\u578b\u200b\u3002
let add = |a, b| { return a + b; };\n
-
\u200b\u5982\u679c\u200b\u51fd\u6570\u200b\u4f53\u200b\u53ea\u6709\u200b\u4e00\u884c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b{}
\uff0c\u200b\u6b64\u65f6\u200b\u4e0d\u80fd\u200b\u52a0\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u3002
let add = |a, b| a + b;\n
-
\u200b\u53ef\u4ee5\u200b\u5728\u200b\u58f0\u660e\u200b\u7684\u200b\u65f6\u5019\u200b\u76f4\u63a5\u200b\u8c03\u7528\u200b\uff0c\u200b\u6b64\u65f6\u200b\u4e0d\u80fd\u200b\u7701\u7565\u200b{}
\u200b\u548c\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u3002
let result = |a, b| -> i32 { a + b }(1, 2); // result = 3\n
Download source code
fn main() {\n let (a, b) = (2, 1);\n let add = |a, b| a + b;\n println!(\"{} + {} = {}\", a, b, add(a, b));\n println!(\"{} - {} = {}\", a, b, |a, b| -> i32 { return a - b; }(a, b));\n}\n
"},{"location":"coding/rust/2/#if","title":"if
\u200b\u8bed\u53e5","text":"Rust\u200b\u4e2d\u200bif
\u200b\u8bed\u53e5\u200b\u7684\u200b\u683c\u5f0f\u200b\u4e0e\u200bC/C++\u200b\u76f8\u4f3c\u200b\uff0c\u200b\u4f46\u662f\u200b\u6761\u4ef6\u200b\u8868\u8fbe\u5f0f\u200b\u4e0d\u200b\u9700\u8981\u200b\u52a0\u200b\u62ec\u53f7\u200b\u3002
if <condition> {\n <expression>\n} [ else if <condition> {\n <expression>\n} ] [ else {\n <expression>\n} ]\n
if
\u200b\u8bed\u53e5\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200b\u5728\u200b\u8868\u8fbe\u5f0f\u200b\u4e2d\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6bcf\u4e2a\u200b\u5206\u652f\u200b\u5757\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u4f5c\u4e3a\u200b\u8be5\u200b\u5206\u652f\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002\u200b\u6b64\u65f6\u200b\u6bcf\u4e2a\u200b\u5206\u652f\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u5fc5\u987b\u200b\u76f8\u540c\u200b\u3002
Download source code
fn main() {\n let (a, b) = (5, 3);\n println!(\"max({}, {}) = {}\", a, b, if a > b { a } else { b });\n if a < b {\n println!(\"min({}, {}) = {}\", a, b, a);\n } else {\n println!(\"min({}, {}) = {}\", a, b, b);\n }\n}\n
"},{"location":"coding/rust/2/#match","title":"match
\u200b\u8bed\u53e5","text":"match
\u200b\u8bed\u53e5\u200b\u7528\u4e8e\u200b\u5bf9\u200b\u53d8\u91cf\u200b\u7684\u200b\u503c\u200b\u8fdb\u884c\u200b\u6a21\u5f0f\u5339\u914d\u200b\uff0c\u200b\u683c\u5f0f\u200b\u4e3a\u200b\uff1a
match <variable> {\n <pattern> => <expression>,\n ...\n _ => <expression>\n}\n
\u200b\u5176\u4e2d\u200b\uff0c<pattern>
\u200b\u53ef\u4ee5\u200b\u662f\u200b
- \u200b\u5355\u4e2a\u200b\u6570\u503c\u200b\uff0c\u200b\u5982\u200b
5 => \"five\"
- \u200b\u8303\u56f4\u200b\uff0c\u200b\u5982\u200b
1 ..= 5 => \"one to five\"
|
\u200b\u5206\u9694\u200b\u7684\u200b\u591a\u4e2a\u200b\u6a21\u5f0f\u200b\uff0c\u200b\u5982\u200b1 | 2 | 3 => \"one to three\"
- \u200b\u6a21\u677f\u200b\u5b9e\u4f8b\u200b\uff0c\u200b\u5982\u200b
Some(x) => Some(x + 1)
_
\uff0c\u200b\u8868\u793a\u200b\u5339\u914d\u200b\u6240\u6709\u200b\u60c5\u51b5\u200b\u3002 - \u200b\u5982\u679c\u200b\u88ab\u200b\u5339\u914d\u200b\u7684\u200b\u53d8\u91cf\u200b\u662f\u200b\u5143\u7ec4\u200b\uff0c\u200b\u5219\u200b\u5143\u7ec4\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5143\u7d20\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u662f\u200b\u4e0a\u8ff0\u200b\u6a21\u5f0f\u200b\u3002
- \u200b\u6761\u4ef6\u200b\u8bed\u53e5\u200b\uff0c\u200b\u5982\u200b
x if x > 5 => \"greater than five\"
\uff0c\u200b\u6b64\u65f6\u200b\u5143\u7ec4\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6574\u4f53\u200b\u53c2\u4e0e\u200b\u6761\u4ef6\u200b\u8bed\u53e5\u200b\uff0c\u200b\u5982\u200b(x, y) if x > 5 && y > 5 => \"both greater than five\"
<expression>
\u200b\u53ef\u4ee5\u200b\u662f\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u4ee3\u7801\u200b\u5757\u200b\uff0c\u200b\u6b64\u65f6\u200b\u4ee3\u7801\u200b\u5757\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u884c\u200b\u4f5c\u4e3a\u200b\u8fd4\u56de\u503c\u200b\u3002
\u200b\u6ce8\u610f\u200bmatch
\u200b\u7684\u200b\u5206\u652f\u200b\u5fc5\u987b\u200b\u5305\u62ec\u200b\u6240\u6709\u200b\u53ef\u80fd\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u5426\u5219\u200b\u4f1a\u200b\u62a5\u9519\u200b\u3002
Download source code
fn main() {\n let marks_paper_a: u8 = 25;\n let marks_paper_b: u8 = 30;\n\n let output = match (marks_paper_a, marks_paper_b) {\n (50, 50) => \"Full marks for both papers\",\n (50, _) => \"Full marks for paper A\",\n (_, 50) => \"Full marks for paper B\",\n (x, y) if x > 25 && y > 25 => \"Good\",\n (_, _) => \"Work hard\"\n };\n\n println!(\"{}\", output); // Work hard\n}\n
"},{"location":"coding/rust/2/#if-let","title":"if let
\u200b\u8bed\u53e5","text":"\u200b\u548c\u200bmatch
\u200b\u7c7b\u4f3c\u200b\uff0cif let
\u200b\u8bed\u53e5\u200b\u7528\u4e8e\u200b\u5339\u914d\u200b\u5355\u4e2a\u200b\u6a21\u5f0f\u200b\uff0c\u200b\u683c\u5f0f\u200b\u4e3a\u200b\uff1a
if let <pattern> = <variable> {\n <expression>\n}\n
let <pattern> = <variable>
\u200b\u53ef\u4ee5\u200b\u770b\u6210\u200b\u4e00\u4e2a\u200b\u6761\u4ef6\u200b\uff08\u200b\u4f46\u200b\u5b9e\u9645\u200b\u5e76\u200b\u4e0d\u662f\u200b\uff09\uff0c\u200b\u5982\u679c\u200b\u80fd\u200b\u5339\u914d\u200b\u5219\u200b\u5c06\u200b<variable>
\u200b\u7684\u200b\u503c\u200b\u6309\u7167\u200b<pattern>
\u200b\u8fdb\u884c\u200b\u7ed1\u5b9a\u200b\uff0c\u200b\u5e76\u200b\u8fd4\u56de\u200btrue
\uff0c\u200b\u56e0\u6b64\u200b\u4e5f\u200b\u4f1a\u200b\u6709\u200bwhile let
\u200b\u7b49\u200b\u5176\u4ed6\u200b\u8bed\u53e5\u200b\u3002
"},{"location":"coding/rust/2/#loop","title":"loop
\u200b\u8bed\u53e5","text":"loop
\u200b\u8bed\u53e5\u200b\u7528\u4e8e\u200b\u65e0\u9650\u200b\u5faa\u73af\u200b\u3002
- \u200b\u53ef\u4ee5\u200b\u7528\u200b
continue
\u200b\u8df3\u8f6c\u200b\u5230\u200b\u4e0b\u200b\u4e00\u6b21\u200b\u5faa\u73af\u200b\uff0c\u200b\u6216\u200bbreak
\u200b\u8df3\u51fa\u200b\u5faa\u73af\u200b\u3002 loop
\u200b\u53ef\u4ee5\u200b\u7528\u200bbreak <expression>
\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6240\u6709\u200bbreak
\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u5fc5\u987b\u200b\u76f8\u540c\u200b\u3002 - \u200b\u6bcf\u4e2a\u200b\u5faa\u73af\u200b\u53ef\u4ee5\u200b\u7528\u200b
'<label>: loop
\u200b\u6807\u8bb0\u200b\uff0c\u200b\u5728\u200bbreak
\u200b\u548c\u200bcontinue
\u200b\u65f6\u200b\u53ef\u4ee5\u200b\u6307\u5b9a\u200b\u8df3\u51fa\u200b/\u200b\u8df3\u8fc7\u200b\u7684\u200b\u5faa\u73af\u200b\u3002
Download source code
fn main() {\n let mut b1 = 1;\n\n let (c1, c2) = 'outer_loop: loop {\n let mut b2 = 1;\n\n 'inner_loop: loop {\n println!(\"Current Value : [{}][{}]\", b1, b2);\n\n if b1 == 2 && b2 == 2 {\n break 'outer_loop (b1, b2); // Leave outer_loop with return value\n } else if b2 == 5 {\n break; // Leave inner_loop by default\n }\n\n b2 += 1;\n }\n\n b1 += 1;\n };\n println!(\"b1 = {}, b2 = {}\", c1, c2);\n}\n
"},{"location":"coding/rust/2/#while","title":"while
\u200b\u8bed\u53e5","text":"while
\u200b\u8bed\u53e5\u200b\u7528\u4e8e\u200b\u662f\u200b\u6709\u200b\u6761\u4ef6\u200b\u7684\u200b\u5faa\u73af\u200b\uff0cwhile
\u200b\u8bed\u53e5\u200b\u4e0d\u80fd\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5176\u4ed6\u200b\u4e0e\u200bloop
\u200b\u8bed\u53e5\u200b\u76f8\u540c\u200b\u3002
while <condition> {\n <expression>\n}\n
"},{"location":"coding/rust/2/#for","title":"for
\u200b\u8bed\u53e5","text":"for
\u200b\u8bed\u53e5\u200b\u7528\u4e8e\u200b\u904d\u5386\u200b\u8fed\u4ee3\u200b\u5668\u200b\uff0c\u200b\u683c\u5f0f\u200b\u4e3a\u200b\uff1a
for <variable> in <iterator> {\n <expression>\n}\n
\u200b\u5176\u4e2d\u200b\uff0c<iterator>
\u200b\u53ef\u4ee5\u200b\u662f\u200b
start .. end
\uff0c\u200b\u8868\u793a\u200b\u4ece\u200bstart
\u200b\u5230\u200bend - 1
\u200b\u7684\u200b\u6574\u6570\u200b\u8303\u56f4\u200b\u3002 start ..= end
\uff0c\u200b\u8868\u793a\u200b\u4ece\u200bstart
\u200b\u5230\u200bend
\u200b\u7684\u200b\u6574\u6570\u200b\u8303\u56f4\u200b\u3002 - \u200b\u7531\u200b\u65b9\u6cd5\u200b
<iterable>.iter()
\u200b\u8fd4\u56de\u200b\u7684\u200b\u8fed\u4ee3\u200b\u5668\u200b\uff0c\u200b\u5982\u200b[1, 2, 3].iter()
\u3002
for
\u200b\u5faa\u73af\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u6dfb\u52a0\u200b\u6807\u7b7e\u200b\u3002
Download source code
fn main() {\n let group : [&str; 4] = [\"Mark\", \"Larry\", \"Bill\", \"Steve\"];\n\n for n in 0..group.len() { // group.len() = 4 -> 0..4 \ud83d\udc4e check group.len()on each iteration\n println!(\"Current Person : {}\", group[n]);\n }\n\n for person in group.iter() { // \ud83d\udc4d group.iter() turn the array into a simple iterator\n println!(\"Current Person : {}\", person);\n }\n}\n
\u200b\u4e25\u683c\u200b\u610f\u4e49\u200b\u4e0a\u200bfor
\u200b\u8bed\u53e5\u200b\u4e0d\u80fd\u200b\u76f4\u63a5\u200b\u904d\u5386\u200b\u5bb9\u5668\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200biter()
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b\u8fed\u4ee3\u200b\u5668\u200b\u3002\u200b\u4f46\u200bfor
\u200b\u4f1a\u200b\u5c1d\u8bd5\u200b\u9690\u5f0f\u200b\u8c03\u7528\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e0b\u9762\u200b\u7684\u200b\u4ee3\u7801\u200b\u4e5f\u200b\u80fd\u200b\u6b63\u5e38\u200b\u6267\u884c\u200b\u3002
fn main() {\n let a = [1, 2, 3];\n for i in a {\n println!(\"{}\", i);\n }\n}\n
"},{"location":"coding/rust/3/","title":"Complex objects","text":"\u200b\u672c\u200b\u8282\u200b\u4ecb\u7ecd\u200bRust\u200b\u4e2d\u200b\u5e38\u7528\u200b\u7684\u200b\u590d\u6742\u200b\u7c7b\u578b\u200b
"},{"location":"coding/rust/3/#_1","title":"\u5bb9\u5668\u200b\u7c7b\u578b","text":""},{"location":"coding/rust/3/#vec","title":"Vec
","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u5411\u91cf\u200b\u7c7b\u578b\u200b\u662f\u200b\u957f\u5ea6\u200b\u53ef\u53d8\u200b\u7684\u200b\u6570\u7ec4\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bVec::new()
\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u7a7a\u200b\u7684\u200b\u5411\u91cf\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bvec![]
\u200b\u5b8f\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u5e26\u6709\u200b\u521d\u59cb\u503c\u200b\u7684\u200b\u5411\u91cf\u200b\u3002Vec
\u200b\u662f\u200b\u6cdb\u578b\u200b\uff0c\u200b\u4f7f\u7528\u200bVec<type>
\u200b\u53ef\u4ee5\u200b\u6307\u5b9a\u200b\u5411\u91cf\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u4e00\u4e2a\u200b\u5411\u91cf\u200b\u4e2d\u200b\u5b58\u50a8\u200b\u5143\u7d20\u200b\u7684\u200b\u7c7b\u578b\u200b\u5168\u90e8\u200b\u76f8\u540c\u200b\u3002\u200b\u5411\u91cf\u200b\u53ca\u5176\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6574\u4f53\u200b\uff0c\u200b\u5bf9\u200b\u5176\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u4e5f\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u5411\u91cf\u200b\u672c\u8eab\u200b\u65e0\u6cd5\u200b\u518d\u200b\u8fdb\u884c\u200b\u5f15\u7528\u200b\u3002
let v1 = Vec::new(); // Empty vector\nlet v2: Vec<i32> = Vec::new(); // Empty vector with type annotation\nlet v3 = vec![1, 2, 3]; // Vector with initial values\nlet v4 = vec![0; 10]; // Repeat values using colon\nlet v5 = vec![1i32, 2, 3]; // Vector with type specified to the first element\nlet v6 = Vec::with_capacity(10); // Vector with pre-allocated capacity 10\n
\u200b\u7528\u200blet mut
\u200b\u58f0\u660e\u200b\u7684\u200b\u5411\u91cf\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u4fee\u6539\u200b\u3002Vec
\u200b\u7c7b\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
push()
\uff1a\u200b\u5411\u200b\u5411\u91cf\u200b\u7684\u200b\u5c3e\u90e8\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b pop()
\uff1a\u200b\u4ece\u200b\u5411\u91cf\u200b\u7684\u200b\u5c3e\u90e8\u200b\u5f39\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b extend()
\uff1a\u200b\u5411\u200b\u5411\u91cf\u200b\u7684\u200b\u5c3e\u90e8\u200b\u6dfb\u52a0\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u5411\u91cf\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b reserve()
\uff1a\u200b\u8c03\u6574\u200b\u5411\u91cf\u200b\u7684\u200b\u5bb9\u91cf\u200b len()
\uff1a\u200b\u8fd4\u56de\u200b\u5411\u91cf\u200b\u7684\u200b\u957f\u5ea6\u200b capacity()
\uff1a\u200b\u8fd4\u56de\u200b\u5411\u91cf\u200b\u7684\u200b\u5bb9\u91cf\u200b\uff08\u200b\u5f53\u200b\u8d85\u51fa\u200b\u5bb9\u91cf\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u91cd\u65b0\u5206\u914d\u200b\u5185\u5b58\u7a7a\u95f4\u200b\uff09 get()
\uff1a\u200b\u8fd4\u56de\u200b\u5411\u91cf\u200b\u4e2d\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\u7684\u200b\u5f15\u7528\u200b\uff0c\u200b\u5982\u679c\u200b\u7d22\u5f15\u200b\u8d8a\u754c\u200b\u5219\u200b\u8fd4\u56de\u200bNone
shrink_to_fit()
\uff1a\u200b\u5c06\u200b\u5411\u91cf\u200b\u7684\u200b\u5bb9\u91cf\u200b\u8c03\u6574\u200b\u4e3a\u200b\u5411\u91cf\u200b\u7684\u200b\u957f\u5ea6\u200b\uff0c\u200b\u91ca\u653e\u200b\u591a\u4f59\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b sort()
\u3001sort_unstable()
\uff1a\u200b\u5bf9\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b sort_by()
\u3001sort_unstable_by()
\uff1a\u200b\u5bf9\u200b\u5411\u91cf\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u8fdb\u884c\u200b\u6392\u5e8f\u200b\uff0c\u200b\u4f7f\u7528\u200b\u81ea\u5b9a\u4e49\u200b\u7684\u200b\u6bd4\u8f83\u200b\u51fd\u6570\u200b []
\u200b\u8fd0\u7b97\u7b26\u200b\uff1a\u200b\u8fd4\u56de\u200b\u5411\u91cf\u200b\u4e2d\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\uff08\u200b\u53f3\u7aef\u200b\u9879\u200b\uff09\uff0c\u200b\u6216\u8005\u200b\u4fee\u6539\u200b\u5411\u91cf\u200b\u4e2d\u200b\u6307\u5b9a\u200b\u4f4d\u7f6e\u200b\u7684\u200b\u5143\u7d20\u200b\uff08\u200b\u5de6\u7aef\u200b\u9879\u200b\uff09\u3002
\u200b\u5411\u91cf\u200b\u53ca\u5176\u200b\u5f15\u7528\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u7528\u200b\u5728\u200bfor
\u200b\u5faa\u73af\u200b\u4e2d\u200b\u3002
"},{"location":"coding/rust/3/#_2","title":"\u7ed3\u6784\u200b\u4f53","text":"\u200b\u6709\u200b\u4e09\u79cd\u200b\u65b9\u6cd5\u200b\u5728\u200bRust\u200b\u4e2d\u200b\u58f0\u660e\u200b\u7ed3\u6784\u200b\u4f53\u200b\uff1a
- C\u200b\u8bed\u8a00\u200b\u98ce\u683c\u200b
- \u200b\u547d\u540d\u200b\u5143\u7ec4\u200b
- unit struct
struct CStyle {\n x: i32,\n y: i32,\n} // C-style struct with two fields\nstruct NamedTuple(i32, i32); // Named tuple struct with two fields\nstruct TypePattern(i32); // Type pattern struct with one field, can be used in `match` statement\nstruct UnitStruct; // Unit struct without fields\n
\u200b\u7528\u200bpub
\u200b\u5173\u952e\u5b57\u200b\u6807\u8bb0\u200b\u7ed3\u6784\u200b\u4f53\u540e\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\u5b57\u200b\u6bb5\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u5916\u754c\u200b\u8bbf\u95ee\u200b\u3002
"},{"location":"coding/rust/3/#_3","title":"\u679a\u4e3e\u200b\u7c7b\u578b","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b\u5173\u952e\u5b57\u200b\u4e3a\u200benum
\uff0c\u200b\u53ef\u4ee5\u200b\u5305\u542b\u200b\u4e0d\u540c\u200b\u7c7b\u578b\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u503c\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u6709\u200b\u4e0d\u540c\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b\u7684\u200b\u503c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bmatch
\u200b\u8bed\u53e5\u200b\u8fdb\u884c\u200b\u5339\u914d\u200b\u3002
enum Week {\n Monday,\n Tuesday,\n Wednesday,\n Thursday,\n Friday,\n Saturday,\n Sunday,\n} // Enum type with 7 variants\n
Rust\u200b\u4e2d\u200b\u7684\u200b\u679a\u4e3e\u200b\u5143\u7d20\u200b\u53ef\u4ee5\u200b\u662f\u200b\u4e0d\u540c\u200b\u7684\u200bpattern\uff0c\u200b\u53ef\u4ee5\u200b\u662f\u200b\u7ed3\u6784\u200b\u4f53\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u5143\u7ec4\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200bunit struct\u3002
enum IpAddr {\n V4(u8, u8, u8, u8), // Tuple\n V6{ addr: String }, // Struct\n LocalHost, // Unit\n}\n
\u200b\u8fd9\u4e9b\u200bpattern\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200bmatch
\u200b\u8bed\u53e5\u200b\u4e2d\u200b\u8fdb\u884c\u200b\u6a21\u5f0f\u5339\u914d\u200b\uff1a
Download source code
enum IpAddr {\n V4(u8, u8, u8, u8), // Tuple\n V6{ addr: String }, // Struct\n LocalHost, // Unit\n}\n\nfn main() {\n let v4 = IpAddr::V4(4, 4, 4, 4);\n let v4_invalid = IpAddr::V4(0, 0, 0, 0);\n let v6 = IpAddr::V6{ addr: String::from(\"::1\") };\n let local = IpAddr::LocalHost;\n print_ip(v4);\n print_ip(v4_invalid);\n print_ip(v6);\n print_ip(local);\n}\n\nfn print_ip(ip: IpAddr) {\n match ip {\n IpAddr::V4(a, b, c, d) if a != 0 || b != 0 || c != 0 || d != 0\n => println!(\"{}.{}.{}.{}\", a, b, c, d),\n IpAddr::V4(a, b, c, d)\n => println!(\"{}.{}.{}.{} is not an valid IPv4 address\", a, b, c, d),\n IpAddr::V6{ addr } => println!(\"{}\", addr),\n IpAddr::LocalHost => println!(\"localhost\"),\n }\n}\n
\u200b\u7528\u200bpub
\u200b\u5173\u952e\u5b57\u200b\u6807\u8bb0\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b\u540e\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\u5404\u4e2a\u200b\u5b57\u6bb5\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u5916\u754c\u200b\u8bbf\u95ee\u200b\u3002
"},{"location":"coding/rust/3/#_4","title":"\u6cdb\u578b","text":"\u200b\u6cdb\u578b\u200b\u662f\u200b\u4e00\u79cd\u200b\u7c7b\u578b\u200b\u6a21\u677f\u200b\uff0c\u200b\u5f53\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b/\u200b\u679a\u4e3e\u200b/\u200b\u7ed3\u6784\u200b\u4f53\u200b\u9700\u8981\u200b\u5904\u7406\u200b\u591a\u79cd\u7c7b\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6cdb\u578b\u200b\u3002\u200b\u6cdb\u578b\u200b\u7684\u200b\u7c7b\u578b\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u5728\u200b\u51fd\u6570\u200b\u540d\u200b\u540e\u9762\u200b\u7528\u200b\u5c16\u62ec\u53f7\u200b\u6307\u5b9a\u200b\uff0c\u200b\u4e4b\u540e\u200b\u53c2\u6570\u200b\u5217\u8868\u200b\u4e2d\u200b\u7528\u200b\u5192\u53f7\u200b\u6307\u5b9a\u200b\u6cdb\u578b\u200b\u7c7b\u578b\u200b\u3002
Download source code
fn max<T> (a: T, b: T) -> T\n where T: std::cmp::PartialOrd\n{\n if a > b { a } else { b }\n}\n\nfn main() {\n println!(\"{}\", max(1, 2)); // i32\n println!(\"{}\", max(1.0, 2.0)); // f64\n println!(\"{}\", max(\"a\", \"b\")); // &str\n}\n
Rust\u200b\u6807\u51c6\u200b\u5e93\u4e2d\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u4e9b\u200b\u5e38\u7528\u200b\u7684\u200b\u6cdb\u578b\u200b\u7c7b\u578b\u200b\uff1a
enum Option<T> {\n Some(T),\n None,\n}\n\nenum Result<T, E> {\n Ok(T),\n Err(E),\n}\n
Option<T>
\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u53ef\u80fd\u200b\u5b58\u5728\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u662f\u200bSome(T)
\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200bNone
\u3002\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bPython\u200b\u4e2d\u200b\u7684\u200bOptional
\u3002 Result<T, E>
\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u53ef\u80fd\u200b\u51fa\u9519\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5982\u679c\u200b\u6210\u529f\u200b\u5219\u200b\u662f\u200bOk(T)
\uff0c\u200b\u5982\u679c\u200b\u5931\u8d25\u200b\u5219\u200b\u662f\u200bErr(E)
\u3002 - \u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b
match
\u200b\u8bed\u53e5\u200b\u4e2d\u200b\u8fdb\u884c\u200b\u6a21\u5f0f\u5339\u914d\u200b\u3002
"},{"location":"coding/rust/3/#impl-trait","title":"Impl & Trait","text":"\u200b\u5728\u200bRust\u200b\u4e2d\u200b\uff0cimpl
\u200b\u5173\u952e\u5b57\u200b\u7528\u4e8e\u200b\u4e3a\u200b\u7ed3\u6784\u200b\u4f53\u200b\u5b9e\u73b0\u200b\u65b9\u6cd5\u200b\uff0ctrait
\u200b\u5173\u952e\u5b57\u200b\u7528\u4e8e\u200b\u58f0\u660e\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u4e0e\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7ec4\u5408\u200b\u540e\u200b\u76f8\u5f53\u4e8e\u200bC++\u200b\u4e2d\u200b\u7684\u200b\u7c7b\u200b\u3002impl
\u200b\u53ef\u4ee5\u200b\u8131\u79bb\u200btrait
\u200b\u5355\u72ec\u200b\u4f7f\u7528\u200b\u3002
- \u200b\u5f53\u200b\u6ca1\u6709\u200b
trait
\u200b\u65f6\u200b\uff0cimpl
\u200b\u7684\u200b\u8bed\u6cd5\u200b\u4e3a\u200bimpl <struct name> { <methods>}
\uff0c\u200b\u5176\u4e2d\u200b<struct name>
\u200b\u53ef\u4ee5\u200b\u662f\u200b\u7ed3\u6784\u200b\u4f53\u540d\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u6cdb\u578b\u200b\u53c2\u6570\u200b\u3002 - \u200b\u5f53\u6709\u200b
trait
\u200b\u65f6\u200b\uff0cimpl
\u200b\u7684\u200b\u8bed\u6cd5\u200b\u4e3a\u200bimpl <trait name> for <struct name> { <methods>}
\uff0c\u200b\u5176\u4e2d\u200b<trait name>
\u200b\u662f\u200b\u5bf9\u5e94\u200b\u7684\u200btrait
\u200b\u540d\u200b\uff0c<struct name>
\u200b\u662f\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200b\u8be5\u200btrait
\u200b\u7684\u200b\u7ed3\u6784\u200b\u4f53\u540d\u200b\u3002 - \u200b\u7279\u6b8a\u200b\u5bf9\u8c61\u200b
self
\u200b\u8868\u793a\u200b\u5f53\u524d\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u5b9e\u4f8b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4ee5\u200b\u5f15\u7528\u200b\uff08&self
\u3001&mut self
\uff09\u200b\u6216\u200b\u81ea\u8eab\u200b\u5f62\u6001\u200b\uff08self
\uff09\u200b\u51fa\u73b0\u200b\u3002\u200b\u5982\u679c\u200b\u4e0d\u200b\u4f7f\u7528\u200bself
\uff0c\u200b\u5219\u200b\u4e3a\u200b\u9759\u6001\u65b9\u6cd5\u200b/\u200b\u7c7b\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bPython\u200b\u4e2d\u200b\u7684\u200b@staticmethod
\u200b\u6216\u200b@classmethod
\u3002\u200b\u6b64\u65f6\u200b\u9700\u8981\u200b\u7528\u200b<struct>::<method>
\u200b\u8c03\u7528\u200b\uff0c\u200b\u800c\u200b\u4e0d\u662f\u200b<object>.<method>
\u3002 - \u200b\u7279\u6b8a\u200b\u7c7b\u578b\u200b
Self
\u200b\u8868\u793a\u200b\u5f53\u524d\u200b\u7ed3\u6784\u200b\u4f53\u200b\u7684\u200b\u7c7b\u578b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u7684\u200b\u58f0\u660e\u200b\u3002
\u200b\u5b64\u513f\u200b\u89c4\u5219\u200b
\u200b\u5982\u679c\u200b\u9700\u8981\u200b\u5bf9\u200b\u7c7b\u578b\u200bA
\u200b\u5b9e\u73b0\u200b\u7279\u5f81\u200bT
\uff0c\u200b\u5219\u200bT
\u200b\u6216\u200bA
\u200b\u5176\u4e2d\u200b\u4e4b\u4e00\u200b\u5fc5\u987b\u200b\u5728\u200b\u5f53\u524d\u200b\u4f5c\u7528\u57df\u200b\u5185\u200b\u5b9a\u4e49\u200b\u3002
struct Player {\n first_name: String,\n last_name: String,\n}\n\ntrait GetFullName {\n fn full_name(&self) -> String;\n}\n\nimpl GetFullName for Player {\n fn full_name(&self) -> String {\n format!(\"{} {}\", self.first_name, self.last_name)\n }\n}\n\nfn main() {\n let player_1 = Player {\n first_name: \"Rafael\".to_string(),\n last_name: \"Nadal\".to_string(),\n };\n\n println!(\"Player 01: {}\", player_1.full_name());\n}\n
trait
\u200b\u53ef\u4ee5\u200b\u548c\u200b\u6cdb\u578b\u200b\u7ed3\u5408\u200b\u4f7f\u7528\u200b\uff0cimpl
\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u5bf9\u200b\u5185\u7f6e\u200b\u7684\u200b\u7c7b\u578b\u200b\u4f7f\u7528\u200b\uff0c\u200b\u5982\u200b\uff1a
Download source code
trait From<T> {\n fn from_u8(x: T) -> Self;\n}\nimpl From<u8> for u8 {\n fn from_u8(x: u8) -> Self {\n x\n }\n}\nimpl From<u8> for u16 {\n fn from_u8(x: u8) -> Self {\n x as u16\n }\n}\nimpl From<u8> for i8 {\n fn from_u8(x: u8) -> Self {\n x as i8\n }\n}\nimpl From<u8> for i16 {\n fn from_u8(x: u8) -> Self {\n x as i16\n }\n}\n\nfn main() {\n println!(\"{}\", i16::from_u8(1 as u8));\n}\n
trait
\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u7ee7\u627f\u200b\u548c\u200b\u591a\u200b\u7ee7\u627f\u200b\u3002
trait Person {\n fn full_name(&self) -> String;\n}\n\ntrait Employee : Person { // Employee inherits from Person\n fn job_title(&self) -> String;\n}\n\ntrait ExpatEmployee : Employee + Expat { // ExpatEmployee inherits from Employee and Expat\n fn additional_tax(&self) -> f64;\n}\n
\u200b\u5728\u200btrait
\u200b\u7684\u200b\u58f0\u660e\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u7528\u200b\u51fd\u6570\u200b\u4f53\u200b\uff0c\u200b\u6b64\u65f6\u200b\u8868\u793a\u200b\u65b9\u6cd5\u200b\u7684\u200b\u9ed8\u8ba4\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u5728\u200bimpl
\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u91cd\u8f7d\u200b\u8fd9\u4e2a\u200b\u65b9\u6cd5\u200b\u3002
struct Blog {};\nstruct Tweet {};\n\npub trait Summary {\n fn summarize(&self) -> String {\n String::from(\"(Read more...)\")\n }\n}\n\nimpl Summary for Blog {} // Use default implementation\nimpl Summary for Tweet {\n fn summarize(&self) -> String { // Override default implementation\n String::from(\"Tweet\")\n }\n}\n
"},{"location":"coding/rust/3/#_5","title":"\u7279\u5f81\u200b\u7ea6\u675f","text":"\u200b\u7279\u5f81\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u7ea6\u675f\u200b\u51fd\u6570\u200b\u6216\u6cdb\u200b\u578b\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u5982\u200b
- \u200b\u51fd\u6570\u53c2\u6570\u200b\u7684\u200b\u9650\u5b9a\u200b\uff0c\u200b\u5982\u200b
fn foo(bar: impl Copy)
\u200b\u8868\u793a\u200bbar
\u200b\u53c2\u6570\u200b\u5fc5\u987b\u200b\u5b9e\u73b0\u200b\u540d\u4e3a\u200bCopy
\u200b\u7684\u200btrait
\u3002 - \u200b\u6cdb\u578b\u200b\u53c2\u6570\u200b\u7684\u200b\u9650\u5b9a\u200b\uff0c\u200b\u5982\u200b
<T: Copy>
\u200b\u8868\u793a\u200bT
\u200b\u5fc5\u987b\u200b\u5b9e\u73b0\u200b\u540d\u4e3a\u200bCopy
\u200b\u7684\u200btrait
\uff0c\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u66f4\u200b\u590d\u6742\u200b\u7684\u200b\u7c7b\u578b\u200b\u63a7\u5236\u200b\u3002
\u200b\u4f7f\u7528\u200b+
\u200b\u8fde\u63a5\u200b\u591a\u4e2a\u200b\u7279\u5f81\u200b\uff0c\u200b\u8868\u793a\u200b\u53c2\u6570\u200b\u5fc5\u987b\u200b\u540c\u65f6\u200b\u5b9e\u73b0\u200b\u591a\u4e2a\u200b\u7279\u5f81\u200b\u3002
fn foo<T: Copy + Display>(bar: T) {\n println!(\"{}\", bar); // `bar` must implement `Display` and `Copy`\n}\n
\u200b\u4f7f\u7528\u200bwhere
\u200b\u5173\u952e\u5b57\u200b\u53ef\u4ee5\u200b\u4f7f\u200b\u7279\u5f81\u200b\u7ea6\u675f\u200b\u66f4\u52a0\u200b\u6e05\u6670\u200b\u3002
fn foo<T, U>(bar: T, baz: U) -> U\n where T: Copy + Display,\n U: Add<Output = U>\n{\n println!(\"{}\", bar); // `bar` must implement `Display` and `Copy`\n baz + 1 // `baz` must implement `Add`\n}\n
\u200b\u7279\u5f81\u200b\u7ea6\u675f\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u200b\u5728\u200bimpl
\u200b\u8bed\u53e5\u200b\u4e2d\u200b\u7528\u4e8e\u200b\u9009\u62e9\u6027\u200b\u5730\u200b\u5b9e\u73b0\u200b\u7279\u5f81\u200b
trait Increment {\n fn increment(&self) -> Self;\n}\n\nimpl<T> Increment for T\n where T: Add<Output = T> + Copy\n{\n fn increment(&self) -> Self {\n *self + 1\n }\n}\n
\u200b\u8868\u793a\u200bIncrement
\u200b\u7279\u5f81\u200b\u53ea\u80fd\u200b\u7528\u4e8e\u200b\u540c\u65f6\u200b\u5b9e\u73b0\u200b\u4e86\u200bAdd<Output = T>
\u200b\u548c\u200bCopy
\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002
\u200b\u7279\u5f81\u200b\u7ea6\u675f\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u9650\u5b9a\u200b\uff0c\u200b\u53ea\u80fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u7279\u5f81\u200b\uff0c\u200b\u8868\u793a\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u5b9e\u73b0\u200b\u4e86\u200b\u7279\u5b9a\u200b\u7279\u5f81\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u4f46\u200b\u51fd\u6570\u200b\u4f53\u200b\u5185\u90e8\u200b\u4e0d\u80fd\u200b\u8fd4\u56de\u200b\u591a\u4e2a\u200b\u4e0d\u540c\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002
fn foo(x: bool) -> impl Display {\n if x {\n 1\n } else {\n \"hello\" // Error, since 1 and \"hello\" have different types\n }\n}\n
"},{"location":"coding/rust/4/","title":"Lifetimes","text":"\u200b\u5728\u200bRust\u200b\u4e2d\u200b\uff0c\u200b\u5bf9\u8c61\u200b\u751f\u547d\u5468\u671f\u200b\u548c\u200b\u6240\u6709\u6743\u200b\u662f\u200b\u7d27\u5bc6\u200b\u76f8\u5173\u200b\u7684\u200b\u3002\u200b\u6240\u6709\u6743\u200b\u89c4\u5219\u200b\u662f\u200bRust\u200b\u7684\u200b\u6838\u5fc3\u200b\u7279\u6027\u200b\uff0c\u200b\u4e5f\u200b\u662f\u200bRust\u200b\u4e0e\u200b\u5176\u4ed6\u200b\u8bed\u8a00\u200b\u6700\u5927\u200b\u7684\u200b\u4e0d\u540c\u4e4b\u5904\u200b\u3002
"},{"location":"coding/rust/4/#ownership","title":"\u6240\u6709\u6743\u200b\uff08Ownership\uff09","text":"\u200b\u6bcf\u200b\u4e00\u5757\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u90fd\u200b\u548c\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u540d\u200b\u7ed1\u5b9a\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u53d8\u91cf\u540d\u200b\u5c31\u662f\u200b\u8fd9\u5757\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u7684\u200b\u6240\u6709\u8005\u200b\u3002\u200b\u5f53\u200b\u6240\u6709\u8005\u200b\u8d85\u51fa\u200b\u4f5c\u7528\u57df\u200b\u65f6\u200b\uff0c\u200b\u8fd9\u5757\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u5c31\u200b\u4f1a\u200b\u88ab\u200b\u91ca\u653e\u200b\u3002\u200b\u5728\u200b\u672c\u8282\u200b\u4e2d\u200b\uff0c\u201c\u200b\u53d8\u91cf\u200b\u201d\u200b\u548c\u200b\u201c\u200b\u7ed1\u5b9a\u200b\u201d\u200b\u90fd\u200b\u662f\u200b\u6307\u200b\u901a\u8fc7\u200blet
\u200b\u5173\u952e\u5b57\u200b\u58f0\u660e\u200b\u7684\u200b\u53d8\u91cf\u200b\u3002
\u200b\u5f53\u200b\u4f7f\u7528\u200b=
\u200b\u5c06\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\u8d4b\u503c\u200b\u7ed9\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\uff0c\u200b\u6216\u662f\u200b\u5c06\u200b\u53d8\u91cf\u200b\u4f5c\u4e3a\u200b\u51fd\u6570\u200b\u53c2\u6570\u4f20\u9012\u200b\u65f6\u200b\uff0c\u200b\u6240\u6709\u6743\u200b\u4f1a\u200b\u53d1\u751f\u200b\u8f6c\u79fb\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b\u4e24\u79cd\u200b\u53ef\u80fd\u200b\uff1a
- \u200b\u503c\u200b\u62f7\u8d1d\u200b\uff1a\u200b\u539f\u6765\u200b\u7684\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u4f1a\u200b\u88ab\u200b\u590d\u5236\u200b\u4e00\u4efd\u200b\u7ed9\u200b\u65b0\u200b\u7684\u200b\u53d8\u91cf\u200b\uff0c\u200b\u4e24\u4e2a\u200b\u53d8\u91cf\u540d\u200b\u7ed1\u5b9a\u200b\u7684\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u4e0d\u540c\u200b\u3002
- \u200b\u503c\u200b\u79fb\u52a8\u200b\uff1a\u200b\u539f\u6765\u200b\u7684\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u4f1a\u200b\u88ab\u200b\u91cd\u65b0\u200b\u7ed1\u5b9a\u200b\u7ed9\u200b\u65b0\u200b\u7684\u200b\u53d8\u91cf\u200b\uff0c\u200b\u6b64\u65f6\u200b\u4e0d\u80fd\u200b\u518d\u200b\u901a\u8fc7\u200b\u539f\u6765\u200b\u7684\u200b\u53d8\u91cf\u540d\u200b\u8bbf\u95ee\u200b\u5185\u5b58\u200b\u6570\u636e\u200b\u3002
\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cRust\u200b\u4f1a\u200b\u91c7\u53d6\u200b\u503c\u200b\u79fb\u52a8\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u8d4b\u503c\u200b\uff0c\u200b\u9664\u975e\u200b\u5bf9\u8c61\u200b\u7684\u200b\u7c7b\u578b\u200b\u5b9e\u73b0\u200b\u4e86\u200bCopy
trait\u3002\u200b\u5927\u591a\u6570\u200b\u57fa\u672c\u200b\u7c7b\u578b\u200b\u90fd\u200b\u5b9e\u73b0\u200b\u4e86\u200bCopy
trait\u3002
fn main() {\n let a = vec![1, 2, 3]; // vec is not a primitive type, and it does not implement Copy trait\n let b = a;\n println!(\"{:?} {:?}\", a, b); // Error; use of moved value: `a`\n}\n
"},{"location":"coding/rust/4/#borrowing","title":"\u5f15\u7528\u200b\uff08Borrowing\uff09","text":"\u200b\u5728\u200bRust\u200b\u4e2d\u200b\uff0c\u200b\u53d8\u91cf\u200b\u7684\u200b\u5f15\u7528\u200b\u6709\u200b\u4e24\u79cd\u200b\uff0c\u200b\u5373\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\uff08&T
\uff09\u200b\u548c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\uff08&mut T
\uff09\u3002\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\u548c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u90fd\u200b\u662f\u200b\u6307\u5411\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u7684\u200b\u6307\u9488\u200b\uff0c\u200b\u4f46\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u4fee\u6539\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u800c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u5141\u8bb8\u200b\u4fee\u6539\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u7684\u200b\u503c\u200b\u3002\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u53ea\u80fd\u200b\u6307\u5411\u200b\u53ef\u53d8\u200b\u53d8\u91cf\u200b\u3002\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u89e3\u200b\u5f15\u7528\u200b\u8fd0\u7b97\u7b26\u200b*
\u200b\u6765\u200b\u8bbf\u95ee\u200b\u5f15\u7528\u200b\u6307\u5411\u200b\u7684\u200b\u503c\u200b\u3002
fn main() {\n let const_var = 5;\n let mutable_ref = &mut const_var;\n // error[E0596]: cannot borrow `const_var` as mutable, as it is not declared as mutable\n}\n
\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u662f\u4ece\u200b\u5f15\u7528\u200b\u58f0\u660e\u200b\u5f00\u59cb\u200b\u5230\u200b\u5f15\u7528\u200b\u6700\u540e\u200b\u4e00\u6b21\u200b\u4f7f\u7528\u200b\u7ed3\u675f\u200b\u3002\u200b\u5173\u4e8e\u200b\u5f15\u7528\u200b\u7684\u200b\u4f7f\u7528\u200b\u6709\u200b\u5982\u4e0b\u200b\u9650\u5236\u200b\uff1a
-
\u200b\u5728\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u5185\u200b\uff0c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u548c\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\u4e0d\u80fd\u200b\u540c\u65f6\u200b\u5b58\u5728\u200b\u3002
\u200b\u9519\u8bef\u200b\u6b63\u786e\u200b fn main() {\n let mut owner = 5;\n let shared_borrow = &owner; // share_borrow starts here\n let mutable_borrow = &mut owner; // mutable_borrow starts here\n println!(\"{}\", mutable_borrow); // Error\n // mutable_borrow ends here\n println!(\"{}\", shared_borrow);\n // share_borrow ends here\n}\n
fn main() {\n let mut owner = 5;\n let shared_borrow = &owner; // shared_borrow starts here\n println!(\"{}\", shared_borrow);\n // shared_borrow ends here\n // mutable_borrow starts here\n let mutable_borrow = &mut owner; // mutable_borrow starts here\n println!(\"{}\", mutable_borrow);\n // mutable_borrow ends here\n}\n
-
\u200b\u5728\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u5185\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u5bf9\u200b\u540c\u4e00\u200b\u53d8\u91cf\u200b\u58f0\u660e\u200b\u65b0\u200b\u7684\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u3002
\u200b\u9519\u8bef\u200b\u6b63\u786e\u200b fn main() {\n let mut owner = 5;\n let mutable_borrow = &mut owner;\n let another_mutable_borrow = &mut owner;\n println!(\"{} {}\", mutable_borrow, another_mutable_borrow);\n // error[E0499]: cannot borrow `owner` as mutable more than once at a time\n}\n
fn main() {\n let mut owner = 5;\n let mutable_borrow = &mut owner;\n println!(\"{}\", mutable_borrow);\n let another_mutable_borrow = &mut owner;\n println!(\"{}\", another_mutable_borrow);\n}\n
-
\u200b\u5728\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u5185\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u8bbf\u95ee\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u6216\u200b\u5bf9\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u8fdb\u884c\u200b\u8d4b\u503c\u200b\u3002
\u200b\u9519\u8bef\u200b\u6b63\u786e\u200b fn main() {\n let mut owner = 5;\n let mutable_borrow = &mut owner;\n println!(\"{}\", owner + *mutable_borrow);\n // error[E0503]: cannot use `owner` because it was mutably borrowed\n}\n
fn main() {\n let mut owner = 5;\n let mutable_borrow = &mut owner;\n println!(\"{}\", *mutable_borrow + owner); // 10\n}\n
-
\u200b\u53ef\u4ee5\u200b\u7528\u200b\u6570\u636e\u5e93\u200b\u4e2d\u200b\u201c\u200b\u5171\u4eab\u200b\u9501\u200b\u201d\u200b\u548c\u200b\u201c\u200b\u6392\u200b\u4ed6\u200b\u9501\u200b\u201d\u200b\u7684\u200b\u6982\u5ff5\u200b\u6765\u200b\u7406\u89e3\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\u548c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u3002\u200b\u53ea\u8bfb\u200b\u5f15\u7528\u200b\u76f8\u5f53\u4e8e\u200b\u5bf9\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u52a0\u200b\u5171\u4eab\u200b\u9501\u200b\uff0c\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\u76f8\u5f53\u4e8e\u200b\u5bf9\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u52a0\u6392\u200b\u4ed6\u9501\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u540c\u200b\u4e00\u5757\u200b\u6570\u636e\u200b\uff0c\u200b\u5171\u4eab\u200b\u9501\u200b\u53ef\u4ee5\u200b\u540c\u65f6\u200b\u5b58\u5728\u200b\uff0c\u200b\u4f46\u6392\u200b\u4ed6\u200b\u9501\u200b\u53ea\u80fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u3002
-
\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u4e0d\u80fd\u200b\u8d85\u8fc7\u200b\u539f\u59cb\u200b\u53d8\u91cf\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u3002
E0597: ... does not live long enoughE0515: cannot return value referencing local variable ... struct Foo<'a> {\n x: Option<&'a u32>,\n}\n\nfn main() {\n let mut x = Foo { x: None };\n {\n let y = 0;\n x.x = Some(&y);\n } // Leaving the scope of y, y is dropped\n println!(\"{:?}\", x.x) // error[E0597]: `y` does not live long enough\n}\n
fn one(x: &i32) -> &i32 {\n let ret = *x + 1;\n &ret // error[E0515]: cannot return value referencing local variable `ret`\n} // Leaving the scope of ret, ret is dropped\n\nfn main() {\n println!(\"{}\", *one(&5));\n}\n
"},{"location":"coding/rust/4/#_1","title":"\u751f\u547d\u5468\u671f","text":"\u200b\u5f15\u7528\u200b\u76f8\u5f53\u4e8e\u200b\u6307\u5411\u200b\u4e00\u6bb5\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u7684\u200b\u6307\u9488\u200b\uff0c\u200b\u5728\u200b\u6700\u540e\u200b\u4e00\u6b21\u200b\u8bbf\u95ee\u200b\u5f15\u7528\u200b\u540e\u200b\uff0c\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u5c31\u200b\u7ed3\u675f\u200b\u4e86\u200b\uff0c\u200b\u4f46\u200b\u5728\u200b\u4e00\u4e9b\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u9700\u8981\u200b\u7ee7\u7eed\u200b\u4fdd\u6301\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\uff0c\u200b\u6bd4\u5982\u200b\u5728\u200b\u51fd\u6570\u200b\u4e2d\u200b\u8fd4\u56de\u200b\u5f15\u7528\u200b\u3002\u200b\u5728\u200b\u8fd9\u79cd\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u6765\u200b\u6307\u5b9a\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u3002
fn main() {\n let reference_to_nothing = dangle();\n // error[E0106]: missing lifetime specifier\n}\n\nfn dangle() -> &String {\n let s = String::from(\"hello\");\n\n &s // The lifetime of s is over, so this reference is dangling\n}\n
\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u6cdb\u578b\u200b\u53c2\u6570\u200b\u3001\u200b\u51fd\u6570\u53c2\u6570\u200b\u3001\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u800c\u200b\u4e0d\u80fd\u200b\u7528\u4e8e\u200b\u5f15\u7528\u200b\u58f0\u660e\u200b\u3002\u200b\u6709\u200b\u76f8\u540c\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u7684\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u76f8\u540c\u200b\u3002'static
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u7279\u6b8a\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\uff0c\u200b\u8868\u793a\u200b\u5f15\u7528\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u662f\u200b\u6574\u4e2a\u200b\u7a0b\u5e8f\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\uff0c\u200b\u5373\u200b\u5f15\u7528\u200b\u6307\u5411\u200b\u7684\u200b\u5185\u5b58\u7a7a\u95f4\u200b\u5728\u200b\u7a0b\u5e8f\u200b\u7ed3\u675f\u200b\u65f6\u624d\u200b\u4f1a\u200b\u88ab\u200b\u91ca\u653e\u200b\u3002\u200b\u6240\u6709\u200b\u6307\u5411\u200b\u5b57\u7b26\u4e32\u200b\u5b57\u9762\u200b\u91cf\u200b\u7684\u200b\u5f15\u7528\u200b\u90fd\u200b\u662f\u200b'static
\u200b\u7c7b\u578b\u200b\u3002
\u200b\u51fd\u6570\u200b\u590d\u6742\u200b\u5bf9\u8c61\u200bImpl & Trait\u200b\u6cdb\u578b\u200b fn function<'a>() -> &'a str {}\nfn function<'a>(x: &'a str) {}\nfn function<'a>(x: &'a str) -> &'a str {}\nfn function<'a>(x: &'a str, y: &'a str) -> &'a str {}\nfn function<'a, 'b>(x: &'a str, y: &'b str) -> &'a str {}\n
enum Enum<'a> {\n Variant1(&'a str),\n Variant2(&'a str) // exist as long as parent object exists\n}\nstruct Struct<'a> {\n field: &'a str // exist as long as parent object exists\n}\n
struct Struct<'a> {\n field: &'a str\n}\ntrait New<'a> {\n fn new() -> Self;\n}\nimpl<'a> New<'a> for Struct<'a> {\n fn new() -> Self {\n Struct { field: \"hello\" }\n }\n}\n
fn function<T>(x: T) where for<'a> T: Fn(&'a str) -> &'a str {}\nenum Enum<T> where for<'a> T: Fn(&'a str) -> &'a str { V(T) }\nstruct Struct<T> where for<'a> T: Fn(&'a str) -> &'a str { field: T }\nimpl<T> Struct<T> where for<'a> T: Fn(&'a str) -> &'a str {\n fn function(&self) -> &F { &self.field }\n}\n
\u200b\u5176\u4e2d\u200b\uff0cwhere for
\u200b\u6709\u200b\u53e6\u200b\u4e00\u79cd\u200b\u5199\u6cd5\u200b
fn function<T>(x: T) where T: for<'a> Fn(&'a str) -> &'a str {}\n
for
\u200b\u5bf9\u200bT
\u200b\u8fdb\u884c\u200b\u4e86\u200b\u9650\u5236\u200b\uff0c\u200b\u8868\u793a\u200bT
\u200b\u5fc5\u987b\u200b\u662f\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u4e14\u200b\u8fd9\u4e2a\u200b\u51fd\u6570\u200b\u7684\u200b\u53c2\u6570\u200b\u548c\u200b\u751f\u547d\u5468\u671f\u200b\u5fc5\u987b\u200b\u548c\u200b\u6a21\u677f\u200b\u5339\u914d\u200b\u3002
struct Closure<F> {\n data: (u8, u16),\n func: F,\n}\n\nimpl<F> Closure<F>\n where for<'a> F: Fn(&'a (u8, u16)) -> &'a u8,\n{\n fn call(&self) -> &u8 {\n (self.func)(&self.data)\n }\n}\n\nfn do_it(data: &(u8, u16)) -> &u8 { &data.0 }\n\nfn main() {\n let clo = Closure { data: (0, 1), func: do_it };\n println!(\"{}\", clo.call());\n}\n
\u200b\u4e0d\u540c\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u7684\u200b\u5f15\u7528\u200b\u4e0d\u80fd\u200b\u76f8\u4e92\u200b\u8d4b\u503c\u200b\uff0c\u200b\u5728\u200b\u4f5c\u4e3a\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\u65f6\u200b\uff0cRust\u200b\u4e5f\u200b\u4f1a\u200b\u68c0\u67e5\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u662f\u5426\u200b\u5339\u914d\u200b\u3002\u200b\u53ef\u4ee5\u200b\u7528\u200b'a: 'b
\u200b\u6765\u200b\u7ea6\u675f\u200b'a
\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u4e0d\u77ed\u4e8e\u200b'b
\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u3002
\u200b\u9519\u8bef\u200b\u6b63\u786e\u200b\u6b63\u786e\u200b fn two_args<'a, 'b>(a: &'a mut i32, b: &'b i32) -> &'b mut i32 {\n *a += b;\n a // error: lifetime may not live long enough\n}\nfn main() {\n let mut a = 3;\n let b: &mut i32 = two_args(&mut a, &4);\n println!(\"{}\", b);\n}\n
fn two_args<'a, 'b>(a: &'a mut i32, b: &'b i32) -> &'a mut i32 {\n *a += b;\n a\n}\nfn main() {\n let mut a = 3;\n let b: &mut i32 = two_args(&mut a, &4);\n println!(\"{}\", b);\n}\n
fn two_args<'a: 'b, 'b>(a: &'a mut i32, b: &'b i32) -> &'b mut i32 {\n *a += b;\n a\n}\nfn main() {\n let mut a = 3;\n let b: &mut i32 = two_args(&mut a, &4);\n println!(\"{}\", b);\n}\n
\u200b\u901a\u5e38\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u51fd\u6570\u200b\u58f0\u660e\u200b\u4e2d\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\uff0cRust\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u63a8\u65ad\u200b\u6bcf\u4e2a\u200b\u53c2\u6570\u200b\u548c\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b
-
\u200b\u6bcf\u4e2a\u200b\u8f93\u51fa\u200b\u53c2\u6570\u200b\u90fd\u200b\u4f1a\u200b\u5206\u914d\u200b\u4e00\u4e2a\u200b\u72ec\u7acb\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u3002
\u200b\u7701\u7565\u200b\u6807\u8bb0\u200b\u663e\u793a\u200b\u6807\u8bb0\u200b fn four_args(a: &i32, b: &i32, c: &i32, d: &i32) -> i32 {\n a + b + c + d\n}\n
fn four_args<'a, 'b, 'c, 'd>(a: &'a i32, b: &'b i32, c: &'c i32, d: &'d i32) -> i32 {\n a + b + c + d\n}\n
-
\u200b\u5982\u679c\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u8f93\u5165\u200b\u53c2\u6570\u200b\uff0c\u200b\u90a3\u4e48\u200b\u8fd9\u4e2a\u200b\u53c2\u6570\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u5c31\u662f\u200b\uff08\u200b\u6240\u6709\u200b\uff09\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u3002
\u200b\u7701\u7565\u200b\u6807\u8bb0\u200b\u663e\u793a\u200b\u6807\u8bb0\u200b fn one_arg(a: &i32) -> &i32 {\n a\n}\n
fn one_arg<'a>(a: &'a i32) -> &'a i32 {\n a\n}\n
-
\u200b\u5f53\u200b\u51fd\u6570\u200b\u7684\u200b\u67d0\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200b&self
\u200b\u6216\u200b&mut self
\u200b\u65f6\u200b\uff0c\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u548c\u200b&self
\u200b\u7684\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u76f8\u540c\u200b\u3002
\u200b\u7701\u7565\u200b\u6807\u8bb0\u200b\u663e\u793a\u200b\u6807\u8bb0\u200b struct Player {\n first_name: String,\n last_name: String,\n}\n\nimpl Player {\n fn full_name(&self) -> String {\n format!(\"{} {}\", self.first_name, self.last_name)\n }\n}\n
struct Player {\n first_name: String,\n last_name: String,\n}\n\nimpl Player {\n fn full_name<'a>(&'a self) -> String {\n format!(\"{} {}\", self.first_name, self.last_name)\n }\n}\n
-
\u200b\u5982\u679c\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u4e0a\u8ff0\u200b\u6761\u4ef6\u200b\uff0c\u200b\u5219\u200b\u9700\u8981\u200b\u663e\u5f0f\u200b\u6307\u5b9a\u200b\u5f15\u7528\u200b\u6807\u8bb0\u200b\u3002
\u200b\u9519\u8bef\u200b\u6b63\u786e\u200b fn two_args(a: &mut i32, b: &i32) -> &mut i32 {\n *a += b;\n a // error[E0106]: missing lifetime specifier\n}\nfn main() {\n let mut a = 3;\n let b: &mut i32 = two_args(&mut a, &4);\n println!(\"{}\", b);\n}\n
fn two_args<'a, 'b>(a: &'a mut i32, b: &'b i32) -> &'a mut i32 {\n *a += b;\n a\n}\nfn main() {\n let mut a = 3;\n let b: &mut i32 = two_args(&mut a, &4);\n println!(\"{}\", b);\n}\n
"},{"location":"coding/rust/5/","title":"Error Handling","text":"\u200b\u672c\u200b\u8282\u200b\u4ecb\u7ecd\u200bRust\u200b\u7684\u200b\u5f02\u5e38\u200b\u5904\u7406\u200b\u673a\u5236\u200b\u3002
"},{"location":"coding/rust/5/#_1","title":"\u7f16\u8bd1\u5668\u200b\u9519\u8bef","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u90e8\u5206\u200b\u9519\u8bef\u200b\u53ef\u4ee5\u200b\u5728\u200b\u7f16\u8bd1\u200b\u65f6\u200b\u88ab\u200b\u68c0\u6d4b\u200b\u51fa\u6765\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u9519\u8bef\u200b\u88ab\u200b\u79f0\u4e3a\u200b\u7f16\u8bd1\u200b\u65f6\u200b\u9519\u8bef\u200b\uff08compile-time error\uff09\u3002\u200b\u4f7f\u7528\u200brustc --explain
\u200b\u53ef\u4ee5\u200b\u67e5\u770b\u200b\u7f16\u8bd1\u200b\u65f6\u200b\u9519\u8bef\u200b\u7684\u200b\u8be6\u7ec6\u4fe1\u606f\u200b\u3002
rustc --explain E0382\n# A variable was used after its contents were moved elsewhere.\n#\n# Erroneous code example:\n#\n# struct MyStruct { s: u32 }\n#\n# fn main() {\n# let mut x = MyStruct { s: 5u32 };\n# let y = x;\n# x.s = 6;\n# println!(\"{}\", x.s);\n# }\n# ...\n
"},{"location":"coding/rust/5/#panic","title":"\u5f02\u5e38\u200b\uff08Panic\uff09","text":"Rust\u200b\u4e2d\u200b\u7684\u200b\u5f02\u5e38\u200b\u88ab\u200b\u79f0\u4e3a\u200bpanic\u3002\u200b\u5f53\u200b\u7a0b\u5e8f\u200b\u53d1\u751f\u200bpanic\u200b\u65f6\u200b\uff0cRust\u200b\u4f1a\u200b\u6253\u5370\u200b\u51fa\u200b\u5f02\u5e38\u200b\u4fe1\u606f\u200b\u5e76\u200b\u9000\u51fa\u200b\u7a0b\u5e8f\u200b\u3002\u200b\u6709\u200b\u591a\u4e2a\u200b\u5b8f\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\u3002
// \u200b\u4ee5\u4e0b\u200b\u7684\u200b\u5b8f\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u63a5\u53d7\u200b\u7c7b\u4f3c\u200bprintln!\u200b\u7684\u200b\u683c\u5f0f\u5316\u200b\u5b57\u7b26\u4e32\u200b\npanic!(\"This is a panic!\");\nunimplemented!(); // \u200b\u7528\u4e8e\u200b\u6807\u8bb0\u200b\u672a\u200b\u5b9e\u73b0\u200b\u7684\u200b\u4ee3\u7801\u200b\nunreachable!(); // \u200b\u7528\u4e8e\u200b\u6807\u8bb0\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u5230\u8fbe\u200b\u7684\u200b\u5206\u652f\u200b\n\n// \u200b\u4ee5\u4e0b\u200b\u5b8f\u200b\u7528\u4e8e\u200b\u6d4b\u8bd5\u200b\nassert!(false); // \u200b\u7528\u4e8e\u200b\u6d4b\u8bd5\u200b\u8868\u8fbe\u5f0f\u200b\u662f\u5426\u200b\u4e3a\u200btrue\nassert_eq!(1, 2); // \u200b\u7528\u4e8e\u200b\u6d4b\u8bd5\u200b\u4e24\u4e2a\u200b\u8868\u8fbe\u5f0f\u200b\u7684\u200b\u503c\u200b\u662f\u5426\u200b\u76f8\u7b49\u200b\nassert_ne!(1, 1); // \u200b\u7528\u4e8e\u200b\u6d4b\u8bd5\u200b\u4e24\u4e2a\u200b\u8868\u8fbe\u5f0f\u200b\u7684\u200b\u503c\u200b\u662f\u5426\u200b\u4e0d\u200b\u76f8\u7b49\u200b\n\n// \u200b\u5728\u200bDebug\u200b\u6a21\u5f0f\u200b\u6216\u200b\u4f7f\u7528\u200b-C debug-assertions\u200b\u53c2\u6570\u200b\u65f6\u200b\uff0c\u200b\u4ee5\u4e0b\u200b\u5b8f\u624d\u200b\u4f1a\u200b\u89e6\u53d1\u200b\ndebug_assert!(false);\ndebug_assert_eq!(1, 2);\ndebug_assert_ne!(1, 1);\n
"},{"location":"coding/rust/5/#_2","title":"\u5f02\u5e38\u200b\u5904\u7406","text":"Rust\u200b\u4e2d\u200b\u5185\u7f6e\u200b\u4e86\u200b\u4e24\u4e2a\u200b\u7c7b\u578b\u200bOption<T>
\u200b\u548c\u200bResult<T, E>
\u200b\u7528\u4e8e\u200b\u5f02\u5e38\u200b\u5904\u7406\u200b\uff0c\u200b\u5176\u200b\u5b9a\u4e49\u200b\u4e3a\u200b
enum Option<T> {\n None,\n Some(T),\n}\nenum Result<T, E> {\n Ok(T),\n Err(E),\n}\n
\u200b\u4ee5\u4e0b\u200b\uff0c\u200b\u5747\u200b\u4ee5\u200bT
\u200b\u4ee3\u8868\u200bOption::Some
\u200b\u6216\u200bResult::Ok
\u200b\u7684\u200b\u7c7b\u578b\u200b\uff0cE
\u200b\u4ee3\u8868\u200bResult::Err
\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002
-
Option
\u200b\u7c7b\u578b\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u53ef\u80fd\u200b\u4e0d\u200b\u5b58\u5728\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u5e38\u7528\u200b\u4e8e\u200b\u51fd\u6570\u53c2\u6570\u200b\u3001\u200b\u7ed3\u6784\u200b\u4f53\u5b57\u200b\u6bb5\u200b\u6216\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u4f7f\u7528\u200bmatch
\u200b\u8bed\u53e5\u200b\u53ef\u4ee5\u200b\u5339\u914d\u200bOption
\u200b\u7c7b\u578b\u200b\u53d6\u503c\u200b\u7684\u200b\u4e0d\u540c\u200b\u60c5\u51b5\u200b\u3002
fn main() {\n let x: Option<i32> = Some(5);\n match x {\n Some(i) => println!(\"{}\", i),\n None => println!(\"None\"),\n }\n}\n
- \u200b\u4f7f\u7528\u200b
is_some
\u200b\u548c\u200bis_none
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5feb\u901f\u200b\u5224\u65ad\u200bOption
\u200b\u7c7b\u578b\u200b\u662f\u5426\u200b\u4e3a\u200bSome
\u200b\u6216\u200bNone
\u3002 - \u200b\u4f7f\u7528\u200b
unwrap
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5c06\u200bOption
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bT
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5982\u679c\u200bOption
\u200b\u7c7b\u578b\u200b\u4e3a\u200bNone
\uff0c\u200b\u5219\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\u3002
-
Result
\u200b\u7c7b\u578b\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u53ef\u80fd\u200b\u51fa\u9519\u200b\u7684\u200b\u503c\u200b\uff0c\u200b\u5e38\u7528\u200b\u4e8e\u200b\u51fd\u6570\u200b\u8fd4\u56de\u503c\u200b\u3002Ok
\u200b\u8868\u793a\u200b\u51fd\u6570\u200b\u6267\u884c\u200b\u6210\u529f\u200b\uff0cErr
\u200b\u8868\u793a\u200b\u51fd\u6570\u200b\u6267\u884c\u200b\u5931\u8d25\u200b\u3002
fn main() {\n let x: Result<i32, &str> = Ok(5);\n match x {\n Ok(i) => println!(\"{}\", i),\n Err(e) => println!(\"{}\", e),\n }\n}\n
- \u200b\u4f7f\u7528\u200b
is_ok
\u200b\u548c\u200bis_err
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5feb\u901f\u200b\u5224\u65ad\u200bResult
\u200b\u7c7b\u578b\u200b\u662f\u5426\u200b\u4e3a\u200bOk
\u200b\u6216\u200bErr
\u3002 -
\u200b\u4f7f\u7528\u200bok
\u200b\u548c\u200berr
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5c06\u200bResult<T, E>
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bOption<T>
\u200b\u7c7b\u578b\u200b\u3002\u200b\u5982\u679c\u200b\u8c03\u7528\u200b\u7684\u200b\u65b9\u6cd5\u200b\u548c\u200bResult
\u200b\u7c7b\u578b\u200b\u7684\u200b\u53d6\u503c\u200b\u76f8\u540c\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bSome(T)
\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bNone
\u3002
fn main() {\n let x: Result<i32, &str> = Ok(5);\n let y: Option<i32> = x.ok();\n println!(\"{:?}\", y); // Some(5)\n let x: Result<i32, &str> = Err(\"error\");\n let y: Option<i32> = x.ok();\n println!(\"{:?}\", y); // None\n}\n
-
\u200b\u4f7f\u7528\u200bunwrap
\u200b\u65b9\u6cd5\u200b\u6216\u200bexpect
\u200b\u65b9\u6cd5\u200b\u53ef\u4ee5\u200b\u5c06\u200bResult
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bT
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5982\u679c\u200bResult
\u200b\u7c7b\u578b\u200b\u4e3a\u200bErr
\uff0c\u200b\u5219\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\uff0c\u200b\u8f93\u51fa\u200b\u7684\u200b\u5f02\u5e38\u200b\u4fe1\u606f\u200b\u5bf9\u5e94\u200b\u4e8e\u200bErr
\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u6216\u200bexpect
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u53c2\u6570\u200b\u3002
fn main() {\n let x: Result<i32, &str> = Ok(5);\n let y: i32 = x.unwrap();\n println!(\"{}\", y); // 5\n let x: Result<i32, &str> = Err(\"error\");\n let y: i32 = x.unwrap(); // thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: \"error\"', src/main.rs:2:26\n println!(\"{}\", y);\n}\n
unwrap
\u200b\u65b9\u6cd5\u200b\u6709\u200b\u5982\u4e0b\u200b\u53d8\u79cd\u200b\uff1a
expect
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u5b57\u7b26\u4e32\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\uff0c\u200b\u7528\u4e8e\u200b\u6307\u5b9a\u200b\u8df3\u51fa\u200b\u5f02\u5e38\u200b\u65f6\u200b\u7684\u200b\u63d0\u793a\u4fe1\u606f\u200b\u3002 - \uff08\u200b\u4ec5\u200b
Result
\u200b\u7c7b\u578b\u200b\uff09unwrap_err
\u200b\u65b9\u6cd5\u200b\u548c\u200bexpect_err
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u4e0e\u200bunwrap
\u200b\u76f8\u53cd\u200b\uff0c\u200b\u5f53\u200bResult
\u200b\u7c7b\u578b\u200b\u4e3a\u200bOk
\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bErr
\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u3002 unwrap_or
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200bT
\u200b\u7c7b\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5728\u200bunwrap
\u200b\u65b9\u6cd5\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u8fd4\u56de\u200b\u8be5\u200b\u53c2\u6570\u200b\u3002 -
unwrap_or_default
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5728\u200bunwrap
\u200b\u65b9\u6cd5\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u8fd4\u56de\u200b\u8be5\u200b\u9ed8\u8ba4\u503c\u200b\u3002\u200b\u8be5\u200b\u65b9\u6cd5\u200b\u8981\u6c42\u200bT
\u200b\u7c7b\u578b\u200b\u5b9e\u73b0\u200b\u4e86\u200bDefault
\u200b\u7279\u6027\u200b\u3002
struct MyStruct {\n s: i32\n}\n\nfn main() {\n let a: Option<MyStruct> = None;\n println!(\"{}\", a.unwrap_or_default().s);\n // error[E0277]: the trait bound `MyStruct: Default` is not satisfied\n}\n
-
unwrap_or_else
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\uff0c\u200b\u5728\u200bunwrap
\u200b\u65b9\u6cd5\u200b\u4f1a\u200b\u89e6\u53d1\u200b\u5f02\u5e38\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u8fd4\u56de\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002\u200b\u5176\u4e2d\u200b\uff0cResult
\u200b\u7c7b\u578b\u200b\u7684\u200b\u95ed\u5305\u200b\u53c2\u6570\u200b\u4e3a\u200bE
\u200b\u7c7b\u578b\u200b\uff0cOption
\u200b\u7c7b\u578b\u200b\u7684\u200b\u95ed\u5305\u200b\u53c2\u6570\u200b\u4e3a\u200b()
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u9700\u8981\u200b\u548c\u200bSome
\u200b\u6216\u200bOk
\u200b\u7684\u200b\u7c7b\u578b\u200b\u76f8\u540c\u200b\u3002
fn increment(x: i32) -> i32 {\n x + 1\n}\n\nfn main() {\n let a: Result<i32, i32> = Err(2);\n println!(\"{}\", a.unwrap_or_else(increment));\n // 3\n}\n
"},{"location":"coding/rust/5/#_3","title":"\u8fd0\u7b97","text":"Rust\u200b\u53ef\u4ee5\u200b\u5728\u200b\u4e0d\u200b\u53d6\u51fa\u200bOption
\u200b\u6216\u200bResult
\u200b\u7c7b\u578b\u200b\u7684\u200b\u503c\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u5bf9\u200b\u5176\u200b\u8fdb\u884c\u200b\u8fd0\u7b97\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u4ee5\u4e0b\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u8bb0\u200bA
\u200b\u4e3a\u200b\u8c03\u7528\u200b\u65b9\u6cd5\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff0cB
\u200b\u4e3a\u200b\u65b9\u6cd5\u200b\u7684\u200b\u53c2\u6570\u200b\uff0c\u200b\u5373\u200bA.method(B)
\u3002
Option
\u200b\u548c\u200bResult
\u200b\u7684\u200b\u771f\u503c\u200b
\u200b\u4e0d\u59a8\u200b\u5c06\u200bOption
\u200b\u548c\u200bResult
\u200b\u7c7b\u578b\u200b\u7684\u200bSome
\u200b\u548c\u200bOk
\u200b\u89c6\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\u503c\u200bT
\u200b\u79f0\u4e3a\u200b\u771f\u503c\u200b\uff0cNone
\u200b\u548c\u200bErr
\u200b\u89c6\u4e3a\u200b\u5047\u200b\uff0cErr
\u200b\u7684\u200b\u503c\u200bE
\u200b\u89c6\u4e3a\u200b\u5047\u503c\u200b\u3002
- \u200b\u903b\u8f91\u8fd0\u7b97\u200b
A.or(B)
\u200b\u4e0e\u200bA.and(B)
\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u548c\u200b\u81ea\u8eab\u200b\u7c7b\u578b\u200b\u76f8\u540c\u200b\u7684\u200b\u53c2\u6570\u200b\u3002 - \u200b\u5bf9\u4e8e\u200b
or()
\uff0c\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bB
\u200b\u503c\u200b\u3002 - \u200b\u5bf9\u4e8e\u200b
and()
\uff0c\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u5047\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u5047\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bB
\u3002
A.or_else()
\u200b\u4e3a\u200bA.or(B)
\u200b\u7684\u200b\u53d8\u79cd\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002 A.and_then()
\u200b\u4e3a\u200bA.and(B)
\u200b\u7684\u200b\u53d8\u79cd\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200b\u4e3a\u200b\u5047\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u5047\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002 - \uff08\u200b\u4ec5\u200b
Option
\u200b\u7c7b\u578b\u200b\uff09A.filter()
\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn (T) -> bool
\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u4e14\u200b\u4ee5\u200b\u5176\u200b\u771f\u503c\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u540e\u200b\u8c03\u7528\u51fd\u6570\u200b\u8fd4\u56de\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bNone
\u3002 A.map()
\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn (T) -> U
\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u540e\u200b\u8c03\u7528\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u5047\u503c\u200b\u3002\u200b\u6ce8\u610f\u200b\u8fd4\u56de\u503c\u200b\u7684\u200b\u7c7b\u578b\u200b\u4e3a\u200bOption<U>
\u200b\u6216\u200bResult<U, E>
\u3002 - \uff08\u200b\u4ec5\u200b
Result
\u200b\u7c7b\u578b\u200b\uff09A.map_err()
\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn (E) -> F
\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u5047\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u5047\u503c\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u540e\u200b\u8c03\u7528\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\u3002 - \uff08\u200b\u4ec5\u200b
Option
\u200b\u7c7b\u578b\u200b\uff09A.map_or()
\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200bU
\u200b\u7c7b\u578b\u200b\u7684\u200b\u9ed8\u8ba4\u503c\u200b\u548c\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn (T) -> U
\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u540e\u200b\u8c03\u7528\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u9ed8\u8ba4\u503c\u200b\u3002 A.map_or_else()
\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn () -> U
\u200b\u548c\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200bfn (T) -> U
\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u540e\u200b\u8c03\u7528\u200b\u7b2c\u4e8c\u4e2a\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u7b2c\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002
- \uff08\u200b\u4ec5\u200b
Option
\u200b\u7c7b\u578b\u200b\uff09A.ok_or()
\u200b\u7528\u4e8e\u200b\u5c06\u200bOption
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bResult
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200bE
\u200b\u7c7b\u578b\u200b\u7684\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u53c2\u6570\u200b\u4f5c\u4e3a\u200bErr
\u200b\u7684\u200b\u503c\u200b\u3002 A.ok_or_else()
\u200b\u4e3a\u200bA.ok_or()
\u200b\u7684\u200b\u53d8\u79cd\u200b\uff0c\u200b\u63a5\u53d7\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\u4f5c\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u5982\u679c\u200bA
\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u5219\u200b\u8fd4\u56de\u200bA
\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u8fd4\u56de\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002
A.as_ref()
\u200b\u548c\u200bA.as_mut()
\uff0c\u200b\u7528\u4e8e\u200b\u5c06\u200bOption<T>
\u200b\u6216\u200bResult<T, E>
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u5176\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5f15\u7528\u200b\u3002\u200b\u5176\u4e2d\u200bA.as_ref()
\u200b\u8fd4\u56de\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5f15\u7528\u200b\uff0c\u200b\u5373\u200bOption<&T>
\u200b\u6216\u200bResult<&T, &E>
\uff1bA.as_mut()
\u200b\u8fd4\u56de\u200b\u53ef\u53d8\u200b\u5f15\u7528\u200b\uff0c\u200b\u5373\u200bOption<&mut T>
\u200b\u6216\u200bResult<&mut T, &mut E>
\u3002
"},{"location":"coding/rust/5/#_4","title":"\u5f02\u5e38\u200b\u4f20\u9012","text":"Rust\u200b\u4e2d\u200b\uff0c\u200b\u6709\u200b\u4e24\u79cd\u200b\u65b9\u5f0f\u200b\u53ef\u4ee5\u200b\u5411\u4e0a\u200b\u8fd4\u56de\u200b\u5f02\u5e38\u200b\u3002
-
?
\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u7528\u4e8e\u200b\u5c06\u200bOption
\u200b\u6216\u200bResult
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bT
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5982\u679c\u200bResult
\u200b\u7c7b\u578b\u200b\u4e3a\u200bErr
\u200b\u6216\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200bErr
\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u3002
fn fn_with_error<'a>() -> Result<i32, &'a str> {\n Err(\"Deterministic error\")\n}\nfn use_fn<'a>() -> Result<i32, &'a str> {\n let x = fn_with_error()?; // Directly return Err(\"Deterministic error\")\n Ok(x) // unreachable\n}\nfn main() {\n let x: &str = use_fn().unwrap_err();\n println!(\"{}\", x); // Deterministic error\n}\n
-
try!
\u200b\u5b8f\u200b\uff0c\u200b\u4e0e\u200b?
\u200b\u7684\u200b\u6548\u679c\u200b\u7b49\u540c\u200b\uff0c\u200b\u4f7f\u7528\u200b\u65b9\u5f0f\u200b\u4e3a\u200btry!(expression)
\u3002\u200b\u76ee\u524d\u200b\u5df2\u7ecf\u200b\u88ab\u200b\u5f03\u7528\u200b\uff0c\u200b\u4f7f\u7528\u200b?
\u200b\u4ee3\u66ff\u200b\u3002
fn fn_with_error<'a>() -> Result<i32, &'a str> {\n Err(\"Deterministic error\")\n}\nfn use_fn<'a>() -> Result<i32, &'a str> {\n let x = try!(fn_with_error()); // error: use of deprecated `try` macro\n Ok(x) // unreachable\n}\nfn main() {\n let x: &str = use_fn().unwrap_err();\n println!(\"{}\", x); // Deterministic error\n}\n
"},{"location":"coding/rust/5/#_5","title":"\u4e3b\u200b\u51fd\u6570","text":"Rust\u200b\u7684\u200bmain
\u200b\u51fd\u6570\u200b\u53ea\u80fd\u200b\u53d6\u200b()
\u200b\u6216\u200bResult<(), E>
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5176\u4e2d\u200bE
\u200b\u4e3a\u200bstd::error::Error
\u200b\u7684\u200b\u5b9e\u73b0\u200b\u7c7b\u578b\u200b\u3002\u200b\u5982\u679c\u200bmain
\u200b\u51fd\u6570\u200b\u8fd4\u56de\u200bResult
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u5c06\u200bErr
\u200b\u4e2d\u200b\u7684\u200b\u503c\u200b\u6253\u5370\u200b\u5230\u200bstderr
\u200b\u5e76\u200b\u9000\u51fa\u200b\u7a0b\u5e8f\u200b\u3002
use std::fs::File;\n\nfn main() -> std::io::Result<()> {\n let _ = File::open(\"not-existing-file.txt\")?; // Result::Err\n\n Ok(()) // Default return value\n // Must with this line, otherwise return () which is incompatible\n}\n
\u200b\u5982\u679c\u200bmain
\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u7c7b\u578b\u200b\u4e0d\u662f\u200b()
\u200b\u6216\u200bResult
\uff0c\u200b\u5219\u200b\u65e0\u6cd5\u200b\u901a\u8fc7\u200b\u7f16\u8bd1\u200b\u3002
fn main() -> i32 {\n 0\n}\n// error[E0277]: `main` has invalid return type `i32`\n
"},{"location":"coding/rust/5/#_6","title":"\u81ea\u5b9a\u4e49\u200b\u5f02\u5e38","text":"\u200b\u5728\u200bRust\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u81ea\u5b9a\u4e49\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u3002\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200bstd::error::Error
\u200b\u7279\u6027\u200b\uff0c\u200b\u8be5\u200b\u7279\u6027\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4ee5\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
fn source(&self) -> Option<&(dyn Error + 'static)>
\uff0c\u200b\u7528\u4e8e\u200b\u8fd4\u56de\u200b\u5f15\u8d77\u200b\u5f02\u5e38\u200b\u7684\u200b\u539f\u56e0\u200b\uff08\u200b\u53ef\u200b\u9009\u200b\uff09\u3002 fn Debug::fmt(&self, f: &mut Formatter<'_>) -> Result
\uff0c\u200b\u7528\u4e8e\u200b\u683c\u5f0f\u5316\u200b\u5f02\u5e38\u200b\u4fe1\u606f\u200b\uff08\u200b\u7528\u4e8e\u200b\u8c03\u8bd5\u200b\uff09\u3002 fn Display::fmt(&self, f: &mut Formatter<'_>) -> Result
\uff0c\u200b\u7528\u4e8e\u200b\u683c\u5f0f\u5316\u200b\u5f02\u5e38\u200b\u4fe1\u606f\u200b\uff08\u200b\u7528\u4e8e\u200b\u8f93\u51fa\u200b\uff09\u3002
struct MyError {\n code: i32,\n message: String\n}\n\nimpl std::error::Error for MyError {\n fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {\n None\n }\n}\n\nimpl std::fmt::Debug for MyError {\n fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n write!(\n f, \"MyError {{ code: {}, message: {} }} at file {} line {}\",\n self.code, self.message, file!(), line!()\n // file!() and line!() are macros to get the current file and line\n )\n }\n}\n\nimpl std::fmt::Display for MyError {\n fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n write!(f, \"MyError {{ code: {}, message: {} }}\", self.code, self.message)\n }\n}\n\n// Use the error\n\nfn raise_error() -> Result<(), MyError> {\n Err(MyError { code: 1, message: \"Error message\".to_string() })\n}\n\nfn main() -> Result<(), MyError> {\n let _ = raise_error()?;\n // MyError { code: 1, message: Error message } at file src/main.rs line 16\n Ok(())\n}\n
"},{"location":"coding/rust/5/#_7","title":"\u5f02\u5e38\u200b\u8f6c\u6362","text":"\u200b\u7531\u4e8e\u200bRust\u200b\u4e2d\u200b\u7684\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u662f\u200b\u9759\u6001\u200b\u7684\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5728\u200b\u5f02\u5e38\u200b\u4f20\u9012\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\uff0c\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u9047\u5230\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u4e0d\u200b\u5339\u914d\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\u200b\u6b64\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bFrom
\u200b\u7279\u6027\u200b\u5c06\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200b\u53e6\u200b\u4e00\u79cd\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u4ee5\u200bstd::io::Error
\u200b\u4e3a\u4f8b\u200b\u3002
impl std::convert::From<std::io::Error> for MyError {\n fn from(error: std::io::Error) -> Self {\n MyError { code: 2, message: error.to_string() }\n }\n}\n
\u200b\u6b64\u540e\u200b\uff0c\u200b\u65e0\u9700\u200b\u663e\u5f0f\u200b\u8c03\u7528\u200bFrom
\u200b\u7279\u6027\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5373\u53ef\u200b\u5c06\u200bstd::io::Error
\u200b\u7c7b\u578b\u8f6c\u6362\u200b\u4e3a\u200bMyError
\u200b\u7c7b\u578b\u200b\u3002
"},{"location":"coding/rust/6/","title":"Supplements for Basics","text":""},{"location":"coding/rust/6/#_1","title":"\u5ffd\u7565\u200b\u53d8\u91cf","text":"\u200b\u5728\u200b\u58f0\u660e\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\u5374\u200b\u6ca1\u6709\u200b\u4f7f\u7528\u200b\u65f6\u200b\uff0cRust\u200b\u4f1a\u200b\u7ed9\u51fa\u200b\u8b66\u544a\u200b\u3002\u200b\u5982\u679c\u200b\u4e0d\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u8fd9\u4e2a\u200b\u53d8\u91cf\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5728\u200b\u53d8\u91cf\u540d\u200b\u524d\u200b\u52a0\u4e0a\u200b\u4e0b\u5212\u7ebf\u200b\u524d\u7f00\u200b\u4f5c\u4e3a\u200b\u6807\u8bb0\u200b\u3002\u200b\u540d\u4e3a\u200b_
\u200b\u7684\u200b\u53d8\u91cf\u200b\u662f\u200b\u4e00\u4e2a\u200b\u7279\u6b8a\u200b\u7684\u200b\u53d8\u91cf\u200b\uff0c\u200b\u5b83\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u58f0\u660e\u200b\u591a\u6b21\u200b\uff0c\u200b\u4f46\u662f\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u4f7f\u7528\u200b\u3002
Download source code
fn main() {\n let _: i32 = 5;\n println!(\"{}\", _);\n // error: in expressions, `_` can only be used on the left-hand side of an assignment\n}\n
"},{"location":"coding/rust/6/#_2","title":"\u6a21\u5f0f\u5339\u914d","text":""},{"location":"coding/rust-gui/","title":"Rust GUI library","text":"The following pages are notes from Building a simple text editor with iced, a cross-platform GUI library for Rust using iced lib.
- Hello World
- Multi-line Input
- Theme and Cursor Indicator
- Async File Loading
- File Picker
- File Path Indicator
- New and Save
- Button prettify
- Syntax Highlighting
- Misc
"},{"location":"coding/rust-gui/1-hello-world/","title":"Hello World App","text":"Keywords: iced::Sandbox
, iced::Settings
, iced::widget::text
"},{"location":"coding/rust-gui/1-hello-world/#_1","title":"\u521b\u5efa\u200b\u9879\u76ee","text":"\u200b\u9996\u5148\u200b\uff0c\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b Rust \u200b\u9879\u76ee\u200b\uff0c\u200b\u5e76\u200b\u6dfb\u52a0\u200b\u5bf9\u200biced
\u200b\u5e93\u200b\u7684\u200b\u4f9d\u8d56\u200b\u3002
cargo new text-editor\ncd text-editor\ncargo add iced\n
\u200b\u6b64\u65f6\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\u5982\u4e0b\u200b\uff1a
fn main() {\n println!(\"Hello, world!\");\n}\n
"},{"location":"coding/rust-gui/1-hello-world/#gui","title":"\u521b\u5efa\u200bGUI\u200b\u5e94\u7528","text":"iced
\u200b\u7684\u200bGUI\u200b\u7c7b\u6709\u200bApplication
\u200b\u548c\u200bSandbox
\u200b\u4e24\u79cd\u200b\u3002\u200b\u5176\u4e2d\u200bSandbox
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u7b80\u5316\u7248\u200b\u7684\u200bApplication
\uff0c\u200b\u63d0\u4f9b\u200b\u4e86\u200b\u4e00\u4e9b\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u884c\u4e3a\u200b\u3002Sandbox
\u200b\u7279\u6027\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u65b9\u6cd5\u200b\uff1a
pub trait Sandbox {\n type Message: std::fmt::Debug + Send;\n fn new() -> Self;\n fn title(&self) -> String;\n fn update(&mut self, message: Self::Message);\n fn view(&self) -> Element<'_, Self::Message>;\n fn theme(&self) -> Theme {\n Theme::default()\n }\n fn style(&self) -> theme::Application {\n theme::Application::default()\n }\n fn scale_factor(&self) -> f64 {\n 1.0\n }\n fn run(settings: Settings<()>) -> Result<(), Error>\n where\n Self: 'static + Sized,\n {\n <Self as Application>::run(settings)\n }\n}\n
\u200b\u4e3a\u4e86\u200b\u4f7f\u7528\u200bSandbox
\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200b\u5176\u4e2d\u200b\u672a\u200b\u5b9e\u73b0\u200b\u7684\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5373\u200bMessage
\u3001new
\u3001title
\u3001update
\u200b\u548c\u200bview
\u3002
-
Message
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b\uff0c\u200b\u7528\u4e8e\u200b\u5b9a\u4e49\u200b\u5e94\u7528\u200b\u4f1a\u200b\u4ea7\u751f\u200b\u7684\u200b\u6d88\u606f\u200b\u7c7b\u578b\u200b\uff0c\u200b\u9700\u8981\u200b\u5b9e\u73b0\u200bstd::fmt::Debug
\u200b\u548c\u200bSend
\u200b\u7279\u6027\u200b\u3002
#[derive(Debug)] // Inherit the Debug trait\nenum Message {} // No message required\n
-
new
\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200bSandbox
\u200b\u5b9e\u4f8b\u200b\uff0c\u200b\u521d\u59cb\u5316\u200b\u5b9e\u4f8b\u200b\u72b6\u6001\u200b\uff0c\u200b\u4e00\u822c\u200b\u60c5\u51b5\u200b\u4e0b\u200b\u76f4\u63a5\u200b\u8fd4\u56de\u200bSelf
\u200b\u5373\u53ef\u200b\u3002
fn new() -> Self {\n Self\n}\n
-
title
\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u8fd4\u56de\u200bGUI\u200b\u7a97\u53e3\u200b\u7684\u200b\u6807\u9898\u200b\u3002
fn title(&self) -> String {\n String::from(\"A text editor\")\n}\n
-
update
\u200b\u65b9\u6cd5\u200b\u548c\u200bview
\u200b\u65b9\u6cd5\u200b\u5171\u540c\u200b\u7ec4\u6210\u200b\u5e94\u7528\u200b\u7684\u200b\u6d88\u606f\u200b\u5faa\u73af\u200b\uff1aupdate
\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u5904\u7406\u200b\u6d88\u606f\u200b\uff0c\u200b\u66f4\u65b0\u200b\u5e94\u7528\u200b\u72b6\u6001\u200b\uff0cview
\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u5728\u200b\u72b6\u6001\u200b\u66f4\u65b0\u200b\u540e\u200b\u66f4\u65b0\u200b\u5e94\u7528\u200b\u754c\u9762\u200b\u3002\u200b\u6b64\u5904\u200b\u6211\u4eec\u200b\u5728\u200bview
\u200b\u65b9\u6cd5\u200b\u4e2d\u200b\u653e\u7f6e\u200b\u4e00\u4e2a\u200b\u6587\u672c\u200b\u63a7\u4ef6\u200b\u3002
fn update(&mut self, message: Self::Message) {\n match message {\n // No message to handle\n }\n}\n\nfn view(&self) -> Element<'_, Self::Message> {\n text(\"Hello, world!\").into()\n}\n
\u200b\u901a\u8fc7\u200bSandbox::run
\u200b\u65b9\u6cd5\u200b\u542f\u52a8\u200b\u5e94\u7528\u200b\uff0c\u200b\u8be5\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200bResult<(), Error>
\u200b\u7c7b\u578b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u4f5c\u4e3a\u200bmain
\u200b\u51fd\u6570\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use iced::{Element, Sandbox, Settings};\nuse iced::widget::text;\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor;\n\n#[derive(Debug)]\nenum Message {}\n\nimpl Sandbox for Editor {\n type Message = Message; // Define the type of messages\n fn new() -> Self {\n Self\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) {\n // Handle messages here\n match message {}\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n text(\"Hello, world!\").into()\n }\n}\n
"},{"location":"coding/rust-gui/10-misc/","title":"Miscellaneous","text":"\u200b\u672c\u200b\u8282\u200b\u6dfb\u52a0\u200b\u4e00\u4e9b\u200b\u989d\u5916\u200b\u529f\u80fd\u200b\u3002
\u200b\u9996\u5148\u200b\uff0c\u200b\u5f53\u200b\u6587\u4ef6\u200b\u6ca1\u6709\u200b\u88ab\u200b\u4fee\u6539\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8bbe\u7f6e\u200b\u7981\u7528\u200b\u4fdd\u5b58\u200b\u6309\u94ae\u200b\u3002\u200b\u8fd9\u6837\u200b\u53ef\u4ee5\u200b\u907f\u514d\u200b\u7528\u6237\u200b\u8bef\u64cd\u4f5c\u200b\u3002\u200b\u5728\u200bon_press_maybe
\u200b\u4e2d\u200b\u4f20\u5165\u200bNone
\u200b\u5373\u53ef\u200b\u3002\u200b\u540c\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6839\u636e\u200b\u6587\u4ef6\u200b\u7684\u200b\u4fee\u6539\u200b\u60c5\u51b5\u200b\u8bbe\u7f6e\u200b\u6309\u94ae\u200b\u7684\u200b\u6837\u5f0f\u200b\u3002
fn toolbar_button<'a>(description: &str, callback: Option<Message>) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n let lower = description.to_lowercase();\n let icon = text(match lower.as_str() {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n let is_disabled = callback.is_none();\n tooltip(\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press_maybe(callback).style(\n if is_disabled {\n theme::Button::Secondary\n } else {\n theme::Button::Primary\n }\n ),\n description, tooltip::Position::FollowCursor\n ).style(theme::Container::Box).into()\n}\n
\u200b\u540c\u65f6\u200b\u4fee\u6539\u200btoolbar_button
\u200b\u7684\u200b\u8c03\u7528\u200b\u3002
// ... In `view` function\nlet controls = row![\n toolbar_button(\"New\", Some(Message::NewButtonPressed)),\n toolbar_button(\"Open\", Some(Message::OpenButtonPressed)),\n toolbar_button(\"Save\", if self.modified { Some(Message::SaveButtonPressed) } else { None }),\n horizontal_space(Length::Fill),\n pick_list(highlighter::Theme::ALL, Some(self.theme), Message::ThemeChanged)\n].spacing(10);\n
\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u6dfb\u52a0\u200b\u4e0d\u540c\u200b\u7684\u200b\u5feb\u6377\u952e\u200b\uff0c\u200b\u4ee5\u200b\u65b9\u4fbf\u200b\u7528\u6237\u200b\u64cd\u4f5c\u200b\u3002
// In `impl Application for Editor`\nfn subscription(&self) -> Subscription<Message> {\n keyboard::on_key_press(|keycode, modifier| {\n match (keycode, modifier) {\n (keyboard::KeyCode::S, keyboard::Modifiers::COMMAND) => {\n Some(Message::SaveButtonPressed)\n },\n (keyboard::KeyCode::O, keyboard::Modifiers::COMMAND) => {\n Some(Message::OpenButtonPressed)\n },\n (keyboard::KeyCode::N, keyboard::Modifiers::COMMAND) => {\n Some(Message::NewButtonPressed)\n },\n _ => None\n }\n })\n}\n
\u200b\u8fd9\u6837\u200b\uff0c\u200b\u7528\u6237\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bCommand + S
\u200b\u6765\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\uff0cCommand + O
\u200b\u6765\u200b\u6253\u5f00\u200b\u6587\u4ef6\u200b\uff0cCommand + N
\u200b\u6765\u200b\u65b0\u5efa\u200b\u6587\u4ef6\u200b\u3002
\u200b\u6587\u4ef6\u200b\u7684\u200b\u6807\u9898\u680f\u200b\u901a\u5e38\u200b\u663e\u793a\u6587\u4ef6\u200b\u8def\u5f84\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u548c\u200b\u5de6\u4e0b\u89d2\u200b\u7684\u200b\u72b6\u6001\u680f\u200b\u4fdd\u6301\u200b\u540c\u6b65\u200b\u3002
// ... In `impl Application for Editor`\nfn title(&self) -> String {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n format!(\"{}{}\", path_text, suffix)\n}\n\n// ... In `view` function\nlet path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n} else {\n text(self.title())\n};\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\n\nuse iced::{executor, keyboard, theme, Application, Command, Element, Font, Length, Settings, Subscription, Theme};\nuse iced::highlighter::{self, Highlighter};\nuse iced::widget::{button, column, container, horizontal_space, pick_list, row, text, text_editor, tooltip};\n\nfn main() -> iced::Result {\n Editor::run(Settings {\n fonts: vec![include_bytes!(\"../fonts/editor-icon.ttf\").as_slice().into()],\n ..Default::default()\n })\n}\n\nstruct Editor {\n path: Option<PathBuf>,\n content: text_editor::Content,\n modified: bool,\n error: Option<Error>,\n theme: highlighter::Theme\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n FileSaved(Result<PathBuf, Error>),\n ThemeChanged(highlighter::Theme),\n NewButtonPressed,\n OpenButtonPressed,\n SaveButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None,\n modified: false,\n path: None,\n theme: highlighter::Theme::SolarizedDark\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n format!(\"{}{}\", path_text, suffix)\n }\n\n fn subscription(&self) -> Subscription<Message> {\n keyboard::on_key_press(|keycode, modifier| {\n match (keycode, modifier) {\n (keyboard::KeyCode::S, keyboard::Modifiers::COMMAND) => {\n Some(Message::SaveButtonPressed)\n },\n (keyboard::KeyCode::O, keyboard::Modifiers::COMMAND) => {\n Some(Message::OpenButtonPressed)\n },\n (keyboard::KeyCode::N, keyboard::Modifiers::COMMAND) => {\n Some(Message::NewButtonPressed)\n },\n _ => None\n }\n })\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n match &action {\n text_editor::Action::Edit(_) => self.modified = true,\n _ => {}\n }\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.modified = false;\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileSaved(Ok(path)) => {\n self.path = Some(path);\n self.modified = false;\n Command::none()\n },\n Message::FileOpened(Err(error)) | Message::FileSaved(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::ThemeChanged(theme) => {\n self.theme = theme;\n Command::none()\n },\n Message::NewButtonPressed => {\n self.content = text_editor::Content::new();\n self.error = None;\n self.path = None;\n self.modified = false;\n Command::none()\n },\n Message::OpenButtonPressed => {\n self.modified = false;\n Command::perform(pick_file(), Message::FileOpened)\n },\n Message::SaveButtonPressed => {\n let content = self.content.text();\n match self.modified {\n false => Command::none(),\n true => Command::perform(\n save_file(self.path.clone(), content),\n Message::FileSaved\n )\n }\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content)\n .on_edit(Message::EditorEdit)\n .highlight::<Highlighter>(\n highlighter::Settings {\n theme: self.theme,\n extension: self.path\n .as_ref()\n .and_then(|path| path.extension()?.to_str())\n .unwrap_or(\"rs\")\n .to_string()\n }, |highlighter, _theme| {\n highlighter.to_format()\n }\n )\n .font(Font::MONOSPACE);\n let controls = row![\n toolbar_button(\"New\", Some(Message::NewButtonPressed)),\n toolbar_button(\"Open\", Some(Message::OpenButtonPressed)),\n toolbar_button(\"Save\", if self.modified { Some(Message::SaveButtonPressed) } else { None }),\n horizontal_space(Length::Fill),\n pick_list(highlighter::Theme::ALL, Some(self.theme), Message::ThemeChanged)\n ].spacing(10);\n\n // Query cursor position\n let path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n } else {\n text(self.title())\n };\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![\n path_indicator,\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n if self.theme.is_dark() {\n Theme::Dark\n } else {\n Theme::Light\n }\n }\n}\n\nasync fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n\nasync fn save_file(path: Option<PathBuf>, content: String) -> Result<PathBuf, Error> {\n let path = if let Some(path) = path {\n path\n } else {\n rfd::AsyncFileDialog::new()\n .set_title(\"Save the file to...\")\n .save_file()\n .await\n .ok_or(Error::DialogClosed)?\n .path()\n .to_path_buf()\n };\n tokio::fs::write(&path, content)\n .await\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n .map(|_| path)\n}\n\nfn toolbar_button<'a>(description: &str, callback: Option<Message>) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n let lower = description.to_lowercase();\n let icon = text(match lower.as_str() {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n let is_disabled = callback.is_none();\n tooltip(\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press_maybe(callback).style(\n if is_disabled {\n theme::Button::Secondary\n } else {\n theme::Button::Primary\n }\n ),\n description, tooltip::Position::FollowCursor\n ).style(theme::Container::Box).into()\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"coding/rust-gui/2-multi-line-input/","title":"Add Multi-line Input","text":"Keywords: iced::widget::text_editor
, iced::widget::container
.
\u200b\u672c\u200b\u8282\u200b\u6211\u4eec\u200b\u5c06\u200btext
\u200b\u63a7\u4ef6\u200b\u66ff\u6362\u200b\u4e3a\u200btext_editor
\u200b\u63a7\u4ef6\u200b\uff0c\u200b\u4ee5\u200b\u5b9e\u73b0\u200b\u591a\u884c\u200b\u6587\u672c\u200b\u7684\u200b\u8f93\u5165\u200b\u3002
iced\u200b\u5e93\u200b\u7248\u672c\u200b
text_editor
\u200b\u63a7\u4ef6\u200b\u5c1a\u672a\u200b\u5728\u200b\u6b63\u5f0f\u200b\u7248\u672c\u200b\u4e2d\u200b\u53d1\u5e03\u200b\uff0c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bgit
\u200b\u4ed3\u5e93\u200b\u4e2d\u200b\u7684\u200b\u4ee3\u7801\u200b\u3002
[dependencies]\niced = { git = \"https://github.com/iced-rs/iced.git\", rev = \"refs/tags/text-editor\" }\n
\u200b\u9996\u5148\u200b\uff0c\u200b\u5c06\u200b\u5f15\u5165\u200b\u7684\u200biced::widget::text
\u200b\u66ff\u6362\u200b\u4e3a\u200biced::widget::text_editor
\u3002text_editor
\u200b\u662f\u200b\u6709\u200b\u72b6\u6001\u200b\u7684\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200bnew
\u200b\u4e2d\u200b\u521d\u59cb\u5316\u200b\u7a7a\u95f4\u200b\u72b6\u6001\u200b\uff0c\u200b\u5e76\u4e14\u200b\u5728\u200bview
\u200b\u4e2d\u200b\u6839\u636e\u200b\u72b6\u6001\u200b\u66f4\u65b0\u200b\u63a7\u4ef6\u200b\u5185\u5bb9\u200b\u3002
struct Editor {\n content: text_editor::Content\n}\n\n// ...\n\nimpl Sandbox for Editor {\n type Message = Message;\n\n fn new() -> Self {\n Editor {\n content: text_editor::Content::new() // Initialize the content\n }\n }\n\n // ...\n\n fn view(&self) -> Element<'_, Message> {\n text_editor(&self.content).into() // Link the content state\n }\n}\n
\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cinto
\u200b\u65b9\u6cd5\u200b\u4f1a\u200b\u4f7f\u200b\u63a7\u4ef6\u200b\u5145\u6ee1\u200b\u6574\u4e2a\u200b\u7a97\u53e3\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bcontainer
\u200b\u5305\u56f4\u200btext_editor
\u200b\u63a7\u4ef6\u200b\u8f85\u52a9\u200b\u5e03\u5c40\u200b\u3002
use iced::widget::container;\n\n// ...\n\nimpl Sandbox for Editor {\n // ...\n fn view(&self) -> Element<'_, Message> {\n let editor = text_editor(&self.content);\n container(editor).padding(10).into() // Add padding and wrap the editor\n }\n}\n
\u200b\u6b64\u65f6\u200b\uff0c\u200b\u591a\u884c\u200b\u6587\u672c\u200b\u8f93\u5165\u6846\u200b\u7684\u200b\u5e03\u5c40\u200b\u5df2\u7ecf\u200b\u5b8c\u6210\u200b\u3002\u200b\u4f46\u200b\u7531\u4e8e\u200b\u8f93\u5165\u6846\u200b\u6ca1\u6709\u200b\u7ed1\u5b9a\u200b\u4e8b\u4ef6\u5904\u7406\u200b\uff0c\u200b\u56e0\u6b64\u200b\u76ee\u524d\u200b\u65e0\u6cd5\u200b\u8f93\u5165\u200b\u6587\u672c\u200b\u3002text_editor
\u200b\u63a7\u4ef6\u200b\u652f\u6301\u200b\u7684\u200b\u4e8b\u4ef6\u200b\u6709\u200b
pub enum Action {\n Move(Motion),\n Select(Motion),\n SelectWord,\n SelectLine,\n Edit(Edit),\n Click(Point),\n Drag(Point),\n Scroll { lines: i32 },\n}\n
\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u5c06\u200bEdit
\u200b\u4e8b\u4ef6\u200b\u5728\u200bupdate
\u200b\u548c\u200bview
\u200b\u4e2d\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b\uff0c\u200b\u540c\u65f6\u200b\u66f4\u65b0\u200bMessage
\u200b\u679a\u4e3e\u200b\u7c7b\u578b\u200b\u3002
#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action)\n}\n\n// ...\n\nimpl Sandbox for Editor {\n // ...\n fn update(&mut self, message: Message) {\n match message {\n Message::EditorEdit(action) => {\n self.content = self.content.edit(action);\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit); // Bind the edit event\n container(editor).padding(10).into() // Add padding and wrap the editor\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use iced::{Element, Sandbox, Settings};\nuse iced::widget::{text_editor, container};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n content: text_editor::Content\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action)\n}\n\nimpl Sandbox for Editor {\n type Message = Message; // Define the type of messages\n\n fn new() -> Self {\n Self {\n content: text_editor::Content::new()\n }\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n self.content.edit(action);\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n container(editor).padding(10).into()\n }\n}\n
"},{"location":"coding/rust-gui/3-theme-and-cursor-indicator/","title":"Theme and Cursor Indicator","text":"Keywords: iced::widget::column
, iced::widget::row
, iced::widget::horizontal_space
, iced::Theme
, iced::Length
\u200b\u672c\u8282\u200b\u5c06\u200b\u7a97\u53e3\u200b\u8bbe\u7f6e\u200b\u4e3a\u200b\u6697\u8272\u200b\u8c03\u200b\uff0c\u200b\u5e76\u4e14\u200b\u901a\u8fc7\u200btext
\u200b\u63a7\u4ef6\u200b\u663e\u793a\u200b\u5149\u6807\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002
"},{"location":"coding/rust-gui/3-theme-and-cursor-indicator/#_1","title":"\u8bbe\u7f6e\u200b\u7a97\u53e3\u200b\u4e3b\u9898","text":"\u200b\u7a97\u53e3\u200b\u4e3b\u9898\u200b\u901a\u8fc7\u200btheme
\u200b\u51fd\u6570\u200b\u8bbe\u7f6e\u200b\uff0c\u200b\u5b9a\u4e49\u200b\u4e3b\u9898\u200b\u98ce\u683c\u200b\u7684\u200b\u7c7b\u200b\u4e3a\u200biced::Theme
\uff0cLight
\u200b\u548c\u200bDark
\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u4eae\u8272\u200b\u548c\u200b\u6697\u8272\u200b\u8c03\u200b\u3002
use iced::Theme\n\n// ...\n\nimpl Sandbox for Editor {\n // ...\n\n fn theme(&self) -> iced::Theme {\n iced::Theme::Dark // Set the window theme to dark\n }\n}\n
"},{"location":"coding/rust-gui/3-theme-and-cursor-indicator/#_2","title":"\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u5185\u5bb9","text":"\u200b\u5728\u200b\u7a0b\u5e8f\u200b\u542f\u52a8\u200b\u65f6\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u8bbe\u7f6e\u200b\u4e00\u4e2a\u200b\u9ed8\u8ba4\u200b\u7684\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff0c\u200b\u6b64\u5904\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200binclude_str!
\u200b\u5b8f\u5728\u200b\u7f16\u8bd1\u200b\u65f6\u200b\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\u5e76\u200b\u7528\u4e8e\u200b\u521d\u59cb\u5316\u200b\u6587\u672c\u6846\u200b\u7684\u200b\u72b6\u6001\u200b\u3002
impl Sandbox for Editor {\n // ...\n\n fn new() -> Self {\n Self {\n content: text_editor::Content::with(include_str!(\"main.rs\"))\n }\n }\n}\n
"},{"location":"coding/rust-gui/3-theme-and-cursor-indicator/#_3","title":"\u663e\u793a\u200b\u5149\u6807\u200b\u4f4d\u7f6e","text":"\u200b\u6587\u672c\u6846\u200b\u7684\u200b\u5149\u6807\u200b\u4f4d\u7f6e\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bself.content
\u200b\u72b6\u6001\u200b\u7684\u200bcursor_position
\u200b\u65b9\u6cd5\u200b\u83b7\u53d6\u200b\uff0c\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u5305\u542b\u200b\u5149\u6807\u200b\u4f4d\u7f6e\u200b\uff08\u200b\u4ece\u200b0\u200b\u5f00\u59cb\u200b\uff09\u200b\u7684\u200b\u5143\u7ec4\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6839\u636e\u200b\u5149\u6807\u200b\u4f4d\u7f6e\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200btext
\u200b\u63a7\u4ef6\u200b\u7528\u4e8e\u200b\u663e\u793a\u200b\u3002
- \u200b\u901a\u8fc7\u200b
column!
\u200b\u5b8f\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u5217\u200b\u5e03\u5c40\u200b\uff0c\u200b\u4e0a\u8fb9\u200b\u5305\u542b\u200b\u8f93\u5165\u200b\u6587\u672c\u6846\u200b\uff0c\u200b\u4e0b\u8fb9\u200b\u5305\u542b\u200b\u5149\u6807\u200b\u4f4d\u7f6e\u200b\u663e\u793a\u200b\u3002 - \u200b\u901a\u8fc7\u200b
row!
\u200b\u5b8f\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u884c\u200b\u5e03\u5c40\u200b\uff0c\u200b\u7ed3\u5408\u200bLength::Fill
\u200b\u628a\u200b\u5149\u6807\u200b\u4f4d\u7f6e\u200b\u538b\u7f29\u200b\u5230\u200b\u53f3\u4fa7\u200b\u5bf9\u9f50\u200b\u3002
use iced::widget::{column, row, horizontal_space, text};\nuse iced::Length;\n\n// ...\n\nimpl Sandbox for Editor {\n // ...\n\n fn view(&self) -> Element<'_, Message> {\n let editor = text_editor(&self.content);\n // Query cursor position\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![horizontal_space(Length::Fill), cursor_indicator];\n\n container(column![editor, status_bar].spacing(10)).padding(10).into()\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use iced::{Theme, Element, Sandbox, Settings, Length};\nuse iced::widget::{column, container, horizontal_space, row, text, text_editor};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n content: text_editor::Content\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action)\n}\n\nimpl Sandbox for Editor {\n type Message = Message; // Define the type of messages\n\n fn new() -> Self {\n Self {\n content: text_editor::Content::with(include_str!(\"main.rs\"))\n }\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n self.content.edit(action);\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n\n // Query cursor position\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![horizontal_space(Length::Fill), cursor_indicator];\n\n container(column![editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n
"},{"location":"coding/rust-gui/4-async-file-loading/","title":"Asynchronous File Loading","text":"Keywords: iced::Application
, iced::Command
, iced::executor
, std::io
, std::path::Path
, std::sync::Arc
, tokio::fs::read_to_string
\u200b\u4e3a\u4e86\u200b\u5b9e\u73b0\u200b\u5f02\u6b65\u200b\u6587\u4ef6\u200b\u52a0\u8f7d\u200b\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u4f7f\u7528\u200btokio
\u200b\u5e93\u200b
[dependencies]\ntokio = { version = \"1.32\", features = [\"fs\"] }\n
Sandbox
\u200b\u4e0d\u80fd\u200b\u76f4\u63a5\u200b\u6267\u884c\u200b\u5f02\u6b65\u200b\u51fd\u6570\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200bApplication
\u3002\u200b\u76f8\u6bd4\u200b\u4e8e\u200bSandbox
\uff0cApplication
\u200b\u9700\u8981\u200b\u989d\u5916\u200b\u5b9e\u73b0\u200b\u5982\u4e0b\u200b\u7c7b\u578b\u200b
impl Application for Editor {\n // ...\n type Theme; // Color theme\n type Executor; // Engine for running async tasks\n type Flags; // Initial state\n}\n
\u200b\u6b64\u5904\u200b\uff0cTheme
\u200b\u548c\u200bFlags
\u200b\u7c7b\u578b\u200b\u4e0d\u200b\u9700\u8981\u200b\u989d\u5916\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5206\u522b\u200b\u7528\u200biced::Theme
\u200b\u548c\u200b()
\u200b\u4ee3\u66ff\u200b\u3002\u200b\u9ed8\u8ba4\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cExecutor
\u200b\u7c7b\u578b\u200b\u9700\u8981\u200b\u7528\u200biced::executor::Default
\u200b\u4ee3\u66ff\u200b\u3002
\u200b\u5728\u200b\u4fee\u6539\u200b\u4e3a\u200bApplication
\u200b\u540e\u200b\uff0cnew
\u200b\u548c\u200bupdate
\u200b\u65b9\u6cd5\u200b\u7684\u200b\u8fd4\u56de\u503c\u200b\u6807\u7b7e\u200b\u4e5f\u200b\u9700\u8981\u200b\u4fee\u6539\u200b\uff0cnew
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200b(Self, Command<Message>)
\uff0cupdate
\u200b\u65b9\u6cd5\u200b\u8fd4\u56de\u200bCommand<Message>
\u3002\u200b\u5176\u4e2d\u200bCommand<Message>
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u5f02\u6b65\u200b\u4efb\u52a1\u200b\uff0c\u200b\u5728\u200b\u6267\u884c\u200b\u5b8c\u6bd5\u200b\u540e\u200b\u4f1a\u200b\u53d1\u9001\u200b\u4e00\u4e2a\u200b\u5bf9\u5e94\u200b\u7c7b\u578b\u200b\u7684\u200bMessage
\u3002
impl Application for Editor {\n // ...\n\n fn new(_flags: ()) -> (Self, Command<Message>) {\n (\n Self {\n // ...\n },\n Command::none(),\n )\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n match message {\n // ...\n }\n\n Command::none()\n }\n}\n
\u200b\u6b64\u540e\u200b\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u7f16\u5199\u200b\u7528\u4e8e\u200b\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u7684\u200b\u51fd\u6570\u200b\u3002
use std::io;\nuse std::path::Path;\nuse std::sync::Arc;\n\nasync fn load_file<T>(path: T) -> Result<Arc<String>, io::ErrorKind>\n where T: AsRef<Path>\n{\n tokio::fs::read_to_string(path)\n .await\n .map(Arc::new)\n .map_err(|e| e.kind())\n}\n
\u200b\u5728\u200bnew
\u200b\u65b9\u6cd5\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bCommand
\u200b\u6765\u200b\u8c03\u7528\u200bload_file
\u200b\u51fd\u6570\u200b\u3002
enum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<Arc<String>, io::ErrorKind>)\n}\n\nimpl Application for Editor {\n // ...\n\n fn new(_flags: ()) -> (Self, Command<Message>) {\n let path = \"path/to/file.txt\";\n let file = load_file(path);\n\n (\n Self {\n // ...\n },\n Command::perform(\n load_file(format!(\"{}/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileLoaded,\n ),\n )\n }\n}\n
\u200b\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u65f6\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u53d1\u751f\u200b\u9519\u8bef\u200b\uff0c\u200b\u9700\u8981\u200b\u5bf9\u200b\u5f02\u5e38\u200b\u6d88\u606f\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b\u3002\u200b\u5728\u200bload_file
\u200b\u51fd\u6570\u200b\u4e2d\u200b\u5df2\u7ecf\u200b\u901a\u8fc7\u200bResult
\u200b\u8fd4\u56de\u200b\u4e86\u200b\u5bf9\u5e94\u200b\u7684\u200b\u9519\u8bef\u200b\u7c7b\u578b\u200b\uff0c\u200b\u53ea\u200b\u9700\u8981\u200b\u5728\u200bupdate
\u200b\u65b9\u6cd5\u200b\u4e2d\u200b\u5904\u7406\u200bMessage::FileOpened
\u200b\u5373\u53ef\u200b\u3002
struct Editor {\n // ...\n error: Option<io::ErrorKind>, // Use Option to store error\n}\n\n// ...\n\nimpl Application for Editor {\n // ...\n\n fn new(_flags: ()) -> (Self, Command<Message>) {\n (\n Self {\n // ...\n error: None, // Initialize error as None\n },\n // ...\n )\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // ...\n match message {\n // ...\n Message::FileOpened(Error(e)) => {\n self.error = Some(e); // Store error\n }\n }\n // ...\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use iced::{Theme, Element, Sandbox, Settings, Length};\nuse iced::widget::{column, container, horizontal_space, row, text, text_editor};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n content: text_editor::Content\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action)\n}\n\nimpl Sandbox for Editor {\n type Message = Message; // Define the type of messages\n\n fn new() -> Self {\n Self {\n content: text_editor::Content::with(include_str!(\"main.rs\"))\n }\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n self.content.edit(action);\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n\n // Query cursor position\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![horizontal_space(Length::Fill), cursor_indicator];\n\n container(column![editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n
"},{"location":"coding/rust-gui/5-file-picker/","title":"File Picker","text":"Keywords: iced::widget::button
, rfd::AsyncFileDialog
\u200b\u672c\u8282\u200b\u5728\u200b\u7a97\u53e3\u200b\u4e0a\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u6309\u94ae\u200b\uff0c\u200b\u70b9\u51fb\u200b\u540e\u5f39\u200b\u51fa\u200b\u6587\u4ef6\u200b\u9009\u62e9\u200b\u5bf9\u8bdd\u6846\u200b\uff0c\u200b\u9009\u62e9\u200b\u6587\u4ef6\u200b\u540e\u200b\u5c06\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\u663e\u793a\u200b\u5728\u200b\u7a97\u53e3\u200b\u4e0a\u200b\u3002\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u6dfb\u52a0\u200brfd
\u200b\u5e93\u200b\u7684\u200b\u4f9d\u8d56\u200b\uff0c\u200b\u7528\u4e8e\u200b\u6587\u4ef6\u200b\u9009\u62e9\u200b\u5bf9\u8bdd\u6846\u200b\u3002
cargo add rfd\n
\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u7f16\u5199\u200b\u7528\u4e8e\u200b\u663e\u793a\u6587\u4ef6\u200b\u9009\u62e9\u200b\u7a97\u53e3\u200b\u7684\u200b\u51fd\u6570\u200b\u3002\u200b\u6ce8\u610f\u200brfd::AsyncFileDialog
\u200b\u4f1a\u200b\u8fd4\u56de\u200b\u4e00\u4e2a\u200b\u5f02\u5e38\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u81ea\u5b9a\u4e49\u200b\u5f02\u5e38\u200b\u7c7b\u578b\u200b\u3002
#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n\nasync fn pick_file() -> Result<Arc<String>, Error> {\n let handler = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?; // If error, return DialogClosed error\n load_file(handler.path()).await\n}\n
\u200b\u8c03\u6574\u200b\u7a97\u53e3\u200b\u5e03\u5c40\u200b\uff0c\u200b\u5728\u200b\u7a97\u53e3\u200b\u4e0a\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u6309\u94ae\u200b\u3002
impl Application for Editor {\n // ...\n\n fn view(&self) -> Element<'_, Message> {\n let controls = row![button(\"Open\")];\n // ...\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n}\n
\u200b\u4e4b\u540e\u200b\u9700\u8981\u200b\u6dfb\u52a0\u200b\u6309\u94ae\u200b\u7684\u200b\u70b9\u51fb\u200b\u4e8b\u4ef6\u5904\u7406\u200b\uff0c\u200b\u8c03\u7528\u200bpick_file
\u200b\u51fd\u6570\u200b\u3002
enum Message {\n // ...\n OpenButtonPressed\n}\n\nimpl Application for Editor {\n // ...\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n // ...\n Message::OpenButtonPressed => {\n Command::perform(pick_file(), Message::FileOpened)\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n let controls = row![button(\"Open\").on_press(Message::OpenButtonPressed)];\n // ...\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::Path;\nuse std::sync::Arc;\n\nuse iced::{executor, Application, Command, Element, Length, Settings, Theme};\nuse iced::widget::{button, column, container, horizontal_space, row, text, text_editor};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n content: text_editor::Content,\n error: Option<Error>\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<Arc<String>, Error>),\n OpenButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok(result)) => {\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileOpened(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::OpenButtonPressed => {\n Command::perform(pick_file(), Message::FileOpened)\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n let controls = row![button(\"Open\").on_press(Message::OpenButtonPressed)];\n\n // Query cursor position\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![horizontal_space(Length::Fill), cursor_indicator];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n\nasync fn pick_file() -> Result<Arc<String>, Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<Arc<String>, Error> {\n tokio::fs::read_to_string(path)\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"coding/rust-gui/6-file-path-indicator/","title":"File Path Indicator","text":"\u200b\u672c\u8282\u200b\u5728\u200b\u72b6\u6001\u680f\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u663e\u793a\u6587\u4ef6\u200b\u8def\u5f84\u200b\u7684\u200b\u6587\u672c\u200b\u63a7\u4ef6\u200b\u3002\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u5b58\u50a8\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u72b6\u6001\u200b\uff0c\u200b\u5e76\u200b\u5728\u200b\u521d\u59cb\u5316\u200b\u9636\u6bb5\u200b\u8bbe\u7f6e\u200b\u4e3a\u200bNone
\u3002
struct Editor {\n path: Option<PathBuf>,\n // ...\n}\n\nimpl Application for Editor {\n // ...\n fn new() -> (Editor, Command<Message>) {\n (\n Editor {\n path: None,\n // ...\n },\n // ...\n )\n }\n // ...\n}\n
Path\u200b\u4e0e\u200bPathBuf
std::path::Path
\u200b\u548c\u200bstd::path::PathBuf
\u200b\u7684\u200b\u5173\u7cfb\u200b\u7c7b\u4f3c\u200b\u4e8e\u200b&str
\u200b\u548c\u200bString
\u200b\u7684\u200b\u5173\u7cfb\u200b\u3002Path
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u4e0d\u53ef\u200b\u53d8\u200b\u5f15\u7528\u200b\uff0cPathBuf
\u200b\u662f\u200b\u4e00\u4e2a\u200b\u53ef\u53d8\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5b58\u50a8\u200b\u8def\u5f84\u200b\u72b6\u6001\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bPathBuf
\uff0c\u200b\u5f15\u7528\u200b\u8def\u5f84\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bPath
\u3002
\u200b\u4e4b\u524d\u200b\u7684\u200bload_file
\u200b\u51fd\u6570\u200b\u53ea\u200b\u8fd4\u56de\u200b\u4e86\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff0c\u200b\u6b64\u5904\u200b\u9700\u8981\u200b\u5c06\u200b\u6587\u4ef6\u200b\u7684\u200b\u8def\u5f84\u200b\u4e00\u540c\u200b\u8fd4\u56de\u200b\u3002\u200b\u6ce8\u610f\u200b\u51fd\u6570\u200b\u4e0d\u80fd\u200b\u8fd4\u56de\u200b\u5f15\u7528\u200b\uff0c\u200b\u56e0\u6b64\u200b\u9700\u8981\u200b\u5c06\u200b\u8def\u5f84\u200b\u8f6c\u6362\u200b\u4e3a\u200bPathBuf
\u200b\u7c7b\u578b\u200b\u3002and_then
\u200b\u65b9\u6cd5\u200b\u5904\u7406\u200bResult
\u200b\u7684\u200bOk
\u200b\u503c\u200b\uff0c\u200b\u5728\u200b\u6210\u529f\u200b\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u540e\u200b\u5c06\u200bPath
\u200b\u8f6c\u6362\u200b\u4e3a\u200bPathBuf
\u200b\u5e76\u200b\u8fd4\u56de\u200b\u3002\u200b\u8c03\u7528\u200bload_file
\u200b\u7684\u200bpick_file
\u200b\u51fd\u6570\u200b\u4e5f\u200b\u9700\u8981\u200b\u4e00\u5e76\u200b\u4fee\u6539\u200b\uff0c\u200b\u540c\u65f6\u200b\u8fd4\u56de\u200b\u8def\u5f84\u200b\u548c\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\u3002
async fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n // ...\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n
\u200b\u5728\u200b\u4fee\u6539\u200b\u8bfb\u53d6\u200b\u6587\u4ef6\u200b\u7684\u200b\u51fd\u6570\u200b\u540e\u200b\uff0c\u200b\u9700\u8981\u200b\u4fee\u6539\u200b\u51fd\u6570\u200b\u56de\u8c03\u200b\u4e8b\u4ef6\u200b\u7684\u200b\u7c7b\u578b\u200b\u548c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5904\u7406\u51fd\u6570\u200b
\u200b\u4fee\u6539\u200b\u540e\u200b\u4fee\u6539\u200b\u524d\u200b enum Message {\n // ...\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n}\n\nimpl Application for Editor {\n // ...\n fn update(&mut self, message: Message) -> Command<Message> {\n match message {\n // ...\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n }\n }\n}\n
enum Message {\n // ...\n FileOpened(Result<Arc<String>, Error>),\n}\n\nimpl Application for Editor {\n // ...\n fn update(&mut self, message: Message) -> Command<Message> {\n match message {\n // ...\n Message::FileOpened(Ok(result)) => {\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n }\n }\n}\n
\u200b\u6700\u540e\u200b\u5728\u200b\u72b6\u6001\u680f\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u6587\u672c\u200b\u63a7\u4ef6\u200b\u663e\u793a\u6587\u4ef6\u200b\u8def\u5f84\u200b\u5373\u53ef\u200b\u3002
impl Application for Editor {\n // ...\n fn view(&mut self) -> Element<Message> {\n // ...\n let path_indicator = match &self.path {\n None => text(\"\"),\n Some(path) => text(path.to_string_lossy())\n };\n let status_bar = row![\n path_indicator, // Add path indicator here\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n // ...\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\n\nuse iced::{executor, Application, Command, Element, Length, Settings, Theme};\nuse iced::widget::{button, column, container, horizontal_space, row, text, text_editor};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n path: Option<PathBuf>,\n content: text_editor::Content,\n error: Option<Error>\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n OpenButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None,\n path: None\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileOpened(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::OpenButtonPressed => {\n Command::perform(pick_file(), Message::FileOpened)\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n let controls = row![button(\"Open\").on_press(Message::OpenButtonPressed)];\n\n // Query cursor position\n let path_indicator = match &self.path {\n None => text(\"\"),\n Some(path) => text(path.to_string_lossy())\n };\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![\n path_indicator,\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n\nasync fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"coding/rust-gui/7-new-and-save/","title":"New and Save","text":"\u200b\u672c\u200b\u8282\u200b\u6dfb\u52a0\u200b\u65b0\u5efa\u200b\u548c\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\u7684\u200b\u529f\u80fd\u200b\u3002
\u200b\u9996\u5148\u200b\uff0c\u200b\u5728\u200bEditorEdit
\u200b\u6d88\u606f\u200b\u5904\u7406\u200b\u4e2d\u200b\u68c0\u67e5\u200b\u662f\u5426\u200b\u5bf9\u200b\u6587\u4ef6\u200b\u8fdb\u884c\u200b\u4e86\u200b\u4fee\u6539\u200b\uff0c\u200b\u5e76\u4e14\u200b\u8bb0\u5f55\u200b\u6587\u4ef6\u200b\u7684\u200b\u4fee\u6539\u200b\u72b6\u6001\u200b\u3002
struct Editor {\n // ...\n modified: bool\n}\n// ... In `update` function\n Message::EditorEdit(action) => {\n match &action {\n text_editor::Action::Edit(_) => self.modified = true,\n _ => {}\n }\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.modified = false;\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n // ...\n Message::OpenButtonPressed => {\n self.modified = false;\n Command::perform(pick_file(), Message::FileOpened)\n },\n
\u200b\u5176\u6b21\u200b\uff0c\u200b\u8c03\u6574\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u63a7\u4ef6\u200b\u7684\u200b\u4e0d\u540c\u200b\u663e\u793a\u200b\u72b6\u6001\u200b\uff1a
- \u200b\u5f53\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u4e3a\u200b\u7a7a\u65f6\u200b\uff0c\u200b\u4e3a\u200b\u65b0\u200b\u6587\u4ef6\u200b\uff0c\u200b\u663e\u793a\u200b\u201cNew File\u201d\u3002
- \u200b\u5f53\u200b\u6253\u5f00\u200b\u4e00\u4e2a\u200b\u6587\u4ef6\u200b\u65f6\u200b\uff0c\u200b\u663e\u793a\u6587\u4ef6\u200b\u8def\u5f84\u200b\u3002
- \u200b\u5f53\u200b\u6587\u4ef6\u200b\u88ab\u200b\u4fee\u6539\u200b\u540e\u200b\uff0c\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u540e\u200b\u52a0\u4e0a\u200b\u201c*\u201d\u3002
- \u200b\u5f53\u200b\u6253\u5f00\u200b\u6587\u4ef6\u200b\u51fa\u9519\u200b\u65f6\u200b\uff0c\u200b\u663e\u793a\u200b\u9519\u8bef\u4fe1\u606f\u200b\u3002
let path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n} else {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n text(format!(\"{}{}\", path_text, suffix))\n};\n
\u200b\u5728\u200b\u521b\u5efa\u200b\u6587\u4ef6\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u6e05\u7a7a\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u548c\u200b\u5185\u5bb9\u200b\uff0c\u200b\u4ee5\u53ca\u200b\u6e05\u7a7a\u200b\u9519\u8bef\u4fe1\u606f\u200b\u3002\u200b\u52a0\u5165\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u6d88\u606f\u200b\u7c7b\u578b\u200bNewButtonPressed
\uff0c\u200b\u7531\u200b\u4e00\u4e2a\u200b\u6309\u94ae\u200b\u89e6\u53d1\u200b\uff0c\u200b\u5728\u200bupdate
\u200b\u51fd\u6570\u200b\u4e2d\u200b\u6267\u884c\u200b\u8fd9\u4e2a\u200b\u903b\u8f91\u200b\u3002
\u200b\u6d88\u606f\u200b\u7c7b\u578b\u200b\u58f0\u660e\u200b\u6d88\u606f\u200b\u89e6\u53d1\u200b\u6267\u884c\u200b\u903b\u8f91\u200b enum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n NewButtonPressed,\n OpenButtonPressed\n}\n
// ... In `view` function\nlet controls = row![\n button(\"New\").on_press(Message::NewButtonPressed),\n button(\"Open\").on_press(Message::OpenButtonPressed)\n];\n
// ... In matching logic in `update` function\nMessage::NewButtonPressed => {\n self.content = text_editor::Content::new();\n self.error = None;\n self.path = None;\n self.modified = false;\n Command::none()\n},\n// ...\n
\u200b\u63a5\u4e0b\u6765\u200b\u5904\u7406\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\u7684\u200b\u903b\u8f91\u200b\uff0c\u200b\u5f53\u200b\u5b58\u5728\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u65f6\u200b\uff0c\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\uff0c\u200b\u5426\u5219\u200b\u6253\u5f00\u200b\u6587\u4ef6\u200b\u9009\u62e9\u200b\u5bf9\u8bdd\u6846\u200b\u3002
async fn save_file(path: Option<PathBuf>, content: String) -> Result<PathBuf, Error> {\n let path = if let Some(path) = path {\n path\n } else {\n rfd::AsyncFileDialog::new()\n .set_title(\"Save the file to...\")\n .save_file()\n .await\n .ok_or(Error::DialogClosed)?\n .path()\n .to_path_buf()\n };\n tokio::fs::write(&path, content)\n .await\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n .map(|_| path)\n}\n
\u200b\u5728\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b
- \u200b\u68c0\u67e5\u200b\u6587\u4ef6\u200b\u7684\u200b\u4fee\u6539\u200b\u72b6\u6001\u200b\uff0c\u200b\u5982\u679c\u200b\u6587\u4ef6\u200b\u6ca1\u6709\u200b\u4fee\u6539\u200b\uff0c\u200b\u4e0d\u200b\u6267\u884c\u200b\u4fdd\u5b58\u200b\u64cd\u4f5c\u200b\u3002
- \u200b\u68c0\u67e5\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u662f\u5426\u200b\u4e3a\u7a7a\u200b\uff0c\u200b\u5982\u679c\u200b\u4e3a\u7a7a\u200b\uff0c\u200b\u6253\u5f00\u200b\u6587\u4ef6\u200b\u9009\u62e9\u200b\u5bf9\u8bdd\u6846\u200b\uff0c\u200b\u5426\u5219\u200b\u76f4\u63a5\u200b\u4fdd\u5b58\u200b\u6587\u4ef6\u200b\u3002
- \u200b\u52a0\u5165\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u6d88\u606f\u200b\u7c7b\u578b\u200b
SaveButtonPressed
\uff0c\u200b\u7531\u200b\u4e00\u4e2a\u200b\u6309\u94ae\u200b\u89e6\u53d1\u200b\uff0c\u200b\u5728\u200bupdate
\u200b\u51fd\u6570\u200b\u4e2d\u200b\u6267\u884c\u200b\u8fd9\u4e2a\u200b\u903b\u8f91\u200b\u3002
\u200b\u6d88\u606f\u200b\u7c7b\u578b\u200b\u58f0\u660e\u200b\u6d88\u606f\u200b\u89e6\u53d1\u200b\u6267\u884c\u200b\u903b\u8f91\u200b enum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n FileSaved(Result<PathBuf, Error>),\n NewButtonPressed,\n OpenButtonPressed,\n SaveButtonPressed\n}\n
// ... In `view` function\nlet controls = row![\n button(\"New\").on_press(Message::NewButtonPressed),\n button(\"Open\").on_press(Message::OpenButtonPressed),\n button(\"Save\").on_press(Message::SaveButtonPressed)\n];\n
// ... In matching logic in `update` function\nMessage::FileSaved(Ok(path)) => {\n self.path = Some(path);\n self.modified = false;\n Command::none()\n},\nMessage::FileOpened(Err(error)) | Message::FileSaved(Err(error)) => {\n self.error = Some(error);\n Command::none()\n},\n// ...\nMessage::SaveButtonPressed => {\n let content = self.content.text();\n match self.modified {\n false => Command::none(),\n true => Command::perform(\n save_file(self.path.clone(), content),\n Message::FileSaved\n )\n }\n}\n
\u200b\u6700\u540e\u200b\uff0c\u200b\u8c03\u6574\u200b\u4e09\u4e2a\u200b\u6309\u94ae\u200b\u4e4b\u95f4\u200b\u7684\u200b\u95f4\u8ddd\u200b
let controls = row![\n button(\"New\").on_press(Message::NewButtonPressed),\n button(\"Open\").on_press(Message::OpenButtonPressed),\n button(\"Save\").on_press(Message::SaveButtonPressed)\n].spacing(10);\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\n\nuse iced::{executor, Application, Command, Element, Length, Settings, Theme};\nuse iced::widget::{button, column, container, horizontal_space, row, text, text_editor};\n\nfn main() -> iced::Result {\n Editor::run(Settings::default())\n}\n\nstruct Editor {\n path: Option<PathBuf>,\n content: text_editor::Content,\n modified: bool,\n error: Option<Error>\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n FileSaved(Result<PathBuf, Error>),\n NewButtonPressed,\n OpenButtonPressed,\n SaveButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None,\n modified: false,\n path: None\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n match &action {\n text_editor::Action::Edit(_) => self.modified = true,\n _ => {}\n }\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.modified = false;\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileSaved(Ok(path)) => {\n self.path = Some(path);\n self.modified = false;\n Command::none()\n },\n Message::FileOpened(Err(error)) | Message::FileSaved(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::NewButtonPressed => {\n self.content = text_editor::Content::new();\n self.error = None;\n self.path = None;\n self.modified = false;\n Command::none()\n },\n Message::OpenButtonPressed => {\n self.modified = false;\n Command::perform(pick_file(), Message::FileOpened)\n },\n Message::SaveButtonPressed => {\n let content = self.content.text();\n match self.modified {\n false => Command::none(),\n true => Command::perform(\n save_file(self.path.clone(), content),\n Message::FileSaved\n )\n }\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n let controls = row![\n button(\"New\").on_press(Message::NewButtonPressed),\n button(\"Open\").on_press(Message::OpenButtonPressed),\n button(\"Save\").on_press(Message::SaveButtonPressed)\n ].spacing(10);\n\n // Query cursor position\n let path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n } else {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n text(format!(\"{}{}\", path_text, suffix))\n };\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![\n path_indicator,\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n\nasync fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n\nasync fn save_file(path: Option<PathBuf>, content: String) -> Result<PathBuf, Error> {\n let path = if let Some(path) = path {\n path\n } else {\n rfd::AsyncFileDialog::new()\n .set_title(\"Save the file to...\")\n .save_file()\n .await\n .ok_or(Error::DialogClosed)?\n .path()\n .to_path_buf()\n };\n tokio::fs::write(&path, content)\n .await\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n .map(|_| path)\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"coding/rust-gui/8-button-prettify/","title":"Button Prettify","text":"\u200b\u5728\u200b\u672c\u8282\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u628a\u200b\u6309\u94ae\u200b\u7684\u200b\u6587\u672c\u200b\u66ff\u6362\u200b\u4e3a\u200b\u56fe\u6807\u200b\uff0c\u200b\u5e76\u4e14\u200b\u6dfb\u52a0\u200b\u6587\u672c\u200b\u60ac\u6d6e\u200b\u63d0\u793a\u200b\u3002
\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u521b\u5efa\u200b\u5305\u542b\u200b\u56fe\u6807\u200b\u7684\u200b\u5b57\u4f53\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5728\u200bFontello\u200b\u4e0a\u200b\u9009\u62e9\u200b\u56fe\u6807\u200b\uff0c\u200b\u7136\u540e\u200b\u4e0b\u8f7d\u200b\u5b57\u4f53\u200b\u6587\u4ef6\u200b\u3002\u200b\u5c06\u200bttf
\u200b\u7248\u672c\u200b\u7684\u200b\u5b57\u4f53\u200b\u5b58\u653e\u200b\u5728\u200b\u9879\u76ee\u200b\u4e0b\u200b\u7684\u200bfonts/editor-icon.ttf
\u200b\u4e2d\u200b\u3002
\u200b\u7136\u540e\u200b\u5728\u200b\u4ee3\u7801\u200b\u4e2d\u200b\u52a0\u8f7d\u200b\u5b57\u4f53\u200b\u6587\u4ef6\u200b\uff0c\u200b\u5728\u200biced::Settings
\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u5b57\u4f53\u200b\uff1a
fn main() -> iced::Result {\n Editor::run(Settings {\n fonts: vec![include_bytes!(\"../fonts/editor-icon.ttf\").as_slice().into()],\n ..Default::default() // Expand the default settings\n })\n}\n
\u200b\u52a0\u8f7d\u200b\u5b57\u4f53\u200b\u540e\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u6309\u94ae\u200b\u7684\u200b\u8f93\u5165\u200b\u6587\u672c\u200b\u66ff\u6362\u200b\u4e3a\u200b\u56fe\u6807\u200b\uff0c\u200b\u4f7f\u7528\u200btext
\u200b\u63a7\u4ef6\u200b\u521b\u5efa\u200b\u56fe\u6807\u200b\u3002\u200b\u5728\u200b\u7f51\u9875\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u8bfb\u53d6\u200b\u5230\u200b\u5bf9\u5e94\u200b\u65b0\u5efa\u200b\u3001\u200b\u6253\u5f00\u200b\u3001\u200b\u4fdd\u5b58\u200b\u7684\u200bUnicode\u200b\u7f16\u7801\u200b\u5206\u522b\u200b\u4e3a\u200b\\u{E800}
\u3001\\u{F115}
\u3001\\u{E801}
\u3002
fn toolbar_button<'a>(description: &str, callback: Message) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n\n let icon = text(match description {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press(callback).into()\n}\n
\u200b\u4f7f\u7528\u200bbutton_icon
\u200b\u51fd\u6570\u200b\u66ff\u6362\u200b\u6309\u94ae\u200b\u539f\u672c\u200b\u7684\u200b\u8f93\u5165\u200b
// ... In `view` function\nlet controls = row![\n toolbar_button(\"new\", Message::NewButtonPressed),\n toolbar_button(\"open\", Message::OpenButtonPressed),\n toolbar_button(\"save\", Message::SaveButtonPressed)\n].spacing(10);\n
\u200b\u6700\u540e\u200b\uff0c\u200b\u5b9e\u73b0\u200b\u60ac\u6d6e\u200b\u63d0\u793a\u200b\uff0c\u200b\u4f7f\u7528\u200bTooltip
\u200b\u63a7\u4ef6\u200b\u5305\u88f9\u200b\u6309\u94ae\u200b\u5373\u53ef\u200b\u3002\u200b\u4e3a\u4e86\u200b\u7f8e\u89c2\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200bstyle
\u200b\u65b9\u6cd5\u200b\u8bbe\u7f6e\u200b\u63d0\u793a\u6846\u200b\u7684\u200b\u6837\u5f0f\u200b\u3002
// ... In `view` function\nlet controls = row![\n toolbar_button(\"New\", Message::NewButtonPressed),\n toolbar_button(\"Open\", Message::OpenButtonPressed),\n toolbar_button(\"Save\", Message::SaveButtonPressed)\n].spacing(10);\n\n// ... In the outer scope\nfn toolbar_button<'a>(description: &str, callback: Message) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n let lower = description.to_lowercase();\n let icon = text(match lower.as_str() {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n\n tooltip(\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press(callback),\n description, tooltip::Position::FollowCursor\n ).style(theme::Container::Box).into() // Set the style of the tooltip\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\n\nuse iced::{executor, theme, Application, Command, Element, Font, Length, Settings, Theme};\nuse iced::widget::{button, column, container, horizontal_space, row, text, text_editor, tooltip};\n\nfn main() -> iced::Result {\n Editor::run(Settings {\n fonts: vec![include_bytes!(\"../fonts/editor-icon.ttf\").as_slice().into()],\n ..Default::default()\n })\n}\n\nstruct Editor {\n path: Option<PathBuf>,\n content: text_editor::Content,\n modified: bool,\n error: Option<Error>\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n FileSaved(Result<PathBuf, Error>),\n NewButtonPressed,\n OpenButtonPressed,\n SaveButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None,\n modified: false,\n path: None\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n match &action {\n text_editor::Action::Edit(_) => self.modified = true,\n _ => {}\n }\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.modified = false;\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileSaved(Ok(path)) => {\n self.path = Some(path);\n self.modified = false;\n Command::none()\n },\n Message::FileOpened(Err(error)) | Message::FileSaved(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::NewButtonPressed => {\n self.content = text_editor::Content::new();\n self.error = None;\n self.path = None;\n self.modified = false;\n Command::none()\n },\n Message::OpenButtonPressed => {\n self.modified = false;\n Command::perform(pick_file(), Message::FileOpened)\n },\n Message::SaveButtonPressed => {\n let content = self.content.text();\n match self.modified {\n false => Command::none(),\n true => Command::perform(\n save_file(self.path.clone(), content),\n Message::FileSaved\n )\n }\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content).on_edit(Message::EditorEdit);\n let controls = row![\n toolbar_button(\"New\", Message::NewButtonPressed),\n toolbar_button(\"Open\", Message::OpenButtonPressed),\n toolbar_button(\"Save\", Message::SaveButtonPressed)\n ].spacing(10);\n\n // Query cursor position\n let path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n } else {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n text(format!(\"{}{}\", path_text, suffix))\n };\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![\n path_indicator,\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n Theme::Dark\n }\n}\n\nasync fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n\nasync fn save_file(path: Option<PathBuf>, content: String) -> Result<PathBuf, Error> {\n let path = if let Some(path) = path {\n path\n } else {\n rfd::AsyncFileDialog::new()\n .set_title(\"Save the file to...\")\n .save_file()\n .await\n .ok_or(Error::DialogClosed)?\n .path()\n .to_path_buf()\n };\n tokio::fs::write(&path, content)\n .await\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n .map(|_| path)\n}\n\nfn toolbar_button<'a>(description: &str, callback: Message) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n let lower = description.to_lowercase();\n let icon = text(match lower.as_str() {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n\n tooltip(\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press(callback),\n description, tooltip::Position::FollowCursor\n ).style(theme::Container::Box).into()\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"coding/rust-gui/9-syntax-highlighting/","title":"Syntax Highlighting","text":"Keywords: iced::widget::pick_list
\u200b\u672c\u200b\u8282\u200b\u6dfb\u52a0\u200b\u4ee3\u7801\u200b\u7f16\u8f91\u5668\u200b\u7684\u200b\u8bed\u6cd5\u200b\u9ad8\u4eae\u200b\u529f\u80fd\u200b\u3002
\u200b\u9996\u5148\u200b\uff0c\u200b\u4fee\u6539\u200b\u7f16\u8f91\u5668\u200b\u7684\u200b\u9ed8\u8ba4\u200b\u5b57\u4f53\u200b\u4e3a\u200b\u7b49\u200b\u5bbd\u200b\u5b57\u4f53\u200b\uff0c\u200b\u4ee5\u4fbf\u200b\u66f4\u597d\u200b\u5730\u200b\u663e\u793a\u200b\u4ee3\u7801\u200b\u3002
// ... In `view` function\nlet editor = text_editor(&self.content)\n .on_edit(Message::EditorEdit)\n .font(Font::MONOSPACE);\n
\u200b\u63a5\u4e0b\u6765\u200b\uff0c\u200b\u6dfb\u52a0\u200b\u9ad8\u4eae\u200b\u5904\u7406\u200b\u7684\u200b\u903b\u8f91\u200b\u3002\u200b\u9ad8\u4eae\u200b\u529f\u80fd\u200b\u7531\u200biced
\u200b\u7684\u200bhighlighter
\u200b\u6a21\u5757\u200b\u63d0\u4f9b\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200bCargo.toml
\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u4f9d\u8d56\u200b\u3002
[dependencies]\niced = { git = \"https://github.com/iced-rs/iced.git\", rev = \"refs/tags/text-editor\", features = [ \"highlighter\" ] }\n
\u200b\u5728\u200b\u6587\u672c\u6846\u200b\u7684\u200bhighlight
\u200b\u65b9\u6cd5\u200b\u4e2d\u200b\u8bbe\u7f6e\u200b\u9ad8\u4eae\u200b\u3002highlight
\u200b\u65b9\u6cd5\u200b\u9700\u8981\u200b\u6307\u5b9a\u200b\u914d\u8272\u200b\u65b9\u6848\u200btheme
\u200b\u548c\u200b\u8bed\u6cd5\u200bextension
\u3002extension
\u200b\u53ef\u4ee5\u200b\u6839\u636e\u200b\u6587\u4ef6\u200b\u8def\u5f84\u200b\u7684\u200b\u540e\u7f00\u540d\u200b\u81ea\u52a8\u8bc6\u522b\u200b\uff0c\u200b\u5982\u679c\u200b\u6ca1\u6709\u200b\u540e\u7f00\u540d\u200b\uff0c\u200b\u5219\u200b\u9ed8\u8ba4\u200b\u4e3a\u200brs
\u3002
let editor = text_editor(&self.content)\n .on_edit(Message::EditorEdit)\n .highlight::<Highlighter>( // use iced::highlighter::Highlighter\n highlighter::Settings {\n theme: highlighter::Theme::SolarizedDark, // Set the theme\n extension: self.path\n .as_ref()\n .and_then(|path| path.extension()?.to_str())\n .unwrap_or(\"rs\") // If extension is not found, use `rs`\n .to_string()\n }, |highlighter, _theme| {\n highlighter.to_format()\n }\n )\n .font(Font::MONOSPACE);\n
\u200b\u63a5\u4e0b\u6765\u200b\u6dfb\u52a0\u200b\u9ad8\u4eae\u200b\u98ce\u683c\u200b\u7684\u200b\u9009\u62e9\u200b\u529f\u80fd\u200b\u3002\u200b\u9996\u5148\u200b\u5728\u200bEditor
\u200b\u4e2d\u200b\u6dfb\u52a0\u200btheme
\u200b\u72b6\u6001\u200b\u4f5c\u4e3a\u200b\u5f53\u524d\u200b\u7684\u200b\u4e3b\u9898\u200b\uff0c\u200b\u5e76\u4e14\u200b\u8bbe\u7f6e\u200b\u521d\u59cb\u5316\u200b\u72b6\u6001\u200b\u3002
struct Editor {\n // ...\n theme: highlighter::Theme\n}\n// ... In `new` function\nSelf {\n // ...\n theme: highlighter::Theme::SolarizedDark\n},\n// ... In `view` function\nhighlighter::Settings {\n theme: self.theme,\n // ...\n}\n
\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200bpick_list
\u200b\u63a7\u4ef6\u200b\u7528\u4e8e\u200b\u9009\u62e9\u200b\u9ad8\u4eae\u200b\u98ce\u683c\u200b\uff0cpick_list
\u200b\u9700\u8981\u200b\u8bbe\u7f6e\u200b\u9009\u9879\u200b\u3001\u200b\u5f53\u524d\u200b\u9009\u4e2d\u200b\u9879\u200b\u548c\u200b\u89e6\u53d1\u200b\u4e8b\u4ef6\u200b\u3002\u200b\u6bcf\u6b21\u200b\u66f4\u65b0\u200b\u65f6\u200b\u90fd\u200b\u4f1a\u200b\u4ee5\u200b\u9009\u4e2d\u200b\u9879\u4e3a\u200b\u53c2\u6570\u200b\u89e6\u53d1\u200b\u4e8b\u4ef6\u200b\u3002
let controls = row![\n toolbar_button(\"New\", Message::NewButtonPressed),\n toolbar_button(\"Open\", Message::OpenButtonPressed),\n toolbar_button(\"Save\", Message::SaveButtonPressed),\n horizontal_space(Length::Fill),\n pick_list(highlighter::Theme::ALL, Some(self.theme), Message::ThemeChanged)\n].spacing(10);\n
\u200b\u540c\u65f6\u200b\u66f4\u65b0\u200bThemeChanged
\u200b\u4e8b\u4ef6\u200b\u7684\u200b\u5904\u7406\u200b\u903b\u8f91\u200b
// ... In `update` function\nMessage::ThemeChanged(theme) => {\n self.theme = theme;\n Command::none()\n}\n
\u200b\u5185\u7f6e\u200b\u7684\u200b\u90e8\u5206\u200b\u4e3b\u9898\u200b\u5e76\u200b\u4e0d\u662f\u200b\u6697\u8272\u200b\u4e3b\u9898\u200b\uff0c\u200b\u9700\u8981\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u6839\u636e\u200b\u4e3b\u9898\u200b\u7684\u200b\u4eae\u200b\u6697\u200b\u5207\u6362\u200b\u7a97\u53e3\u200b\u914d\u8272\u200b\u7684\u200b\u529f\u80fd\u200b\uff1a
// ... In `impl Application for Editor`\nfn theme(&self) -> Theme {\n if self.theme.is_dark() {\n Theme::Dark\n } else {\n Theme::Light\n }\n}\n
\u200b\u4ee5\u4e0b\u200b\u4e3a\u200b\u5b8c\u6574\u200b\u7684\u200bmain.rs
\u200b\u6587\u4ef6\u200b\u5185\u5bb9\u200b\uff1a
Download source code
use std::io;\nuse std::path::{Path, PathBuf};\nuse std::sync::Arc;\n\nuse iced::{executor, theme, Application, Command, Element, Font, Length, Settings, Theme};\nuse iced::highlighter::{self, Highlighter};\nuse iced::widget::{button, column, container, horizontal_space, pick_list, row, text, text_editor, tooltip};\n\nfn main() -> iced::Result {\n Editor::run(Settings {\n fonts: vec![include_bytes!(\"../fonts/editor-icon.ttf\").as_slice().into()],\n ..Default::default()\n })\n}\n\nstruct Editor {\n path: Option<PathBuf>,\n content: text_editor::Content,\n modified: bool,\n error: Option<Error>,\n theme: highlighter::Theme\n}\n\n#[derive(Debug, Clone)]\nenum Message {\n EditorEdit(text_editor::Action),\n FileOpened(Result<(PathBuf, Arc<String>), Error>),\n FileSaved(Result<PathBuf, Error>),\n ThemeChanged(highlighter::Theme),\n NewButtonPressed,\n OpenButtonPressed,\n SaveButtonPressed\n}\n\nimpl Application for Editor {\n type Message = Message; // Define the type of messages\n type Theme = Theme;\n type Executor = executor::Default; // Engine for running async tasks\n type Flags = ();\n\n fn new(_flags: Self::Flags) -> (Self, Command<Message>) {\n (\n Self {\n content: text_editor::Content::new(),\n error: None,\n modified: false,\n path: None,\n theme: highlighter::Theme::SolarizedDark\n },\n Command::perform(\n load_file(format!(\"{}/src/main.rs\", env!(\"CARGO_MANIFEST_DIR\"))),\n Message::FileOpened\n )\n )\n }\n\n fn title(&self) -> String {\n String::from(\"A text editor\")\n }\n\n fn update(&mut self, message: Message) -> Command<Message> {\n // Handle messages here\n match message {\n Message::EditorEdit(action) => {\n match &action {\n text_editor::Action::Edit(_) => self.modified = true,\n _ => {}\n }\n self.content.edit(action);\n Command::none()\n },\n Message::FileOpened(Ok((path, result))) => {\n self.path = Some(path);\n self.modified = false;\n self.content = text_editor::Content::with(&result);\n Command::none()\n },\n Message::FileSaved(Ok(path)) => {\n self.path = Some(path);\n self.modified = false;\n Command::none()\n },\n Message::FileOpened(Err(error)) | Message::FileSaved(Err(error)) => {\n self.error = Some(error);\n Command::none()\n },\n Message::ThemeChanged(theme) => {\n self.theme = theme;\n Command::none()\n },\n Message::NewButtonPressed => {\n self.content = text_editor::Content::new();\n self.error = None;\n self.path = None;\n self.modified = false;\n Command::none()\n },\n Message::OpenButtonPressed => {\n self.modified = false;\n Command::perform(pick_file(), Message::FileOpened)\n },\n Message::SaveButtonPressed => {\n let content = self.content.text();\n match self.modified {\n false => Command::none(),\n true => Command::perform(\n save_file(self.path.clone(), content),\n Message::FileSaved\n )\n }\n }\n }\n }\n\n fn view(&self) -> Element<'_, Message> {\n // Create the user interface here\n let editor = text_editor(&self.content)\n .on_edit(Message::EditorEdit)\n .highlight::<Highlighter>(\n highlighter::Settings {\n theme: self.theme,\n extension: self.path\n .as_ref()\n .and_then(|path| path.extension()?.to_str())\n .unwrap_or(\"rs\")\n .to_string()\n }, |highlighter, _theme| {\n highlighter.to_format()\n }\n )\n .font(Font::MONOSPACE);\n let controls = row![\n toolbar_button(\"New\", Message::NewButtonPressed),\n toolbar_button(\"Open\", Message::OpenButtonPressed),\n toolbar_button(\"Save\", Message::SaveButtonPressed),\n horizontal_space(Length::Fill),\n pick_list(highlighter::Theme::ALL, Some(self.theme), Message::ThemeChanged)\n ].spacing(10);\n\n // Query cursor position\n let path_indicator = if let Some(error) = &self.error {\n match error {\n Error::DialogClosed => text(\"Dialog closed\"),\n Error::IO(kind) => text(format!(\"I/O error: {:?}\", kind))\n }\n } else {\n let path_text = match &self.path {\n None => String::from(\"New file\"),\n Some(path) => path.to_string_lossy().to_string()\n };\n let suffix = if self.modified { \"*\" } else { \"\" };\n text(format!(\"{}{}\", path_text, suffix))\n };\n let cursor_indicator = {\n let (line, column) = self.content.cursor_position();\n\n text(format!(\"Line: {}, Column: {}\", line + 1, column + 1))\n };\n let status_bar = row![\n path_indicator,\n horizontal_space(Length::Fill),\n cursor_indicator\n ];\n\n container(column![controls, editor, status_bar].spacing(10)).padding(10).into()\n }\n\n fn theme(&self) -> Theme {\n if self.theme.is_dark() {\n Theme::Dark\n } else {\n Theme::Light\n }\n }\n}\n\nasync fn pick_file() -> Result<(PathBuf, Arc<String>), Error> {\n let file_handle = rfd::AsyncFileDialog::new()\n .set_title(\"Choose a text file...\")\n .pick_file()\n .await\n .ok_or(Error::DialogClosed)?;\n load_file(file_handle.path()).await\n}\n\nasync fn load_file(path: impl AsRef<Path>) -> Result<(PathBuf, Arc<String>), Error> {\n let content = tokio::fs::read_to_string(path.as_ref())\n .await\n .map(Arc::new)\n .map_err(|err| err.kind())\n .map_err(Error::IO);\n content.and_then(|content| Ok((path.as_ref().to_path_buf(), content)))\n}\n\nasync fn save_file(path: Option<PathBuf>, content: String) -> Result<PathBuf, Error> {\n let path = if let Some(path) = path {\n path\n } else {\n rfd::AsyncFileDialog::new()\n .set_title(\"Save the file to...\")\n .save_file()\n .await\n .ok_or(Error::DialogClosed)?\n .path()\n .to_path_buf()\n };\n tokio::fs::write(&path, content)\n .await\n .map_err(|err| err.kind())\n .map_err(Error::IO)\n .map(|_| path)\n}\n\nfn toolbar_button<'a>(description: &str, callback: Message) -> Element<'a, Message> {\n let font = Font::with_name(\"editor-icon\");\n let lower = description.to_lowercase();\n let icon = text(match lower.as_str() {\n \"new\" => '\\u{E800}',\n \"open\" => '\\u{F115}',\n \"save\" => '\\u{E801}',\n _ => ' '\n }).font(font);\n\n tooltip(\n button(container(icon)\n .width(30) // Set the width of the button\n .center_x() // Center the icon\n ).on_press(callback),\n description, tooltip::Position::FollowCursor\n ).style(theme::Container::Box).into()\n}\n\n#[derive(Debug, Clone)]\nenum Error {\n DialogClosed,\n IO(io::ErrorKind)\n}\n
"},{"location":"japanese/","title":"\u65e5\u8bed","text":"\u200b\u65e5\u8bed\u200b\u5b66\u4e60\u200b\u7b14\u8bb0\u200b
- \u200b\u65e5\u8bed\u200b(1) - 2023-2024\u200b\u5b66\u5e74\u200b\u79cb\u5b63\u200b\u5b66\u671f\u200b
- \u200b\u77ed\u8bed\u200b\u4e0e\u200b\u8868\u8fbe\u200b
- \u200b\u8bed\u6cd5\u200b
- \u200b\u5355\u8bcd\u8868\u200b
"},{"location":"japanese/japanese-1-grammar/","title":"\u65e5\u8bed\u200b(1)\u200b\u8bed\u6cd5","text":""},{"location":"japanese/japanese-1-grammar/#_1","title":"\u8bcd\u6cd5","text":"\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u7684\u200b\u5355\u8bcd\u200b\u8bcd\u6027\u200b\u4e3b\u8981\u200b\u6709\u200b\u540d\u8bcd\u200b\u3001\u200b\u52a8\u8bcd\u200b\u3001\u200b\u5f62\u5bb9\u8bcd\u200b\u3001\u200b\u526f\u8bcd\u200b\u3001\u200b\u52a9\u8bcd\u200b\u3001\u200b\u63a5\u7eed\u8bcd\u200b\u7b49\u200b\u3002\u200b\u5176\u4e2d\u200b\uff0c\u200b\u52a8\u8bcd\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3001III\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3001III\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3002\u200b\u5f62\u5bb9\u8bcd\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u3001II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u3002
- \u200b\u540d\u8bcd\u200b\u3001\u200b\u4ee3\u8bcd\u200b\u3001\u200b\u6570\u8bcd\u200b\u79f0\u4e3a\u200b\u300c\u200b\u4f53\u8a00\u200b\u300d\u3002
- \u200b\u52a8\u8bcd\u200b\u3001\u200b\u5f62\u5bb9\u8bcd\u200b\u3001\u200b\u5f62\u5bb9\u200b\u52a8\u8bcd\u200b\u79f0\u4e3a\u200b\u300c\u200b\u7528\u8a00\u200b\u300d\u3002
"},{"location":"japanese/japanese-1-grammar/#_2","title":"\u300c\u30a2\u30bd\u30b3\u30c9\u300d\u200b\u7cfb\u7edf","text":"\u200b\u5728\u200b\u65e5\u8bed\u200b\u4e2d\u200b\uff0c\u300c\u30a2\u30bd\u30b3\u30c9\u300d\u200b\u548c\u200b\u300c\u308c\u300d\uff08\u200b\u4e8b\u7269\u200b\uff09\u3001\u300c\u3053\u300d\uff08\u200b\u5730\u70b9\u200b\uff09\u3001\u300c\u3061\u3089\u300d\uff08\u200b\u65b9\u4f4d\u200b\uff09\u200b\u7b49\u200b\u6307\u793a\u200b\u4ee3\u8bcd\u200b\u8fde\u7528\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u8be5\u8bcd\u200b\u7684\u200b\u8fdc\u8fd1\u200b\u3002
\u200b\u524d\u7f00\u200b \u200b\u4e8b\u7269\u200b \u200b\u5730\u70b9\u200b \u200b\u65b9\u4f4d\u200b \u200b\u72b6\u6001\u200b \u200b\u8fd1\u79f0\u200b \u3053 \u3053\u308c \u3053\u3053 \u3053\u3061\u3089 \u3053\u3093\u306a \u200b\u4e2d\u79f0\u200b \u305d \u305d\u308c \u305d\u3053 \u305d\u3061\u3089 \u305d\u3093\u306a \u200b\u8fdc\u79f0\u200b \u3042 \u3042\u308c \u3042\u305d\u3053 \u3042\u3061\u3089 \u3042\u3093\u306a \u200b\u4e0d\u5b9a\u200b\u79f0\u200b \u3069 \u3069\u308c \u3069\u3053 \u3069\u3061\u3089 \u3069\u3093\u306a \u200b\u4e0d\u5b9a\u200b\u79f0\u200b\u662f\u200b\u7591\u95ee\u8bcd\u200b\uff0c\u200b\u7528\u4e8e\u200b\u63d0\u95ee\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_3","title":"\u5f62\u5bb9\u8bcd","text":"\u200b\u5f62\u5bb9\u8bcd\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u548c\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u3002I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u8bcd\u5c3e\u200b\u662f\u200b\u300c\u3044\u300d\uff0c\u200b\u5176\u4ed6\u200b\u7684\u200b\u90fd\u200b\u662f\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0cII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u53c8\u200b\u79f0\u4e3a\u200b\u5f62\u5bb9\u200b\u52a8\u8bcd\u200b\uff0c\u200b\u5176\u200b\u539f\u578b\u200b\u7684\u200b\u8bcd\u5c3e\u200b\u4e3a\u200b\u300c\u3060\u300d\u3002
I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u542b\u4e49\u200b II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u542b\u4e49\u200b \u3042\u305f\u3089\u3057\u3044 \u200b\u65b0\u200b\u7684\u200b \u3060\u3044\u3058\u3087\u3046\u3076 \u200b\u6ca1\u5173\u7cfb\u200b \u305f\u304b\u3044 \u200b\u9ad8\u200b\u7684\u200b \u3079\u3093\u308a \u200b\u65b9\u4fbf\u200b \u3072\u308d\u3044 \u200b\u5bbd\u200b\u7684\u200b \u3059\u304d \u200b\u559c\u6b22\u200b \u200b\u4f8b\u5916\u200b\uff1a\u200b\u7dba\u9e97\u200b\uff08\u304d\u308c\u3044\uff09\u3001\u200b\u5acc\u200b\u3044\uff08\u304d\u3089\u3044\uff09\u200b\u662f\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u200b\u4f46\u662f\u200b\u8bcd\u5c3e\u200b\u662f\u200b\u300c\u3044\u300d\u3002
\u200b\u5f62\u5bb9\u8bcd\u200b\u6709\u200b\u3066\u200b\u578b\u200b\u53d8\u5f62\u200b\u3002
\u3066\u200b\u578b\u200b\u306a\u3044\u200b\u578b\u200b\u3063\u305f\u200b\u578b\u200b \u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u8fde\u7528\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8fde\u63a5\u200b\u4e24\u4e2a\u200b\u5206\u53e5\u200b\u3002
- I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u8bcd\u5c3e\u200b\u7684\u200b\u300c\u3044\u300d\u200b\u53d8\u4e3a\u200b\u300c\u304f\u3066\u300d\u3002
- II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5728\u200b\u8bcd\u5c3e\u200b\u76f4\u63a5\u200b\u52a0\u4e0a\u200b\u300c\u3067\u300d\u3002
\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u3066\u200b\u578b\u200b \u3042\u305f\u3089\u3057\u3044 I\u200b\u7c7b\u200b \u3042\u305f\u3089\u3057\u304f\u3066 \u305f\u304b\u3044 I\u200b\u7c7b\u200b \u305f\u304b\u304f\u3066 \u3072\u308d\u3044 I\u200b\u7c7b\u200b \u3072\u308d\u304f\u3066 \u3079\u3093\u308a II\u200b\u7c7b\u200b \u3079\u3093\u308a\u3067 \u3059\u304d II\u200b\u7c7b\u200b \u3059\u304d\u3067 \u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u7b80\u4f53\u200b\u5426\u5b9a\u53e5\u200b\u4e2d\u200b\u3002
- I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u8bcd\u5c3e\u200b\u7684\u200b\u300c\u3044\u300d\u200b\u53d8\u4e3a\u200b\u300c\u304f\u306a\u3044\u300d\u3002
- II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u5728\u200b\u8bcd\u5c3e\u200b\u76f4\u63a5\u200b\u52a0\u4e0a\u200b\u300c\u3067\u306f\u306a\u3044\u300d\u3002
\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u306a\u3044\u200b\u578b\u200b \u3042\u305f\u3089\u3057\u3044 I\u200b\u7c7b\u200b \u3042\u305f\u3089\u3057\u304f\u306a\u3044 \u305f\u304b\u3044 I\u200b\u7c7b\u200b \u305f\u304b\u304f\u306a\u3044 \u3072\u308d\u3044 I\u200b\u7c7b\u200b \u3072\u308d\u304f\u306a\u3044 \u3079\u3093\u308a II\u200b\u7c7b\u200b \u3079\u3093\u308a\u3067\u306f\u306a\u3044 \u3059\u304d II\u200b\u7c7b\u200b \u3059\u304d\u3067\u306f\u306a\u3044 \u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3063\u305f\u200b\u578b\u200b\u662f\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u8fc7\u53bb\u200b\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u7b80\u4f53\u200b\u8fc7\u53bb\u200b\u53e5\u200b\u4e2d\u200b\u3002
- I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3063\u305f\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u8bcd\u5c3e\u200b\u7684\u200b\u300c\u3044\u300d\u200b\u53d8\u4e3a\u200b\u300c\u304b\u3063\u305f\u300d\u3002
- II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u3063\u305f\u200b\u578b\u200b\u662f\u200b\u5728\u200b\u8bcd\u5c3e\u200b\u76f4\u63a5\u200b\u52a0\u4e0a\u200b\u300c\u3060\u3063\u305f\u300d\uff08\u200b\u76f8\u5f53\u4e8e\u200b\u539f\u578b\u200b\u76f4\u63a5\u200b\u52a0\u200b\u300c\u3063\u305f\u300d\uff09\u3002
\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u3063\u305f\u200b\u578b\u200b \u3042\u305f\u3089\u3057\u3044 I\u200b\u7c7b\u200b \u3042\u305f\u3089\u3057\u304b\u3063\u305f \u305f\u304b\u3044 I\u200b\u7c7b\u200b \u305f\u304b\u304b\u3063\u305f \u3072\u308d\u3044 I\u200b\u7c7b\u200b \u3072\u308d\u304b\u3063\u305f \u3079\u3093\u308a II\u200b\u7c7b\u200b \u3079\u3093\u308a\u3060\u3063\u305f \u3059\u304d II\u200b\u7c7b\u200b \u3059\u304d\u3060\u3063\u305f \u200b\u6ce8\u610f\u200b\u300c\u306a\u3044\u300d\u200b\u578b\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u770b\u4f5c\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u200b\u5176\u200b\u8fc7\u53bb\u200b\u5f62\u5f0f\u200b\u4e3a\u200b\u300c\u306a\u304b\u3063\u305f\u300d\u3002
- I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u4fee\u9970\u200b\u4f53\u8a00\u65f6\u200b\uff0c\u200b\u76f4\u63a5\u200b\u52a0\u4f53\u8a00\u200b\u5373\u53ef\u200b\uff0c\u200b\u4fee\u9970\u200b\u7528\u8a00\u65f6\u200b\uff08\u200b\u5373\u200b\u526f\u8bcd\u200b\u5f62\u5f0f\u200b\uff09\u200b\u9700\u8981\u200b\u5c06\u200b\u300c\u3044\u300d\u200b\u53d8\u4e3a\u200b\u300c\u304f\u300d\u3002
- II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u4fee\u9970\u200b\u4f53\u8a00\u65f6\u200b\u9700\u8981\u200b\u52a0\u200b\u300c\u306a\u300d\uff0c\u200b\u4fee\u9970\u200b\u7528\u8a00\u65f6\u200b\u9700\u8981\u200b\u52a0\u200b\u300c\u306b\u300d\u3002
"},{"location":"japanese/japanese-1-grammar/#_4","title":"\u52a8\u8bcd","text":"\u200b\u52a8\u8bcd\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3001II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3001III\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3002
- II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u8bcd\u5c3e\u200b\u662f\u200b\u300c\u308b\u300d\uff0c\u300c\u308b\u300d\u200b\u524d\u200b\u7684\u200b\u5047\u540d\u200b\u662f\u200b\u300c\u3044\u300d\u200b\u6bb5\u200b\u6216\u200b\u300c\u3048\u300d\u200b\u6bb5\u200b\u3002
- III\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u8bcd\u5c3e\u200b\u662f\u200b\u300c\u3059\u308b\u300d\u200b\u6216\u200b\u300c\u304f\u308b\u300d\u3002\u300c\u3059\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u52a8\u8bcd\u200b\u53c8\u200b\u79f0\u4e3a\u200b\u30b5\u200b\u53d8\u52a8\u200b\u8bcd\u200b\uff0c\u300c\u304f\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u52a8\u8bcd\u200b\u53c8\u200b\u79f0\u4e3a\u200b\u30ab\u200b\u53d8\u52a8\u200b\u8bcd\u200b\u3002
- \u200b\u5269\u4e0b\u200b\u6240\u6709\u200b\u7684\u200b\u52a8\u8bcd\u200b\u5747\u200b\u4e3a\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u3002I\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u662f\u200b\u300c\u3046\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\u3002
\u200b\u52a8\u8bcd\u200b\u6709\u200b\u307e\u3059\u200b\u578b\u200b\u3001\u306a\u3044\u200b\u578b\u200b\u3001\u305f\u200b\u578b\u200b\u3001\u3066\u200b\u578b\u200b\u7b49\u200b\u4e0d\u540c\u200b\u7684\u200b\u53d8\u5f62\u200b\u3002
\u307e\u3059\u200b\u578b\u200b\u306a\u3044\u200b\u578b\u200b\u305f\u200b\u578b\u200b\u3066\u200b\u578b\u200b \u200b\u52a8\u8bcd\u200b\u7684\u200b\u307e\u3059\u200b\u578b\u200b\u662f\u200b\u52a8\u8bcd\u200b\u7684\u200b\u656c\u4f53\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u656c\u4f53\u200b\u53e5\u200b\u4e2d\u200b\u3002
- II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u307e\u3059\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u307e\u3059\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u307e\u3059\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u3059\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3057\u307e\u3059\u300d\uff0c\u200b\u4ee5\u200b\u300c\u304f\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u307e\u3059\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u304f\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u304d\u307e\u3059\u300d\u3002
- I\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u307e\u3059\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u300c\u3046\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u5bf9\u5e94\u200b\u7684\u200b\u300c\u3044\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\uff0c\u200b\u518d\u200b\u52a0\u4e0a\u200b\u300c\u307e\u3059\u300d\u3002
\u200b\u52a8\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u307e\u3059\u200b\u578b\u200b \u3042\u308b I\u200b\u7c7b\u200b \u3042\u308a\u307e\u3059 \u3067\u304d\u308b II\u200b\u7c7b\u200b \u3067\u304d\u307e\u3059 \u3068\u308b I\u200b\u7c7b\u200b \u3068\u308a\u307e\u3059 \u308c\u3093\u3057\u3085\u3046\u3059\u308b III\u200b\u7c7b\u200b \u308c\u3093\u3057\u3085\u3046\u3057\u307e\u3059 \u3082\u3064 I\u200b\u7c7b\u200b \u3082\u3061\u307e\u3059 \u200b\u52a8\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u52a8\u8bcd\u200b\u7684\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u7b80\u4f53\u200b\u5426\u5b9a\u53e5\u200b\u4e2d\u200b\u3002
- II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u306a\u3044\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u3059\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3057\u306a\u3044\u300d\uff0c\u200b\u4ee5\u200b\u300c\u304f\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u304f\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3053\u306a\u3044\u300d\u3002
- I\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u306a\u3044\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u300c\u3046\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u5bf9\u5e94\u200b\u7684\u200b\u300c\u3042\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\uff0c\u200b\u518d\u200b\u52a0\u4e0a\u200b\u300c\u306a\u3044\u300d\u3002
\u200b\u52a8\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u306a\u3044\u200b\u578b\u200b \u3042\u308b I\u200b\u7c7b\u200b \u3042\u304b\u306a\u3044 \u3067\u304d\u308b II\u200b\u7c7b\u200b \u3067\u304d\u306a\u3044 \u3068\u308b I\u200b\u7c7b\u200b \u3068\u3089\u306a\u3044 \u308c\u3093\u3057\u3085\u3046\u3059\u308b III\u200b\u7c7b\u200b \u308c\u3093\u3057\u3085\u3046\u3057\u306a\u3044 \u3082\u3064 I\u200b\u7c7b\u200b \u3082\u305f\u306a\u3044 \u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u52a8\u8bcd\u200b\u7684\u200b\u8fc7\u53bb\u200b\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u7b80\u4f53\u200b\u8fc7\u53bb\u200b\u53e5\u200b\u4e2d\u200b\u3002
- II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u305f\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u3059\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3057\u305f\u300d\uff0c\u200b\u4ee5\u200b\u300c\u304f\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u304f\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u304d\u305f\u300d\u3002
- I\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u8bcd\u5c3e\u200b\u7684\u200b\u300c\u3046\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\u3002
- \u200b\u4ee5\u200b\u300c\u3046\u300d\u3001\u300c\u3064\u300d\u3001\u300c\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3063\u305f\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3080\u300d\u3001\u300c\u3076\u300d\u3001\u300c\u306c\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3093\u3060\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u304f\u300d\u3001\u300c\u3050\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3044\u305f\u300d\u200b\u548c\u200b\u300c\u3044\u3060\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3057\u305f\u300d\u3002
- \u200b\u7279\u4f8b\u200b\uff1a\u300c\u200b\u884c\u200b\u304f\u300d\u200b\u7684\u200b\u305f\u200b\u578b\u200b\u662f\u200b\u300c\u3044\u3063\u305f\u300d\u3002
\u200b\u52a8\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u305f\u200b\u578b\u200b \u3042\u308b I\u200b\u7c7b\u200b \u3042\u3063\u305f \u3067\u304d\u308b II\u200b\u7c7b\u200b \u3067\u304d\u305f \u3068\u308b I\u200b\u7c7b\u200b \u3068\u3063\u305f \u308c\u3093\u3057\u3085\u3046\u3059\u308b III\u200b\u7c7b\u200b \u308c\u3093\u3057\u3085\u3046\u3057\u305f \u3082\u3064 I\u200b\u7c7b\u200b \u3082\u3063\u305f \u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u52a8\u8bcd\u200b\u7684\u200b\u8fde\u7528\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8fde\u63a5\u200b\u4e24\u4e2a\u200b\u5206\u53e5\u200b\u3002
- II\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3066\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u3059\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u3057\u3066\u300d\uff0c\u200b\u4ee5\u200b\u300c\u304f\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u53bb\u6389\u200b\u8bcd\u5c3e\u200b\u300c\u304f\u308b\u300d\uff0c\u200b\u52a0\u4e0a\u200b\u300c\u304d\u3066\u300d\u3002
- I\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u9700\u8981\u200b\u8003\u8651\u200b\u8bcd\u5c3e\u200b\u7684\u200b\u300c\u3046\u300d\u200b\u6bb5\u200b\u5047\u540d\u200b\u3002
- \u200b\u4ee5\u200b\u300c\u3046\u300d\u3001\u300c\u3064\u300d\u3001\u300c\u308b\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3063\u3066\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3080\u300d\u3001\u300c\u3076\u300d\u3001\u300c\u306c\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3093\u3067\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u304f\u300d\u3001\u300c\u3050\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3044\u3066\u300d\u200b\u548c\u200b\u300c\u3044\u3067\u300d\u3002
- \u200b\u4ee5\u200b\u300c\u3059\u300d\u200b\u7ed3\u5c3e\u200b\u7684\u200bI\u200b\u7c7b\u200b\u52a8\u8bcd\u200b\u7684\u200b\u3066\u200b\u578b\u200b\u662f\u200b\u5c06\u200b\u7ed3\u5c3e\u200b\u7684\u200b\u5047\u540d\u200b\u53d8\u4e3a\u200b\u300c\u3057\u3066\u300d\u3002
\u200b\u52a8\u8bcd\u200b \u200b\u5206\u7c7b\u200b \u3066\u200b\u578b\u200b \u3042\u308b I\u200b\u7c7b\u200b \u3042\u3063\u3066 \u3067\u304d\u308b II\u200b\u7c7b\u200b \u3067\u304d\u3066 \u3068\u308b I\u200b\u7c7b\u200b \u3068\u3063\u3066 \u308c\u3093\u3057\u3085\u3046\u3059\u308b III\u200b\u7c7b\u200b \u308c\u3093\u3057\u3085\u3046\u3057\u3066 \u3082\u3064 I\u200b\u7c7b\u200b \u3082\u3063\u3066"},{"location":"japanese/japanese-1-grammar/#_5","title":"\u53e5\u6cd5","text":""},{"location":"japanese/japanese-1-grammar/#_6","title":"\u8bed\u53e5\u200b\u5206\u7c7b","text":"\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u7684\u200b\u8bed\u53e5\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u5b58\u5728\u200b\u53e5\u200b\uff08\u3042\u308a\u307e\u3059\u3001\u3044\u307e\u3059\uff09\u3001\u200b\u5224\u65ad\u53e5\u200b\uff08\u200b\u540d\u8bcd\u200b\uff09\u3001\u200b\u53d9\u8ff0\u200b\u53e5\u200b\uff08\u200b\u4e00\u822c\u200b\u52a8\u8bcd\u200b\uff09\u3001\u200b\u63cf\u5199\u200b\u53e5\u200b\uff08\u200b\u5f62\u5bb9\u8bcd\u200b\u3001\u200b\u5f62\u5bb9\u200b\u52a8\u8bcd\u200b\uff09\u3002\u200b\u5224\u65ad\u53e5\u200b\u548c\u200b\u63cf\u5199\u200b\u53e5\u200b\u7684\u200b\u656c\u4f53\u200b\u5f62\u5f0f\u200b\u662f\u200b\u300c\u301c\u3067\u3059\u300d\uff0c\u200b\u7b80\u4f53\u200b\u5f62\u5f0f\u200b\u662f\u200b\u300c\u301c\u3060\u300d\u3002\u200b\u53d9\u8ff0\u200b\u53e5\u200b\u548c\u200b\u5b58\u5728\u200b\u53e5\u200b\u7684\u200b\u656c\u4f53\u200b\u5f62\u5f0f\u200b\u662f\u200b\u300c\u301c\u307e\u3059\u300d\uff0c\u200b\u53c8\u79f0\u200b\u307e\u3059\u200b\u578b\u200b\u3002
\u200b\u53e5\u5b50\u200b\u7531\u200b\u4e0d\u540c\u200b\u7684\u200b\u300c\u200b\u6587\u8282\u200b\u300d\u200b\u7ec4\u6210\u200b\uff0c\u200b\u6587\u8282\u200b\u662f\u200b\u65e5\u8bed\u200b\u8bed\u6cd5\u7ed3\u6784\u200b\u4e2d\u200b\u7684\u200b\u5355\u5143\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u6587\u8282\u200b\u90fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u300c\u200b\u6838\u5fc3\u200b\u8bcd\u200b\u300d\uff0c\u200b\u6838\u5fc3\u200b\u8bcd\u200b\u7684\u200b\u8bcd\u6027\u200b\u51b3\u5b9a\u200b\u4e86\u200b\u6587\u8282\u200b\u7684\u200b\u7c7b\u578b\u200b\u3002\u200b\u6587\u8282\u200b\u4e2d\u200b\u7684\u200b\u9644\u5c5e\u200b\u8bcd\u200b\uff08\u200b\u52a9\u8bcd\u200b\uff09\u200b\u7528\u4e8e\u200b\u4fee\u9970\u200b\u6838\u5fc3\u200b\u8bcd\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff1a\u200b\u52a9\u8bcd\u200b\u53ea\u80fd\u200b\u7528\u4e8e\u200b\u4fee\u9970\u200b\u540d\u8bcd\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_7","title":"\u683c\u200b\u52a9\u8bcd","text":"\u200b\u683c\u200b\u52a9\u8bcd\u200b\u7528\u4e8e\u200b\u540d\u8bcd\u200b\u540e\u200b\uff0c\u200b\u8868\u793a\u200b\u540d\u8bcd\u200b\u5728\u200b\u53e5\u5b50\u200b\u4e2d\u200b\u7684\u200b\u8bed\u6cd5\u200b\u6210\u5206\u200b\u3002
\u304c\u306e\u306b\u3067\u3092\u304b\u3089\u3078\u3088\u308a\u307b\u3069 \u200b\u52a9\u8bcd\u200b\u300c\u304c\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e3b\u8bed\u200b\uff0c\u200b\u5176\u524d\u200b\u7684\u200b\u540d\u8bcd\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u6267\u884c\u8005\u200b\uff0c\u200b\u6216\u8005\u200b\u63cf\u5199\u200b\u3001\u200b\u5224\u65ad\u200b\u6216\u200b\u5b58\u5728\u200b\u7684\u200b\u5bf9\u8c61\u200b\u3002
\u300c\u200b\u79c1\u200b\u304c\u200b\u884c\u200b\u304d\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u53bb\u200b\u3002\uff08\u200b\u53d9\u8ff0\u200b\u53e5\u200b\uff09 \u300c\u200b\u79c1\u200b\u304c\u200b\u5b66\u751f\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u662f\u200b\u5b66\u751f\u200b\u3002\uff08\u200b\u5224\u65ad\u53e5\u200b\uff09 \u300c\u200b\u79c1\u200b\u304c\u3044\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u5728\u200b\u3002\uff08\u200b\u5b58\u5728\u200b\u53e5\u200b\uff09
\u200b\u52a9\u8bcd\u200b\u300c\u306e\u300d\u200b\u4f5c\u4e3a\u200b\u683c\u200b\u52a9\u8bcd\u200b\u65f6\u200b\u8868\u793a\u200b\u6240\u6709\u200b\u5173\u7cfb\u200b\uff0c\u200b\u5176\u524d\u200b\u7684\u200b\u540d\u8bcd\u200b\u8868\u793a\u200b\u88ab\u200b\u4fee\u9970\u200b\u7684\u200b\u5bf9\u8c61\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff0c\u300c\u306e\u300d\u200b\u8fd8\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u540c\u4f4d\u8bed\u200b\uff0c\u200b\u56e0\u6b64\u200b\u300c\u306e\u300d\u200b\u7684\u200b\u5b9e\u9645\u200b\u542b\u4e49\u200b\u9700\u8981\u200b\u6839\u636e\u200b\u4e0a\u4e0b\u6587\u200b\u6765\u200b\u786e\u5b9a\u200b\u3002
\u300c\u30de\u30a4\u30b1\u30eb\u3055\u3093\u306e\u200b\u5f8c\u200b\u8f29\u200b\u306e\u200b\u571f\u5c4b\u200b\u3068\u200b\u7533\u200b\u3057\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u662f\u200b\u8fc8\u514b\u5c14\u200b\u7684\u200b\u540e\u8f88\u200b\u571f\u5c4b\u200b\u3002
\u200b\u53e5\u200b\u4e2d\u200b\u7684\u200b\u300c\u30de\u30a4\u30b1\u30eb\u3055\u3093\u306e\u200b\u5f8c\u200b\u8f29\u200b\u300d\u200b\u8868\u793a\u200b\u8fc8\u514b\u5c14\u200b\u7684\u200b\u540e\u8f88\u200b\uff0c\u200b\u662f\u200b\u6240\u6709\u200b\u5173\u7cfb\u200b\uff0c\u300c\u200b\u5f8c\u200b\u8f29\u200b\u306e\u200b\u571f\u5c4b\u200b\u300d\u200b\u8868\u793a\u200b\u571f\u5c4b\u200b\u662f\u200b\u8fc8\u514b\u5c14\u200b\u7684\u200b\u540e\u8f88\u200b\uff0c\u200b\u662f\u200b\u540c\u4f4d\u8bed\u200b\u5173\u7cfb\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u306b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b
-
\u200b\u52a8\u4f5c\u200b\u53e5\u200b\u4e2d\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u6267\u884c\u200b\u65f6\u95f4\u200b\u3001\u200b\u5730\u70b9\u200b\u3001\u200b\u5bf9\u8c61\u200b\u7b49\u200b\u3002\u200b\u52a8\u8bcd\u200b\u9700\u8981\u200b\u662f\u200b\u79fb\u52a8\u200b\u52a8\u8bcd\u200b\u3002
\u300c7\u200b\u6642\u200b\u306b\u200b\u56f3\u200b\u66f8\u9928\u200b\u306b\u200b\u884c\u200b\u304d\u307e\u3059\u3002\u300d\uff1a7\u200b\u70b9\u53bb\u200b\u56fe\u4e66\u9986\u200b\u3002
-
\u200b\u5b58\u5728\u200b\u53e5\u200b\u4e2d\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u5b58\u5728\u200b\u7684\u200b\u5730\u70b9\u200b\u3002
\u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u306b\u200b\u672c\u200b\u304c\u3042\u308a\u307e\u3059\u3002\u300d\uff1a\u200b\u56fe\u4e66\u9986\u200b\u91cc\u200b\u6709\u200b\u4e66\u200b\u3002 \u300c\u200b\u79c1\u200b\u306b\u306f\u200b\u59c9\u200b\u304c\u200b\u4e00\u4eba\u200b\u3044\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u6709\u200b\u4e00\u4e2a\u200b\u59d0\u59d0\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u3067\u300d\u200b\u7528\u4e8e\u200b
-
\u200b\u63a5\u200b\u540d\u8bcd\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u6267\u884c\u200b\u624b\u6bb5\u200b\u6216\u200b\u65b9\u6cd5\u200b\u3002
\u300c\u200b\u96fb\u8eca\u200b\u3067\u200b\u884c\u200b\u304d\u307e\u3059\u3002\u300d\uff1a\u200b\u5750\u200b\u7535\u8f66\u200b\u53bb\u200b\u3002
-
\u200b\u63a5\u200b\u5730\u70b9\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u53d1\u751f\u200b\u5730\u70b9\u200b\u3002
\u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u3067\u200b\u52c9\u5f37\u200b\u3057\u307e\u3059\u3002\u300d\uff1a\u200b\u5728\u200b\u56fe\u4e66\u9986\u200b\u5b66\u4e60\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u3092\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff08\u200b\u4ed6\u200b\u52a8\u8bcd\u200b\uff09\u200b\u6216\u200b\u4f7f\u5f79\u200b\u6001\u200b\uff08\u200b\u81ea\u52a8\u8bcd\u200b\uff09\u3002
\u300c\u200b\u672c\u200b\u3092\u200b\u8aad\u200b\u307f\u307e\u3059\u3002\u300d\uff1a\u200b\u770b\u4e66\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u304b\u3089\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u8d77\u70b9\u200b\u3002
\u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u304b\u3089\u200b\u51fa\u200b\u767a\u200b\u3057\u307e\u3059\u3002\u300d\uff1a\u200b\u4ece\u200b\u56fe\u4e66\u9986\u200b\u51fa\u53d1\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u3078\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\uff08\u200b\u79fb\u52a8\u200b\u52a8\u8bcd\u200b\uff09\u200b\u7684\u200b\u7ec8\u70b9\u200b\u3002\uff08\u200b\u53ef\u4ee5\u200b\u4e0e\u200b\u300c\u306b\u300d\u200b\u4e92\u6362\u200b\uff09
\u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u3078\u200b\u884c\u200b\u304d\u307e\u3059\u3002\u300d\uff1a\u200b\u53bb\u200b\u56fe\u4e66\u9986\u200b\u3002
\u200b\u683c\u200b\u52a9\u8bcd\u200b\u300c\u3088\u308a\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u6bd4\u8f83\u200b\u7684\u200b\u5bf9\u8c61\u200b\uff0c\u200b\u5176\u524d\u200b\u7684\u200b\u540d\u8bcd\u200b\u7684\u200b\u7a0b\u5ea6\u200b\u6bd4\u200b\u4e3b\u8bed\u200b\u7684\u200b\u7a0b\u5ea6\u200b\u5f31\u200b\u3002
\u300c\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u306f\u200b\u5317\u4eac\u5927\u5b66\u200b\u3088\u308a\u200b\u6709\u540d\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u6e05\u534e\u5927\u5b66\u200b\u6bd4\u200b\u5317\u4eac\u5927\u5b66\u200b\u6709\u540d\u200b\u3002
\u200b\u5728\u200b\u63cf\u8ff0\u200b\u53e5\u200b\u4e2d\u683c\u200b\u52a9\u8bcd\u200b\u300c\u307b\u3069\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u7a0b\u5ea6\u200b\uff0c\u200b\u7528\u4e8e\u200b\u5426\u5b9a\u53e5\u200b\u4e2d\u200b\u8868\u793a\u200b\u5176\u524d\u200b\u7684\u200b\u540d\u8bcd\u200b\u7684\u200b\u7a0b\u5ea6\u200b\u6bd4\u200b\u4e3b\u8bed\u200b\u7684\u200b\u7a0b\u5ea6\u200b\u5f3a\u200b\u3002
\u300c\u200b\u5317\u4eac\u5927\u5b66\u200b\u306f\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u307b\u3069\u200b\u6709\u540d\u200b\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u300d\uff1a\u200b\u5317\u4eac\u5927\u5b66\u200b\u6ca1\u6709\u200b\u6e05\u534e\u5927\u5b66\u200b\u6709\u540d\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_8","title":"\u526f\u200b\u52a9\u8bcd","text":"\u200b\u526f\u200b\u52a9\u8bcd\u200b\u7528\u4e8e\u200b\u4fee\u9970\u8bed\u200b\u6cd5\u200b\u6210\u5206\u200b\uff0c\u200b\u4efb\u4f55\u200b\u4e0d\u662f\u200b\u683c\u200b\u52a9\u8bcd\u200b\u3001\u200b\u63a5\u7eed\u200b\u52a9\u8bcd\u200b\u3001\u200b\u7ec8\u200b\u52a9\u8bcd\u200b\u7684\u200b\u52a9\u8bcd\u200b\u90fd\u200b\u662f\u200b\u526f\u200b\u52a9\u8bcd\u200b\u3002
\u306f\u307e\u3067\u3082\u306e\u307f\u3060\u3051\u3068\u304b\u304f\u3089\u3044\u304b \u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u306f\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u53e5\u5b50\u200b\u7684\u200b\u4e3b\u9898\u200b\uff0c\u200b\u8054\u7ed3\u200b\u524d\u200b\u4e00\u4e2a\u200b\u53e5\u5b50\u200b\u3002\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u5c06\u200b\u5176\u4ed6\u200b\u7684\u200b\u683c\u200b\u52a9\u8bcd\u200b\u4fee\u9970\u200b\u7684\u200b\u8bed\u6cd5\u200b\u6210\u5206\u200b\u4f5c\u4e3a\u200b\u4e3b\u9898\u200b\u3002\u300c\u306f\u300d\u200b\u6240\u200b\u4fee\u9970\u200b\u7684\u200b\u4e3b\u9898\u200b\u901a\u5e38\u200b\u5728\u200b\u53e5\u5b50\u200b\u7684\u200b\u5f00\u5934\u200b\u3002
-
\u200b\u5c06\u200b\u4e3b\u8bed\u200b\u4f5c\u4e3a\u200b\u4e3b\u9898\u200b\uff1a\u300c\u304c\u300d\u200b\u53d8\u4e3a\u200b\u300c\u306f\u300d
\u300c\u200b\u79c1\u200b\u306f\u200b\u5b66\u751f\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u662f\u200b\u5b66\u751f\u200b\u3002
-
\u200b\u5c06\u200b\u5730\u70b9\u200b\u4f5c\u4e3a\u200b\u4e3b\u9898\u200b\uff1a\u300c\u306b\u300d\u200b\u540e\u52a0\u200b\u300c\u306f\u300d
\u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u306e\u200b\u8fd1\u200b\u304f\u306b\u306f\u30b3\u30f3\u30d3\u30cb\u304c\u3042\u308a\u307e\u3059\u3002\u300d\uff1a\u200b\u56fe\u4e66\u9986\u200b\u9644\u8fd1\u200b\u6709\u200b\u4fbf\u5229\u5e97\u200b\u3002
\u200b\u6ce8\u610f\u200b\uff0c\u200b\u7591\u95ee\u8bcd\u200b\u4e0d\u80fd\u200b\u4f5c\u4e3a\u200b\u4e3b\u9898\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e0d\u80fd\u200b\u7528\u200b\u300c\u306f\u300d\u200b\u4fee\u9970\u200b\u7591\u95ee\u8bcd\u200b\uff0c\u200b\u53ea\u80fd\u200b\u7528\u200b\u300c\u304c\u300d\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u307e\u3067\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u65f6\u95f4\u200b\u3001\u200b\u5730\u70b9\u200b\u3001\u200b\u8303\u56f4\u200b\u7b49\u200b\u7684\u200b\u7ec8\u70b9\u200b\uff0c\u200b\u8868\u793a\u200b\u201c\u200b\u76f4\u5230\u200b\u201d\u3001\u201c\u200b\u5230\u200b\u2026\u2026\u200b\u4e3a\u6b62\u200b\u201d\u3002\u200b\u53ef\u4ee5\u200b\u548c\u200b\u300c\u304b\u3089\u300d\u200b\u4e00\u8d77\u200b\u7528\u200b\uff0c\u200b\u8868\u793a\u200b\u201c\u200b\u4ece\u200b\u2026\u2026\u200b\u5230\u200b\u2026\u2026\u201d\u3002
\u300c\u3055\u3063\u304d\u307e\u3067\u200b\u56f3\u200b\u66f8\u9928\u200b\u306b\u3044\u307e\u3057\u305f\u3002\u300d\uff1a\u200b\u521a\u624d\u200b\u4e00\u76f4\u200b\u5728\u200b\u56fe\u4e66\u9986\u200b\u3002\uff08\u200b\u65f6\u95f4\u200b\uff09 \u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u307e\u3067\u200b\u884c\u200b\u304d\u307e\u3057\u3087\u3046\u3002\u300d\uff1a\u200b\u53bb\u200b\u56fe\u4e66\u9986\u200b\u5427\u200b\u3002\uff08\u200b\u5730\u70b9\u200b\uff09
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u3082\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u201c\u200b\u4e5f\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e0e\u200b\u524d\u9762\u200b\u7684\u200b\u5185\u5bb9\u200b\u76f8\u540c\u200b\u7684\u200b\u4e8b\u7269\u200b\u3002
\u300c\u200b\u79c1\u200b\u3082\u200b\u5b66\u751f\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u4e5f\u200b\u662f\u200b\u5b66\u751f\u200b\u3002 \u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u8fd1\u200b\u304f\u306b\u3082\u200b\u7dcf\u200b\u5408\u200b\u68df\u200b\u304c\u3042\u308a\u307e\u3059\u3002\u300d\uff1a\u200b\u56fe\u4e66\u9986\u200b\u9644\u8fd1\u200b\u4e5f\u200b\u6709\u200b\u7efc\u5408\u697c\u200b\u3002
\u200b\u6ce8\u610f\u200b\u300c\u304c\u300d\u3001\u300c\u306f\u300d\u3001\u300c\u3082\u300d\u200b\u4e0d\u80fd\u200b\u540c\u65f6\u200b\u7528\u4e8e\u200b\u540c\u4e00\u4e2a\u200b\u4e3b\u8bed\u200b\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u306e\u307f\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u201c\u200b\u53ea\u6709\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e0e\u200b\u524d\u9762\u200b\u7684\u200b\u5185\u5bb9\u200b\u4e0d\u540c\u200b\u7684\u200b\u4e8b\u7269\u200b\u3002
\u300c\u304a\u200b\u4f1a\u8a08\u200b\u306f\u200b\u73fe\u91d1\u200b\u306e\u307f\u3067\u3059\u3002\u300d\uff1a\u200b\u53ea\u6536\u200b\u73b0\u91d1\u200b\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u3060\u3051\u300d\u200b\u7684\u200b\u542b\u4e49\u200b\u540c\u200b\u300c\u306e\u307f\u300d\uff0c\u200b\u4f46\u662f\u200b\u300c\u3060\u3051\u300d\u200b\u7684\u200b\u8bed\u6c14\u200b\u66f4\u52a0\u200b\u53e3\u8bed\u200b\u3002
\u300c\u304a\u200b\u4f1a\u8a08\u200b\u306f\u200b\u73fe\u91d1\u200b\u3060\u3051\u3067\u3059\u3002\u300d\uff1a\u200b\u53ea\u6536\u200b\u73b0\u91d1\u200b\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u3068\u304b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u201c\u200b\u4f8b\u5982\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u5217\u4e3e\u200b\u4e8b\u7269\u200b\u3002
\u300c\u200b\u79c1\u200b\u306f\u200b\u65e5\u672c\u200b\u8a9e\u200b\u3068\u304b\u200b\u82f1\u8a9e\u200b\u3068\u304b\u200b\u4e2d\u56fd\u200b\u8a9e\u200b\u3068\u304b\u200b\u8a71\u200b\u305b\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u4f1a\u200b\u8bf4\u200b\u65e5\u8bed\u200b\u3001\u200b\u82f1\u8bed\u200b\u3001\u200b\u6c49\u8bed\u200b\u7b49\u200b\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u304f\u3089\u3044\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u201c\u200b\u5927\u7ea6\u200b\u201d\u3001\u201c\u200b\u5de6\u53f3\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u6570\u91cf\u200b\u3002\u200b\u524d\u9762\u200b\u7684\u200b\u540d\u8bcd\u200b\u4ee5\u200b\u62e8\u97f3\u200b\u7ed3\u5c3e\u200b\u65f6\u200b\uff0c\u300c\u304f\u3089\u3044\u300d\u200b\u53d8\u4e3a\u200b\u300c\u3050\u3089\u3044\u300d\u3002
\u300c\u200b\u5168\u90e8\u200b\u3067100\u200b\u5186\u200b\u304f\u3089\u3044\u3067\u3059\u3002\u300d\uff1a\u200b\u4e00\u5171\u200b\u5927\u7ea6\u200b100\u200b\u65e5\u5143\u200b\u3002
\u200b\u526f\u200b\u52a9\u8bcd\u200b\u300c\u304b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e0d\u200b\u786e\u5b9a\u200b\u7684\u200b\u4e8b\u7269\u200b\u3002
\u300c\u3044\u3064\u304b\u200b\u56f3\u200b\u66f8\u9928\u200b\u306b\u200b\u884c\u200b\u304d\u307e\u3057\u3087\u3046\u3002\u300d\uff1a\u200b\u4ec0\u4e48\u200b\u65f6\u5019\u200b\u53bb\u200b\u56fe\u4e66\u9986\u200b\u5427\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_9","title":"\u63a5\u7eed\u200b\u52a9\u8bcd","text":"\u200b\u63a5\u7eed\u200b\u52a9\u8bcd\u200b\u7528\u4e8e\u200b\u8fde\u63a5\u200b\u4e24\u4e2a\u200b\u5206\u53e5\u200b\uff0c\u200b\u63a5\u200b\u5728\u200b\u7b2c\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u7684\u200b\u7ed3\u5c3e\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e24\u4e2a\u200b\u5206\u53e5\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5173\u7cfb\u200b\u3002
\u304c\u3051\u3069\u304b\u3089\u3068\u3082\u306e\u3067 \u300c\u304c\u300d\u200b\u5728\u200b\u5206\u53e5\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u65f6\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u8f7b\u5fae\u200b\u7684\u200b\u8f6c\u6298\u200b\u8bed\u6c14\u200b\u3002\u200b\u524d\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u867d\u7136\u200b\u2026\u2026\u201d\uff0c\u200b\u540e\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u4f46\u662f\u200b\u2026\u2026\u201d\u3002
\u300c\u200b\u79c1\u200b\u3067\u3059\u304c\u3001\u200b\u4f55\u200b\u3067\u3059\u304b\u3002\u300d\uff1a\u200b\u6211\u200b\u662f\u200b\uff0c\u200b\u6709\u200b\u4ec0\u4e48\u200b\u4e8b\u200b\u5417\u200b\uff1f
\u300c\u3051\u3069\u300d\u200b\u5728\u200b\u5206\u53e5\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u65f6\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u8f6c\u6298\u200b\u8bed\u6c14\u200b\u3002\u200b\u524d\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u867d\u7136\u200b\u2026\u2026\u201d\uff0c\u200b\u540e\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u4f46\u662f\u200b\u2026\u2026\u201d\u3002\u300c\u3051\u3069\u300d\u200b\u7684\u200b\u8bed\u6c14\u200b\u6bd4\u200b\u300c\u304c\u300d\u200b\u66f4\u52a0\u200b\u53e3\u8bed\u200b\uff0c\u200b\u662f\u200b\u300c\u3051\u308c\u3069\u3082\u300d\u200b\u7684\u200b\u7f29\u5199\u200b\u3002\u200b\u9664\u4e86\u200b\u300c\u3051\u3069\u300d\uff0c\u300c\u3051\u308c\u3069\u3082\u300d\u200b\u8fd8\u6709\u200b\u300c\u3051\u308c\u3069\u300d\u3001\u300c\u3051\u3069\u3082\u300d\u200b\u7b49\u200b\u7f29\u5199\u200b\u5f62\u5f0f\u200b\u3002
\u300c\u305d\u3046\u306a\u3093\u3067\u3059\u3051\u3069\u3001\u3084\u306f\u308a\u200b\u5927\u200b\u5909\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u867d\u7136\u200b\u662f\u200b\u8fd9\u6837\u200b\uff0c\u200b\u4f46\u662f\u200b\u8fd8\u662f\u200b\u5f88\u200b\u8f9b\u82e6\u200b\u3002
\u300c\u304b\u3089\u300d\u200b\u5728\u200b\u5206\u53e5\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u65f6\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u56e0\u679c\u5173\u7cfb\u200b\u3002\u200b\u524d\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u56e0\u4e3a\u200b\u2026\u2026\u201d\uff0c\u200b\u540e\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u6240\u4ee5\u200b\u2026\u2026\u201d\u3002\u200b\u5728\u200b\u8868\u793a\u200b\u56e0\u679c\u5173\u7cfb\u200b\u65f6\u200b\uff0c\u300c\u304b\u3089\u300d\u200b\u524d\u200b\u5fc5\u987b\u200b\u662f\u200b\u4e00\u4e2a\u200b\u53e5\u5b50\u200b\u3002\u300c\u304b\u3089\u300d\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u52a0\u200b\u540e\u8fb9\u200b\u7684\u200b\u5206\u53e5\u200b\uff0c\u200b\u7528\u4e8e\u200b\u9648\u8ff0\u200b\u539f\u56e0\u200b\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u304b\u3089\u3001\u200b\u6dbc\u200b\u3057\u3044\u200b\u6240\u200b\u306b\u200b\u884c\u200b\u304d\u307e\u3057\u3087\u3046\u3002\u300d\uff1a\u200b\u56e0\u4e3a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\uff0c\u200b\u6240\u4ee5\u200b\u53bb\u200b\u51c9\u5feb\u200b\u7684\u200b\u5730\u65b9\u200b\u5427\u200b\u3002
\u300c\u3068\u3082\u300d\u200b\u8868\u793a\u200b\u603b\u6570\u200b\uff0c\u200b\u76f8\u5f53\u4e8e\u200b\u6c49\u8bed\u200b\u4e2d\u200b\u7684\u200b\u201c\u200b\u5171\u200b\u201d\u3001\u201c\u200b\u90fd\u200b\u201d\u3002
\u300c\u304a\u200b\u4e8c\u4eba\u200b\u3068\u3082\u30db\u30c3\u30c8\u30b3\u30fc\u30d2\u30fc\u3067\u3088\u308d\u3057\u3044\u3067\u3059\u304b\u3002\u300d\uff1a\u200b\u4e24\u4f4d\u200b\u90fd\u200b\u8981\u200b\u559d\u200b\u70ed\u5496\u5561\u200b\u5417\u200b\uff1f
\u300c\u306e\u3067\u300d\u200b\u5728\u200b\u5206\u53e5\u200b\u7684\u200b\u7ed3\u5c3e\u200b\u65f6\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u56e0\u679c\u5173\u7cfb\u200b\u3002\u200b\u524d\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u56e0\u4e3a\u200b\u2026\u2026\u201d\uff0c\u200b\u540e\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u8868\u793a\u200b\u201c\u200b\u6240\u4ee5\u200b\u2026\u2026\u201d\u3002\u200b\u5728\u200b\u8868\u793a\u200b\u56e0\u679c\u5173\u7cfb\u200b\u65f6\u200b\uff0c\u300c\u306e\u3067\u300d\u200b\u524d\u200b\u662f\u200b\u4e00\u4e2a\u200b\u7b80\u4f53\u200b\u53e5\u200b\u3002\u200b\u5982\u679c\u200b\u300c\u306e\u3067\u300d\u200b\u524d\u200b\u662f\u200b\u4e00\u4e2a\u200b\u540d\u8bcd\u200b\u6216\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u200b\u9700\u8981\u200b\u5c06\u200b\u7b80\u4f53\u200b\u53e5\u200b\u7684\u200b\u300c\u3060\u300d\u200b\u53d8\u4e3a\u200b\u300c\u306a\u300d\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u306e\u3067\u3001\u200b\u6dbc\u200b\u3057\u3044\u200b\u6240\u200b\u306b\u200b\u884c\u200b\u304d\u307e\u3057\u3087\u3046\u3002\u300d\uff1a\u200b\u56e0\u4e3a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\uff0c\u200b\u6240\u4ee5\u200b\u53bb\u200b\u51c9\u5feb\u200b\u7684\u200b\u5730\u65b9\u200b\u5427\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_10","title":"\u7ec8\u200b\u52a9\u8bcd","text":"\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u7684\u200b\u7ec8\u200b\u52a9\u8bcd\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u53e5\u5b50\u200b\u7684\u200b\u8bed\u6c14\u200b\u53d8\u5316\u200b\u3002
\u304b\u306d\u3088\u3088\u306d \u300c\u304b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u7591\u95ee\u200b\u7684\u200b\u8bed\u6c14\u200b\u3002\u200b\u5728\u200b\u53e5\u5b50\u200b\u7684\u200b\u7ed3\u5c3e\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u7591\u95ee\u53e5\u200b\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u3067\u3059\u304b\u3002\u300d\uff1a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\u5417\u200b\uff1f
\u300c\u306d\u300d\u200b\u53ef\u4ee5\u200b\u8868\u8fbe\u200b\u786e\u8ba4\u200b\u6216\u200b\u611f\u53f9\u200b\u7684\u200b\u8bed\u6c14\u200b\u3002\u200b\u5f53\u200b\u300c\u306d\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u786e\u8ba4\u200b\u7684\u200b\u8bed\u6c14\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u8bfb\u200b\u5347\u8c03\u200b\uff1b\u200b\u5f53\u200b\u300c\u306d\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u611f\u53f9\u200b\u7684\u200b\u8bed\u6c14\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u8bfb\u200b\u964d\u8c03\u200b\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u571f\u66dc\u65e5\u200b\u3067\u3059\u306d\u3002\u300d\u200b\u4eca\u5929\u200b\u662f\u200b\u661f\u671f\u516d\u200b\u5427\u200b\uff1f\uff08\u200b\u786e\u8ba4\u200b\uff09 \u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u3067\u3059\u306d\u3002\u300d\uff1a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\u554a\u200b\u3002\uff08\u200b\u611f\u53f9\u200b\uff09
\u300c\u3088\u300d\u200b\u7528\u4e8e\u200b\u5f3a\u8c03\u200b\u81ea\u5df1\u200b\u7684\u200b\u89c2\u70b9\u200b\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u3067\u3059\u3088\u3002\u300d\uff1a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\u554a\u200b\u3002
\u300c\u3088\u306d\u300d\u200b\u540c\u65f6\u200b\u5305\u542b\u200b\u4e86\u200b\u300c\u3088\u300d\u200b\u548c\u200b\u300c\u306d\u300d\u200b\u7684\u200b\u8bed\u6c14\u200b\u3002
\u300c\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u3067\u3059\u3088\u306d\u3002\u300d\uff1a\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\uff0c\u200b\u5bf9\u200b\u5427\u200b\uff1f
"},{"location":"japanese/japanese-1-grammar/#_11","title":"\u300c\u306f\u300d\u200b\u4e0e\u200b\u300c\u304c\u300d","text":"\u200b\u52a9\u8bcd\u200b\u300c\u304c\u300d\u200b\u662f\u200b\u683c\u200b\u52a9\u8bcd\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e3b\u8bed\u200b\uff0c\u300c\u306f\u300d\u200b\u662f\u200b\u526f\u200b\u52a9\u8bcd\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u4e3b\u9898\u200b\u3002\u200b\u4e3b\u9898\u200b\u662f\u200b\u6307\u200b\u53e5\u5b50\u200b\u4e3b\u8981\u200b\u63cf\u8ff0\u200b\u7684\u200b\u8bdd\u9898\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7531\u200b\u4e3b\u8bed\u200b\u6216\u200b\u5176\u4ed6\u200b\u6210\u5206\u200b\u5145\u5f53\u200b\u3002
- \u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u306e\u200b\u8fd1\u200b\u304f\u306b\u306f\u30b3\u30f3\u30d3\u30cb\u304c\u3042\u308a\u307e\u3059\u3002\u300d
- \u300c\u30b3\u30f3\u30d3\u30cb\u306f\u200b\u56f3\u200b\u66f8\u9928\u200b\u306e\u200b\u8fd1\u200b\u304f\u306b\u3042\u308a\u307e\u3059\u3002\u300d
- \u300c\u200b\u56f3\u200b\u66f8\u9928\u200b\u306e\u3061\u304b\u304f\u306b\u30b3\u30f3\u30d3\u30cb\u304c\u3042\u308a\u307e\u3059\u3002\u300d
- \u200b\u7b2c\u200b1\u200b\u53e5\u200b\u4e2d\u200b\u4e3b\u8981\u200b\u5f3a\u8c03\u200b\u56fe\u4e66\u9986\u200b\u7684\u200b\u9644\u8fd1\u200b\u6709\u200b\u4fbf\u5229\u5e97\u200b\uff0c\u200b\u53e5\u5b50\u200b\u7684\u200b\u4e3b\u9898\u200b\u662f\u200b\u56fe\u4e66\u9986\u200b\u9644\u8fd1\u200b\u7684\u200b\u4e1c\u897f\u200b\uff1b\u200b\u7b2c\u200b2\u200b\u53e5\u200b\u4e2d\u200b\u4e3b\u8981\u200b\u5f3a\u8c03\u200b\u4fbf\u5229\u5e97\u200b\u5728\u200b\u56fe\u4e66\u9986\u200b\u9644\u8fd1\u200b\uff0c\u200b\u53e5\u5b50\u200b\u7684\u200b\u4e3b\u9898\u200b\u662f\u200b\u4fbf\u5229\u5e97\u200b\u3002
- \u200b\u7b2c\u200b3\u200b\u53e5\u200b\u4e0d\u200b\u5305\u542b\u200b\u4e3b\u9898\u200b\uff0c\u200b\u4ec5\u4ec5\u200b\u9648\u8ff0\u200b\u4e86\u200b\u56fe\u4e66\u9986\u200b\u9644\u8fd1\u200b\u6709\u200b\u4fbf\u5229\u5e97\u200b\u3002
\u200b\u5f53\u200b\u56de\u7b54\u200b\u7591\u95ee\u53e5\u200b\u65f6\u200b\uff0c\u200b\u5982\u679c\u200b\u7591\u95ee\u53e5\u200b\u662f\u200b\u7528\u200b\u300c\u304c\u300d\u200b\u63d0\u95ee\u200b\u7684\u200b\uff0c\u200b\u5728\u200b\u56de\u7b54\u200b\u7684\u200b\u65f6\u5019\u200b\u4e5f\u200b\u9700\u8981\u200b\u7528\u200b\u300c\u304c\u300d\u3002
\u200b\u901a\u5e38\u200b\u6765\u8bf4\u200b\uff1a
- \u300c\u306f\u300d\u200b\u901a\u5e38\u200b\u7528\u4e8e\u200b\u63d0\u793a\u200b\u5df2\u6709\u200b\u7684\u200b\u4fe1\u606f\u200b\uff0c\u300c\u304c\u300d\u200b\u7528\u4e8e\u200b\u63d0\u793a\u200b\u65b0\u200b\u7684\u200b\u4fe1\u606f\u200b\u3002
- \u300c\u306f\u300d\u200b\u5f3a\u8c03\u200b\uff08\u200b\u4f20\u8fbe\u200b\uff09\u200b\u7684\u200b\u901a\u5e38\u200b\u662f\u200b\u300c\u306f\u300d\u200b\u540e\u9762\u200b\u7684\u200b\u5185\u5bb9\u200b\uff0c\u300c\u304c\u300d\u200b\u5f3a\u8c03\u200b\uff08\u200b\u4f20\u8fbe\u200b\uff09\u200b\u7684\u200b\u901a\u5e38\u200b\u662f\u200b\u300c\u304c\u300d\u200b\u524d\u9762\u200b\u7684\u200b\u5185\u5bb9\u200b\u3002
- \u200b\u7528\u4e8e\u200b\u5f62\u5bb9\u200b\u80fd\u529b\u200b\u7684\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff08\u300c\u3058\u3087\u3046\u305a\u300d\u3001\u300c\u3078\u305f\u300d\u3001\u300c\u200b\u597d\u200b\u304d\u300d\u3001\u300c\u3068\u304f\u3044\u300d\uff09\u200b\u6216\u200b\u52a8\u8bcd\u200b\uff08\u300c\u3067\u304d\u308b\u300d\u3001\u300c\u308f\u304b\u308b\u300d\uff09\u200b\u7684\u200b\u4e3b\u8bed\u200b\u53ea\u80fd\u200b\u7528\u200b\u300c\u304c\u300d\uff0c\u200b\u4e0d\u80fd\u200b\u7528\u200b\u300c\u306f\u300d\u3002
"},{"location":"japanese/japanese-1-grammar/#_12","title":"\u63a5\u7eed\u8bcd","text":"\u200b\u63a5\u7eed\u8bcd\u200b\u653e\u5728\u200b\u53e5\u5b50\u200b\u7684\u200b\u5f00\u5934\u200b\uff0c\u200b\u540e\u9762\u200b\u53ef\u4ee5\u200b\u63a5\u200b\u53e5\u5b50\u200b\u6216\u200b\u77ed\u8bed\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u8be5\u53e5\u200b\u548c\u200b\u524d\u200b\u4e00\u53e5\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5173\u7cfb\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_13","title":"\u3057\u304b\u3057","text":"\u300c\u3057\u304b\u3057\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u8f6c\u6298\u200b\u5173\u7cfb\u200b\uff0c\u200b\u76f8\u5f53\u4e8e\u200b\u6c49\u8bed\u200b\u4e2d\u200b\u7684\u200b\u201c\u200b\u4f46\u662f\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u53e5\u5b50\u200b\u7684\u200b\u5f00\u5934\u200b\u3002
\u300c\u3057\u304b\u3057\u3001\u200b\u4eca\u65e5\u200b\u306f\u200b\u6691\u200b\u3044\u3067\u3059\u306d\u3002\u300d\uff1a\u200b\u4f46\u662f\u200b\uff0c\u200b\u4eca\u5929\u200b\u5f88\u200b\u70ed\u200b\u5427\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_14","title":"\u3067\u3082","text":"\u300c\u3067\u3082\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u8f6c\u6298\u200b\u5173\u7cfb\u200b\uff0c\u200b\u76f8\u5f53\u4e8e\u200b\u6c49\u8bed\u200b\u4e2d\u200b\u7684\u200b\u201c\u200b\u4f46\u662f\u200b\u201d\uff0c\u200b\u8bed\u6c14\u200b\u6bd4\u200b\u300c\u3057\u304b\u3057\u300d\u200b\u66f4\u52a0\u200b\u53e3\u8bed\u200b\u3002
\u300c\u3067\u3082\u3001\u200b\u5348\u200b\u5f8c\u200b\u304b\u3089\u306f\u200b\u6dbc\u200b\u3057\u304f\u306a\u308a\u307e\u3059\u3002\u300d\uff1a\u200b\u4f46\u662f\u200b\uff0c\u200b\u4ece\u200b\u4e0b\u5348\u200b\u5f00\u59cb\u200b\u4f1a\u200b\u51c9\u5feb\u200b\u4e00\u4e9b\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_15","title":"\u305d\u308c\u304b\u3089","text":"\u300c\u305d\u308c\u304b\u3089\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u987a\u63a5\u200b\u5173\u7cfb\u200b\uff0c\u200b\u76f8\u5f53\u4e8e\u200b\u6c49\u8bed\u200b\u4e2d\u200b\u7684\u200b\u201c\u200b\u7136\u540e\u200b\u201d\uff0c\u200b\u7528\u4e8e\u200b\u53e5\u5b50\u200b\u7684\u200b\u5f00\u5934\u200b\u3002
\u300c\u305d\u308c\u304b\u3089\u3001\u200b\u56f3\u200b\u66f8\u9928\u200b\u306b\u200b\u884c\u200b\u304d\u307e\u3057\u3087\u3046\u3002\u300d\uff1a\u200b\u7136\u540e\u200b\uff0c\u200b\u53bb\u200b\u56fe\u4e66\u9986\u200b\u5427\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_16","title":"\u8bed\u6cd5","text":""},{"location":"japanese/japanese-1-grammar/#_17","title":"\u656c\u4f53\u200b\u53e5\u200b\u53ca\u200b\u65f6\u6001\u53d8\u5316","text":""},{"location":"japanese/japanese-1-grammar/#_18","title":"\u540d\u8bcd\u200b\u53e5\u200b\u4e0e\u200b\u52a8\u200b\u8bcd\u53e5","text":"\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u7684\u200b\u65f6\u6001\u53d8\u5316\u200b\u4e3b\u8981\u200b\u6709\u200b\u73b0\u5728\u200b\u548c\u200b\u8fc7\u53bb\u200b\u65f6\u200b\u3002\u200b\u540d\u8bcd\u200b\u656c\u4f53\u200b\u53e5\u200b\u4ee5\u200b\u300c\u3067\u3059\u300d\u200b\u7ed3\u53e5\u200b\uff0c\u200b\u5176\u200b\u5728\u200b\u4e0d\u540c\u200b\u65f6\u6001\u200b\u4e0b\u200b\u7684\u200b\u53d8\u5f62\u200b\u5982\u4e0b\u200b\uff1a
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \u301c\u3067\u3059\u3002 \u301c\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 \u200b\u8fc7\u53bb\u200b \u301c\u3067\u3057\u305f\u3002 \u301c\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \u300c\u3067\u306f\u300d\u200b\u53ef\u4ee5\u200b\u66ff\u6362\u6210\u200b\u300c\u3058\u3083\u300d\u3002
\u200b\u52a8\u8bcd\u200b\u656c\u4f53\u200b\u53e5\u200b\u4ee5\u200b\u300c\u307e\u3059\u300d\u200b\u7ed3\u53e5\u200b\uff0c\u200b\u5176\u200b\u5728\u200b\u4e0d\u540c\u200b\u65f6\u6001\u200b\u4e0b\u200b\u7684\u200b\u53d8\u5f62\u200b\u5982\u4e0b\u200b\uff1a
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \u301c\u307e\u3059\u3002 \u301c\u307e\u305b\u3093\u3002 \u200b\u8fc7\u53bb\u200b \u301c\u307e\u3057\u305f\u3002 \u301c\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \u200b\u5b58\u5728\u200b\u53e5\u200b\u7684\u200b\u52a8\u8bcd\u200b\u6709\u200b\u4e24\u79cd\u200b\uff0c\u200b\u5373\u200b\u300c\u3042\u308b\u300d\uff08\u3042\u308a\u307e\u3059\uff09\u200b\u548c\u200b\u300c\u3044\u308b\u300d\uff08\u3044\u307e\u3059\uff09\uff0c\u200b\u5176\u4e2d\u200b\u300c\u3042\u308b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u65e0\u200b\u751f\u547d\u200b\u7684\u200b\u4e8b\u7269\u200b\uff0c\u300c\u3044\u308b\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u6709\u200b\u751f\u547d\u200b\u7684\u200b\u4e8b\u7269\u200b\u3002
\u200b\u8868\u793a\u200b\u63d0\u8bae\u200b\u65f6\u200b\uff0c\u200b\u7528\u200b\u300c\u307e\u3057\u3087\u3046\u300d\u200b\u6216\u200b\u300c\u307e\u3057\u3087\u3046\u304b\u300d\u200b\u4ee3\u66ff\u200b\u300c\u307e\u3059\u300d\u3002\u200b\u8868\u793a\u200b\u63a8\u6d4b\u200b\u65f6\u200b\uff0c\u200b\u7528\u200b\u300c\u3067\u3057\u3087\u3046\u300d\u200b\u4ee3\u66ff\u200b\u300c\u3067\u3059\u300d\u3002
"},{"location":"japanese/japanese-1-grammar/#_19","title":"\u63cf\u8ff0\u200b\u53e5","text":"\u200b\u5bf9\u4e8e\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u200b\u5176\u200b\u5728\u200b\u4e0d\u540c\u200b\u65f6\u6001\u200b\u4e0b\u200b\u7684\u200b\u53d8\u5f62\u200b\u5982\u4e0b\u200b\uff08\u201c\uff5e\u201d\u200b\u6307\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u8bcd\u5e72\u200b\uff0c\u200b\u5373\u200b\u53bb\u6389\u200b\u300c\u3044\u300d\u200b\u7684\u200b\u90e8\u5206\u200b\uff09\uff1a
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \u301c\u3044\u3067\u3059\u3002 \u301c\u304f\u3042\u308a\u307e\u305b\u3093\u3002 \u200b\u8fc7\u53bb\u200b \u301c\u304b\u3063\u305f\u3067\u3059\u3002 \u301c\u304f\u3042\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 \u200b\u6ce8\u610f\u200b\u300c\u306a\u3044\u300d\u200b\u4e5f\u200b\u662f\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u300c\u3042\u308a\u307e\u305b\u3093\u300d\u200b\u548c\u200b\u300c\u306a\u3044\u3067\u3059\u300d\u200b\u7b49\u4ef7\u200b\u3002\u200b\u56e0\u6b64\u200b\u8fd8\u6709\u200b\u5982\u4e0b\u200b\u53d8\u5f62\u200b\uff1a
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \u301c\u3044\u3067\u3059\u3002 \uff5e\u304f\u306a\u3044\u3067\u3059\u3002 \u200b\u8fc7\u53bb\u200b \u301c\u304b\u3063\u305f\u3067\u3057\u305f\u3002 \u301c\u304f\u306a\u304b\u3063\u305f\u3067\u3059 \u200b\u4ee5\u4e0b\u200b\u4e24\u4e2a\u200b\u53e5\u5b50\u200b\u7b49\u4ef7\u200b\uff1a
\u300c\u200b\u79c1\u200b\u306f\u200b\u9ad8\u200b\u304f\u306a\u3044\u3067\u3059\u3002\u300d \u300c\u200b\u79c1\u200b\u306f\u200b\u9ad8\u200b\u304f\u3042\u308a\u307e\u305b\u3093\u3002\u300d
II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff08\u200b\u5f62\u5bb9\u200b\u52a8\u8bcd\u200b\uff09\u200b\u7684\u200b\u53d8\u5f62\u200b\u548c\u200b\u540d\u8bcd\u200b\u76f8\u540c\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_20","title":"\u52a8\u200b\u8bcd\u53e5\u200b\u7684\u200b\u8fdb\u884c\u200b\u65f6\u200b\u4e0e\u200b\u5b8c\u6210\u200b\u65f6","text":"\u300c\u3066\u3044\u307e\u3059\u300d\u200b\u4e0e\u200b\u6301\u7eed\u6027\u200b\u52a8\u8bcd\u200b\u8fde\u7528\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u8fdb\u884c\u200b\u65f6\u200b\uff1b\u200b\u4e0e\u200b\u77ac\u95f4\u200b\u52a8\u8bcd\u200b\u8fde\u7528\u200b\u65f6\u200b\uff0c\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u5b8c\u6210\u200b\u65f6\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_21","title":"\u987a\u63a5\u200b\u5173\u7cfb","text":"\u200b\u4e24\u4e2a\u200b\u5206\u53e5\u200b\u5982\u679c\u200b\u4e0d\u662f\u200b\u8868\u793a\u200b\u8f6c\u6298\u200b\u3001\u200b\u6761\u4ef6\u200b\u7b49\u200b\u5173\u7cfb\u200b\uff0c\u200b\u8868\u793a\u200b\u987a\u63a5\u200b\u5173\u7cfb\u200b\u65f6\u200b\uff0c\u200b\u6784\u6210\u200b\u987a\u63a5\u200b\u5173\u7cfb\u200b\u3002\u200b\u7b2c\u4e00\u4e2a\u200b\u4ece\u53e5\u200b\u7684\u200b\u53e5\u200b\u5c3e\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u300c\u3066\u300d\u200b\u578b\u200b\uff08\u200b\u8fde\u7528\u200b\u578b\u200b\uff09\u200b\u7ed3\u5c3e\u200b\u3002
\u300c\u200b\u79c1\u200b\u306f\u200b\u65e5\u672c\u200b\u8a9e\u200b\u3092\u200b\u52c9\u5f37\u200b\u3057\u3066\u3001\u200b\u4e2d\u56fd\u200b\u8a9e\u200b\u3092\u200b\u52c9\u5f37\u200b\u3057\u307e\u3059\u3002\u300d\uff1a\u200b\u6211\u200b\u5b66\u4e60\u200b\u65e5\u8bed\u200b\uff0c\u200b\u4e5f\u200b\u5b66\u4e60\u200b\u6c49\u8bed\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_22","title":"\u5f62\u5f0f\u200b\u4f53\u8a00","text":"\u200b\u5f62\u5f0f\u200b\u4f53\u8a00\u200b\u662f\u200b\u6307\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u62bd\u8c61\u6982\u5ff5\u200b\u7684\u200b\u540d\u8bcd\u200b\uff0c\u200b\u5982\u200b\u300c\u3053\u3068\u300d\u3001\u300c\u306e\u300d\u3001\u300c\u3082\u306e\u300d\u200b\u7b49\u200b\u3002\u200b\u5f62\u5f0f\u200b\u4f53\u8a00\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u52a8\u4f5c\u200b\u7684\u200b\u4e3b\u8bed\u200b\u6216\u200b\u5bbe\u8bed\u200b\uff0c\u200b\u4e0e\u200b\u52a8\u8bcd\u200b\u539f\u578b\u200b\u8fde\u7528\u200b\u65f6\u200b\u76f8\u5f53\u4e8e\u200b\u52a8\u540d\u8bcd\u200b\u3002
\u200b\u5f62\u5f0f\u200b\u4f53\u8a00\u200b \u200b\u542b\u4e49\u200b \u3053\u3068 \u200b\u4e8b\u60c5\u200b\uff08\u200b\u4e00\u822c\u200b\u8868\u793a\u200b\u4e8b\u60c5\u200b\u3001\u200b\u4e8b\u5b9e\u200b\u3001\u200b\u5185\u5bb9\u200b\uff09 \u306e \u200b\u4e8b\u60c5\u200b\uff08\u200b\u4e00\u822c\u200b\u8868\u793a\u200b\u4eba\u200b\u3001\u200b\u4e8b\u200b\u3001\u200b\u7269\u200b\uff09 \u3068\u3053\u308d \u200b\u5730\u70b9\u200b\uff08\u200b\u7528\u6765\u200b\u505a\u200b\u2026\u2026\uff09 \u3082\u306e \u200b\u7269\u54c1\u200b\uff08\u200b\u7528\u6765\u200b\u505a\u200b\u2026\u2026\uff09 \u200b\u56f3\u200b\u66f8\u9928\u200b\u306f\u200b\u52c9\u5f37\u200b\u3059\u308b\u3068\u3053\u308d\u3067\u3059\u3002\uff1a\u200b\u56fe\u4e66\u9986\u200b\u662f\u200b\u5b66\u4e60\u200b\u7684\u200b\u5730\u65b9\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_23","title":"\u6bd4\u8f83\u7ea7\u200b\u4e0e\u200b\u6700\u9ad8\u7ea7","text":"\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u6bd4\u8f83\u200b\u7684\u200b\u52a9\u8bcd\u200b\u4e3a\u200b\u300c\u3088\u308a\u300d\u200b\u548c\u200b\u300c\u307b\u3069\u300d\u3002\u200b\u8981\u200b\u8868\u793a\u200b\u201cA\u200b\u6bd4\u200bB\u200b\u66f4\u200b\u2026\u2026\u201d\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u7684\u200b\u8868\u8fbe\u65b9\u5f0f\u200b\uff1a
- \u300cA\u306fB\u3088\u308a\u301c\u300d\uff0c\u200b\u8868\u793a\u200b\u201cA\u200b\u6bd4\u200bB\u200b\u66f4\u200b\u2026\u2026\u201d\uff0c\u200b\u5728\u200b\u53e3\u8bed\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u300cA\u306f\u300d\u200b\u6765\u200b\u66f4\u200b\u591a\u200b\u5f3a\u8c03\u200b\u7528\u4e8e\u200b\u6bd4\u8f83\u200b\u7684\u200b\u57fa\u51c6\u200b\u3002
- \u300cB\u3088\u308aA\u306e\u200b\u65b9\u200b\u304c\u300d\u200b\u8868\u793a\u200b\u201cA\u200b\u6bd4\u200bB\u200b\u66f4\u200b\u2026\u2026\u201d\uff0c\u200b\u5728\u200b\u53e3\u8bed\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u300cB\u3088\u308a\u300d\uff0c\u200b\u66f4\u200b\u591a\u200b\u5f3a\u8c03\u200b\u4e3b\u8bed\u200bA\u3002
- \u300cB\u306fA\u307b\u3069\u301c\u3042\u308a\u307e\u305b\u3093\u300d\uff0c\u200b\u8868\u793a\u200b\u201cB\u200b\u4e0d\u5982\u200bA\u2026\u2026\u201d\u3002
\u200b\u5728\u200b\u7591\u95ee\u53e5\u200b\u4e2d\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200b\u300cA\u3068B\u3068\u3069\u3061\u3089\u306e\u200b\u65b9\u200b\u304c\u301c\u3067\u3059\u304b\u300d\u200b\u6765\u200b\u8be2\u95ee\u200bA\u200b\u548c\u200bB\u200b\u54ea\u4e2a\u200b\u66f4\u200b\u2026\u2026\u3002\u200b\u5176\u4e2d\u200b\u300c\u306e\u200b\u65b9\u200b\u300d\u200b\u8868\u793a\u200b\u201c\u2026\u2026\u200b\u7684\u200b\u7a0b\u5ea6\u200b\u201d\uff0c\u200b\u5728\u200b\u95ee\u53e5\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u3002\u200b\u6ce8\u610f\u200b\u5728\u200b\u56de\u7b54\u200b\u7591\u95ee\u53e5\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200b\u300c\u304c\u300d\u3002\u200b\u5982\u679c\u200b\u4e24\u8005\u200b\u7a0b\u5ea6\u200b\u5dee\u4e0d\u591a\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200b\u300c\u3069\u3061\u3089\u3082\u301c\u300d\u200b\u56de\u7b54\u200b\u3002
\u300c\u200b\u5317\u4eac\u5927\u5b66\u200b\u3068\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u3068\u3069\u3061\u3089\u306e\u200b\u65b9\u200b\u304c\u200b\u6709\u540d\u200b\u3067\u3059\u304b\u3002\u300d\uff1a\u200b\u5317\u4eac\u5927\u5b66\u200b\u548c\u200b\u6e05\u534e\u5927\u5b66\u200b\u54ea\u4e2a\u200b\u66f4\u200b\u6709\u540d\u200b\uff1f \u300c\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u306e\u200b\u65b9\u200b\u304c\u200b\u6709\u540d\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u5317\u4eac\u5927\u5b66\u200b\u66f4\u200b\u6709\u540d\u200b\u3002 \u200b\u6216\u200b \u300c\u3069\u3061\u3089\u3082\u200b\u6709\u540d\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u4e24\u4e2a\u200b\u90fd\u200b\u6709\u540d\u200b\u3002
\u200b\u65e5\u8bed\u200b\u4e2d\u200b\u8868\u8fbe\u200b\u6700\u9ad8\u7ea7\u200b\u7684\u200b\u65b9\u5f0f\u200b\u6709\u200b\u4e24\u79cd\u200b\uff1a
-
\u200b\u526f\u8bcd\u200b\u300c\u200b\u4e00\u756a\u200b\u300d\uff0c\u200b\u8868\u793a\u200b\u201c\u200b\u6700\u200b\u2026\u2026\u201d\uff0c\u200b\u5728\u200b\u53e5\u5b50\u200b\u4e2d\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u300c\u301c\u306e\u200b\u4e2d\u200b\u3067\u300d\u200b\u6765\u200b\u9650\u5236\u200b\u6bd4\u8f83\u200b\u7684\u200b\u8303\u56f4\u200b\u3002
\u300c\u200b\u5317\u4eac\u200b\u306e\u200b\u5927\u5b66\u200b\u306e\u200b\u4e2d\u200b\u3067\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u304c\u200b\u4e00\u756a\u200b\u6709\u540d\u200b\u3067\u3059\u3002\u300d\uff1a\u200b\u5728\u200b\u5317\u4eac\u200b\u7684\u200b\u5927\u5b66\u200b\u4e2d\u200b\uff0c\u200b\u6e05\u534e\u5927\u5b66\u200b\u6700\u200b\u6709\u540d\u200b\u3002
-
\u200b\u4f7f\u7528\u200b\u201c\u200b\u6ca1\u6709\u200b\u6bd4\u200b\u2026\u2026\u200b\u66f4\u200b\u2026\u2026\u201d\u200b\u7684\u200b\u53e5\u5f0f\u200b\uff0c\u200b\u5373\u200b\u300cA\u307b\u3069\u301cB\u306f\u3042\u308a\u307e\u305b\u3093\u300d\u3002\u200b\u5176\u4e2d\u200b\uff0cB\u200b\u4e3a\u200b\u5f62\u5f0f\u200b\u4f53\u8a00\u200b\uff0c\u200b\u8868\u793a\u200b\u201c\u2026\u2026\u200b\u7684\u200b\u4e1c\u897f\u200b\u201d\u3002\u200b\u6ce8\u610f\u200b\u7528\u4e8e\u200b\u6709\u200b\u751f\u547d\u200b\u7684\u200b\u4e8b\u7269\u200b\u65f6\u200b\uff0c\u200b\u9700\u8981\u200b\u7528\u200b\u300c\u3044\u307e\u305b\u3093\u300d\u3002
\u300c\u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b\u307b\u3069\u200b\u6709\u540d\u200b\u306a\u200b\u5927\u5b66\u200b\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u300d\uff1a\u200b\u6ca1\u6709\u200b\u6bd4\u200b\u6e05\u534e\u5927\u5b66\u200b\u66f4\u200b\u6709\u540d\u200b\u7684\u200b\u5927\u5b66\u200b\u4e86\u200b\u3002
\u200b\u63d0\u95ee\u200b\u6700\u9ad8\u7ea7\u200b\u65f6\u200b\u7684\u200b\u4e00\u822c\u200b\u53e5\u5f0f\u200b\u4e3a\u200b\u300cA\u3067\u3069\u3053\u304c\u200b\u4e00\u756a\u200b\u301c\u3067\u3059\u304b\u300d\u200b\u6216\u200b\u300cA\u3067\u3069\u306e\u301c\u304c\u200b\u4e00\u756a\u200b\u301c\u3067\u3059\u304b\u300d\uff0c\u200b\u610f\u200b\u4e3a\u200bA\u200b\u4e2d\u200b\u6700\u200b\u2026\u2026\u200b\u7684\u200b\u662f\u200b\u54ea\u4e2a\u200b\u2026\u2026\u3002
"},{"location":"japanese/japanese-1-grammar/#_24","title":"\u7b80\u4f53\u200b\u53e5","text":"\u200b\u5f53\u200b\u4f7f\u7528\u200b\u63a5\u7eed\u200b\u52a9\u8bcd\u200b\u300c\u306e\u3067\u300d\u200b\u65f6\u200b\uff0c\u200b\u524d\u200b\u4e00\u4e2a\u200b\u5206\u53e5\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u7b80\u4f53\u200b\u53e5\u200b\u3002
"},{"location":"japanese/japanese-1-grammar/#_25","title":"\u540d\u8bcd\u200b\u53e5","text":"\u200b\u5bf9\u4e8e\u200b\u53e5\u5b50\u200b\u7ed3\u5c3e\u200b\u662f\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u7b80\u4f53\u200b\u53e5\u200b\u65e0\u9700\u200b\u505a\u51fa\u200b\u53d8\u5316\u200b\u3002
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \uff5e\u3044 \uff5e\u304f\u306a\u3044 \u200b\u8fc7\u53bb\u200b \uff5e\u304b\u3063\u305f \uff5e\u304f\u306a\u304b\u3063\u305f \u200b\u5bf9\u4e8e\u200b\u53e5\u5b50\u200b\u7ed3\u5c3e\u200b\u662f\u200b\u540d\u8bcd\u200b\u548c\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u7b80\u4f53\u200b\u53e5\u200b\u662f\u200b\u5728\u200b\u53e5\u200b\u5c3e\u200b\u52a0\u4e0a\u200b\u300c\u3060\u300d\uff08II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u7684\u200b\u539f\u578b\u200b\uff09\u3002\u200b\u8fc7\u53bb\u200b\u65f6\u200b\u7b80\u4f53\u200b\u53e5\u200b\u662f\u200b\u5728\u200b\u53e5\u200b\u5c3e\u200b\u52a0\u4e0a\u200b\u300c\u3060\u3063\u305f\u300d\u3002\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b\u52a0\u4e0a\u200b\u300c\u3067\u306f\u306a\u3044\u300d\u200b\u6216\u200b\u300c\u3067\u306f\u306a\u3063\u304b\u305f\u300d\u3002
\u200b\u80af\u5b9a\u200b \u200b\u5426\u5b9a\u200b \u200b\u73b0\u5728\u200b \u301c\u3060 \u301c\u3067\u306f\u306a\u3044 \u200b\u8fc7\u53bb\u200b \u301c\u3060\u3063\u305f \u301c\u3067\u306f\u306a\u304b\u3063\u305f"},{"location":"japanese/japanese-1-grammar/#_26","title":"\u52a8\u200b\u8bcd\u53e5","text":"\u200b\u5728\u200b\u7b80\u4f53\u200b\u53e5\u200b\u4e2d\u200b\uff0c\u200b\u52a8\u8bcd\u200b\u4f7f\u7528\u200b\u5176\u200b\u539f\u578b\u200b\u3002\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b\u4e2d\u200b\u4f7f\u7528\u200b\u5176\u200b\u306a\u3044\u200b\u578b\u200b\uff0c\u200b\u8fc7\u53bb\u200b\u65f6\u200b\u4f7f\u7528\u200b\u5176\u200b\u305f\u200b\u578b\u200b\u3002\u200b\u6ce8\u610f\u200b\u300c\u306a\u3044\u300d\u200b\u662f\u200bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5176\u200b\u8fc7\u53bb\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b\u4e3a\u200b\u300c\u306a\u304b\u3063\u305f\u300d\u3002
"},{"location":"japanese/japanese-1-grammar/#_27","title":"\u306e\u3067\u3059/\u3093\u3067\u3059\u200b\u7ed3\u6784","text":"\u300c\u306e\u3067\u3059\u300d\u200b\u548c\u200b\u300c\u3093\u3067\u3059\u300d\u200b\u591a\u200b\u7528\u4e8e\u200b\u53e3\u8bed\u200b\uff0c\u200b\u8868\u793a\u200b\u89e3\u91ca\u200b\u3001\u200b\u8bf4\u660e\u200b\u3001\u200b\u8bf7\u6c42\u200b\u3001\u200b\u5efa\u8bae\u200b\u7b49\u200b\u8bed\u6c14\u200b\u3002II\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u6216\u200b\u540d\u8bcd\u200b\u9700\u8981\u200b\u5728\u200b\u7b80\u4f53\u200b\u53e5\u200b\u5f62\u5f0f\u200b\u540e\u200b\u52a0\u4e0a\u200b\u300c\u306a\u300d\uff0c\u200b\u518d\u200b\u52a0\u200b\u300c\u306e\u3067\u3059\u300d\u200b\u6216\u200b\u300c\u3093\u3067\u3059\u300d\uff1bI\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b\u76f4\u63a5\u200b\u52a0\u200b\u300c\u306e\u3067\u3059\u300d\u200b\u6216\u200b\u300c\u3093\u3067\u3059\u300d\u3002
"},{"location":"japanese/japanese-1-pattern/","title":"\u65e5\u8bed\u200b(1)\u200b\u77ed\u8bed\u200b\u4e0e\u200b\u8868\u8fbe","text":""},{"location":"japanese/japanese-1-pattern/#1-4","title":"1-4\u200b\u8bfe","text":" - \u300c\u304a\u3084\u3059\u307f\u306a\u3055\u3044\u300d\uff1a\u200b\u665a\u5b89\u200b
- \u300c\u304a\u200b\u75b2\u200b\u308c\u200b\u69d8\u200b\u300d\uff1a\u200b\u8f9b\u82e6\u200b\u4e86\u200b
- \u300c\u308f\u304b\u308a\u307e\u3057\u305f\u300d\uff1a\u200b\u6211\u200b\u77e5\u9053\u200b\u4e86\u200b
- \u300c\u200b\u521d\u200b\u3081\u307e\u3057\u3066\u300d\uff1a\u200b\u521d\u6b21\u89c1\u9762\u200b
- \u300c\u304a\u200b\u5143\u200b\u6c17\u200b\u3067\u3059\u304b\u300d\uff1a\u200b\u60a8\u597d\u200b\u5417\u200b\uff1f
- \u300c\u304a\u304b\u3052\u3055\u307e\u3067\u3001\u200b\u5143\u200b\u6c17\u200b\u3067\u3059\u300d\uff1a\u200b\u8c22\u8c22\u60a8\u200b\uff0c\u200b\u6211\u200b\u5f88\u200b\u597d\u200b\u3002
- \u300c\u200b\u884c\u200b\u3063\u3066\u304d\u307e\u3059\u300d\uff1a\u200b\u6211\u200b\u8d70\u200b\u4e86\u200b
- \u300c\u200b\u884c\u200b\u3063\u3066\u3089\u3063\u3057\u3083\u3044\u300d\uff1a\u200b\u4e00\u8def\u987a\u98ce\u200b
- \u300c\u305f\u3060\u3044\u307e\u300d\uff1a\u200b\u6211\u200b\u56de\u6765\u200b\u4e86\u200b
- \u300c\u304a\u200b\u5e30\u200b\u308a\u306a\u3055\u3044\u300d\uff1a\u200b\u6b22\u8fce\u200b\u56de\u6765\u200b
- \u300c\u3055\u3088\u3046\u306a\u3089\u300d\uff1a\u200b\u518d\u89c1\u200b
- \u300c\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u300d\uff1a\u200b\u975e\u5e38\u200b\u611f\u8c22\u60a8\u200b
- \u300c\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3057\u305f\u300d\uff1a\u200b\u975e\u5e38\u200b\u611f\u8c22\u60a8\u200b
"},{"location":"japanese/japanese-1-pattern/#5","title":"\u7b2c\u200b5\u200b\u8bfe","text":" - \u300c\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059\u300d\uff1a\u200b\u65e9\u4e0a\u597d\u200b
- \u300c\u3053\u3093\u306b\u3061\u306f\u300d\uff1a\u200b\u4f60\u597d\u200b
- \u300c\u3053\u3093\u3070\u3093\u306f\u300d\uff1a\u200b\u665a\u4e0a\u200b\u597d\u200b
- \u300c\u3088\u308d\u3057\u304f\u304a\u200b\u9858\u200b\u3044\u3057\u307e\u3059\u300d\u3001\u300c\u3088\u308d\u3057\u304f\u304a\u200b\u9858\u200b\u3044\u3044\u305f\u3057\u307e\u3059\u300d\uff1a\u200b\u8bf7\u591a\u5173\u7167\u200b
- \u200b\u5173\u4e8e\u200b\u95ee\u53e5\u200b
- \u200b\u80af\u5b9a\u200b\u56de\u590d\u200b\uff1a\u300c\u306f\u3044\u3001\u305d\u3046\u3067\u3059\u300d\uff0c\u200b\u6ce8\u610f\u200b\u300c\u306f\u3044\u300d\u200b\u4e0d\u80fd\u200b\u591a\u6b21\u91cd\u590d\u200b\u3002
- \u200b\u5426\u5b9a\u200b\u56de\u590d\u200b\uff1a\u300c\u3044\u3044\u3048\u3001\u200b\u9055\u200b\u3044\u307e\u3059\u300d
"},{"location":"japanese/japanese-1-pattern/#6","title":"\u7b2c\u200b6\u200b\u8bfe","text":" - \u300c\u3048\u3048\u3068\u300d\uff1a\u200b\u55ef\u200b\u2026\u2026\uff0c\u200b\u8868\u793a\u200b\u77ed\u6682\u200b\u7684\u200b\u505c\u987f\u200b\u6216\u200b\u601d\u8003\u200b
- \u200b\u5207\u5165\u200b\u8bdd\u9898\u200b
- \u300c\u3042\u306e\u3046\u300d\uff1a\u200b\u90a3\u4e2a\u200b\u2026\u2026
- \u300c\u3059\u307f\u307e\u305b\u3093\uff08\u304c\uff09\u300d\uff1a\u200b\u4e0d\u597d\u610f\u601d\u200b
- \u200b\u7ed3\u675f\u200b\u8bdd\u9898\u200b
- \u300c\u200b\u5931\u793c\u200b\u3057\u307e\u3059\u300d\uff1a\u200b\u5931\u966a\u200b\u4e86\u200b
- \u300c\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3057\u305f\u300d\uff1a\u200b\u4eca\u5929\u200b\u975e\u5e38\u200b\u611f\u8c22\u60a8\u200b
- \u300c\u3067\u306f\u3001\u307e\u305f\u300d\uff1a\u200b\u90a3\u4e48\u200b\uff0c\u200b\u518d\u89c1\u200b
"},{"location":"japanese/japanese-1-pattern/#7","title":"\u7b2c\u200b7\u200b\u8bfe","text":" - \u300c\u200b\u5931\u793c\u200b\u3057\u307e\u3057\u305f\u300d\uff1a\u200b\u4e0d\u597d\u610f\u601d\u200b\uff0c\u200b\u7528\u4e8e\u200b\u5931\u793c\u200b\u3001\u200b\u5931\u656c\u200b\u7684\u200b\u884c\u4e3a\u200b\u3002
- \u300c\u304a\u200b\u4e16\u8a71\u200b\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u300d\uff1a\u200b\u611f\u8c22\u60a8\u200b\u4e00\u76f4\u200b\u4ee5\u6765\u200b\u7684\u200b\u7167\u987e\u200b\u3002
- \u200b\u4ecb\u7ecd\u200b\u5bb6\u5ead\u6210\u5458\u200b
- \u300c\u200b\u5fa1\u5b85\u200b\u300d\u200b\u7528\u4e8e\u200b\u5c0a\u79f0\u200b\u5bf9\u65b9\u200b\u7684\u200b\u5bb6\u5ead\u200b\uff0c\u300c\u3046\u3061\u300d\u200b\u7528\u4e8e\u200b\u79f0\u547c\u200b\u81ea\u5df1\u200b\u7684\u200b\u5bb6\u5ead\u200b\u3002
- \u300cA\u306b\u306f\uff5e\u304c\u3044\u307e\u3059\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200bA\u200b\u6709\u200b\uff5e\u200b\u5bb6\u5ead\u6210\u5458\u200b\uff0c\u200b\u5982\u679c\u200b\u6709\u200b\u591a\u4f4d\u200b\uff0c\u200b\u5219\u200b\u5728\u200b\u300c\u304c\u300d\u200b\u540e\u52a0\u200b\u6570\u91cf\u8bcd\u200b\uff0c\u300c\u3068\u300d\u200b\u7528\u4e8e\u200b\u8868\u793a\u200b\u5e76\u5217\u200b\u3002
- \u300c\u305d\u3046\u306a\u3093\u3067\u3059\u300d\uff1a\u200b\u8868\u793a\u200b\u53cd\u590d\u200b\u786e\u8ba4\u200b\u540e\u200b\u7684\u200b\u5f3a\u8c03\u200b\u3002
"},{"location":"japanese/japanese-1-pattern/#8","title":"\u7b2c\u200b8\u200b\u8bfe","text":" - \u300c\u301c\u3067\u200b\u5b9c\u200b\u3057\u3044\u3067\u3059\u304b\u300d\u200b\u7528\u4e8e\u200b\u5411\u200b\u5bf9\u65b9\u200b\u786e\u8ba4\u200b\uff5e\u200b\u4e2d\u200b\u7684\u200b\u5185\u5bb9\u200b\u662f\u5426\u200b\u5408\u9002\u200b\u3002\u200b\u53ef\u4ee5\u200b\u5982\u4e0b\u200b\u56de\u7b54\u200b
- \u300c\u306f\u3044\u3001\u200b\u5927\u4e08\u592b\u200b\u3067\u3059\u3002\u300d
- \u300c\u306f\u3044\u3001\u304a\u200b\u9858\u200b\u3044\u3057\u307e\u3059\u3002\u300d
- \u200b\u8d2d\u7269\u200b
- \u200b\u63d0\u51fa\u200b\u9700\u6c42\u200b\uff1a\u300c\u301c\u306f\u3042\u308a\u307e\u3059\u304b\u300d\u3001\u300c\u301c\u3092\u304f\u3060\u3055\u3044\u300d\u3001\u300c\u301c\u3092\u304a\u200b\u9858\u200b\u3044\u3057\u307e\u3059\u300d\u3002
- \u200b\u8be2\u95ee\u200b\u4ef7\u683c\u200b\uff1a\u300c\u301c\uff08\u304a\uff09\u3044\u304f\u3089\u3067\u3059\u304b\u300d
- \u200b\u9009\u62e9\u200b\uff1a\u300c\u301c\u306b\u3057\u307e\u3059\u300d\u3001\u300c\u301c\u3067\u300d
- \u200b\u5c31\u9910\u200b
- \u200b\u9910\u524d\u200b\uff1a\u300c\u3044\u305f\u3060\u304d\u307e\u3059\u300d\uff1a\u200b\u6211\u8981\u200b\u5f00\u59cb\u200b\u5403\u200b\u4e86\u200b\u3002
- \u200b\u9910\u540e\u200b\uff1a\u300c\u3054\u200b\u99b3\u200b\u8d70\u200b\u69d8\u200b\u3067\u3057\u305f\u300d\uff1a\u200b\u60a8\u200b\u7684\u200b\u6b3e\u5f85\u200b\u771f\u662f\u200b\u592a\u597d\u4e86\u200b\u3002
- \u300c\u3054\u3061\u3085\u3046\u3082\u3093\u306f\uff1f\u300d\uff1a\u200b\u60a8\u200b\u70b9\u200b\u4ec0\u4e48\u200b\uff1f
"},{"location":"japanese/japanese-1-pattern/#9","title":"\u7b2c\u200b9\u200b\u8bfe","text":" - \u300c\u304a\u200b\u4e45\u200b\u3057\u3076\u308a\u3067\u3059\u300d\uff1a\u200b\u597d\u4e45\u4e0d\u89c1\u200b
- \u300c\uff08\u305d\u308c\u306f\uff09\u3088\u304b\u3063\u305f\u3067\u3059\u306d\u300d\uff1a\u200b\u592a\u597d\u4e86\u200b
- \u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u81ea\u5df1\u200b\uff0c\u200b\u5bf9\u200b\u81ea\u5df1\u200b\u65f6\u4e0d\u52a0\u200b\u300c\u306d\u300d
- \u300c\u200b\u52c9\u5f37\u200b\u306b\u306a\u308a\u307e\u3059\u300d\uff1a\u200b\u53d7\u76ca\u532a\u6d45\u200b
- \u300c\u200b\u9811\u5f35\u200b\u3063\u3066\uff08\u304f\u3060\u3055\u3044\uff09\u300d\uff1a\u200b\u52a0\u6cb9\u200b
- \u300c\u304a\u305f\u3093\u3058\u3087\u3046\u3073\u306f\u3044\u3064\u3067\u3059\u304b\u300d\uff1a\u200b\u60a8\u200b\u7684\u200b\u751f\u65e5\u200b\u662f\u200b\u4ec0\u4e48\u200b\u65f6\u5019\u200b\uff1f
- \u300c\u200b\u79c1\u200b\u306e\u200b\u8a95\u200b\u751f\u65e5\u200b\u306f\u306a\u306a\u304c\u3064\u306b\u3058\u3085\u3046\u308d\u304f\u306b\u3061\u3067\u3059\u300d\uff1a\u200b\u6211\u200b\u7684\u200b\u751f\u65e5\u200b\u662f\u200b7\u200b\u6708\u200b26\u200b\u65e5\u200b\u3002
- \u300c\u304a\u3081\u3067\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u300d\uff1a\u200b\u606d\u559c\u200b\u60a8\u200b
"},{"location":"japanese/japanese-1-pattern/#10","title":"\u7b2c\u200b10\u200b\u8bfe","text":" - \u300c\u301c\u306f\u200b\u7a7a\u200b\u3044\u3066\u3044\u307e\u3059\u300d\uff1a\uff5e\u200b\u6709\u7a7a\u200b
- \u300c\u301c\u305f\u3044\u3067\u3059\u300d\uff1a\u200b\u60f3\u8981\u200b\uff5e
- \u300c\u301c\u304c\u200b\u697d\u200b\u3057\u307f\u3067\u3059\u300d\uff1a\uff5e\u200b\u4ee4\u4eba\u200b\u671f\u5f85\u200b
- \u200b\u63d0\u51fa\u200b\u9080\u8bf7\u200b\uff1a
- \u300c\uff08\u200b\u4e00\u7dd2\u200b\u306b\uff09\u301c\u307e\u3057\u3087\u3046\u304b\u300d\uff1a\u200b\u4e00\u8d77\u200b\uff5e\u200b\u5427\u200b\uff1f
- \u300c\u301c\u306f\u3069\u3046\u3067\u3059\u304b\u300d\uff1a\uff5e\u200b\u600e\u4e48\u6837\u200b\uff1f
- \u300c\u301c\u304c\u3044\u3044\u3067\u3059\u304b\u300d\uff1a\uff5e\u200b\u597d\u200b\u5417\u200b\uff1f\uff08\uff5e\u200b\u5fc5\u987b\u200b\u662f\u200b\u7591\u95ee\u8bcd\u200b\uff09
- \u200b\u56de\u7b54\u200b\u9080\u8bf7\u200b
- \u200b\u63a5\u53d7\u200b\u9080\u8bf7\u200b\uff1a\u300c\u306f\u3044\u3001\u3044\u3044\u3067\u3059\u306d\u300d\u3001\u300c\u305d\u3057\u307e\u3057\u3087\u3046\u300d
- \u200b\u62d2\u7edd\u200b\u9080\u8bf7\u200b\uff1a\u300c\u3059\u307f\u307e\u305b\u3093\u3001\u3061\u3087\u3063\u3068\u2026\u2026\u300d\u3001\u300c\u3044\u3044\u3048\u3001\u3051\u3063\u3053\u3046\u3067\u3059\u3002\u300d\u3001\u300c\u3044\u3044\u3067\u3059\u300d
"},{"location":"japanese/japanese-1-pattern/#11","title":"\u7b2c\u200b11\u200b\u8bfe","text":" - \u300c\u200b\u5168\u7136\u200b\u301c\u300d\uff1a\u200b\u5b8c\u5168\u200b\u4e0d\u200b\uff5e\uff0c\u200b\u7528\u4e8e\u200b\u5426\u5b9a\u53e5\u200b\u3002
- \u300c\u305d\u3046\u306a\u3093\u3067\u3059\u304b\u300d\uff1a\u200b\u662f\u200b\u5417\u200b\uff1f\u200b\u8868\u793a\u200b\u66f4\u200b\u60ca\u8bb6\u200b\u7684\u200b\u8bed\u6c14\u200b\u3002
"},{"location":"japanese/japanese-1-pattern/#12","title":"\u7b2c\u200b12\u200b\u8bfe","text":" - \u300c\uff08\u3059\u307f\u307e\u305b\u3093\u3001\uff09\u301c\u3066\u304f\u3060\u3055\u3044\u300d\uff1a\u200b\u8bf7\u200b\uff5e
- \u300c\u301c\u3066\u304f\u3060\u3055\u3044\u307e\u305b\u3093\u304b\u300d\uff1a\u200b\u8bf7\u200b\uff5e\u200b\u5417\u200b\uff1f\uff08\u200b\u7528\u4e8e\u200b\u4e0b\u7ea7\u200b\u5bf9\u200b\u4e0a\u7ea7\u200b\uff09
"},{"location":"japanese/japanese-1-pattern/#1311","title":"\u7b2c\u200b13\u200b\u8bfe\u200b\uff08\u200b\u65b0\u4e16\u7eaa\u200b\u521d\u7ea7\u200b\u7b2c\u200b11\u200b\u8bfe\u200b\uff09","text":" - \u300c\u200b\u6559\u200b\u3048\u3066\u304f\u3060\u3055\u3044\u300d\uff1a\u200b\u8bf7\u200b\u544a\u8bc9\u200b\u6211\u200b
- \u300c\u200b\u5b89\u5fc3\u200b\u3057\u3066\u304f\u3060\u3055\u3044\u300d\uff1a\u200b\u8bf7\u200b\u653e\u5fc3\u200b
- \u300c\u3067\u306f\u3001\u304a\u200b\u5143\u200b\u6c17\u200b\u3067\u300d\uff1a\u200b\u90a3\u4e48\u200b\uff0c\u200b\u4fdd\u91cd\u200b
- \u300c\u3054\u200b\u5bb6\u65cf\u200b\u306e\u200b\u7686\u200b\u69d8\u200b\u306b\u3082\u3088\u308d\u3057\u304f\u300d\uff1a\u200b\u8bf7\u4ee3\u200b\u6211\u200b\u5411\u200b\u60a8\u200b\u7684\u200b\u5bb6\u4eba\u200b\u95ee\u597d\u200b
- \u300c\u3069\u3046\u3082\u300d\uff1a\u200b\u975e\u5e38\u611f\u8c22\u200b
"},{"location":"japanese/japanese-1-vocab/","title":"\u65e5\u8bed\u200b(1) \u200b\u5355\u8bcd\u8868","text":""},{"location":"japanese/japanese-1-vocab/#_1","title":"\u52a8\u8bcd","text":"I\u200b\u7c7b\u200b\u52a8\u8bcd\u200bII\u200b\u7c7b\u200b\u52a8\u8bcd\u200bIII\u200b\u7c7b\u200b\u52a8\u8bcd\u200b \u200b\u52a8\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u5206\u7c7b\u200b \u200b\u542b\u4e49\u200b \u200b\u9055\u200b\u3046 \u3061\u304c\u3046 \u200b\u81ea\u200bI \u200b\u4e0d\u662f\u200b \u200b\u5408\u200b\u3046 \u3042\u3046 \u200b\u81ea\u200bI \u200b\u5408\u9002\u200b \u200b\u4ed8\u200b\u304d\u200b\u5408\u200b\u3046 \u3064\u304d\u3042\u3046 \u200b\u81ea\u200bI \u200b\u4ea4\u5f80\u200b \u3053\u305f\u308f\u308b \u200b\u81ea\u200bI \u200b\u8bb2\u7a76\u200b \u200b\u9811\u5f35\u200b\u308b \u304c\u3093\u3070\u308b \u200b\u81ea\u200bI \u200b\u52a0\u6cb9\u200b \u200b\u884c\u200b\u304f \u3044\u304f \u200b\u81ea\u200bI \u200b\u53bb\u200b \u200b\u7a7a\u200b\u304f \u3042\u304f \u200b\u81ea\u200bI \u200b\u7a7a\u95f2\u200b \u200b\u5206\u200b\u304b\u308b \u308f\u304b\u308b \u200b\u81ea\u200bI \u200b\u660e\u767d\u200b \u304b\u304b\u308b \u200b\u81ea\u200bI \u200b\u82b1\u8d39\u200b \u200b\u5e30\u200b\u308b \u304b\u3048\u308b \u200b\u81ea\u200bI \u200b\u56de\u5bb6\u200b \u200b\u8981\u200b\u308b \u3044\u308b \u200b\u81ea\u200bI \u200b\u9700\u8981\u200b \u200b\u6e07\u200b\u304f \u304b\u308f\u304f \u200b\u81ea\u200bI \u200b\u53e3\u6e34\u200b \u200b\u7b11\u200b\u3046 \u308f\u3089\u3046 \u200b\u81ea\u200bI \u200b\u7b11\u200b \u200b\u6b8b\u200b\u308b \u306e\u3053\u308b \u200b\u81ea\u200bI \u200b\u5269\u4e0b\u200b \u200b\u558b\u200b\u308b \u3057\u3083\u3079\u308b \u200b\u4ed6\u200bI \u200b\u804a\u5929\u200b \u200b\u4f7f\u200b\u3046 \u3064\u304b\u3046 \u200b\u4ed6\u200bI \u200b\u4f7f\u7528\u200b \u200b\u7533\u200b\u3059 \u3082\u3046\u3059 \u200b\u4ed6\u200bI \u200b\u53eb\u200b \u200b\u8aad\u200b\u3080 \u3088\u3080 \u200b\u4ed6\u200bI \u200b\u8bfb\u200b \u200b\u64ae\u200b\u308b \u3068\u308b \u200b\u4ed6\u200bI \u200b\u62cd\u7167\u200b \u200b\u4f5c\u200b\u308b \u3064\u304f\u308b \u200b\u4ed6\u200bI \u200b\u505a\u200b \u200b\u98f2\u200b\u3080 \u306e\u3080 \u200b\u4ed6\u200bI \u200b\u559d\u200b \u200b\u5f85\u200b\u3064 \u307e\u3064 \u200b\u4ed6\u200bI \u200b\u7b49\u5f85\u200b \u200b\u9078\u200b\u3076 \u3048\u3089\u3076 \u200b\u4ed6\u200bI \u200b\u9009\u62e9\u200b \u200b\u601d\u200b\u3046 \u304a\u3082\u3046 \u200b\u4ed6\u200bI \u200b\u8ba4\u4e3a\u200b \u200b\u8a00\u200b\u3046 \u3044\u3046 \u200b\u4ed6\u200bI \u200b\u8bf4\u200b \u200b\u904e\u200b\u3054\u3059 \u3059\u3054\u3059 \u200b\u4ed6\u200bI \u200b\u5ea6\u8fc7\u200b \u200b\u52a8\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u5206\u7c7b\u200b \u200b\u542b\u4e49\u200b \u3044\u308b \u200b\u81ea\u200bII \u200b\u6709\u200b \u200b\u9045\u200b\u308c\u308b \u304a\u304f\u308c\u308b \u200b\u81ea\u200bII \u200b\u8fdf\u5230\u200b \u200b\u53d7\u200b\u3051\u308b \u3046\u3051\u308b \u200b\u4ed6\u200bII \u200b\u53c2\u52a0\u200b \u200b\u6559\u200b\u3048\u308b \u304a\u3057\u3048\u308b \u200b\u4ed6\u200bII \u200b\u6559\u200b \u200b\u898b\u200b\u308b \u307f\u308b \u200b\u4ed6\u200bII \u200b\u770b\u200b \u200b\u98df\u200b\u3079\u308b \u305f\u3079\u308b \u200b\u4ed6\u200bII \u200b\u5403\u200b \u200b\u958b\u200b\u3051\u308b \u3042\u3051\u308b \u200b\u4ed6\u200bII \u200b\u6253\u5f00\u200b \u200b\u52a8\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u5206\u7c7b\u200b \u200b\u542b\u4e49\u200b \u304f\u308b \u200b\u81ea\u200bIII \u200b\u6765\u200b \u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u505a\u200b \u200b\u7d39\u4ecb\u200b\u3059\u308b \u3057\u3087\u3046\u304b\u3044\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u4ecb\u7ecd\u200b \u200b\u5931\u793c\u200b\u3059\u308b \u3057\u3064\u308c\u3044\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5931\u793c\u200b \u200b\u4f1a\u8a08\u200b\u3059\u308b \u304b\u3044\u3051\u3044\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u7ed3\u8d26\u200b \u200b\u6ce8\u6587\u200b\u3059\u308b \u3061\u3085\u3046\u3082\u3093\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u70b9\u83dc\u200b \u200b\u55b6\u200b\u696d\u200b\u3059\u308b \u3048\u3044\u304e\u3087\u3046\u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u8425\u4e1a\u200b \u200b\u52c9\u5f37\u200b\u3059\u308b \u3079\u3093\u304d\u3087\u3046\u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u5b66\u4e60\u200b \u200b\u5408\u683c\u200b\u3059\u308b \u3054\u3046\u304b\u304f\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5408\u683c\u200b\u3001\u200b\u901a\u8fc7\u200b \u200b\u7559\u5b66\u200b\u3059\u308b \u308a\u3085\u3046\u304c\u304f\u3059\u308b \u200b\u81ea\u200bIII \u200b\u7559\u5b66\u200b \u200b\u6599\u7406\u200b\u3059\u308b \u308a\u3087\u3046\u308a\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u505a\u996d\u200b \u200b\u98df\u4e8b\u200b\u3059\u308b \u3057\u3087\u304f\u3058\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5403\u996d\u200b \u200b\u9762\u63a5\u200b\u3059\u308b \u3081\u3093\u305b\u3064\u3059\u308b \u200b\u81ea\u200bIII \u200b\u9762\u8bd5\u200b \u200b\u52aa\u529b\u200b\u3059\u308b \u3069\u308a\u3087\u304f\u3059\u308b \u200b\u81ea\u200bIII \u200b\u52aa\u529b\u200b \u200b\u81ea\u708a\u200b\u3059\u308b \u3058\u3059\u3044\u3059\u308b \u200b\u81ea\u200bIII \u200b\u81ea\u5df1\u200b\u505a\u996d\u200b \u200b\u8cea\u554f\u200b\u3059\u308b \u3057\u3064\u3082\u3093\u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u63d0\u95ee\u200b \u200b\u904b\u52d5\u200b\u3059\u308b \u3046\u3093\u3069\u3046\u3059\u308b \u200b\u81ea\u200bIII \u200b\u8fd0\u52a8\u200b \u200b\u7df4\u7fd2\u200b\u3059\u308b \u308c\u3093\u3057\u3085\u3046\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u7ec3\u4e60\u200b \u200b\u904b\u200b\u8ee2\u200b\u3059\u308b \u3046\u3093\u3066\u3093\u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u5f00\u8f66\u200b \u200b\u6c7a\u5b9a\u200b\u3059\u308b \u3051\u3063\u3066\u3044\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u51b3\u5b9a\u200b \u200b\u6765\u200b\u65e5\u200b\u3059\u308b \u3089\u3044\u306b\u3061\u3059\u308b \u200b\u81ea\u200bIII \u200b\u6765\u200b\u65e5\u672c\u200b \u200b\u5230\u200b\u7740\u200b\u3059\u308b \u3068\u3046\u3061\u3083\u304f\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5230\u8fbe\u200b \u200b\u4e88\u5b9a\u200b\u3059\u308b \u3088\u3066\u3044\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u9884\u5b9a\u200b \u200b\u5c31\u200b\u8077\u200b\u3059\u308b \u3057\u3085\u3046\u3057\u3087\u304f\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5c31\u804c\u200b \u200b\u8cbf\u6613\u200b\u3059\u308b \u307c\u3046\u3048\u304d\u3059\u308b \u200b\u81ea\u200bIII \u200b\u8d38\u6613\u200b \u200b\u6b8b\u696d\u200b\u3059\u308b \u3056\u3093\u304e\u3087\u3046\u3059\u308b \u200b\u81ea\u200bIII \u200b\u52a0\u73ed\u200b \u200b\u5fc3\u914d\u200b\u3059\u308b \u3057\u3093\u3071\u3044\u3059\u308b \u200b\u81ea\u4ed6\u200bIII \u200b\u62c5\u5fc3\u200b \u200b\u5b89\u5fc3\u200b\u3059\u308b \u3042\u3093\u3057\u3093\u3059\u308b \u200b\u81ea\u200bIII \u200b\u5b89\u5fc3\u200b \u200b\u65c5\u884c\u200b\u3059\u308b \u308a\u3087\u3053\u3046\u3059\u308b \u200b\u81ea\u200bIII \u200b\u65c5\u884c\u200b \u200b\u8a66\u200b\u9a13\u200b\u3059\u308b \u3057\u3051\u3093\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u8003\u8bd5\u200b \u200b\u6848\u5185\u200b\u3059\u308b \u3042\u3093\u306a\u3044\u3059\u308b \u200b\u4ed6\u200bIII \u200b\u966a\u540c\u200b\u6e38\u89c8"},{"location":"japanese/japanese-1-vocab/#_2","title":"\u5f62\u5bb9\u8bcd","text":"I\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200bII\u200b\u7c7b\u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5b89\u200b\u3044 \u3084\u3059\u3044 \u200b\u4fbf\u5b9c\u200b \u200b\u5b9c\u200b\u3057\u3044 \u3088\u308d\u3057\u3044 \u200b\u597d\u200b \u200b\u5fd9\u200b\u3057\u3044 \u3044\u305d\u304c\u3057\u3044 \u200b\u5fd9\u200b \u200b\u697d\u200b\u3057\u3044 \u305f\u306e\u3057\u3044 \u200b\u5f00\u5fc3\u200b \u200b\u591a\u200b\u3044 \u304a\u304a\u3044 \u200b\u591a\u200b \u200b\u53b3\u200b\u3057\u3044 \u304d\u3073\u3057\u3044 \u200b\u4e25\u683c\u200b \u200b\u65b0\u200b\u3057\u3044 \u3042\u305f\u3089\u3057\u3044 \u200b\u65b0\u200b \u200b\u7f8e\u5473\u200b\u3057\u3044 \u304a\u3044\u3057\u3044 \u200b\u597d\u5403\u200b \u200b\u512a\u200b\u3057\u3044 \u3084\u3055\u3057\u3044 \u200b\u6e29\u67d4\u200b \u200b\u5927\u200b\u304d\u3044 \u304a\u304a\u304d\u3044 \u200b\u5927\u200b \u200b\u9ad8\u200b\u3044 \u305f\u304b\u3044 \u200b\u9ad8\u200b \u200b\u9762\u767d\u200b\u3044 \u304a\u3082\u3057\u308d\u3044 \u200b\u6709\u8da3\u200b \u200b\u96e3\u200b\u3057\u3044 \u3080\u305a\u304b\u3057\u3044 \u200b\u96be\u200b \u200b\u9577\u200b\u3044 \u306a\u304c\u3044 \u200b\u957f\u200b \u3059\u3054\u3044 \u200b\u5389\u5bb3\u200b \u200b\u7fa8\u200b\u307e\u3057\u3044 \u3046\u3089\u3084\u307e\u3057\u3044 \u200b\u7fa1\u6155\u200b \u200b\u6065\u200b\u305a\u304b\u3057\u3044 \u306f\u305a\u304b\u3057\u3044 \u200b\u5bb3\u7f9e\u200b \u200b\u6016\u200b\u3044 \u3053\u308f\u3044 \u200b\u5bb3\u6015\u200b \u200b\u5c11\u200b\u306a\u3044 \u3059\u304f\u306a\u3044 \u200b\u5c11\u200b \u200b\u60aa\u200b\u3044 \u308f\u308b\u3044 \u200b\u574f\u200b \u200b\u5bd2\u200b\u3044 \u3055\u3080\u3044 \u200b\u51b7\u200b \u200b\u75db\u200b\u3044 \u3044\u305f\u3044 \u200b\u75bc\u200b \u200b\u901f\u200b\u3044 \u306f\u3084\u3044 \u200b\u5feb\u200b \u200b\u5e83\u200b\u3044 \u3072\u308d\u3044 \u200b\u5bbd\u200b \u200b\u9045\u200b\u3044 \u304a\u305d\u3044 \u200b\u6162\u200b \u200b\u8efd\u200b\u3044 \u304b\u308b\u3044 \u200b\u8f7b\u200b \u200b\u604b\u200b\u3057\u3044 \u3053\u3044\u3057\u3044 \u200b\u7231\u6155\u200b \u200b\u7518\u200b\u3044 \u3042\u307e\u3044 \u200b\u751c\u200b \u200b\u6dbc\u200b\u3057\u3044 \u3059\u305a\u3057\u3044 \u200b\u51c9\u723d\u200b \u200b\u6691\u200b\u3044 \u3042\u3064\u3044 \u200b\u70ed\u200b \u3046\u307e\u3089\u306a\u3044 \u200b\u65e0\u804a\u200b\u7684\u200b \u200b\u61d0\u200b\u304b\u3057\u3044 \u306a\u3064\u304b\u3057\u3044 \u200b\u6000\u5ff5\u200b \u200b\u7d20\u6674\u200b\u3089\u3057\u3044 \u3059\u3070\u3089\u3057\u3044 \u200b\u68d2\u200b \u200b\u73cd\u200b\u3057\u3044 \u3081\u305a\u3089\u3057\u3044 \u200b\u7a00\u6709\u200b \u200b\u826f\u200b\u3044 \u3088\u3044 \u200b\u597d\u200b \u200b\u5f62\u5bb9\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5acc\u200b\u3044 \u304d\u3089\u3044 \u200b\u8ba8\u538c\u200b \u200b\u8272\u200b\u3005\u200b \u3044\u308d\u3044\u308d \u200b\u5404\u79cd\u5404\u6837\u200b \u305d\u3063\u304f\u308a \u200b\u4e00\u6a21\u4e00\u6837\u200b \u200b\u5931\u793c\u200b \u3057\u3064\u308c\u3044 \u200b\u5931\u793c\u200b \u200b\u5927\u200b\u5909\u200b \u305f\u3044\u3078\u3093 \u200b\u975e\u5e38\u200b \u200b\u5225\u200b\u3005\u200b \u3079\u3064\u3079\u3064 \u200b\u5206\u5f00\u200b \u200b\u5927\u4e08\u592b\u200b \u3060\u3044\u3058\u3087\u3046\u3076 \u200b\u6ca1\u5173\u7cfb\u200b \u200b\u4e45\u200b\u3057\u3076\u308a \u3072\u3055\u3057\u3076\u308a \u200b\u76f8\u9694\u200b\u8bb8\u4e45\u200b \u200b\u81ea\u7531\u200b \u3058\u3086\u3046 \u200b\u81ea\u7531\u200b \u200b\u5143\u200b\u6c17\u200b \u3052\u3093\u304d \u200b\u7cbe\u795e\u200b \u200b\u9759\u200b\u304b \u3057\u305a\u304b \u200b\u5b89\u9759\u200b \u200b\u4e0a\u200b\u624b\u200b \u3058\u3087\u3046\u305a \u200b\u719f\u7ec3\u200b \u200b\u597d\u200b\u304d \u3059\u304d \u200b\u559c\u6b22\u200b \u200b\u697d\u200b\u3057\u307f \u305f\u306e\u3057\u307f \u200b\u671f\u5f85\u200b \u200b\u89aa\u5207\u200b \u3057\u3093\u305b\u3064 \u200b\u4eb2\u5207\u200b \u200b\u7d50\u69cb\u200b \u3051\u3063\u3053\u3046 \u200b\u5f88\u200b\u597d\u200b \u200b\u6b8b\u5ff5\u200b \u3056\u3093\u306d\u3093 \u200b\u9057\u61be\u200b \u304a\u200b\u6d12\u843d\u200b \u304a\u3057\u3083\u308c \u200b\u65f6\u9ae6\u200b \u200b\u7dba\u9e97\u200b \u304d\u308c\u3044 \u200b\u6f02\u4eae\u200b \u200b\u771f\u9762\u76ee\u200b \u307e\u3058\u3081 \u200b\u8ba4\u771f\u200b \u307a\u3089\u307a\u3089 \u200b\u6d41\u5229\u200b \u200b\u52e4\u52c9\u200b \u304d\u3093\u3079\u3093 \u200b\u52e4\u594b\u200b \u200b\u91cd\u8981\u200b \u3058\u3085\u3046\u3088\u3046 \u200b\u91cd\u8981\u200b \u200b\u5927\u4e8b\u200b \u3060\u3044\u3058 \u200b\u91cd\u8981\u200b \u200b\u5927\u597d\u200b\u304d \u3060\u3044\u3059\u304d \u200b\u975e\u5e38\u200b\u559c\u6b22\u200b \u200b\u4fbf\u5229\u200b \u3079\u3093\u308a \u200b\u65b9\u4fbf\u200b \u200b\u6709\u540d\u200b \u3086\u3046\u3081\u3044 \u200b\u6709\u540d\u200b \u200b\u71b1\u5fc3\u200b \u306d\u3063\u3057\u3093 \u200b\u70ed\u5fc3\u200b \u200b\u82e6\u624b\u200b \u306b\u304c\u3066 \u200b\u4e0d\u200b\u64c5\u957f\u200b \u200b\u4e0b\u624b\u200b \u3078\u305f \u200b\u4e0d\u200b\u64c5\u957f\u200b \u200b\u5f97\u610f\u200b \u3068\u304f\u3044 \u200b\u64c5\u957f\u200b \u200b\u5fc3\u914d\u200b \u3057\u3093\u3071\u3044 \u200b\u62c5\u5fc3\u200b \u200b\u5b89\u5fc3\u200b \u3042\u3093\u3057\u3093 \u200b\u5b89\u5fc3\u200b \u200b\u5143\u200b\u6c17\u200b \u3052\u3093\u304d \u200b\u7cbe\u795e\u200b \u200b\u4e0d\u8981\u200b \u3075\u3088\u3046 \u200b\u4e0d\u8981\u200b \u200b\u7c21\u200b\u5358\u200b \u304b\u3093\u305f\u3093 \u200b\u7b80\u5355\u200b \u200b\u4e00\u751f\u200b\u61f8\u547d\u200b \u3044\u3063\u3057\u3087\u3046\u3051\u3093\u3081\u3044 \u200b\u62fc\u547d\u200b \u200b\u5927\u5207\u200b \u305f\u3044\u305b\u3064 \u200b\u91cd\u8981"},{"location":"japanese/japanese-1-vocab/#_3","title":"\u6570\u5b57\u200b\u3001\u200b\u65f6\u95f4\u200b\u3001\u200b\u65e5\u671f","text":""},{"location":"japanese/japanese-1-vocab/#_4","title":"\u6570\u5b57","text":"\u200b\u6ce8\u610f\u200b\uff1a
- 1\u200b\u4eba\u200b\u548c\u200b2\u200b\u4eba\u200b\u7684\u200b\u7279\u6b8a\u200b\u5199\u6cd5\u200b\u3002
- 4\u200b\u4eba\u200b\u7684\u200b\u5199\u6cd5\u200b\u662f\u200b\u300c\u3088\u306b\u3093\u300d\uff0c\u200b\u800c\u200b\u4e0d\u662f\u200b\u300c\u3088\u3093\u306b\u3093\u300d\u3002
- 7\u30019\u200b\u4eba\u200b\u7684\u200b\u5199\u6cd5\u200b\u6709\u200b\u4e24\u79cd\u200b\u3002
- \u300c\u3072\u3083\u304f\u300d\u200b\u548c\u200b\u300c\u305b\u3093\u300d\u200b\u53ef\u4ee5\u200b\u7528\u6765\u200b\u76f4\u63a5\u200b\u8868\u793a\u200b100\u200b\u548c\u200b1000\uff0c\u200b\u800c\u200b\u300c\u307e\u3093\u300d\u200b\u548c\u200b\u300c\u304a\u304f\u300d\u200b\u9700\u8981\u200b\u52a0\u4e0a\u200b\u300c\u3044\u3061\u300d\u200b\u6765\u200b\u8868\u793a\u200b1\u200b\u4e07\u200b\u548c\u200b1\u200b\u4ebf\u200b\u3002
\u200b\u6570\u5b57\u200b \u200b\u5047\u540d\u200b \u200b\u6570\u5b57\u200b \u200b\u5047\u540d\u200b 1 \u3044\u3061 1\u200b\u4eba\u200b \u3072\u3068\u308a 2 \u306b 2\u200b\u4eba\u200b \u3075\u305f\u308a 3 \u3055\u3093 3\u200b\u4eba\u200b \u3055\u3093\u306b\u3093 4 \u3088\u3093 4\u200b\u4eba\u200b \u3088\u306b\u3093 5 \u3054 5\u200b\u4eba\u200b \u3054\u306b\u3093 6 \u308d\u304f 6\u200b\u4eba\u200b \u308d\u304f\u306b\u3093 7 \u306a\u306a 7\u200b\u4eba\u200b \u3057\u3061\u306b\u3093/\u306a\u306a\u306b\u3093 8 \u306f\u3061 8\u200b\u4eba\u200b \u306f\u3061\u306b\u3093 9 \u304d\u3085\u3046 9\u200b\u4eba\u200b \u304d\u3085\u3046\u306b\u3093/\u304f\u306b\u3093 10 \u3058\u3085\u3046 10\u200b\u4eba\u200b \u3058\u3085\u3046\u306b\u3093 \u200b\u767e\u200b \u3072\u3083\u304f \u200b\u5343\u200b \u305b\u3093 \u200b\u4e07\u200b \u3044\u3061\u307e\u3093 \u200b\u5104\u200b \u304a\u304f"},{"location":"japanese/japanese-1-vocab/#_5","title":"\u91cf\u8bcd","text":"\u200b\u6ce8\u610f\u200b\uff1a
- \u200b\u6570\u5b57\u200b+\u300c\u3064\u300d\u200b\u7684\u200b\u5199\u6cd5\u200b\uff0c\u200b\u9664\u4e86\u200b7\u200b\u662f\u200b\u76f4\u63a5\u200b\u52a0\u200b\u300c\u3064\u300d\u200b\u4ee5\u5916\u200b\uff0c\u200b\u5176\u4ed6\u200b\u90fd\u200b\u6709\u200b\u660e\u663e\u200b\u7684\u200b\u53d8\u5316\u200b\u3002
- \u200b\u6570\u5b57\u200b+\u300c\u200b\u500b\u200b\u3001\u200b\u672c\u200b\u3001\u200b\u518a\u200b\u300d\u200b\u7684\u200b\u5199\u6cd5\u200b\uff0c\u200b\u9664\u4e86\u200b1\u30016\u30018\u300110\u200b\u662f\u200b\u76f4\u63a5\u200b\u52a0\u200b\u300c\u200b\u500b\u200b\u300d\u200b\u4ee5\u5916\u200b\uff0c\u200b\u5176\u4ed6\u200b\u90fd\u200b\u5c06\u200b\u6570\u5b57\u200b\u8bfb\u97f3\u200b\u7684\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u5047\u540d\u200b\u8f6c\u4e3a\u200b\u501a\u97f3\u200b\u300c\u3063\u300d\uff0c\u200b\u518d\u200b\u52a0\u200b\u300c\u200b\u500b\u200b\u300d\uff0c\u200b\u5982\u200b\u300c\u3044\u3063\u3053\u300d\u3001\u300c\u308d\u3063\u3053\u300d\u3001\u300c\u306f\u3063\u3053\u300d\u3001\u300c\u3058\u3085\u3063\u3053\u300d\u3002
- \u200b\u6570\u5b57\u200b+\u300c\u200b\u672c\u200b\u300d\u200b\u7684\u200b\u5199\u6cd5\u200b\uff0c\u200b\u9700\u8981\u200b\u6ce8\u610f\u200b1\u30013\u30016\u30018\u300110\u200b\u9700\u8981\u200b\u5c06\u200b\u300c\u307b\u300d\u200b\u7684\u200b\u8bfb\u97f3\u200b\u53d8\u4e3a\u200b\u300c\u307d\u300d\u3002
- \u200b\u6570\u5b57\u200b+\u300c\u200b\u679a\u200b\u3001\u200b\u53f0\u200b\u300d\uff0c\u200b\u76f4\u63a5\u200b\u5728\u200b\u6570\u5b57\u200b\u540e\u9762\u200b\u52a0\u200b\u300c\u200b\u679a\u200b\u300d\u200b\u6216\u200b\u300c\u200b\u53f0\u200b\u300d\u200b\u5373\u53ef\u200b\u3002
\u200b\u6570\u91cf\u200b \u3064 \u200b\u500b\u200b \u200b\u672c\u200b \u200b\u518a\u200b \u200b\u679a\u200b \u200b\u53f0\u200b 1 \u3072\u3068\u3064 \u3044\u3063\u3053 \u3044\u3063\u307d\u3093 \u3044\u3063\u3055\u3064 \u3044\u3061\u307e\u3044 \u3044\u3061\u3060\u3044 2 \u3075\u305f\u3064 \u306b\u3053 \u306b\u307b\u3093 \u306b\u3055\u3064 \u306b\u307e\u3044 \u306b\u3060\u3044 3 \u307f\u3063\u3064 \u3055\u3093\u3053 \u3055\u3093\u307d\u3093 \u3055\u3093\u3055\u3064 \u3055\u3093\u307e\u3044 \u3055\u3093\u3060\u3044 4 \u3088\u3063\u3064 \u3088\u3093\u3053 \u3088\u3093\u307b\u3093 \u3088\u3093\u3055\u3064 \u3088\u3093\u307e\u3044 \u3088\u3093\u3060\u3044 5 \u3044\u3064\u3064 \u3054\u3053 \u3054\u307b\u3093 \u3054\u3055\u3064 \u3054\u307e\u3044 \u3054\u3060\u3044 6 \u3080\u3063\u3064 \u308d\u3063\u3053 \u308d\u3063\u307d\u3093 \u308d\u304f\u3055\u3064 \u308d\u304f\u307e\u3044 \u308d\u304f\u3060\u3044 7 \u306a\u306a\u3064 \u306a\u306a\u3053 \u306a\u306a\u307b\u3093 \u306a\u306a\u3055\u3064 \u306a\u306a\u307e\u3044 \u306a\u306a\u3060\u3044 8 \u3084\u3063\u3064 \u306f\u3063\u3053 \u306f\u3063\u307d\u3093 \u306f\u3063\u3055\u3064 \u306f\u3061\u307e\u3044 \u306f\u3061\u3060\u3044 9 \u3053\u3053\u306e\u3064 \u304d\u3085\u3046\u3053 \u304d\u3085\u3046\u307b\u3093 \u304d\u3085\u3046\u3055\u3064 \u304d\u3085\u3046\u307e\u3044 \u304d\u3085\u3046\u3060\u3044 10 \u3068\u304a \u3058\u3085\u3063\u3053 \u3058\u3085\u3063\u307d\u3093 \u3058\u3085\u3063\u3055\u3064 \u3058\u3085\u3046\u307e\u3044 \u3058\u3085\u3046\u3060\u3044"},{"location":"japanese/japanese-1-vocab/#_6","title":"\u5c0f\u65f6","text":"\u200b\u534a\u5c0f\u65f6\u200b\u5728\u200b\u300c\u200b\u6642\u9593\u200b\u300d\u200b\u540e\u52a0\u200b\u300c\u200b\u534a\u200b\uff08\u306f\u3093\uff09\u300d\u200b\u5373\u53ef\u200b\u3002
\u200b\u65f6\u95f4\u200b \u200b\u5047\u540d\u200b \u200b\u65f6\u95f4\u200b \u200b\u5047\u540d\u200b \u200b\u65f6\u95f4\u200b \u200b\u5047\u540d\u200b 1\u200b\u6642\u9593\u200b \u3044\u3061\u3058\u304b\u3093 9\u200b\u6642\u9593\u200b \u304f\u3058\u304b\u3093 17\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u306a\u306a\u3058\u304b\u3093 2\u200b\u6642\u9593\u200b \u306b\u3058\u304b\u3093 10\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u3058\u304b\u3093 18\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u306f\u3061\u3058\u304b\u3093 3\u200b\u6642\u9593\u200b \u3055\u3093\u3058\u304b\u3093 11\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u3044\u3061\u3058\u304b\u3093 19\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u304f\u3058\u304b\u3093 4\u200b\u6642\u9593\u200b \u3088\u3058\u304b\u3093 12\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u306b\u3058\u304b\u3093 20\u200b\u6642\u9593\u200b \u306b\u3058\u3085\u3046\u3058\u304b\u3093 5\u200b\u6642\u9593\u200b \u3054\u3058\u304b\u3093 13\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u3055\u3093\u3058\u304b\u3093 21\u200b\u6642\u9593\u200b \u306b\u3058\u3085\u3046\u3044\u3061\u3058\u304b\u3093 6\u200b\u6642\u9593\u200b \u308d\u304f\u3058\u304b\u3093 14\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u3088\u3058\u304b\u3093 22\u200b\u6642\u9593\u200b \u306b\u3058\u3085\u3046\u306b\u3058\u304b\u3093 7\u200b\u6642\u9593\u200b \u3057\u3061\u3058\u304b\u3093 15\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u3054\u3058\u304b\u3093 23\u200b\u6642\u9593\u200b \u306b\u3058\u3085\u3046\u3055\u3093\u3058\u304b\u3093 8\u200b\u6642\u9593\u200b \u306f\u3061\u3058\u304b\u3093 16\u200b\u6642\u9593\u200b \u3058\u3085\u3046\u308d\u304f\u3058\u304b\u3093 24\u200b\u6642\u9593\u200b \u306b\u3058\u3085\u3046\u3088\u3058\u304b\u3093"},{"location":"japanese/japanese-1-vocab/#_7","title":"\u5206\u949f","text":"\u65f6\u95f4\u200b \u200b\u5047\u540d\u200b \u200b\u65f6\u95f4\u200b \u200b\u5047\u540d\u200b 1\u200b\u5206\u200b \u3044\u3063\u3077\u3093 1\u200b\u5206\u534a\u200b \u3044\u3063\u3077\u3093\u306f\u3093 2\u200b\u5206\u200b \u306b\u3075\u3093 2\u200b\u5206\u534a\u200b \u306b\u3075\u3093\u306f\u3093 3\u200b\u5206\u200b \u3055\u3093\u3077\u3093 3\u200b\u5206\u534a\u200b \u3055\u3093\u3077\u3093\u306f\u3093 4\u200b\u5206\u200b \u3088\u3093\u3077\u3093 4\u200b\u5206\u534a\u200b \u3088\u3093\u3077\u3093\u306f\u3093 5\u200b\u5206\u200b \u3054\u3075\u3093 5\u200b\u5206\u534a\u200b \u3054\u3075\u3093\u306f\u3093 6\u200b\u5206\u200b \u308d\u3063\u3077\u3093 6\u200b\u5206\u534a\u200b \u308d\u3063\u3077\u3093\u306f\u3093 7\u200b\u5206\u200b \u306a\u306a\u3075\u3093 7\u200b\u5206\u534a\u200b \u306a\u306a\u3075\u3093\u306f\u3093 8\u200b\u5206\u200b \u306f\u3063\u3077\u3093 8\u200b\u5206\u534a\u200b \u306f\u3063\u3077\u3093\u306f\u3093 9\u200b\u5206\u200b \u304d\u3085\u3046\u3075\u3093 9\u200b\u5206\u534a\u200b \u304d\u3085\u3046\u3075\u3093\u306f\u3093 10\u200b\u5206\u200b \u3058\u3085\u3063\u3077\u3093 10\u200b\u5206\u534a\u200b \u3058\u3085\u3063\u3077\u3093\u306f\u3093"},{"location":"japanese/japanese-1-vocab/#_8","title":"\u65e5\u671f","text":"\u200b\u6ce8\u610f\u200b\uff1a1-10\u200b\u65e5\u200b\u7684\u200b\u53d8\u5316\u200b\u6bd4\u8f83\u200b\u7279\u6b8a\u200b\uff0c\u200b\u5176\u4f59\u200b\u7684\u200b\u90fd\u200b\u662f\u200b\u6570\u5b57\u200b+\u300c\u200b\u65e5\u200b\u300d\u3002
\u200b\u65e5\u671f\u200b \u200b\u5047\u540d\u200b \u200b\u65e5\u671f\u200b \u200b\u5047\u540d\u200b \u200b\u65e5\u671f\u200b \u200b\u5047\u540d\u200b 1\u200b\u65e5\u200b \u3064\u3044\u305f\u3061 11\u200b\u65e5\u200b \u3058\u3085\u3046\u3044\u3061\u306b\u3061 21\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u3044\u3061\u306b\u3061 2\u200b\u65e5\u200b \u3075\u3064\u304b 12\u200b\u65e5\u200b \u3058\u3085\u3046\u306b\u306b\u3061 22\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u306b\u306b\u3061 3\u200b\u65e5\u200b \u307f\u3063\u304b 13\u200b\u65e5\u200b \u3058\u3085\u3046\u3055\u3093\u306b\u3061 23\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u3055\u3093\u306b\u3061 4\u200b\u65e5\u200b \u3088\u3063\u304b 14\u200b\u65e5\u200b \u3058\u3085\u3046\u3088\u3063\u304b 24\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u3088\u3063\u304b 5\u200b\u65e5\u200b \u3044\u3064\u304b 15\u200b\u65e5\u200b \u3058\u3085\u3046\u3054\u306b\u3061 25\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u3054\u306b\u3061 6\u200b\u65e5\u200b \u3080\u3044\u304b 16\u200b\u65e5\u200b \u3058\u3085\u3046\u308d\u304f\u306b\u3061 26\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u308d\u304f\u306b\u3061 7\u200b\u65e5\u200b \u306a\u306e\u304b 17\u200b\u65e5\u200b \u3058\u3085\u3046\u3057\u3061\u306b\u3061 27\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u3057\u3061\u306b\u3061 8\u200b\u65e5\u200b \u3088\u3046\u304b 18\u200b\u65e5\u200b \u3058\u3085\u3046\u306f\u3061\u306b\u3061 28\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u306f\u3061\u306b\u3061 9\u200b\u65e5\u200b \u3053\u3053\u306e\u304b 19\u200b\u65e5\u200b \u3058\u3085\u3046\u304f\u306b\u3061 29\u200b\u65e5\u200b \u306b\u3058\u3085\u3046\u304f\u306b\u3061 10\u200b\u65e5\u200b \u3068\u304a\u304b 20\u200b\u65e5\u200b \u306f\u3064\u304b 30\u200b\u65e5\u200b \u3055\u3093\u3058\u3085\u3046\u306b\u3061 31\u200b\u65e5\u200b \u3055\u3093\u3058\u3085\u3046\u3044\u3061\u306b\u3061"},{"location":"japanese/japanese-1-vocab/#_9","title":"\u661f\u671f","text":"\u661f\u671f\u200b \u200b\u661f\u671f\u200b \u200b\u661f\u671f\u4e00\u200b \u200b\u6708\u66dc\u65e5\u200b \u3052\u3064\u3088\u3046\u3073 \u200b\u661f\u671f\u4e8c\u200b \u200b\u706b\u66dc\u65e5\u200b \u304b\u3088\u3046\u3073 \u200b\u661f\u671f\u4e09\u200b \u200b\u6c34\u66dc\u65e5\u200b \u3059\u3044\u3088\u3046\u3073 \u200b\u661f\u671f\u56db\u200b \u200b\u6728\u66dc\u65e5\u200b \u3082\u304f\u3088\u3046\u3073 \u200b\u661f\u671f\u4e94\u200b \u200b\u91d1\u66dc\u65e5\u200b \u304d\u3093\u3088\u3046\u3073 \u200b\u661f\u671f\u516d\u200b \u200b\u571f\u66dc\u65e5\u200b \u3069\u3088\u3046\u3073 \u200b\u661f\u671f\u65e5\u200b \u200b\u65e5\u66dc\u65e5\u200b \u306b\u3061\u3088\u3046\u3073"},{"location":"japanese/japanese-1-vocab/#_10","title":"\u5355\u8bcd\u8868","text":""},{"location":"japanese/japanese-1-vocab/#5","title":"\u7b2c\u200b5\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u3084\u3042 \u200b\u55e8\u200b \u301c\u3055\u3093 \u200b\u5148\u751f\u200b \u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059 \u200b\u65e9\u4e0a\u597d\u200b \u200b\u4eca\u65e5\u200b \u304d\u3087\u3046 \u200b\u4eca\u5929\u200b \u200b\u6388\u696d\u200b \u3058\u3085\u304e\u3087\u3046 \u200b\u8bfe\u200b \u200b\u4eca\u200b \u3044\u307e \u200b\u73b0\u5728\u200b \u200b\u90e8\u6d3b\u52d5\u200b \u3076\u304b\u3064\u3069\u3046 \u200b\u793e\u56e2\u6d3b\u52a8\u200b \u200b\u6253\u200b\u3061\u200b\u5408\u200b\u308f\u305b \u3046\u3061\u3042\u308f\u305b \u200b\u5546\u91cf\u200b \u200b\u50d5\u200b \u307c\u304f \u200b\u6211\u200b \u301c\u305f\u3061 ~\u200b\u4eec\u200b \u200b\u90e8\u6d3b\u200b \u3076\u304b\u3064 \u200b\u793e\u56e2\u200b \u200b\u59d4\u54e1\u4f1a\u200b \u3044\u3044\u3093\u304b\u3044 \u200b\u59d4\u5458\u4f1a\u200b \u30e1\u30f3\u30d0\u30fc \u200b\u6210\u5458\u200b \u200b\u7d39\u4ecb\u200b\u3057\u307e\u3059 \u3057\u3087\u3046\u304b\u3044\u3057\u307e\u3059 \u200b\u4ecb\u7ecd\u200b \u200b\u53cb\u9054\u200b \u3068\u3082\u3060\u3061 \u200b\u670b\u53cb\u200b \u200b\u5148\u8f29\u200b \u305b\u3093\u3071\u3044 \u200b\u524d\u8f88\u200b \u305d\u3046 \u200b\u662f\u200b\u7684\u200b \u200b\u521d\u200b\u3081\u307e\u3057\u3066 \u306f\u3058\u3081\u307e\u3057\u3066 \u200b\u521d\u6b21\u89c1\u9762\u200b \u3088\u308d\u3057\u304f \u200b\u8bf7\u591a\u5173\u7167\u200b \u200b\u4eca\u5e74\u200b \u3053\u3068\u3057 \u200b\u4eca\u5e74\u200b \u200b\u65b0\u5165\u751f\u200b \u3057\u3093\u306b\u3085\u3046\u305b\u3044 \u200b\u65b0\u751f\u200b \u200b\u4e2d\u56fd\u200b \u3061\u3085\u3046\u3054\u304f \u200b\u4e2d\u56fd\u200b \u304b\u3089 \u200b\u4ece\u200b \u200b\u6765\u200b\u307e\u3057\u305f \u304d\u307e\u3057\u305f \u200b\u6765\u200b \u200b\u65b9\u200b \u304b\u305f \u200b\u4eba\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u793e\u9577\u200b \u3057\u3083\u3061\u3087\u3046 \u200b\u603b\u7ecf\u7406\u200b \u3053\u3061\u3089 \u200b\u8fd9\u8fb9\u200b \u30af\u30e9\u30b9\u30e1\u30fc\u30c8 \u200b\u540c\u73ed\u540c\u5b66\u200b \u3042\u306a\u305f \u200b\u4f60\u200b \u200b\u79c1\u200b \u308f\u305f\u3057 \u200b\u6211\u200b \u200b\u5f7c\u200b \u304b\u308c \u200b\u4ed6\u200b \u200b\u5f7c\u5973\u200b \u304b\u306e\u3058\u3087 \u200b\u5979\u200b \u200b\u5148\u751f\u200b \u305b\u3093\u305b\u3044 \u200b\u8001\u5e08\u200b \u3053\u3093\u306b\u3061\u306f \u200b\u4f60\u597d\u200b \u3053\u3093\u3070\u3093\u306f \u200b\u665a\u4e0a\u200b\u597d\u200b \u200b\u7533\u200b\u3057\u307e\u3059 \u3082\u3046\u3057\u307e\u3059 \u200b\u53eb\u200b \u200b\u51fa\u8eab\u200b \u3057\u3085\u3063\u3057\u3093 \u200b\u51fa\u8eab\u200b\uff0c\u200b\u6765\u81ea\u200b \u200b\u5317\u4eac\u200b \u307a\u304d\u3093 \u200b\u5317\u4eac\u200b \u200b\u7d4c\u200b\u6e08\u200b \u3051\u3044\u3056\u3044 \u200b\u7ecf\u6d4e\u200b \u200b\u5b66\u90e8\u200b \u304c\u304f\u3076 \u200b\u7cfb\u200b \u200b\u5f8c\u200b\u8f29\u200b \u3053\u3046\u306f\u3044 \u200b\u540e\u8f88\u200b \u200b\u9055\u200b\u3044\u307e\u3059 \u3061\u304c\u3044\u307e\u3059 \u200b\u4e0d\u662f\u200b \u200b\u4e8c\u5e74\u751f\u200b \u306b\u306d\u3093\u305b\u3044 \u200b\u4e8c\u5e74\u7ea7\u200b \u200b\u4e00\u5e74\u751f\u200b \u3044\u3061\u306d\u3093\u305b\u3044 \u200b\u4e00\u5e74\u7ea7\u200b \u200b\u6771\u4eac\u200b \u3068\u3046\u304d\u3087\u3046 \u200b\u4e1c\u4eac\u200b \u200b\u4f1a\u793e\u200b\u54e1\u200b \u304b\u3044\u3057\u3083\u3044\u3093 \u200b\u516c\u53f8\u200b\u804c\u5458\u200b \u200b\u5de5\u5b66\u200b\u90e8\u200b \u3053\u3046\u304c\u304f\u3076 \u200b\u5de5\u5b66\u200b\u7cfb\u200b \u200b\u6cd5\u5b66\u90e8\u200b \u307b\u3046\u304c\u304f\u3076 \u200b\u6cd5\u5b66\u7cfb\u200b \u200b\u97d3\u56fd\u200b \u304b\u3093\u3053\u304f \u200b\u97e9\u56fd\u200b \u200b\u65e5\u672c\u200b\u4eba\u200b \u306b\u307b\u3093\u3058\u3093 \u200b\u65e5\u672c\u200b\u4eba\u200b \u200b\u5927\u200b\u5b66\u9662\u200b\u751f\u200b \u3060\u3044\u304c\u304f\u3044\u3093\u305b\u3044 \u200b\u7814\u7a76\u751f\u200b \u200b\u5b66\u90e8\u200b\u751f\u200b \u304c\u304f\u3076\u305b\u3044 \u200b\u672c\u79d1\u751f\u200b \u200b\u7559\u5b66\u751f\u200b \u308a\u3085\u3046\u304c\u304f\u305b\u3044 \u200b\u7559\u5b66\u751f\u200b \u30a2\u30e1\u30ea\u30ab \u200b\u7f8e\u56fd\u200b \u200b\u4ed5\u4e8b\u200b \u3057\u3054\u3068 \u200b\u5de5\u4f5c\u200b \u200b\u4f11\u200b\u307f \u3084\u3059\u307f \u200b\u4f11\u606f\u200b \u200b\u4e09\u5e74\u751f\u200b \u3055\u3093\u306d\u3093\u305b\u3044 \u200b\u4e09\u5e74\u7ea7\u200b \u200b\u56f3\u200b\u66f8\u9928\u200b \u3068\u3057\u3087\u304b\u3093 \u200b\u56fe\u4e66\u9986\u200b \u30a2\u30eb\u30d0\u30a4\u30c8 \u200b\u517c\u804c\u200b \u200b\u663c\u200b\u3054\u200b\u98ef\u200b \u3072\u308b\u3054\u306f\u3093 \u200b\u5348\u996d\u200b \u200b\u8a66\u200b\u9a13\u200b \u3057\u3051\u3093 \u200b\u8003\u8bd5\u200b \u200b\u65e5\u672c\u200b\u8a9e\u200b \u306b\u307b\u3093\u3054 \u200b\u65e5\u8bed\u200b \u200b\u90e8\u9577\u200b \u3076\u3061\u3087\u3046 \u200b\u90e8\u957f\u200b \u30c1\u30fc\u30e0 \u200b\u961f\u200b \u30ea\u30fc\u30c0\u30fc \u200b\u961f\u957f\u200b \u200b\u65b0\u200b\u5165\u793e\u200b\u54e1\u200b \u3057\u3093\u306b\u3085\u3046\u3057\u3083\u3044\u3093 \u200b\u65b0\u200b\u5458\u5de5\u200b \u200b\u53f8\u4f1a\u8005\u200b \u3057\u304b\u3044\u3057\u3083 \u200b\u4e3b\u6301\u4eba\u200b \u30a2\u30b7\u30b9\u30bf\u30f3\u30c8 \u200b\u52a9\u624b"},{"location":"japanese/japanese-1-vocab/#6","title":"\u7b2c\u200b6\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u3044\u3089\u3057\u3083\u3044\u307e\u3059 \u200b\u6765\u200b \u200b\u5c11\u200b\u3005\u200b \u3057\u3087\u3046\u3057\u3087\u3046 \u200b\u7a0d\u200b\u7b49\u200b \u304a\u200b\u5f85\u200b\u3061\u304f\u3060\u3055\u3044 \u304a\u307e\u3061\u304f\u3060\u3055\u3044 \u200b\u8bf7\u7a0d\u7b49\u200b \u200b\u5b66\u751f\u200b\u8a3c\u200b \u304c\u304f\u305b\u3044\u3057\u3087\u3046 \u200b\u5b66\u751f\u8bc1\u200b \u30e6\u30fc\u30b6\u30fc \u200b\u7528\u6237\u200b \u30a2\u30a4\u30c7\u30a3\u30fc ID \u30e6\u30fc\u30b6\u30fc\u30a2\u30a4\u30c7\u30a3\u30fc \u200b\u7528\u6237\u200bID \u305d\u308c\u304b\u3089 \u200b\u7136\u540e\u200b \u200b\u5730\u200b\u56f3\u200b \u3061\u305a \u200b\u5730\u56fe\u200b \u30d1\u30f3\u30d5\u30ec\u30c3\u30c8 \u200b\u5c0f\u518c\u5b50\u200b \u200b\u4eca\u591c\u200b \u3053\u3093\u3084 \u200b\u4eca\u665a\u200b \u200b\u61c7\u89aa\u200b\u4f1a\u200b \u3053\u3093\u3057\u3093\u304b\u3044 \u200b\u8054\u6b22\u4f1a\u200b \u200b\u4f1a\u5834\u200b \u304b\u3044\u3058\u3087\u3046 \u200b\u4f1a\u573a\u200b \u3069\u3061\u3089 \u200b\u54ea\u91cc\u200b \u200b\u7dcf\u200b\u5408\u200b\u68df\u200b \u305d\u3046\u3054\u3046\u3068\u3046 \u200b\u7efc\u5408\u697c\u200b \u301c\u304b\u3044 ~\u200b\u5c42\u200b \u200b\u8fd1\u200b\u304f \u3061\u304b\u304f \u200b\u9644\u8fd1\u200b \u307b\u3089 \u200b\u770b\u200b \u3053\u3053 \u200b\u8fd9\u91cc\u200b \u3044\u307e\u3059 \u200b\u6709\u200b \u3053\u308c\u304b\u3089 \u200b\u4ece\u200b\u73b0\u5728\u200b\u5f00\u59cb\u200b \u3053\u3061\u3089\u3053\u305d \u200b\u5f7c\u6b64\u5f7c\u6b64\u200b \u200b\u4e0a\u200b \u3046\u3048 \u200b\u4e0a\u200b \u200b\u4e0b\u200b \u3057\u305f \u200b\u4e0b\u200b \u200b\u524d\u200b \u307e\u3048 \u200b\u524d\u200b \u200b\u5f8c\u200b\u308d \u3046\u3057\u308d \u200b\u540e\u200b \u200b\u53f3\u200b \u307f\u304e \u200b\u53f3\u200b \u200b\u5de6\u200b \u3072\u3060\u308a \u200b\u5de6\u200b \u200b\u4e2d\u200b \u306a\u304b \u200b\u4e2d\u200b \u200b\u5916\u200b \u305d\u3068 \u200b\u5916\u200b \u200b\u96a3\u200b \u3068\u306a\u308a \u200b\u65c1\u8fb9\u200b \u200b\u8fd1\u200b\u304f \u3061\u304b\u304f \u200b\u9644\u8fd1\u200b \u200b\u9593\u200b \u3042\u3044\u3060 \u200b\u4e2d\u95f4\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u304a\u200b\u624b\u6d17\u200b\u3044 \u304a\u3066\u3042\u3089\u3044 \u200b\u6d17\u624b\u95f4\u200b \u200b\u5929\u200b\u6c17\u200b \u3066\u3093\u304d \u200b\u5929\u6c14\u200b \u200b\u82e6\u200b\u52b4\u200b \u304f\u308d\u3046 \u200b\u8f9b\u82e6\u200b \u307e\u305f \u200b\u53c8\u200b\uff0c\u200b\u518d\u200b \u200b\u5f8c\u200b \u3042\u3068 \u200b\u4ee5\u540e\u200b \u200b\u6765\u9031\u200b \u3089\u3044\u3057\u3085\u3046 \u200b\u4e0b\u5468\u200b \u200b\u4f55\u200b \u306a\u306b \u200b\u4ec0\u4e48\u200b \u3069\u3053 \u200b\u54ea\u91cc\u200b \u200b\u8ab0\u200b \u3060\u308c \u200b\u8c01\u200b \u3044\u3064 \u200b\u4ec0\u4e48\u200b\u65f6\u5019\u200b \u3069\u306a\u305f \u200b\u54ea\u4f4d\u200b \u200b\u660e\u65e5\u200b \u3042\u3057\u305f \u200b\u660e\u5929\u200b \u200b\u6628\u65e5\u200b \u304d\u306e\u3046 \u200b\u6628\u5929\u200b \u200b\u6559\u5ba4\u200b \u304d\u3087\u3046\u3057\u3064 \u200b\u6559\u5ba4\u200b \u3055\u3063\u304d \u200b\u521a\u624d\u200b \u200b\u96a3\u200b \u3068\u306a\u308a \u200b\u65c1\u8fb9\u200b \u200b\u53c2\u52a0\u8005\u200b \u3055\u3093\u304b\u3057\u3083 \u200b\u53c2\u52a0\u8005\u200b \u30ea\u30b9\u30c8 \u200b\u540d\u5355\u200b \u200b\u540d\u524d\u200b \u306a\u307e\u3048 \u200b\u540d\u5b57\u200b \u200b\u4e0b\u200b \u3057\u305f \u200b\u4e0b\u200b \u200b\u793e\u54e1\u200b\u5bee\u200b \u3057\u3083\u3044\u3093\u308a\u3087\u3046 \u200b\u5458\u5de5\u200b\u5bbf\u820d\u200b \u200b\u90e8\u5c4b\u200b \u3078\u3084 \u200b\u623f\u95f4\u200b \u200b\u9375\u200b \u304b\u304e \u200b\u94a5\u5319\u200b \u200b\u98df\u5802\u200b \u3057\u3087\u304f\u3069\u3046 \u200b\u98df\u5802\u200b \u200b\u4f1a\u8b70\u5ba4\u200b \u304b\u3044\u304e\u3057\u3064 \u200b\u4f1a\u8bae\u5ba4\u200b \u200b\u51b7\u200b\u8535\u200b\u5eab\u200b \u308c\u3044\u305e\u3046\u3053 \u200b\u51b0\u7bb1\u200b \u200b\u6d17\u6fef\u200b\u6a5f\u200b \u305b\u3093\u305f\u304f\u304d \u200b\u6d17\u8863\u673a\u200b \u200b\u81ea\u52d5\u200b\u8ca9\u200b\u58f2\u200b\u6a5f\u200b \u3058\u3069\u3046\u306f\u3093\u3070\u3044\u304d \u200b\u81ea\u52a8\u552e\u8d27\u673a\u200b \u200b\u56fd\u969b\u8ab2\u200b \u3053\u304f\u3055\u3044\u304b \u200b\u56fd\u9645\u90e8\u200b \u200b\u968e\u6bb5\u200b \u304b\u3044\u3060\u3093 \u200b\u697c\u68af\u200b \u200b\u5de6\u5074\u200b \u3072\u3060\u308a\u304c\u308f \u200b\u5de6\u8fb9\u200b \u200b\u672c\u200b \u307b\u3093 \u200b\u4e66\u200b \u200b\u7bb1\u200b \u306f\u3053 \u200b\u7bb1\u5b50\u200b \u200b\u4e2d\u200b \u306a\u304b \u200b\u4e2d\u200b \u30d7\u30ec\u30bb\u30f3\u30c8 \u200b\u793c\u7269\u200b \u200b\u7814\u7a76\u5ba4\u200b \u3051\u3093\u304d\u3085\u3046\u3057\u3064 \u200b\u7814\u7a76\u5ba4\u200b \u200b\u55b6\u200b\u696d\u8ab2\u200b \u3048\u3044\u304e\u3087\u3046\u304b \u200b\u8425\u4e1a\u90e8\u200b \u200b\u767a\u200b\u8868\u200b\u4f1a\u200b \u306f\u3063\u3074\u3087\u3046\u304b\u3044 \u200b\u53d1\u8868\u200b\u4f1a\u200b \u200b\u5165\u200b\u308a\u200b\u53e3\u200b \u3044\u308a\u3050\u3061 \u200b\u5165\u53e3\u200b \u30b3\u30f3\u30b5\u30fc\u30c8 \u200b\u97f3\u4e50\u4f1a\u200b \u200b\u904b\u52d5\u5834\u200b \u3046\u3093\u3069\u3046\u3058\u3087\u3046 \u200b\u8fd0\u52a8\u573a\u200b \u200b\u8aac\u200b\u660e\u200b\u4f1a\u200b \u305b\u3064\u3081\u3044\u304b\u3044 \u200b\u8bf4\u660e\u4f1a\u200b \u200b\u5efa\u7269\u200b \u305f\u3066\u3082\u306e \u200b\u5efa\u7b51\u7269\u200b \u200b\u53f3\u5074\u200b \u307f\u304e\u304c\u308f \u200b\u53f3\u8fb9"},{"location":"japanese/japanese-1-vocab/#7","title":"\u7b2c\u200b7\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u3082\u3057\u304b\u3057\u3066 \u200b\u6216\u8bb8\u200b \u200b\u59c9\u200b \u3042\u306d \u200b\u59d0\u59d0\u200b \u304a\u200b\u59c9\u200b\u3055\u3093 \u304a\u306d\u3048\u3055\u3093 \u200b\u59d0\u59d0\u200b \u200b\u5931\u793c\u200b \u3057\u3064\u308c\u3044 \u200b\u5931\u793c\u200b \u3044\u3064\u3082 \u200b\u7ecf\u5e38\u200b \u200b\u4e16\u8a71\u200b \u305b\u308f \u200b\u7167\u987e\u200b \u305d\u3063\u304f\u308a \u200b\u4e00\u6a21\u4e00\u6837\u200b \u304d\u3087\u3046\u3060\u3044 \u200b\u5144\u5f1f\u59d0\u59b9\u200b \u200b\u5bb6\u200b \u3046\u3061 \u200b\u5bb6\u200b \u301c\u200b\u4eba\u200b \u306b\u3093 ~\u200b\u4eba\u200b \u200b\u5f1f\u200b \u304a\u3068\u3046\u3068 \u200b\u5f1f\u5f1f\u200b \u3082\u3046 \u200b\u8fd8\u200b \u200b\u4e00\u4eba\u200b \u3072\u3068\u308a \u200b\u4e00\u4e2a\u200b\u4eba\u200b \u200b\u4e00\u7dd2\u200b \u3044\u3063\u3057\u3087 \u200b\u4e00\u8d77\u200b \u200b\u6d77\u5916\u200b \u304b\u3044\u304c\u3044 \u200b\u6d77\u5916\u200b \u200b\u5927\u200b\u5909\u200b \u305f\u3044\u3078\u3093 \u200b\u975e\u5e38\u200b \u200b\u7686\u200b \u307f\u3093\u306a \u200b\u5927\u5bb6\u200b \u200b\u7236\u200b \u3061\u3061 \u200b\u7236\u4eb2\u200b \u200b\u6bcd\u200b \u306f\u306f \u200b\u6bcd\u4eb2\u200b \u200b\u5144\u200b \u3042\u306b \u200b\u54e5\u54e5\u200b \u200b\u59bb\u200b \u3064\u307e \u200b\u59bb\u5b50\u200b \u200b\u592b\u200b \u304a\u3063\u3068 \u200b\u4e08\u592b\u200b \u200b\u59b9\u200b \u3044\u3082\u3046\u3068 \u200b\u59b9\u59b9\u200b \u200b\u7956\u7236\u200b \u305d\u3075 \u200b\u7956\u7236\u200b \u200b\u7956\u6bcd\u200b \u305d\u307c \u200b\u7956\u6bcd\u200b \u200b\u53d4\u6bcd\u200b \u304a\u3070 \u200b\u59d1\u59d1\u200b \u200b\u53d4\u7236\u200b \u304a\u3058 \u200b\u59d1\u4e08\u200b \u200b\u606f\u5b50\u200b \u3080\u3059\u3053 \u200b\u513f\u5b50\u200b \u200b\u5a18\u200b \u3080\u3059\u3081 \u200b\u5973\u513f\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u8da3\u5473\u200b \u3057\u3085\u307f \u200b\u7231\u597d\u200b \u200b\u6620\u753b\u200b \u3048\u3044\u304c \u200b\u7535\u5f71\u200b \u200b\u9451\u8cde\u200b \u304b\u3093\u3057\u3087\u3046 \u200b\u6b23\u8d4f\u200b \u200b\u6b21\u200b \u3064\u304e \u200b\u4e0b\u200b\u4e00\u6b21\u200b \u301c\u200b\u541b\u200b \u304f\u3093 ~\u200b\u541b\u200b \u200b\u5ba2\u200b \u304d\u3083\u304f \u200b\u5ba2\u4eba\u200b \u200b\u4e88\u7d04\u200b \u3088\u3084\u304f \u200b\u9884\u7ea6\u200b \u200b\u756a\u53f7\u200b \u3070\u3093\u3054\u3046 \u200b\u53f7\u7801\u200b \u30d1\u30b9\u30dd\u30fc\u30c8 \u200b\u62a4\u7167\u200b \u30b9\u30bf\u30c3\u30d5 \u200b\u5de5\u4f5c\u4eba\u5458\u200b \u200b\u533b\u8005\u200b \u3044\u3057\u3083 \u200b\u533b\u751f\u200b \u200b\u53e3\u200b \u304f\u3061 \u200b\u5634\u200b \u200b\u958b\u200b\u3051\u308b \u3042\u3051\u308b \u200b\u6253\u5f00\u200b \u200b\u4ed8\u200b\u304d\u200b\u5408\u200b\u3046 \u3064\u304d\u3042\u3046 \u200b\u4ea4\u5f80\u200b \u304a\u200b\u6bcd\u200b\u3055\u3093 \u304a\u304b\u3042\u3055\u3093 \u200b\u5988\u5988\u200b \u200b\u5fa1\u5b85\u200b \u304a\u305f\u304f \u200b\u60a8\u200b\u5bb6\u200b 2\u200b\u4eba\u200b \u3075\u305f\u308a \u200b\u4e24\u4e2a\u200b\u4eba\u200b \u200b\u4e00\u4eba\u200b\u3063\u200b\u5b50\u200b \u3072\u3068\u308a\u3063\u3053 \u200b\u72ec\u751f\u5b50\u5973\u200b \u200b\u4f55\u4eba\u200b \u306a\u3093\u306b\u3093 \u200b\u51e0\u4e2a\u200b\u4eba\u200b \u200b\u5bb6\u65cf\u200b \u304b\u305e\u304f \u200b\u5bb6\u5ead\u200b \u200b\u5199\u771f\u200b \u3057\u3083\u3057\u3093 \u200b\u7167\u7247\u200b \u200b\u5927\u962a\u200b \u304a\u304a\u3055\u304b \u200b\u5927\u962a\u200b \u3044\u304f\u3064 \u200b\u51e0\u4e2a\u200b \u301c\u200b\u6b73\u200b \u3055\u3044 ~\u200b\u5c81\u200b \u200b\u53bb\u5e74\u200b \u304d\u3087\u306d\u3093 \u200b\u53bb\u5e74\u200b \u200b\u5916\u56fd\u4eba\u200b \u304c\u3044\u3053\u304f\u3058\u3093 \u200b\u5916\u56fd\u4eba\u200b \u30d5\u30e9\u30f3\u30b9 \u200b\u6cd5\u56fd\u200b \u30da\u30c3\u30c8 \u200b\u5ba0\u7269\u200b \u200b\u732b\u200b \u306d\u3053 \u200b\u732b\u200b \u200b\u4e8c\u5339\u200b \u306b\u3072\u304d \u200b\u4e24\u53ea\u200b \u200b\u5916\u56fd\u200b\u8a9e\u200b \u304c\u3044\u3053\u304f\u3054 \u200b\u5916\u8bed\u200b \u200b\u82f1\u8a9e\u200b \u3048\u3044\u3054 \u200b\u82f1\u8bed\u200b \u200b\u5c0f\u200b\u8aac\u200b \u3057\u3087\u3046\u305b\u3064 \u200b\u5c0f\u8bf4\u200b \u305f\u304f\u3055\u3093 \u200b\u5f88\u591a\u200b \u200b\u540c\u7d1a\u751f\u200b \u3069\u3046\u304d\u3085\u3046\u305b\u3044 \u200b\u540c\u5e74\u7ea7\u200b\u540c\u5b66\u200b \u200b\u90e8\u4e0b\u200b \u3076\u304b \u200b\u90e8\u4e0b\u200b \u30a4\u30ae\u30ea\u30b9 \u200b\u82f1\u56fd\u200b \u30c9\u30a4\u30c4 \u200b\u5fb7\u56fd"},{"location":"japanese/japanese-1-vocab/#8","title":"\u7b2c\u200b8\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5e97\u54e1\u200b \u3066\u3093\u3044\u3093 \u200b\u5e97\u5458\u200b \u30e9\u30f3\u30c1 \u200b\u5348\u9910\u200b \u30e1\u30cb\u30e5\u30fc \u200b\u83dc\u5355\u200b \u200b\u5168\u90e8\u200b \u305c\u3093\u3076 \u200b\u5168\u90e8\u200b \u30bd\u30d5\u30c8\u30c9\u30ea\u30f3\u30af \u200b\u8f6f\u996e\u6599\u200b \u301c\u200b\u4ed8\u200b\u304d \u3064\u304d \u200b\u9644\u5e26\u200b \u200b\u5186\u200b \u3048\u3093 \u200b\u65e5\u5143\u200b \u200b\u5b89\u200b\u3044 \u3084\u3059\u3044 \u200b\u4fbf\u5b9c\u200b \u200b\u4f1a\u8a08\u200b \u304b\u3044\u3051\u3044 \u200b\u7ed3\u8d26\u200b \u200b\u73fe\u91d1\u200b \u3052\u3093\u304d\u3093 \u200b\u73b0\u91d1\u200b \u200b\u7167\u200b\u308a\u200b\u713c\u200b\u304d \u3066\u308a\u3084\u304d \u200b\u7167\u70e7\u200b \u30c1\u30ad\u30f3 \u200b\u9e21\u8089\u200b \u200b\u88cf\u200b \u3046\u3089 \u200b\u91cc\u9762\u200b \u30d4\u30b6 \u200b\u62ab\u8428\u200b \u200b\u6ce8\u6587\u200b \u3061\u3085\u3046\u3082\u3093 \u200b\u70b9\u83dc\u200b \u3069\u3046\u305e \u200b\u8bf7\u200b \u30db\u30c3\u30c8 \u200b\u70ed\u200b\u7684\u200b \u30b3\u30fc\u30d2\u30fc \u200b\u5496\u5561\u200b \u200b\u5b9c\u200b\u3057\u3044 \u3088\u308d\u3057\u3044 \u200b\u597d\u200b \u200b\u7a0e\u200b\u8fbc\u200b\u307f \u305c\u3044\u3053\u307f \u200b\u542b\u7a0e\u200b \u200b\u5225\u200b\u3005\u200b \u3079\u3064\u3079\u3064 \u200b\u5206\u5f00\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5473\u200b\u564c\u200b\u6c41\u200b \u307f\u305d\u3057\u308b \u200b\u5473\u200b\u564c\u200b\u6c64\u200b \u30b5\u30e9\u30c0 \u200b\u6c99\u62c9\u200b \u200b\u672c\u200b\u65e5\u200b \u307b\u3093\u3058\u3064 \u200b\u4eca\u5929\u200b \u200b\u6301\u200b\u3061\u200b\u5e30\u200b\u308a \u3082\u3061\u304b\u3048\u308a \u200b\u6253\u5305\u200b \u200b\u55b6\u200b\u696d\u200b \u3048\u3044\u304e\u3087\u3046 \u200b\u8425\u4e1a\u200b \u200b\u5927\u4e08\u592b\u200b \u3060\u3044\u3058\u3087\u3046\u3076 \u200b\u6ca1\u5173\u7cfb\u200b \u200b\u98df\u200b\u5f8c\u200b \u3057\u3087\u304f\u3054 \u200b\u996d\u540e\u200b \u200b\u7a0e\u200b\u629c\u200b\u304d \u305c\u3044\u306c\u304d \u200b\u4e0d\u542b\u7a0e\u200b \u30b9\u30de\u30db \u200b\u667a\u80fd\u624b\u673a\u200b \u30c6\u30b9\u30bf\u30fc \u200b\u8bd5\u7528\u54c1\u200b \u3057\u308d\u3044 \u200b\u767d\u8272\u200b \u200b\u540d\u53e4\u5c4b\u200b \u306a\u3054\u3084 \u200b\u540d\u53e4\u5c4b\u200b \u30c1\u30b1\u30c3\u30c8 \u200b\u7968\u200b \u3044\u304f\u3089 \u200b\u591a\u5c11\u200b\u94b1\u200b \u200b\u713c\u200b\u304d\u200b\u9ce5\u200b \u3084\u304d\u3068\u308a \u200b\u70e4\u9e21\u8089\u200b\u4e32\u200b \u304a\u200b\u8336\u200b \u304a\u3061\u3083 \u200b\u8336\u200b \u30ab\u30fc\u30c9 \u200b\u5361\u200b \u30a2\u30ea\u30da\u30a4 \u200b\u652f\u4ed8\u5b9d\u200b \u3086\u3063\u304f\u308a \u200b\u6162\u6162\u200b\u5730\u200b \u307b\u3093\u306e \u200b\u4e00\u70b9\u70b9\u200b \u200b\u6c17\u200b\u6301\u200b\u3061 \u304d\u3082\u3061 \u200b\u5fc3\u60c5\u200b \u200b\u5408\u200b\u3046 \u3042\u3046 \u200b\u5408\u9002\u200b \u200b\u8f9e\u66f8\u200b \u3058\u3057\u3087 \u200b\u8bcd\u5178\u200b \u200b\u81ea\u200b\u8ee2\u200b\u8eca\u200b \u3058\u3066\u3093\u3057\u3083 \u200b\u81ea\u884c\u8f66\u200b \u200b\u624b\u5e33\u200b \u3066\u3061\u3087\u3046 \u200b\u8bb0\u4e8b\u672c\u200b \u30d1\u30bd\u30b3\u30f3 \u200b\u7535\u8111\u200b \u30d3\u30fc\u30eb \u200b\u5564\u9152\u200b \u30a2\u30c3\u30d7\u30eb\u30d1\u30a4 \u200b\u82f9\u679c\u6d3e\u200b \u30cf\u30f3\u30d0\u30fc\u30ac\u30fc \u200b\u6c49\u5821\u200b \u200b\u5730\u4e0b\u200b \u3061\u304b \u200b\u5730\u4e0b\u200b \u30cf\u30f3\u30c9\u30bd\u30fc\u30d7 \u200b\u6d17\u624b\u6db2\u200b \u200b\u5965\u200b \u304a\u304f \u200b\u6df1\u5904\u200b \u200b\u68da\u200b \u305f\u306a \u200b\u67b6\u5b50\u200b \u30d5\u30e9\u30a4\u30c9\u30c1\u30ad\u30f3 \u200b\u70b8\u9e21\u200b \u200b\u7d05\u8336\u200b \u3053\u3046\u3061\u3083 \u200b\u7ea2\u8336\u200b \u305f\u3053\u200b\u713c\u200b\u304d \u305f\u3053\u3084\u304d \u200b\u7ae0\u9c7c\u70e7\u200b \u304a\u200b\u5bff\u53f8\u200b \u304a\u3059\u3057 \u200b\u5bff\u53f8\u200b \u3068\u3093\u304b\u3064 \u200b\u732a\u6392"},{"location":"japanese/japanese-1-vocab/#9","title":"\u7b2c\u200b9\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u4e45\u200b\u3057\u3076\u308a \u3072\u3055\u3057\u3076\u308a \u200b\u597d\u4e45\u4e0d\u89c1\u200b \u3069\u3046 \u200b\u600e\u4e48\u6837\u200b \u200b\u5927\u5b66\u200b \u3060\u3044\u304c\u304f \u200b\u5927\u5b66\u200b \u200b\u751f\u6d3b\u200b \u305b\u3044\u304b\u3064 \u200b\u751f\u6d3b\u200b \u200b\u52c9\u5f37\u200b \u3079\u3093\u304d\u3087\u3046 \u200b\u5b66\u4e60\u200b \u200b\u5fd9\u200b\u3057\u3044 \u3044\u305d\u304c\u3057\u3044 \u200b\u5fd9\u200b \u3067\u304d\u308b \u200b\u80fd\u200b \u200b\u697d\u200b\u3057\u3044 \u305f\u306e\u3057\u3044 \u200b\u5f00\u5fc3\u200b \u200b\u591a\u200b\u3044 \u304a\u304a\u3044 \u200b\u591a\u200b \u200b\u6bce\u200b\u65e5\u200b \u307e\u3044\u306b\u3061 \u200b\u6bcf\u5929\u200b \u200b\u5348\u524d\u200b \u3054\u305c\u3093 \u200b\u4e0a\u5348\u200b \u200b\u5348\u200b\u5f8c\u200b \u3054\u3054 \u200b\u4e0b\u5348\u200b \u200b\u81ea\u7531\u200b \u3058\u3086\u3046 \u200b\u81ea\u7531\u200b \u200b\u4eca\u200b\u5b66\u671f\u200b \u3053\u3093\u304c\u3063\u304d \u200b\u672c\u5b66\u671f\u200b \u200b\u6765\u200b\u6708\u200b \u3089\u3044\u3052\u3064 \u200b\u4e0b\u4e2a\u6708\u200b \u200b\u5236\u4f5c\u200b\u5c55\u200b \u305b\u3044\u3055\u304f\u3066\u3093 \u200b\u5236\u4f5c\u200b\u5c55\u200b \u30d7\u30ec\u30bc\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3 \u200b\u5c55\u793a\u200b \u3061\u3087\u3063\u3068 \u200b\u7a0d\u200b\u7b49\u200b \u3068\u3063\u3066\u3082 \u200b\u975e\u5e38\u200b \u200b\u53b3\u200b\u3057\u3044 \u304d\u3073\u3057\u3044 \u200b\u4e25\u683c\u200b \u200b\u7d30\u90e8\u200b \u3055\u3044\u3076 \u200b\u7ec6\u8282\u200b \u3053\u3060\u308f\u308b \u200b\u8bb2\u7a76\u200b \u3084\u306f\u308a \u200b\u4ecd\u65e7\u200b \u200b\u9811\u5f35\u200b\u308b \u304c\u3093\u3070\u308b \u200b\u52a0\u6cb9\u200b \u3088\u304b\u3063\u305f \u200b\u592a\u597d\u4e86\u200b \u3057\u304b\u3057 \u200b\u4f46\u662f\u200b \u3067\u3082 \u200b\u4f46\u662f\u200b \u301c\u304c \u200b\u4f46\u662f\u200b \u301c\u3051\u3069 \u200b\u4f46\u662f\u200b \u3060\u304b\u3089 \u200b\u6240\u4ee5\u200b \u301c\u304b\u3089 \u200b\u6240\u4ee5\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5143\u200b\u6c17\u200b \u3052\u3093\u304d \u200b\u7cbe\u795e\u200b \u200b\u5f7c\u6c0f\u200b \u304b\u308c\u3057 \u200b\u7537\u670b\u53cb\u200b \u200b\u6e05\u83ef\u200b\u5927\u5b66\u200b \u305b\u3044\u304b\u3060\u3044\u304c\u304f \u200b\u6e05\u534e\u5927\u5b66\u200b \u200b\u5408\u683c\u200b \u3054\u3046\u304b\u304f \u200b\u5408\u683c\u200b \u304a\u3081\u3066\u3068\u3046 \u200b\u606d\u559c\u200b \u200b\u9759\u200b\u304b \u3057\u305a\u304b \u200b\u5b89\u9759\u200b \u200b\u4eca\u6708\u200b \u3053\u3093\u3052\u3064 \u200b\u672c\u6708\u200b \u200b\u4f55\u65e5\u200b \u306a\u3093\u306b\u3061 \u200b\u51e0\u53f7\u200b \u200b\u6bce\u200b\u6708\u200b \u307e\u3044\u3064\u304d \u200b\u6bcf\u6708\u200b \u200b\u99c5\u200b\u524d\u200b \u3048\u304d\u307e\u3048 \u200b\u8f66\u7ad9\u200b\u524d\u200b \u200b\u65b0\u200b\u3057\u3044 \u3042\u305f\u3089\u3057\u3044 \u200b\u65b0\u200b\u7684\u200b \u200b\u5c45\u9152\u200b\u5c4b\u200b \u3044\u3056\u304b\u3084 \u200b\u5c45\u9152\u200b\u5c4b\u200b \u200b\u7f8e\u5473\u200b\u3057\u3044 \u304a\u3044\u3057\u3044 \u200b\u597d\u5403\u200b \u200b\u8a95\u200b\u751f\u65e5\u200b \u305f\u3093\u3058\u3087\u3046\u3073 \u200b\u751f\u65e5\u200b \u3042\u307e\u308a \u200b\u4e0d\u592a\u200b \u200b\u4e0a\u200b\u624b\u200b \u3058\u3087\u3046\u305a \u200b\u64c5\u957f\u200b \u200b\u597d\u200b\u304d \u3059\u304d \u200b\u559c\u6b22\u200b \u200b\u512a\u200b\u3057\u3044 \u3084\u3055\u3057\u3044 \u200b\u6e29\u67d4\u200b \u200b\u5fa1\u852d\u200b \u304a\u304b\u3052 \u200b\u591a\u4e8f\u200b \u200b\u7559\u5b66\u200b \u308a\u3085\u3046\u304c\u304f \u200b\u7559\u5b66\u200b \u200b\u6700\u8fd1\u200b \u3055\u3044\u304d\u3093 \u200b\u6700\u8fd1\u200b \u200b\u5927\u200b\u304d\u3044 \u304a\u304a\u304d\u3044 \u200b\u5927\u200b \u200b\u9ad8\u200b\u3044 \u305f\u304b\u3044 \u200b\u9ad8\u200b \u304b\u304b\u308b \u200b\u82b1\u8d39\u200b \u200b\u9762\u767d\u200b\u3044 \u304a\u3082\u3057\u308d\u3044 \u200b\u6709\u8da3\u200b \u200b\u96e3\u200b\u3057\u3044 \u3080\u305a\u304b\u3057\u3044 \u200b\u96be\u200b \u200b\u5bbf\u984c\u200b \u3057\u3085\u304f\u3060\u3044 \u200b\u4f5c\u4e1a\u200b \u200b\u8ab2\u984c\u200b \u304b\u3060\u3044 \u200b\u8bfe\u9898\u200b \u200b\u767a\u200b\u8868\u200b \u306f\u3063\u3074\u3087\u3046 \u200b\u53d1\u8a00\u200b \u200b\u4eca\u5ea6\u200b \u3053\u3093\u3069 \u200b\u4e0b\u6b21\u200b \u200b\u9031\u672b\u200b \u3057\u3085\u3046\u307e\u3064 \u200b\u5468\u672b\u200b \u200b\u6a21\u64ec\u200b\u30c6\u30b9\u30c8 \u3082\u304e\u30c6\u30b9\u30c8 \u200b\u6a21\u62df\u8003\u8bd5"},{"location":"japanese/japanese-1-vocab/#10","title":"\u7b2c\u200b10\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5168\u54e1\u200b \u305c\u3093\u3044\u3093 \u200b\u5168\u5458\u200b \u200b\u9577\u200b\u3044 \u306a\u304c\u3044 \u200b\u957f\u200b \u30b3\u30e1\u30f3\u30c8 \u200b\u8bc4\u8bba\u200b \u3042\u3063\u3068\u3044\u3046\u200b\u9593\u200b \u3042\u3063\u3068\u3044\u3046\u307e \u200b\u4e00\u4e0b\u5b50\u200b \u200b\u898b\u200b\u308b \u307f\u308b \u200b\u770b\u200b \u200b\u884c\u200b\u304f \u3044\u304f \u200b\u53bb\u200b \u200b\u7a7a\u200b\u304f \u3042\u304f \u200b\u7a7a\u200b \u200b\u4f5c\u54c1\u200b \u3055\u304f\u3072\u3093 \u200b\u4f5c\u54c1\u200b \u200b\u697d\u200b\u3057\u307f \u305f\u306e\u3057\u307f \u200b\u671f\u5f85\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5e2d\u200b \u305b\u304d \u200b\u5ea7\u4f4d\u200b \u200b\u98df\u4e8b\u4f1a\u200b \u3057\u3087\u304f\u3058\u304b\u3044 \u200b\u996d\u5c40\u200b \u200b\u5f01\u200b\u5f53\u200b \u3079\u3093\u3068\u3046 \u200b\u4fbf\u5f53\u200b \u200b\u5b66\u98df\u200b \u304c\u304f\u3057\u3087\u304f \u200b\u5b66\u6821\u98df\u5802\u200b \u200b\u89aa\u5207\u200b \u3057\u3093\u305b\u3064 \u200b\u4eb2\u5207\u200b \u200b\u98df\u8cbb\u200b \u3057\u3087\u304f\u3072 \u200b\u996d\u94b1\u200b \u200b\u590f\u4f11\u200b\u307f \u306a\u3064\u3084\u3059\u307f \u200b\u6691\u5047\u200b \u200b\u51ac\u4f11\u200b\u307f \u3075\u3086\u3084\u3059\u307f \u200b\u5bd2\u5047\u200b \u200b\u4f1a\u793e\u200b \u304b\u3044\u3057\u3083 \u200b\u516c\u53f8\u200b \u200b\u5b66\u6821\u200b \u304c\u3063\u3053\u3046 \u200b\u5b66\u6821\u200b \u200b\u5f85\u200b\u3061\u200b\u5408\u200b\u308f\u305b \u307e\u3061\u3042\u308f\u305b \u200b\u7ea6\u4f1a\u200b \u200b\u7d50\u69cb\u200b \u3051\u3063\u3053\u3046 \u200b\u53ef\u4ee5\u200b\u7684\u200b \u200b\u591c\u200b \u3088\u308b \u200b\u665a\u4e0a\u200b \u200b\u7f8e\u8853\u9928\u200b \u3073\u3058\u3085\u3064\u304b\u3093 \u200b\u7f8e\u672f\u9986\u200b \u200b\u6b8b\u5ff5\u200b \u3056\u3093\u306d\u3093 \u200b\u9057\u61be\u200b \u200b\u4f1a\u8b70\u200b \u304b\u3044\u304e \u200b\u4f1a\u8bae\u200b \u200b\u6691\u200b\u3044 \u3042\u3064\u3044 \u200b\u70ed\u200b \u200b\u6599\u7406\u200b \u308a\u3087\u3046\u308a \u200b\u6599\u7406\u200b \u304a\u200b\u6d12\u843d\u200b \u304a\u3057\u3083\u308c \u200b\u65f6\u9ae6\u200b \u200b\u7dba\u9e97\u200b \u304d\u308c\u3044 \u200b\u6f02\u4eae\u200b \u200b\u6697\u200b\u3044 \u304f\u3089\u3044 \u200b\u9ed1\u6697\u200b \u200b\u72ed\u200b\u3044 \u305b\u307e\u3044 \u200b\u72ed\u7a84\u200b \u200b\u771f\u9762\u76ee\u200b \u307e\u3058\u3081 \u200b\u8ba4\u771f\u200b \u200b\u98df\u4e8b\u200b \u3057\u3087\u304f\u3058 \u200b\u5403\u996d\u200b \u3059\u3054\u3044 \u200b\u5389\u5bb3\u200b \u200b\u53e3\u982d\u200b \u3053\u3046\u3068\u3046 \u200b\u53e3\u5934\u200b \u3081\u3093\u305b\u3064 \u200b\u9762\u8bd5\u200b \u200b\u7f8e\u8853\u5c55\u200b \u3073\u3058\u3085\u3064\u3066\u3093 \u200b\u7f8e\u672f\u200b\u5c55\u200b \u200b\u5fd8\u5e74\u200b\u4f1a\u200b \u307c\u3046\u306d\u3093\u304b\u3044 \u200b\u5e74\u7ec8\u200b\u4f1a"},{"location":"japanese/japanese-1-vocab/#11","title":"\u7b2c\u200b11\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5168\u7136\u200b \u305c\u3093\u305c\u3093 \u200b\u5168\u7136\u200b \u307a\u3089\u307a\u3089 \u200b\u6d41\u5229\u200b \u3060\u3063\u3066 \u200b\u56e0\u4e3a\u200b \u200b\u5358\u200b\u8a9e\u200b \u305f\u3093\u3054 \u200b\u5355\u8bcd\u200b \u200b\u91cf\u200b \u308a\u3087\u3046 \u200b\u91cf\u200b \u200b\u52e4\u52c9\u200b \u304d\u3093\u3079\u3093 \u200b\u52e4\u594b\u200b \u30c6\u30f3\u30b7\u30e7\u30f3 \u200b\u6c14\u6c1b\u200b\u70ed\u70c8\u200b\u7684\u200b\u6837\u5b50\u200b \u200b\u8a71\u200b \u306f\u306a\u3057 \u200b\u8bdd\u200b \u200b\u7fa8\u200b\u307e\u3057\u3044 \u3046\u3089\u3084\u307e\u3057\u3044 \u200b\u7fa1\u6155\u200b \u200b\u58f0\u200b \u3053\u3048 \u200b\u58f0\u97f3\u200b \u200b\u91cd\u8981\u200b \u3058\u3085\u3046\u3088\u3046 \u200b\u91cd\u8981\u200b \u200b\u8a9e\u5b66\u200b \u3054\u304c\u304f \u200b\u8bed\u8a00\u200b \u200b\u57fa\u672c\u200b \u304d\u307b\u3093 \u200b\u57fa\u672c\u200b \u3057\u3083\u3079\u308b \u200b\u8bf4\u200b \u200b\u6065\u200b\u305a\u304b\u3057\u3044 \u306f\u305a\u304b\u3057\u3044 \u200b\u5bb3\u7f9e\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u3068\u3053\u308d \u200b\u5730\u65b9\u200b \u200b\u6016\u200b\u3044 \u3053\u308f\u3044 \u200b\u53ef\u6015\u200b \u200b\u5185\u5bb9\u200b \u306a\u3044\u3088\u3046 \u200b\u5185\u5bb9\u200b \u200b\u5206\u200b\u304b\u308b \u308f\u304b\u308b \u200b\u61c2\u200b \u200b\u5b50\u200b \u3053 \u200b\u5b69\u5b50\u200b \u200b\u91ce\u83dc\u200b \u3084\u3055\u3044 \u200b\u852c\u83dc\u200b \u200b\u8089\u200b \u306b\u304f \u200b\u8089\u200b \u200b\u5acc\u200b\u3044 \u304d\u3089\u3044 \u200b\u8ba8\u538c\u200b \u200b\u98df\u200b\u3079\u308b \u305f\u3079\u308b \u200b\u5403\u200b \u3082\u306e \u200b\u4e1c\u897f\u200b \u200b\u5c11\u200b\u306a\u3044 \u3059\u304f\u306a\u3044 \u200b\u5c11\u200b \u200b\u904b\u52d5\u4f1a\u200b \u3046\u3093\u3069\u3046\u304b\u3044 \u200b\u8fd0\u52a8\u4f1a\u200b \u200b\u60aa\u200b\u3044 \u308f\u308b\u3044 \u200b\u574f\u200b \u200b\u5c02\u200b\u9580\u5e97\u200b \u305b\u3093\u3082\u3093\u3066\u3093 \u200b\u4e13\u5356\u5e97\u200b \u200b\u5bd2\u200b\u3044 \u3055\u3080\u3044 \u200b\u51b7\u200b \u200b\u80cc\u200b \u305b \u200b\u8eab\u9ad8\u200b \u200b\u624b\u200b\u6599\u7406\u200b \u3066\u308a\u3087\u3046\u308a \u200b\u81ea\u5df1\u200b\u505a\u200b\u7684\u200b\u996d\u200b \u200b\u52aa\u529b\u200b \u3069\u308a\u3087\u304f \u200b\u52aa\u529b\u200b \u200b\u5927\u4e8b\u200b \u3060\u3044\u3058 \u200b\u91cd\u8981\u200b \u200b\u6f2b\u753b\u200b \u307e\u3093\u304c \u200b\u6f2b\u753b\u200b \u200b\u8aad\u200b\u3080 \u3088\u3080 \u200b\u8bfb\u200b \u200b\u5927\u597d\u200b\u304d \u3060\u3044\u3059\u304d \u200b\u975e\u5e38\u200b\u559c\u6b22\u200b \u200b\u4fbf\u5229\u200b \u3079\u3093\u308a \u200b\u65b9\u4fbf\u200b \u200b\u4f7f\u200b\u3046 \u3064\u304b\u3046 \u200b\u4f7f\u7528\u200b \u200b\u96fb\u8eca\u200b \u3067\u3093\u3057\u3083 \u200b\u7535\u8f66\u200b \u200b\u9045\u200b\u308c\u308b \u304a\u304f\u308c\u308b \u200b\u8fdf\u5230\u200b \u200b\u65e9\u200b\u304f \u306f\u3084\u304f \u200b\u5feb\u200b \u200b\u982d\u200b \u3042\u305f\u307e \u200b\u5934\u200b \u200b\u75db\u200b\u3044 \u3044\u305f\u3044 \u200b\u75bc\u200b \u200b\u5730\u4e0b\u200b\u9244\u200b \u3061\u304b\u3066\u3064 \u200b\u5730\u94c1\u200b \u200b\u901f\u200b\u3044 \u306f\u3084\u3044 \u200b\u5feb\u200b \u200b\u4e2d\u83ef\u200b\u6599\u7406\u200b \u3061\u3085\u3046\u304b\u308a\u3087\u3046\u308a \u200b\u4e2d\u9910\u200b \u200b\u753a\u200b \u307e\u3061 \u200b\u8857\u9053\u200b \u200b\u793e\u4f1a\u200b\u4eba\u200b \u3057\u3083\u304b\u3044\u3058\u3093 \u200b\u793e\u4f1a\u200b\u4eba\u200b \u200b\u55ab\u200b\u8336\u5e97\u200b \u304d\u3063\u3055\u3066\u3093 \u200b\u5496\u5561\u5e97\u200b \u200b\u5916\u200b \u305d\u3068 \u200b\u5916\u9762\u200b \u200b\u5e83\u200b\u3044 \u3072\u308d\u3044 \u200b\u5bbd\u200b \u200b\u74b0\u5883\u200b \u304b\u3093\u304d\u3087\u3046 \u200b\u73af\u5883\u200b \u30ab\u30c4\u200b\u4e3c\u200b \u30ab\u30c4\u3069\u3093 \u200b\u732a\u6392\u200b\u996d\u200b \u200b\u5bcc\u58eb\u5c71\u200b \u3075\u3058\u3055\u3093 \u200b\u5bcc\u58eb\u5c71\u200b \u200b\u6210\u7e3e\u200b \u305b\u3044\u305b\u304d \u200b\u6210\u7ee9\u200b \u200b\u696d\u754c\u200b \u304e\u3087\u3046\u304b\u3044 \u200b\u884c\u4e1a\u200b \u200b\u6709\u540d\u200b \u3086\u3046\u3081\u3044 \u200b\u6709\u540d\u200b \u200b\u6570\u5b66\u200b \u3059\u3046\u304c\u304f \u200b\u6570\u5b66\u200b \u200b\u56fd\u8a9e\u200b \u3053\u304f\u3054 \u200b\u56fd\u8bed\u200b \u200b\u6b74\u200b\u53f2\u200b \u308c\u304d\u3057 \u200b\u5386\u53f2\u200b \u200b\u6587\u5b66\u200b \u3076\u3093\u304c\u304f \u200b\u6587\u5b66\u200b \u200b\u793e\u4f1a\u5b66\u200b \u3057\u3083\u304b\u3044\u304c\u304f \u200b\u793e\u4f1a\u5b66\u200b \u200b\u5316\u5b66\u200b \u304b\u304c\u304f \u200b\u5316\u5b66\u200b \u200b\u71b1\u5fc3\u200b \u306d\u3063\u3057\u3093 \u200b\u70ed\u5fc3\u200b \u200b\u6b4c\u200b \u3046\u305f \u200b\u6b4c\u200b \u200b\u7269\u77e5\u200b\u308a \u3082\u306e\u3057\u308a \u200b\u535a\u5b66\u200b \u200b\u4eba\u200b\u6c17\u200b \u306b\u3093\u304d \u200b\u4eba\u6c14"},{"location":"japanese/japanese-1-vocab/#12","title":"\u7b2c\u200b12\u200b\u8bfe","text":"\u91cd\u70b9\u200b\u5355\u8bcd\u200b\u5176\u4ed6\u200b\u5355\u8bcd\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u305d\u308d\u305d\u308d \u200b\u4e0d\u4e45\u200b \u304a\u200b\u663c\u200b \u304a\u3072\u308b \u200b\u4e2d\u5348\u200b \u3059\u308b \u200b\u505a\u200b \u200b\u671d\u200b\u3054\u200b\u98ef\u200b \u3042\u3055\u3054\u306f\u3093 \u200b\u65e9\u996d\u200b \u200b\u9045\u200b\u3044 \u304a\u305d\u3044 \u200b\u665a\u200b \u200b\u8efd\u200b\u3044 \u304b\u308b\u3044 \u200b\u8f7b\u200b \u200b\u5915\u98df\u200b \u3086\u3046\u3057\u3087\u304f \u200b\u665a\u996d\u200b \u200b\u6b8b\u200b\u308a \u306e\u3053\u308a \u200b\u5269\u4f59\u200b \u200b\u81ea\u708a\u200b \u3058\u3059\u3044 \u200b\u81ea\u5df1\u200b\u505a\u996d\u200b \u305f\u307e\u306b \u200b\u5076\u5c14\u200b \u200b\u4f5c\u200b\u308b \u3064\u304f\u308b \u200b\u505a\u200b \u200b\u52ff\u8ad6\u200b \u3082\u3061\u308d\u3093 \u200b\u5f53\u7136\u200b \u200b\u4e2d\u56fd\u200b\u4eba\u200b \u3061\u3085\u3046\u3054\u304f\u3058\u3093 \u200b\u4e2d\u56fd\u200b\u4eba\u200b \u200b\u548c\u200b\u98df\u200b \u308f\u3057\u3087\u304f \u200b\u65e5\u672c\u6599\u7406\u200b \u200b\u9903\u5b50\u200b \u304e\u3087\u3046\u3056 \u200b\u997a\u5b50\u200b \u200b\u9ebb\u5a46\u8c46\u8150\u200b \u307e\u30fc\u307c\u3069\u3046\u3075 \u200b\u9ebb\u5a46\u8c46\u8150\u200b \u200b\u751f\u7269\u200b \u306a\u307e\u3082\u306e \u200b\u751f\u200b\u7684\u200b\u4e1c\u897f\u200b \u200b\u82e6\u624b\u200b \u306b\u304c\u3066 \u200b\u4e0d\u200b\u64c5\u957f\u200b \u200b\u6642\u200b\u3005\u200b \u3068\u304d\u3069\u304d \u200b\u6709\u65f6\u5019\u200b \u200b\u604b\u200b\u3057\u3044 \u3053\u3044\u3057\u3044 \u200b\u7231\u6155\u200b \u200b\u4f5c\u200b\u308a\u200b\u65b9\u200b \u3064\u304f\u308a\u304b\u305f \u200b\u505a\u6cd5\u200b \u200b\u662f\u975e\u200b \u305c\u3072 \u200b\u4e00\u5b9a\u200b \u200b\u6559\u200b\u3048\u308b \u304a\u3057\u3048\u308b \u200b\u6559\u200b \u3068\u304b \u200b\u7b49\u7b49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u307e\u3060 \u200b\u8fd8\u200b \u200b\u98df\u200b\u3079\u200b\u9803\u200b \u305f\u3079\u3054\u308d \u200b\u98df\u7269\u200b\u6700\u200b\u597d\u5403\u200b\u7684\u200b\u65f6\u5019\u200b \u200b\u6c34\u6cf3\u200b \u3059\u3044\u3048\u3044 \u200b\u6e38\u6cf3\u200b \u200b\u5c11\u200b\u3057 \u3059\u3053\u3057 \u200b\u4e00\u70b9\u70b9\u200b \u200b\u8cea\u554f\u200b \u3057\u3064\u3082\u3093 \u200b\u95ee\u9898\u200b \u3069\u3046\u3057\u3066 \u200b\u4e3a\u4ec0\u4e48\u200b \u200b\u672c\u5f53\u200b\u306b \u307b\u3093\u3068\u3046\u306b \u200b\u771f\u7684\u200b \u3060\u304b\u3089 \u200b\u6240\u4ee5\u200b \u200b\u7406\u7cfb\u200b \u308a\u3051\u3044 \u200b\u7406\u79d1\u200b \u200b\u79d1\u76ee\u200b \u304b\u3082\u304f \u200b\u79d1\u76ee\u200b \u200b\u7d0d\u8c46\u200b \u306a\u3063\u3068\u3046 \u200b\u7eb3\u8c46\u200b \u200b\u6620\u753b\u9928\u200b \u3048\u3044\u304c\u304b\u3093 \u200b\u7535\u5f71\u9662\u200b \u200b\u7518\u200b\u3044 \u3042\u307e\u3044 \u200b\u751c\u200b \u200b\u904b\u52d5\u200b \u3046\u3093\u3069\u3046 \u200b\u8fd0\u52a8\u200b \u3078\u305f \u200b\u4e0d\u200b\u64c5\u957f\u200b \u200b\u5f97\u610f\u200b \u3068\u304f\u3044 \u200b\u64c5\u957f\u200b \u200b\u5f8c\u200b\u308d \u3046\u3057\u308d \u200b\u540e\u9762\u200b \u200b\u7df4\u7fd2\u200b \u308c\u3093\u3057\u3085\u3046 \u200b\u7ec3\u4e60\u200b \u200b\u554f\u984c\u200b \u3082\u3093\u3060\u3044 \u200b\u95ee\u9898\u200b \u200b\u85ac\u200b \u304f\u3059\u308a \u200b\u836f\u200b \u200b\u60a3\u8005\u200b \u304b\u3093\u3058\u3083 \u200b\u75c5\u4eba\u200b \u200b\u99c5\u200b \u3048\u304d \u200b\u8f66\u7ad9\u200b \u200b\u904b\u200b\u8ee2\u200b\u624b\u200b \u3046\u3093\u3066\u3093\u3057\u3085 \u200b\u53f8\u673a\u200b \u200b\u64ae\u200b\u308b \u3068\u308b \u200b\u62cd\u7167\u200b \u200b\u904b\u200b\u8ee2\u200b \u3046\u3093\u3066\u3093 \u200b\u5f00\u8f66\u200b \u200b\u672c\u5c4b\u200b \u307b\u3093\u3084 \u200b\u4e66\u5e97\u200b \u301c\u200b\u5c4b\u200b \u3084 ~\u200b\u5e97\u200b \u200b\u5929\u5a66\u200b\u7f85\u200b \u3066\u3093\u3077\u3089 \u200b\u5929\u5987\u200b\u7f57\u200b \u200b\u96e8\u200b \u3042\u3081 \u200b\u96e8\u200b \u200b\u6dbc\u200b\u3057\u3044 \u3059\u305a\u3057\u3044 \u200b\u51c9\u723d\u200b \u200b\u6674\u200b\u308c \u306f\u308c \u200b\u6674\u5929\u200b \u200b\u5546\u54c1\u200b \u3057\u3087\u3046\u3072\u3093 \u200b\u5546\u54c1\u200b \u200b\u685c\u200b \u3055\u304f\u3089 \u200b\u6a31\u82b1\u200b \u200b\u5473\u200b \u3042\u3058 \u200b\u5473\u9053\u200b \u200b\u8272\u200b \u3044\u308d \u200b\u989c\u8272\u200b \u200b\u521d\u200b\u3081\u3066 \u306f\u3058\u3081\u3066 \u200b\u7b2c\u4e00\u6b21\u200b \u200b\u7389\u5b50\u200b\u713c\u200b\u304d \u305f\u307e\u3054\u3084\u304d \u200b\u714e\u86cb\u200b \u3064\u307e\u3089\u306a\u3044 \u200b\u65e0\u804a\u200b \u200b\u697d\u200b\u5668\u200b \u304c\u3063\u304d \u200b\u4e50\u5668\u200b \u200b\u9eba\u200b \u3081\u3093 \u200b\u9762\u6761\u200b \u200b\u9055\u200b\u3046 \u3061\u304c\u3046 \u200b\u4e0d\u200b\u4e00\u6837"},{"location":"japanese/japanese-1-vocab/#1311","title":"\u7b2c\u200b13\u200b\u8bfe\u200b\uff08\u200b\u65b0\u4e16\u7eaa\u200b\u521d\u7ea7\u200b\u7b2c\u200b11\u200b\u8bfe\u200b\uff09","text":"\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u7a7a\u6e2f\u200b \u304f\u3046\u3053\u3046 \u200b\u673a\u573a\u200b \u200b\u6c7a\u5b9a\u200b \u3051\u3063\u3066\u3044 \u200b\u51b3\u5b9a\u200b \u200b\u6765\u200b\u65e5\u200b \u3089\u3044\u306b\u3061 \u200b\u6765\u200b\u65e5\u672c\u200b \u200b\u5230\u200b\u7740\u200b \u3068\u3046\u3061\u3083\u304f \u200b\u5230\u8fbe\u200b \u200b\u4f55\u6642\u200b \u306a\u3093\u3058 \u200b\u51e0\u70b9\u200b \u200b\u4e88\u5b9a\u200b \u3088\u3066\u3044 \u200b\u9884\u5b9a\u200b \u200b\u8fce\u200b\u3048\u308b \u3080\u304b\u3048\u308b \u200b\u8fce\u63a5\u200b \u200b\u5e30\u200b\u308b \u304b\u3048\u308b \u200b\u56de\u5bb6\u200b \u200b\u5c31\u200b\u8077\u200b \u3057\u3085\u3046\u3057\u3087\u304f \u200b\u5c31\u804c\u200b \u200b\u8cbf\u6613\u200b \u307c\u3046\u3048\u304d \u200b\u8d38\u6613\u200b \u200b\u4f7f\u200b\u3046 \u3064\u304b\u3046 \u200b\u4f7f\u7528\u200b \u200b\u6b8b\u696d\u200b \u3056\u3093\u304e\u3087\u3046 \u200b\u52a0\u73ed\u200b \u200b\u65e5\u200b\u3005\u200b \u3072\u3073 \u200b\u65e5\u5b50\u200b \u200b\u61d0\u200b\u304b\u3057\u3044 \u306a\u3064\u304b\u3057\u3044 \u200b\u6000\u5ff5\u200b \u200b\u4f4f\u5c45\u200b \u3058\u3085\u3046\u304d\u3087 \u200b\u4f4f\u6240\u200b \u200b\u6c7a\u200b\u3057\u3066 \u3051\u3063\u3057\u3066 \u200b\u7edd\u4e0d\u200b \u200b\u5fc3\u914d\u200b \u3057\u3093\u3071\u3044 \u200b\u62c5\u5fc3\u200b \u3044\u308b \u200b\u9700\u8981\u200b \u200b\u5b89\u200b\u3044 \u3084\u3059\u3044 \u200b\u4fbf\u5b9c\u200b \u200b\u7d39\u4ecb\u200b \u3057\u3087\u3046\u304b\u3044 \u200b\u4ecb\u7ecd\u200b \u200b\u5b89\u5fc3\u200b \u3042\u3093\u3057\u3093 \u200b\u5b89\u5fc3\u200b \u3067\u306f \u200b\u90a3\u4e48\u200b \u200b\u5143\u200b\u6c17\u200b \u3052\u3093\u304d \u200b\u7cbe\u795e\u200b \u200b\u69d8\u200b \u3055\u307e \uff08\u200b\u7528\u4e8e\u200b\u656c\u79f0\u200b\uff09 \u200b\u5589\u200b \u306e\u3069 \u200b\u5589\u5499\u200b \u200b\u6e07\u200b\u304f \u304b\u308f\u304f \u200b\u6e34\u200b \u200b\u98f2\u200b\u3080 \u306e\u3080 \u200b\u559d\u200b \u200b\u5bcc\u58eb\u5c71\u200b \u3075\u3058\u3055\u3093 \u200b\u5bcc\u58eb\u5c71\u200b \u200b\u7d20\u6674\u200b\u3089\u3057\u3044 \u3059\u3070\u3089\u3057\u3044 \u200b\u7f8e\u597d\u200b \u200b\u7b11\u200b\u3046 \u308f\u3089\u3046 \u200b\u7b11\u200b \u3042\u306e \u200b\u90a3\u4e2a\u200b \u304a\u200b\u624b\u6d17\u200b\u3044 \u304a\u3066\u3042\u3089\u3044 \u200b\u6d17\u624b\u95f4\u200b \u307e\u3064 \u200b\u7b49"},{"location":"japanese/japanese-1-vocab/#1412","title":"\u7b2c\u200b14\u200b\u8bfe\u200b\uff08\u200b\u65b0\u4e16\u7eaa\u200b\u521d\u7ea7\u200b\u7b2c\u200b12\u200b\u8bfe\u200b\uff09","text":"\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u5355\u8bcd\u200b \u200b\u5047\u540d\u200b \u200b\u542b\u4e49\u200b \u200b\u6d77\u5916\u200b \u304b\u3044\u304c\u3044 \u200b\u6d77\u5916\u200b \u200b\u65c5\u884c\u200b \u308a\u3087\u3053\u3046 \u200b\u65c5\u884c\u200b \u200b\u73cd\u200b\u3057\u3044 \u3081\u305a\u3089\u3057\u3044 \u200b\u73cd\u8d35\u200b \u3053\u3068 \u200b\u4e8b\u60c5\u200b \u200b\u4f8b\u200b\u3048\u3070 \u305f\u3068\u3048\u3070 \u200b\u4f8b\u5982\u200b \u200b\u65b0\u5a5a\u200b \u3057\u3093\u3053\u3093 \u200b\u65b0\u5a5a\u200b \u200b\u56fd\u5185\u200b \u3053\u304f\u306a\u3044 \u200b\u56fd\u5185\u200b \u200b\u9078\u200b\u3076 \u3048\u3089\u3076 \u200b\u9009\u62e9\u200b \u200b\u5c11\u200b\u306a\u3044 \u3059\u304f\u306a\u3044 \u200b\u601d\u200b\u3046 \u304a\u3082\u3046 \u200b\u8ba4\u4e3a\u200b \u200b\u591a\u200b\u304f \u304a\u304a\u304f \u200b\u591a\u200b \u200b\u8a00\u200b\u3046 \u3044\u3046 \u200b\u8bf4\u200b \u200b\u5404\u5730\u200b \u304b\u304f\u3061 \u200b\u5404\u5730\u200b \u200b\u77ed\u671f\u200b \u305f\u3093\u304d \u200b\u77ed\u671f\u200b \u200b\u500b\u200b\u4eba\u200b \u3053\u3058\u3093 \u200b\u4e2a\u4eba\u200b \u200b\u5927\u52e2\u200b \u304a\u304a\u305c\u3044 \u200b\u5927\u591a\u6570\u200b \u200b\u56fd\u200b \u304f\u306b \u200b\u56fd\u5bb6\u200b \u200b\u65b9\u200b \u307b\u3046 \u200b\u65b9\u9762\u200b \u200b\u5024\u200b\u6bb5\u200b \u306d\u3060\u3093 \u200b\u4ef7\u683c\u200b \u200b\u5834\u5408\u200b \u3070\u3042\u3044 \u200b\u60c5\u51b5\u200b \u200b\u4e0d\u8981\u200b \u3075\u3088\u3046 \u200b\u4e0d\u200b\u9700\u8981\u200b \u200b\u7c21\u200b\u5358\u200b \u304b\u3093\u305f\u3093 \u200b\u7b80\u5355\u200b \u3057\u304b\u3057 \u200b\u4f46\u662f\u200b \u200b\u4e00\u751f\u200b\u61f8\u547d\u200b \u3044\u3063\u3057\u3087\u3046\u3051\u3093\u3081\u3044 \u200b\u52aa\u529b\u200b \u200b\u52c9\u5f37\u200b \u3079\u3093\u304d\u3087\u3046 \u200b\u5b66\u4e60\u200b \u200b\u8cb4\u91cd\u200b \u304d\u3061\u3087\u3046 \u200b\u8d35\u91cd\u200b \u200b\u9752\u6625\u200b \u305b\u3044\u3057\u3085\u3093 \u200b\u9752\u6625\u200b \u200b\u4e00\u65e5\u200b \u3044\u3061\u306b\u3061 \u200b\u4e00\u5929\u200b \u200b\u5927\u5207\u200b \u305f\u3044\u305b\u3064 \u200b\u91cd\u8981\u200b \u200b\u590f\u4f11\u200b\u307f \u306a\u3064\u3084\u3059\u307f \u200b\u6691\u5047\u200b \u200b\u904e\u200b\u3054\u3059 \u3059\u3054\u3059 \u200b\u5ea6\u8fc7\u200b \u200b\u6b8b\u200b\u308b \u306e\u3053\u308b \u200b\u5269\u4f59\u200b \u200b\u8a66\u200b\u9a13\u200b \u3057\u3051\u3093 \u200b\u8003\u8bd5\u200b \u200b\u53d7\u200b\u3051\u308b \u3046\u3051\u308b \u200b\u53c2\u52a0\u200b \u304a\u200b\u76c6\u200b \u304a\u307c\u3093 \u200b\u76c2\u200b\u5170\u76c6\u200b \u304f\u308b \u200b\u6765\u200b \u200b\u4e07\u91cc\u200b\u9577\u200b\u57ce\u200b \u3070\u3093\u308a\u3061\u3087\u3046\u3058\u3087\u3046 \u200b\u4e07\u91cc\u957f\u57ce\u200b \u200b\u6848\u5185\u200b \u3042\u3093\u306a\u3044 \u200b\u5bfc\u6e38\u200b \u305d\u3046 \u200b\u8fd9\u6837\u200b \u200b\u826f\u200b\u3044 \u3088\u3044 \u200b\u597d"},{"location":"latex/","title":"LaTeX","text":"\u200b\u8bb0\u5f55\u200bLaTeX\u200b\u7684\u200b\u4f7f\u7528\u200b\u3002
"},{"location":"latex/#_1","title":"\u57fa\u672c\u200b\u6392\u7248","text":" - \u200b\u5b57\u4f53\u200b\u4e0e\u200b\u5b57\u53f7\u200b
- \u200b\u5217\u8868\u200b
"},{"location":"latex/#_2","title":"\u6570\u5b66\u516c\u5f0f\u200b\u6392\u7248","text":" - \u200b\u6570\u5b66\u200b\u7b26\u53f7\u200b
- \u200b\u7b26\u53f7\u200b\u5806\u53e0\u200b
- \u200b\u7279\u6b8a\u200b\u6280\u5de7\u200b
"},{"location":"latex/#_3","title":"\u56fe\u8868\u200b\u6392\u7248","text":""},{"location":"latex/#tikz","title":"tikz\u200b\u7ed8\u56fe","text":" - pgfplots\u200b\u56fe\u8868\u200b
"},{"location":"latex/#_4","title":"\u8868\u683c\u200b\u6392\u7248","text":" - tabular\u200b\u73af\u5883\u200b
"},{"location":"latex/#_5","title":"\u5176\u4ed6","text":" - musixtex
- \u200b\u4f7f\u7528\u200bLaTeX\u200b\u521b\u5efa\u200b\u5e7b\u706f\u7247\u200b
- \u200b\u9012\u5f52\u200b
"},{"location":"latex/advanced/recursion/","title":"\u9012\u5f52","text":"LaTeX\u200b\u4e2d\u200b\u7684\u200b\u9012\u5f52\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\\def
\u200b\u547d\u4ee4\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u5728\u200b\u5b9a\u4e49\u200b\u7684\u200b\u5b8f\u4e2d\u200b\u5305\u542b\u200b\u81ea\u8eab\u200b\u5373\u53ef\u200b\u3002
\\def\\recursion#1{\n \\ifx#1\\relax\n \\relax\n \\else\n do something\n \\expandafter\\recursion\n \\fi\n}\n
\u200b\u5728\u200b\u5b8f\u200b\u7b2c\u4e00\u6b21\u200b\u5c55\u5f00\u200b\u540e\u200b\uff0c\u200b\u5982\u679c\u200b#1
\u200b\u4e0d\u662f\u200b\\relax
\uff0c\u200b\u5219\u200b\u4f1a\u200b\u8f6c\u5165\u200b\\else
\u200b\u8bed\u53e5\u200b\u8fdb\u884c\u200b\u7b2c\u4e8c\u6b21\u200b\u5c55\u5f00\u200b\u3002
- \u200b\u5b8f\u200b\u5b9a\u4e49\u200b\u4e2d\u200b\u5f15\u7528\u200b\u7684\u200b\u5b8f\u200b\u540d\u79f0\u200b\u524d\u200b\u5fc5\u987b\u200b\u52a0\u200b
\\expandafter
\uff0c\u200b\u8868\u793a\u200b\u5728\u200b\u5c55\u5f00\u200b\u5f53\u524d\u200b\u5b8f\u540e\u200b\u624d\u200b\u5c55\u5f00\u200b\\recursion
\uff1b \\relax
\u200b\u662f\u200b\u5b8f\u200b\u7684\u200b\u7ec8\u6b62\u200b\u6761\u4ef6\u200b\uff0c\u200b\u8f93\u5165\u200b\u5e8f\u5217\u200b\u9700\u8981\u200b\u4ee5\u200b\\relax
\u200b\u7ed3\u5c3e\u200b\u3002
"},{"location":"latex/basics/fonts/","title":"LaTeX\u200b\u4e2d\u200b\u7684\u200b\u5b57\u4f53\u200b\u4e0e\u200b\u5b57\u53f7","text":""},{"location":"latex/basics/fonts/#_1","title":"\u5b57\u53f7","text":"\\(\\LaTeX\\)\u200b\u4e2d\u5171\u200b\u6709\u200b\\tiny
\u3001\\scriptsize
\u3001\\footnotesize
\u3001\\small
\u3001\\normalsize
\u3001\\large
\u3001\\Large
\u3001\\LARGE
\u3001\\huge
\u3001\\Huge
\u200b\u7b49\u200b10\u200b\u79cd\u200b\u76f8\u5bf9\u200b\u5c3a\u5bf8\u200b\u7684\u200b\u5b57\u53f7\u200b\u8bbe\u7f6e\u200b\u3002\u200b\u6bcf\u6b21\u200b\u4fee\u6539\u200b\u5b57\u53f7\u200b\u540e\u200b\uff0c\u200b\u4f1a\u200b\u5bf9\u200b\u547d\u4ee4\u200b\u540e\u200b\u6240\u6709\u200b\u7684\u200b\u6587\u672c\u200b\u751f\u6548\u200b\u3002\u200b\u5982\u679c\u200b\u4ec5\u200b\u9700\u8981\u200b\u4fee\u6539\u200b\u4e00\u90e8\u5206\u200b\u6587\u5b57\u200b\u7684\u200b\u5b57\u53f7\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u9700\u8981\u200b\u8c03\u6574\u200b\u5b57\u53f7\u200b\u7684\u200b\u90e8\u5206\u200b\u4f7f\u7528\u200b\u82b1\u200b\u62ec\u53f7\u200b{}
\u200b\u5305\u56f4\u200b\u3002
LaTeX\u200b\u4e2d\u200b\u7684\u200b\u5b57\u53f7\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\centering\n\\tiny tiny \\\\\n\\scriptsize scriptsize \\\\\n\\footnotesize footnotesize \\\\\n\\small small \\\\\n\\normalsize normalsize \\\\\n\\large large \\\\\n\\Large Large \\\\\n\\LARGE LARGE \\\\\n\\huge huge \\\\\n\\Huge Huge \\\\\n
"},{"location":"latex/basics/lists/","title":"\u5217\u8868","text":"\u200b\u5728\u200bLaTeX\u200b\u4e2d\u200b\uff0cenumerate
\u200b\u73af\u5883\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u7f16\u53f7\u200b\u5217\u8868\u200b\uff0citemize
\u200b\u73af\u5883\u200b\u4e0e\u200bdescription
\u200b\u73af\u5883\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u7b26\u53f7\u200b\u5217\u8868\u200b\u3002\u200b\u6240\u6709\u200b\u7684\u200b\u5217\u8868\u200b\u4f7f\u7528\u200b\\item
\u200b\u547d\u4ee4\u200b\u5b9a\u4e49\u200b\u5217\u8868\u200b\u9879\u200b\u3002\u200b\u5217\u8868\u200b\u53ef\u4ee5\u200b\u81ea\u5b9a\u4e49\u200b\u4f7f\u7528\u200b\u7684\u200b\u7f16\u53f7\u200b\u4e0e\u200b\u7b26\u53f7\u200b\u3002
\u200b\u5f53\u200b\u5217\u8868\u200b\u88ab\u200b\u5d4c\u5957\u200b\u65f6\u200b\uff0c\u200b\u4e0d\u540c\u200b\u5c42\u6b21\u200b\u7684\u200b\u5217\u8868\u200b\u4f1a\u200b\u4f7f\u7528\u200b\u4e0d\u540c\u200b\u7684\u200b\u7f16\u53f7\u200b\u4ee5\u200b\u907f\u514d\u200b\u6df7\u6dc6\u200b\u3002
"},{"location":"latex/basics/lists/#_2","title":"\u57fa\u672c\u200b\u4f7f\u7528","text":""},{"location":"latex/basics/lists/#enumerate","title":"enumerate
\u200b\u73af\u5883","text":"enumerate
\u200b\u73af\u5883\u200b\u7684\u200b\u4f7f\u7528\u200b\u65b9\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
\\begin{enumerate}\n \\item This is an item.\n \\item This is an item.\n \\item This is an item.\n\\end{enumerate}\n
\u200b\u6e32\u67d3\u200b\u540e\u200b\u7684\u200b\u6548\u679c\u200b\uff1a
- This is an item.
- This is an item.
- This is an item.
enumerate
\u200b\u73af\u5883\u200b\u9ed8\u8ba4\u200b\u4f7f\u7528\u200b1. 2. 3. ...
\u200b\u8fdb\u884c\u200b\u7f16\u53f7\u200b\uff0c\u200b\u81ea\u5b9a\u4e49\u200b\u7f16\u53f7\u200b\u901a\u8fc7\u200b\u5728\u200b\\begin{enumerate}
\u200b\u540e\u200b\u6dfb\u52a0\u200b\u53c2\u6570\u200b\u5b9e\u73b0\u200b\u3002
\\begin{enumerate}[A.]\n \\item This is an item.\n \\item This is an item.\n \\item This is an item.\n\\end{enumerate}\n
\u200b\u6e32\u67d3\u200b\u540e\u200b\u7684\u200b\u6548\u679c\u200b\uff1a
A. This is an item. B. This is an item. C. This is an item.
\u200b\u5728\u200benumerate
\u200b\u4e0e\u200bitem
\u200b\u73af\u5883\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\setlength
\u200b\u8c03\u8282\u200b\u5217\u8868\u200b\u9879\u200b\u4e4b\u95f4\u200b\u7684\u200b\u8ddd\u79bb\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
\\setlength{\\itemsep}{0pt}\n\\setlength{\\parskip}{0pt}\n\\setlength{\\itemindent}{1em}\n
\u200b\u81ea\u5b9a\u4e49\u200b\u7f16\u53f7\u200b\u5217\u8868\u200b\u9700\u8981\u200b\u5f15\u5165\u200benumerate
\u200b\u5305\u200b\uff1a\\usepackage{enumerate}
"},{"location":"latex/basics/lists/#itemize","title":"itemize
\u200b\u73af\u5883","text":"itemize
\u200b\u73af\u5883\u200b\u7528\u4e8e\u200b\u751f\u6210\u200b\u7b26\u53f7\u200b\u5217\u8868\u200b\uff0c\u200b\u4f7f\u7528\u200b\u65b9\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
\\begin{itemize}\n \\item This is an item.\n \\item This is an item.\n \\item This is an item.\n\\end{itemize}\n
\u200b\u6e32\u67d3\u200b\u540e\u200b\u7684\u200b\u6548\u679c\u200b\uff1a
- This is an item.
- This is an item.
- This is an item.
\\item
\u200b\u547d\u4ee4\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e2d\u62ec\u53f7\u200b\u6307\u5b9a\u200b\u5f53\u524d\u200b\u9879\u200b\u4f7f\u7528\u200b\u7684\u200b\u7b26\u53f7\u200b\uff0c\u200b\u5982\u200b\\item[-]
\u200b\u4f7f\u7528\u200b-
\u200b\u4f5c\u4e3a\u200b\u7b26\u53f7\u200b
"},{"location":"latex/floats/table/","title":"tabular\u200b\u73af\u5883","text":"tabular
\u200b\u73af\u5883\u200b\u662f\u200b\\(\\LaTeX{}\\)\u200b\u7528\u4e8e\u200b\u521b\u5efa\u8868\u683c\u200b\u7684\u200b\u73af\u5883\u200b\u3002
"},{"location":"latex/floats/table/#_1","title":"\u57fa\u672c\u200b\u4f7f\u7528","text":"\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\u6f14\u793a\u200b\u4e86\u200btabular
\u200b\u8bed\u53e5\u200b\u7684\u200b\u4f7f\u7528\u200b\u65b9\u6cd5\u200b,\u200b\u751f\u6210\u200b\u4e00\u4e2a\u200b3\u200b\u884c\u200b3\u200b\u5217\u200b\u7684\u200b\u8868\u683c\u200b\u3002
tabular\u200b\u57fa\u672c\u200b\u4f7f\u7528\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{|c|c|c|}\n \\hline 2 & 9 & 4 \\\\\n \\hline 7 & 5 & 3 \\\\\n \\hline 6 & 1 & 8 \\\\\n \\hline\n\\end{tabular}\n
"},{"location":"latex/floats/table/#_2","title":"\u5bfc\u8a00\u200b\u533a","text":"\\begin{tabular}
\u200b\u5176\u540e\u200b\u7d27\u8ddf\u200b\u7684\u200b\u4e00\u5bf9\u200b\u62ec\u53f7\u200b\u5185\u200b\u662f\u200b\u5bfc\u8a00\u200b\u533a\u200b\uff0c\u200b\u5bfc\u8a00\u200b\u533a\u200b\u89c4\u5b9a\u200b\u4e86\u200b\u5355\u5143\u683c\u200b\u7684\u200b\u7eb5\u5411\u200b\u8fb9\u6846\u200b\u548c\u200b\u5355\u5143\u683c\u200b\u5185\u200b\u5143\u7d20\u200b\u7684\u200b\u5bf9\u9f50\u200b\u65b9\u5f0f\u200b\u3002
l
\u3001c
\u3001r
\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u5de6\u200b\u5bf9\u9f50\u200b\uff0c\u200b\u5c45\u4e2d\u200b\uff0c\u200b\u53f3\u200b\u5bf9\u9f50\u200b |
\u3001||
\u200b\u5bf9\u5e94\u200b\u8868\u683c\u200b\u7eb5\u5411\u200b\u6846\u7ebf\u200b\u7c7b\u578b\u200b\uff08\u200b\u5355\u7ebf\u200b\u6216\u200b\u53cc\u7ebf\u200b\uff09 @{exp}
\u200b\u6307\u5b9a\u200b\u63d2\u5165\u200b\u5230\u200b\u5217\u4e2d\u200b\u7684\u200b\u6587\u672c\u200b *{n}{pre}
\u200b\u6307\u200b\u91cd\u590d\u200bpre
\u200b\u5185\u5bb9\u200bn
\u200b\u6b21\u200b p{len}
\u200b\u5c06\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5217\u200b\u653e\u5165\u200b\u4e00\u4e2a\u200bparbox\u200b\u4e2d\u200b
\u200b\u6839\u636e\u200b\u5982\u200b\u4e0a\u200b\u8868\u8ff0\u200b\uff0c\u200b\u5bfc\u8a00\u200b\u533a\u200b{|c|c|c|}
\u200b\u7b49\u4ef7\u200b\u4e8e\u200b{*{3}{|c}|}
\u200b\u5bfc\u8a00\u200b\u533a\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{||l|c|r||}\n \\hline 2 & 91 & 4 \\\\\n \\hline 71 & 5 & 32 \\\\\n \\hline 652 & 251 & 89 \\\\\n \\hline\n\\end{tabular}\n
"},{"location":"latex/floats/table/#_3","title":"\u5408\u5e76\u200b\u5355\u5143\u683c","text":"\u200b\u6a2a\u5411\u200b\u5408\u5e76\u200b\u5355\u5143\u683c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\multicolumn
\u200b\u547d\u4ee4\u200b\uff0c\u200b\u7eb5\u5411\u200b\u5408\u5e76\u200b\u5355\u5143\u683c\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bmultirow
\u200b\u5b8f\u5305\u200b\u4e2d\u200b\u7684\u200b\\multirow
\u200b\u547d\u4ee4\u200b\uff1a
\\multicolumn
\u200b\u547d\u4ee4\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\u5408\u5e76\u200b\u5217\u200b\u7684\u200b\u6570\u91cf\u200b\uff0c\u200b\u7b2c\u4e8c\u4e2a\u200b\u53c2\u6570\u200b\u662f\u200b\u5408\u5e76\u200b\u540e\u200b\u5355\u5143\u683c\u200b\u7684\u200b\u5bfc\u8a00\u200b\u5217\u200b \\multirow
\u200b\u547d\u4ee4\u200b\u7684\u200b\u7b2c\u4e00\u4e2a\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200b\u5408\u5e76\u200b\u884c\u200b\u7684\u200b\u6570\u91cf\u200b\uff0c\u200b\u7b2c\u4e8c\u4e2a\u200b\u53c2\u6570\u200b\u6307\u5b9a\u200bLaTeX\u200b\u81ea\u884c\u200b\u8bbe\u7f6e\u200b\u5bbd\u5ea6\u200b\uff0c\u200b\u7b2c\u4e09\u4e2a\u200b\u53c2\u6570\u200b\u4e3a\u200b\u5355\u5143\u683c\u200b\u5185\u5bb9\u200b
\u200b\u5408\u5e76\u200b\u5355\u5143\u683c\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{|ccc|}\n \\hline\n 2 & 9 & 4\\\\\n 7 & \\multicolumn{2}{c|} {\\multirow{2}*{{?}}} \\\\\n 6 & &\\\\\n \\hline\n\\end{tabular}\n
"},{"location":"latex/floats/table/#_4","title":"\u4e09\u7ebf\u200b\u8868","text":"LaTeX\u200b\u4e2d\u200b\u4f7f\u7528\u200b\u4e09\u7ebf\u200b\u8868\u200b\u9700\u8981\u200b\u7528\u5230\u200bbooktabs
\u200b\u5b8f\u5305\u200b\uff0c\u200b\u52a0\u5165\u200b\u5b8f\u5305\u200b\u540e\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\toprule
\u3001\\midrule
\u200b\u4e0e\u200b\\bottomrule
\u200b\u753b\u7ebf\u200b\uff08\u200b\u4e0d\u5e94\u200b\u518d\u200b\u4f7f\u7528\u200b\\hline
\u200b\u547d\u4ee4\u200b\uff09\u3002
\u200b\u4e09\u7ebf\u200b\u8868\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{ccc}\n \\toprule\n 2 & 91 & 4 \\\\\n \\midrule\n 71 & 5 & 32 \\\\\n 652 & 251 & 89 \\\\\n \\bottomrule\n\\end{tabular}\n
"},{"location":"latex/floats/table/#_5","title":"\u989c\u8272\u200b\u586b\u5145","text":"\u200b\u989c\u8272\u200b\u586b\u5145\u200b\u9700\u8981\u200b\u4f7f\u7528\u200bcolortbl
\u200b\u5b8f\u5305\u200b\uff0c\u200b\u4f7f\u7528\u200b\\rowcolor
\u200b\u547d\u4ee4\u200b\u6307\u5b9a\u200b\u884c\u200b\u7684\u200b\u586b\u5145\u200b\u989c\u8272\u200b\uff0c\u200b\u6216\u200b\\cellcolor
\u200b\u547d\u4ee4\u200b\u6307\u5b9a\u200b\u5355\u5143\u683c\u200b\u7684\u200b\u586b\u5145\u200b\u989c\u8272\u200b\u3002\u200b\u586b\u5145\u200b\u989c\u8272\u200b\u53ef\u4ee5\u200b\u9009\u62e9\u200b\u7070\u5ea6\u200b[gray]
\u200b\u6216\u200b\u5f69\u8272\u200b[rgb]
\u3002
\u200b\u989c\u8272\u200b\u586b\u5145\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{ccc}\n \\rowcolor[gray]{0.6} 2 & 9 & 4 \\\\\n \\rowcolor[gray]{0.7} 7 & 5 & 3 \\\\\n \\rowcolor[gray]{0.8} 6 & 1 & 8 \\\\\n\\end{tabular}\n
"},{"location":"latex/floats/table/#_6","title":"\u659c\u7ebf\u200b\u8868\u5934","text":"\u200b\u659c\u7ebf\u200b\u8868\u5934\u200b\u7531\u200bdiagbox
\u200b\u5b8f\u5305\u200b\u63d0\u4f9b\u200b\uff0c\u200b\u4f7f\u7528\u200b\u65b9\u6cd5\u200b\u5982\u4e0b\u200b\uff1a
\u200b\u659c\u7ebf\u200b\u8868\u5934\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{tabular}{|l|ccc|}\n \\hline\n \\diagbox{Time}{Room}{Day} & Mon & Tue & Wed \\\\\n \\hline\n Morning & used & used & \\\\\n Afternoon & & used & used \\\\\n \\hline\n\\end{tabular}\n
"},{"location":"latex/math/stack/","title":"LaTeX \u200b\u7b26\u53f7\u200b\u5806\u53e0","text":""},{"location":"latex/math/stack/#_1","title":"\u7b26\u53f7\u200b\u4e0a\u4e0b\u200b\u52a0\u200b\u6587\u672c","text":"\u200b\u90e8\u5206\u200b\u5927\u578b\u200b\u8fd0\u7b97\u7b26\u200b\uff08\u200b\u53c2\u89c1\u200b\u6570\u5b66\u200b\u7b26\u53f7\u200b\uff09\u200b\u53ef\u4ee5\u200b\u52a0\u5165\u200b\u4e0a\u4e0b\u200b\u6807\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u884c\u95f4\u200b\u516c\u5f0f\u200b\uff0c\u200b\u8fd0\u7b97\u7b26\u200b\u7684\u200b\u4e0a\u4e0b\u200b\u6807\u6709\u200b\u4e24\u79cd\u200b\u4f4d\u7f6e\u200b\u9009\u62e9\u200b\uff1a
- \u200b\u4e0a\u4e0b\u200b\u6807\u5728\u200b\u7b26\u53f7\u200b\u4e0a\u4e0b\u200b\u4e24\u4fa7\u200b\uff0c\u200b\u5982\u200b $$ \\sum_{i=0}^\\infty $$
- \u200b\u4e0a\u4e0b\u200b\u6807\u5728\u200b\u7b26\u53f7\u200b\u53f3\u4fa7\u200b\uff0c\u200b\u5982\u200b $$ \\int_0^\\infty $$
\u200b\u884c\u5185\u200b\u516c\u5f0f\u200b\u9ed8\u8ba4\u200b\u6240\u6709\u200b\u7684\u200b\u4e0a\u4e0b\u200b\u6807\u90fd\u200b\u5728\u200b\u7b26\u53f7\u200b\u53f3\u4fa7\u200b\uff0c\u200b\u5982\u200b\\(\\sum_{i=0}^\\infty\\)\u3002\u200b\u4f7f\u7528\u200b\\limits
\u200b\u53ef\u4ee5\u200b\u5f3a\u5236\u200b\u4e0a\u4e0b\u200b\u6807\u51fa\u200b\u73b0\u5728\u200b\u8fd0\u7b97\u7b26\u200b\u4e0a\u4e0b\u200b\u4e24\u4fa7\u200b\uff0c\u200b\u5982\u200b
\\limits
\u200b\u547d\u4ee4\u200b
LaTeX\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b $\\sum\\limits_{i=0}^\\infty$\n
\\(\\sum\\limits_{i=0}^\\infty\\)
\\overset
\u3001\\underset
\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u5728\u200b\u7b26\u53f7\u200b\u4e0a\u4e0b\u200b\u63d2\u5165\u200b\u7b26\u53f7\u200b\u3002\\stackrel
\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u4e0e\u200b\\overset
\u200b\u76f8\u540c\u200b\u7684\u200b\u529f\u80fd\u200b\u3002
\\overset
\u200b\u547d\u4ee4\u200b\u4e0e\u200b\\underset
\u200b\u547d\u4ee4\u200b
LaTeX\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{equation*}\n \\begin{aligned}\n &\\overset{above}{\\rightarrow} \\\\\n &\\underset{below}{\\rightarrow} \\\\\n \\end{aligned}\n\\end{\\equation*}\n
\\[ \\begin{aligned} &\\overset{above}{\\rightarrow} \\\\ &\\underset{below}{\\rightarrow} \\\\ \\end{aligned} \\] \u200b\u5982\u679c\u200b\u9700\u8981\u200b\u6362\u884c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\substack
\u200b\u547d\u4ee4\u200b\uff1a
\\substack
\u200b\u547d\u4ee4\u200b
LaTeX\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{equation*}\n \\begin{aligned}\n &\\overset{\\substack{above1 \\\\ above2}}{\\rightarrow} \\\\\n &\\underset{\\substack{below1 \\\\ below2}}{\\rightarrow} \\\\\n \\end{aligned}\n\\end{\\equation*}\n
\\[ \\begin{aligned} &\\overset{\\substack{above1 \\\\ above2}}{\\rightarrow} \\\\ &\\underset{\\substack{below1 \\\\ below2}}{\\rightarrow} \\\\ \\end{aligned} \\]"},{"location":"latex/math/stack/#_2","title":"\u7bad\u5934\u200b\u4e0a\u4e0b\u200b\u52a0\u200b\u6587\u672c","text":"\\overset
\u3001\\stackrel
\u200b\u4e0e\u200b\\underset
\u200b\u53ea\u80fd\u200b\u5b9e\u73b0\u200b\u7bad\u5934\u200b\u4e0a\u4e0b\u200b\u52a0\u200b\u6587\u672c\u200b\uff0c\u200b\u7bad\u5934\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e0d\u80fd\u200b\u968f\u200b\u6587\u672c\u200b\u957f\u5ea6\u200b\u81ea\u52a8\u200b\u8c03\u6574\u200b\u3002amsmath
\u200b\u5b8f\u5305\u200b\u63d0\u4f9b\u200b\u4e86\u200b\\xleftarrow
\u200b\u4e0e\u200b\\xrightarrow
\uff0c\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b\u7bad\u5934\u200b\u4e0a\u4e0b\u200b\u52a0\u200b\u6587\u672c\u200b\uff0c\u200b\u540c\u65f6\u200b\u7bad\u5934\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u9002\u5e94\u200b\u6587\u672c\u200b\u7684\u200b\u957f\u5ea6\u200b\u3002extarrows
\u200b\u5b8f\u5305\u200b\u63d0\u4f9b\u200b\u4e86\u200b\\xlongequal
\u200b\u547d\u4ee4\u200b\uff0c\u200b\u5b9e\u73b0\u200b\u7b49\u200b\u53f7\u200b\u4e0a\u4e0b\u200b\u52a0\u200b\u6587\u672c\u200b\uff0c\u200b\u793a\u4f8b\u200b\u5982\u4e0b\u200b\uff1a
\\xrightarrow
\u200b\u547d\u4ee4\u200b
LaTeX\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{itemize}\n \\item $\\xleftarrow[\\text{below}]{\\text{above}}$\n \\item $\\xrightarrow[\\text{very very long below}]{\\text{very very long above}}$\n \\item $\\xlongequal[\\text{very very long below}]{\\text{very very long above}}$\n\\end{itemize}\n
\u200b\u5b9a\u4e49\u200b\u7b26\u53f7\u200b\\(\\triangleq\\)\u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u4f7f\u7528\u200b\\triangleq
\u200b\u8f93\u5165\u200b\u3002
"},{"location":"latex/math/symbols/","title":"LaTeX \u200b\u6570\u5b66\u200b\u7b26\u53f7","text":"\u200b\u6536\u96c6\u200b\\(\\LaTeX\\)\u200b\u5e38\u7528\u200b\u7684\u200b\u6570\u5b66\u200b\u7b26\u53f7\u200b\u547d\u4ee4\u200b
"},{"location":"latex/math/symbols/#_1","title":"\u5b57\u6bcd\u200b\u53d8\u4f53","text":"\u200b\u5e38\u7528\u547d\u4ee4\u200b\u6709\u200b\uff1a\\mathcal
\u3001\\mathbb
\u3001\\mathfrak
\u3001\\mathsf
\u3001\\mathbf
\u3001\\boldsymbol
\u3001\\mathit
\u3001\\mathrm
\u200b\u7b49\u200b\u3002\u200b\u5176\u4e2d\u200b\\mathcal
\u3001\\mathbb
\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u5927\u5199\u5b57\u6bcd\u200b\uff0c\u200b\u5176\u4f59\u200b\u547d\u4ee4\u200b\u5927\u5199\u200b\u3001\u200b\u5c0f\u5199\u5b57\u6bcd\u200b\u901a\u7528\u200b
\\mathcal{A}
\uff1a\\(\\mathcal A\\) \\mathbb{A}
\uff1a\\(\\mathbb A\\) \\mathfrak{A}
\uff1a\\(\\mathfrak A\\) \\mathsf{A}
\uff1a\\(\\mathsf A\\) \\mathbf{A}
\uff1a\\(\\mathbf A\\) \\boldsymbol{A}
\uff1a\\(\\boldsymbol A\\) \\mathit{A}
\uff1a\\(\\mathit A\\)\uff08\u200b\u65e0\u200b\u6548\u679c\u200b\uff09 \\mathrm{A}
\uff1a\\(\\mathrm A\\) \\mathscr{A}
\uff1a\\(\\mathscr A\\)\uff08\u200b\u9700\u8981\u200b\u5f15\u5165\u200b\u5b8f\u5305\u200bmathrsfs
\uff09
"},{"location":"latex/math/symbols/#_2","title":"\u5e0c\u814a\u5b57\u6bcd","text":"\u5c0f\u5199\u200b \u200b\u547d\u4ee4\u200b \u200b\u5927\u5199\u200b \u200b\u547d\u4ee4\u200b \u200b\u53d8\u4f53\u200b \u200b\u547d\u4ee4\u200b \\(\\alpha\\) \\alpha
\\(A\\) A
\\(\\beta\\) \\beta
\\(B\\) B
\\(\\gamma\\) \\gamma
\\(\\Gamma\\) \\Gamma
\\(\\varGamma\\) \\varGamma
\\(\\delta\\) \\delta
\\(\\Delta\\) \\Delta
\\(\\varDelta\\) \\varDelta
\\(\\epsilon\\) \\epsilonn
\\(E\\) E
\\(\\varepsilon\\) \\varepsilon
\\(\\zeta\\) \\zeta
\\(Z\\) Z
\\(\\eta\\) \\eta
\\(H\\) H
\\(\\theta\\) \\theta
\\(\\Theta\\) \\Theta
\\(\\vartheta,\\varTheta\\) \\vartheta,\\varTheta
\\(\\iota\\) \\iota
\\(I\\) I
\\(\\kappa\\) \\kappa
\\(K\\) K
\\(\\varkappa\\) \\varkappa
\\(\\lambda\\) \\lambda
\\(\\Lambda\\) \\Lambda
\\(\\varLambda\\) \\varLambda
\\(\\mu\\) \\mu
\\(M\\) M
\\(\\nu\\) \\nu
\\(N\\) N
\\(\\xi\\) \\xi
\\(\\Xi\\) \\Xi
\\(\\varXi\\) \\varXi
\\(o\\) o
\\(O\\) O
\\(\\pi\\) \\pi
\\(\\Pi\\) \\Pi
\\(\\varpi, \\varPi\\) \\varpi,\\varPi
\\(\\rho\\) \\rho
\\(P\\) P
\\(\\varrho\\) \\varrho
\\(\\sigma\\) \\sigma
\\(\\Sigma\\) \\Sigma
\\(\\varsigma, \\varSigma\\) \\varsigma,\\varSigma
\\(\\tau\\) \\tau
\\(T\\) T
\\(\\upsilon\\) \\upsilon
\\(\\Upsilon\\) \\Upsilon
\\(\\varUpsilon\\) \\varUpsilon
\\(\\phi\\) \\phi
\\(\\Phi\\) \\Phi
\\(\\varphi, \\varPhi\\) \\varphi,\\varPhi
\\(\\chi\\) \\chi
\\(X\\) X
\\(\\psi\\) \\psi
\\(\\Psi\\) \\Psi
\\(\\varPsi\\) \\varPsi
\\(\\omega\\) \\omega
\\(\\Omega\\) \\Omega
\\(\\varOmega\\) \\varOmega
"},{"location":"latex/math/symbols/#_3","title":"\u8fd0\u7b97\u7b26","text":"\u200b\u5e38\u89c1\u200b\u8fd0\u7b97\u7b26\u200b\u5217\u4e8e\u200b\u4e0b\u8868\u200b\uff1a
"},{"location":"latex/math/symbols/#_4","title":"\u6570\u5b66\u200b\u8fd0\u7b97","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\times\\) \\times
\\(\\div\\) \\div
\\(\\odot\\) \\odot
\\(\\oplus\\) \\oplus
\\(\\otimes\\) \\otimes
"},{"location":"latex/math/symbols/#_5","title":"\u96c6\u5408\u200b\u8fd0\u7b97","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\in\\) \\in
\\(\\ni\\) \\ni
\\(\\subset\\) \\subset
\\(\\subseteq\\) \\subseteq
\\(\\subseteqq\\) \\oplsubseteqqu
\\(\\subsetneq\\) \\subsetneq
\\(\\subsetneqq\\) \\subsetneqq
\\(\\supset\\) \\subset
\\(\\supseteq\\) \\subseteq
\\(\\supseteqq\\) \\oplsubseteqqu
\\(\\supsetneq\\) \\subsetneq
\\(\\supsetneqq\\) \\subsetneqq
\\(\\cap\\) \\cap
\\(\\cup\\) \\cup
"},{"location":"latex/math/symbols/#_6","title":"\u5173\u7cfb\u200b\u8fd0\u7b97\u7b26","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\geq\\) \\geq
\\(\\geqq\\) \\geqq
\\(\\geqslant\\) \\geqslant
\\(\\gg\\) \\gg
\\(\\ggg\\) \\ggg
\\(\\leq\\) \\leq
\\(\\leqq\\) \\leqq
\\(\\leqslant\\) \\leqslant
\\(\\ll\\) \\ll
\\(\\lll\\) \\lll
\\(\\sim\\) \\sim
\\(\\approx\\) \\approx
"},{"location":"latex/math/symbols/#_7","title":"\u903b\u8f91\u200b\u8fd0\u7b97\u7b26","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\lnot\\) \\lnot
\\(\\land\\) \\land
\\(\\lor\\) \\lor
\\(\\forall\\) \\forall
\\(\\exists\\) \\exists
"},{"location":"latex/math/symbols/#_8","title":"\u51fd\u6570\u200b\u4e0e\u200b\u590d\u6742\u200b\u8fd0\u7b97","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\frac ab\\) \\frac{a}{b}
\\(\\sum_i^n f\\) \\sum_{i}^{n} f
\\(\\prod_i^n f\\) \\prod_{i}^{n} f
\\(\\sqrt[x]{y}\\) \\sqrt[x]{y}
\\(\\int_a^bf(x)\\mathrm dx\\) \\int_a^bf(x)\\mathrm dx
\\(\\oint_Df(x)\\mathrm dx\\) \\oint_Df(x)\\mathrm dx
\\(\\iint_Df(x)\\mathrm dx\\) \\iint_Df(x)\\mathrm dx
\\(\\iiint_Df(x)\\mathrm dx\\) \\iiint_Df(x)\\mathrm dx
\\(\\partial\\) \\partial
\\(\\log\\) \\log
\\(\\ln\\) \\ln
\\(\\lg\\) \\lg
\\(\\exp\\) \\exp
\\(a\\mod b\\) a\\mod b
\\(\\max\\) \\max
\\(\\min\\) \\min
\\(\\arg\\) \\arg
\\(\\sin\\) \\sin
\\(\\cos\\) \\cos
\\(\\tan\\) \\tan
\\(\\cot\\) \\cot
\\(\\sinh\\) \\sinh
\\(\\cosh\\) \\cosh
\\(\\tanh\\) \\tanh
\\(\\coth\\) \\coth
\\(\\arcsin\\) \\arcsin
\\(\\arccos\\) \\arccos
\\(\\arctan\\) \\arctan
\\(\\ker\\) \\ker
\\(\\dim\\) \\dim
\\(\\det\\) \\det
\\(\\lim\\) \\lim
\\(\\inf\\) \\inf
"},{"location":"latex/math/symbols/#_9","title":"\u62ec\u53f7","text":"\u8fd0\u7b97\u7b26\u200b \u200b\u547d\u4ee4\u200b \\(\\{\\) \\{
\\(\\}\\) \\}
\\(\\langle\\) \\langle
\\(\\rangle\\) \\rangle
\\(\\lceil\\) \\lceil
\\(\\rceil\\) \\rceil
\\(\\lfloor\\) \\lfloor
\\(\\rfloor\\) \\rfloor
\\(\\|\\) \\|
"},{"location":"latex/math/tricks/","title":"\u7279\u6b8a\u200b\u6280\u5de7","text":""},{"location":"latex/math/tricks/#_2","title":"\u516c\u5f0f\u200b\u5185\u200b\u4e2d\u6587","text":"\u200b\u4f7f\u7528\u200b\u547d\u4ee4\u200b\\text
\u200b\u6216\u200b\\mbox
\u200b\u53ef\u4ee5\u200b\u5728\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u52a0\u5165\u200b\u4e2d\u6587\u200b\u6587\u672c\u200b\u3002\u200b\u5982\u679c\u200b\u4f7f\u7528\u200b\\mathrm
\uff0c\u200b\u5219\u200b\u4e0d\u4f1a\u200b\u663e\u793a\u200b\u4e2d\u6587\u200b\u3002
"},{"location":"latex/math/tricks/#_3","title":"\u9690\u5f62\u200b\u5b57\u7b26","text":"\\phantom
\u200b\u547d\u4ee4\u200b\u53ef\u4ee5\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u5360\u636e\u200b\u4e00\u5b9a\u200b\u7a7a\u95f4\u200b\u7684\u200b\u7a7a\u767d\u200b\uff0c\u200b\u7a7a\u767d\u200b\u7684\u200b\u957f\u5bbd\u200b\u7531\u200b\u53c2\u6570\u200b\u7684\u200b\u5c3a\u5bf8\u200b\u51b3\u5b9a\u200b\uff1a
\\[ \\begin{aligned} \\bbox[border: 2px solid magenta]{\\phantom{\\int_0^1 x\\mathrm dx}} \\; & \\bbox[border: 2px solid magenta]{\\int_0^1 x\\mathrm dx} \\\\ \\bbox[border: 2px solid magenta]{\\int_0^1 x\\mathrm dx} \\; & \\end{aligned} \\] \u200b\u6b64\u5916\u200b\uff0c\\phantom
\u200b\u6709\u200b\u4e24\u4e2a\u200b\u53d8\u79cd\u200b\\vphantom
\u200b\u4e0e\u200b\\hphantom
\uff0c\u200b\u524d\u8005\u200b\u521b\u9020\u200b\u4e00\u4e2a\u200b\u5bbd\u5ea6\u200b\u4e3a\u200b0\uff0c\u200b\u9ad8\u5ea6\u200b\u4e3a\u200b\u6307\u5b9a\u200b\u9ad8\u5ea6\u200b\u7684\u200b\u7a7a\u767d\u200b\uff1b\u200b\u540e\u8005\u200b\u521b\u9020\u200b\u4e00\u4e2a\u200b\u9ad8\u5ea6\u200b\u4e3a\u200b0\uff0c\u200b\u5bbd\u5ea6\u200b\u4e3a\u200b\u6307\u5b9a\u200b\u5bbd\u5ea6\u200b\u7684\u200b\u7a7a\u767d\u200b\u3002\u200b\u5728\u200b\u5c3a\u5bf8\u200b\u6839\u636e\u200b\u5185\u5bb9\u200b\u800c\u53d8\u200b\u7684\u200b\u5bb9\u5668\u200b\u4e2d\u200b\uff0c\\phantom
\u200b\u7b49\u200b\u4e00\u7cfb\u5217\u200b\u547d\u4ee4\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u63a7\u5236\u200b\u5bb9\u5668\u200b\u7684\u200b\u5927\u5c0f\u200b\u3002
\\vphantom
\u200b\u4f7f\u7528\u200b\u573a\u666f\u200b
\u200b\u5728\u200b\\left
\u3001\\right
\u200b\u7b49\u200b\u547d\u4ee4\u200b\u53ea\u80fd\u200b\u5728\u200b\u4e00\u884c\u200b\u4e0a\u200b\u63a7\u5236\u200b\u5de6\u53f3\u200b\u4e24\u4fa7\u200b\u62ec\u53f7\u200b\u7684\u200b\u5927\u5c0f\u200b\uff0c\u200b\u800c\u200b\u5f53\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u8de8\u884c\u200b\uff0c\\left
\u3001\\right
\u200b\u5219\u200b\u65e0\u6cd5\u200b\u6b63\u786e\u200b\u5339\u914d\u200b\u3002\u200b\u6b64\u65f6\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\vphantom
\u200b\u547d\u4ee4\u200b\u5c06\u200b\u62ec\u53f7\u200b\u6491\u5f00\u200b\u3002
\u200b\u4e0d\u200b\u4f7f\u7528\u200b\\vphantom
\u200b\u4f7f\u7528\u200b\\vphantom
\\begin{equation}\n \\begin{aligned}\n \\frac{\\partial ^2\\Pi(x, t)}{\\partial x\\partial t} =\n & -(p-s)\\mathbb E_{Q, B, L}\\left[D(t)|Q(t)\\leq x\\right]f_{Q(t)}(x) \\\\\n & + h\\mathbb P(t < B + L) - h\\mathbb E_{B, L} \\\\\n & \\times \\left[\\int_{t}^\\mathbb{B+L}\\mathbb E_Q\\left[D(t)|Q(t) - Q(\\tau)\\leq x, B\\leq t, L\\right]\\right. \\\\\n & \\color{magenta} \\times \\left. f_{Q(t) - Q(\\tau) | B\\leq t}(x)\\mathbb P(B\\leq t)\\mathrm d \\tau\\right]\n \\end{aligned}\n\\end{equation}\n
\\[ \\begin{aligned} \\frac{\\partial ^2\\Pi(x, t)}{\\partial x\\partial t} = & -(p-s)\\mathbb E_{Q, B, L}\\left[D(t)|Q(t)\\leq x\\right]f_{Q(t)}(x) \\\\ & + h\\mathbb P(t < B + L) - h\\mathbb E_{B, L} \\\\ & \\times \\left[\\int_{t}^\\mathbb{B+L}\\mathbb E_Q\\left[D(t)|Q(t) - Q(\\tau)\\leq x, B\\leq t, L\\right]\\right. \\\\ & \\color{magenta} \\times \\left. f_{Q(t) - Q(\\tau) | B\\leq t}(x)\\mathbb P(B\\leq t)\\mathrm d \\tau\\right] \\end{aligned} \\] \\begin{equation}\n \\begin{aligned}\n \\frac{\\partial ^2\\Pi(x, t)}{\\partial x\\partial t} =\n & -(p-s)\\mathbb E_{Q, B, L}\\left[D(t)|Q(t)\\leq x\\right]f_{Q(t)}(x) \\\\\n & + h\\mathbb P(t < B + L) - h\\mathbb E_{B, L} \\\\\n & \\times \\left[\\int_{t}^\\mathbb{B+L}\\mathbb E_Q\\left[D(t)|Q(t) - Q(\\tau)\\leq x, B\\leq t, L\\right]\\right. \\\\\n & \\color{magenta} \\times \\left.\\vphantom{\\int_t^{B+L}} f_{Q(t) - Q(\\tau) | B\\leq t}(x)\\mathbb P(B\\leq t)\\mathrm d \\tau\\right]\n \\end{aligned}\n\\end{equation}\n
\\[ \\begin{aligned} \\frac{\\partial ^2\\Pi(x, t)}{\\partial x\\partial t} = & -(p-s)\\mathbb E_{Q, B, L}\\left[D(t)|Q(t)\\leq x\\right]f_{Q(t)}(x) \\\\ & + h\\mathbb P(t < B + L) - h\\mathbb E_{B, L} \\\\ & \\times \\left[\\int_{t}^\\mathbb{B+L}\\mathbb E_Q\\left[D(t)|Q(t) - Q(\\tau)\\leq x, B\\leq t, L\\right]\\right. \\\\ & \\color{magenta} \\times \\left.\\vphantom{\\int_t^{B+L}} f_{Q(t) - Q(\\tau) | B\\leq t}(x)\\mathbb P(B\\leq t)\\mathrm d \\tau\\right] \\end{aligned} \\]"},{"location":"latex/misc/beamer/","title":"\u4f7f\u7528\u200bLaTeX\u200b\u521b\u5efa\u200b\u5e7b\u706f\u7247","text":"\u200b\u9996\u5148\u200b\uff0c\u200b\u9700\u8981\u200b\u6307\u5b9a\u200bdocumentclass
\u200b\u4e3a\u200bbeamer
\u200b\u7c7b\u578b\u200b\uff1a
\\documentclass{beamer}\n
\u200b\u6bcf\u200b\u4e00\u5f20\u200b\u5e7b\u706f\u7247\u200b\u4f7f\u7528\u200bframe
\u200b\u73af\u5883\u200b\uff0c\u200b\u5982\u4e0b\u200b\u4ee3\u7801\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u65b0\u200b\u7684\u200b\u7a7a\u767d\u200b\u5e7b\u706f\u7247\u200b\uff1a
\\begin{frame}\n\\end{frame}\n
\u200b\u7b2c\u4e00\u9875\u200bPPT\u200b\u901a\u5e38\u200b\u663e\u793a\u200bPPT\u200b\u7684\u200b\u6807\u9898\u200b\u3001\u200b\u4f5c\u8005\u200b\u7684\u200b\u4e2a\u4eba\u4fe1\u606f\u200b\u7b49\u200b\u5185\u5bb9\u200b\uff1a
\\title{\u200b\u6807\u9898\u200b}\n\\subtitle{\u200b\u526f\u6807\u9898\u200b}\n\\author{\u200b\u4f5c\u8005\u200b}\n\\institute{\u200b\u7ec4\u7ec7\u200b}\n\\date{\\today} % \u200b\u663e\u793a\u200b\u65e5\u671f\u200b\n\\titlepage\n
"},{"location":"latex/misc/musixtex/","title":"\u4e50\u8c31\u200b\u6392\u7248","text":"musixtex
\u200b\u662f\u200bLaTeX\u200b\u4e2d\u200b\u7528\u6765\u200b\u6392\u7248\u200b\u4e50\u8c31\u200b\u7684\u200b\u5b8f\u5305\u200b\u3002\u200b\u4ee5\u4e0b\u5185\u5bb9\u200b\u9488\u5bf9\u200b\u9f13\u8c31\u200b\u6392\u7248\u200b\u3002
\\usepackage{musixtex}\n\\input{musixper} % \u200b\u52a0\u5165\u200b\u4e86\u200b\u9f13\u8c31\u200b\u6392\u7248\u200b\u7684\u200b\u4e00\u4e9b\u200b\u5185\u5bb9\u200b\n
"},{"location":"latex/misc/musixtex/#_2","title":"\u97f3\u9ad8\u200b\u5bf9\u7167\u8868","text":"\u200b\u4ece\u200b\u5de6\u5411\u53f3\u200b\u4f9d\u6b21\u200b\u4e3a\u200bA-Q
"},{"location":"latex/misc/musixtex/#_3","title":"\u57fa\u672c\u200b\u4f7f\u7528","text":"musixtex
\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u4e86\u200bmusic
\u200b\u73af\u5883\u200b\uff0c\u200b\u5728\u200bmusic
\u200b\u73af\u5883\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u5bf9\u200b\u4e50\u8c31\u200b\u8fdb\u884c\u200b\u8bbe\u7f6e\u200b\u3002\u200b\u7136\u540e\u200b\u5728\u200b\u547d\u4ee4\u200b\\startextract
\u200b\u548c\u200b\\zendextract
\u200b\u4e4b\u95f4\u200b\u8f93\u5165\u200b\u97f3\u7b26\u200b\u3002
\\begin{music}\n \\instrumentnumber{1} % \u200b\u4e50\u5668\u200b\n \\setclefsymbol1\\empty % \u200b\u8c31\u53f7\u200b\n \\nobarnumbers % \u200b\u53d6\u6d88\u200b\u5c0f\u8282\u200b\u7f16\u53f7\u200b\n \\generalmeter{\\meterfrac44} % \u200b\u8282\u62cd\u200b\n \\startextract\n % Enter notes here\n \\zendextract\n\\end{music}\n
\u200b\u5728\u200b\u672c\u200b\u5c0f\u8282\u200b\u4e2d\u200b\uff0cp
\u200b\u8868\u793a\u200b\u97f3\u7b26\u200b\u5bf9\u5e94\u200b\u7684\u200b\u97f3\u9ad8\u200b\u3002
"},{"location":"latex/misc/musixtex/#_4","title":"\u786e\u5b9a\u200b\u97f3\u7b26\u200b\u5206\u5e03\u200b\u95f4\u8ddd","text":"\u200b\u4f7f\u7528\u200b\\notes
\u200b\u7684\u200b\u4e0d\u540c\u200b\u5927\u5c0f\u5199\u200b\u5f62\u5f0f\u200b\u6765\u200b\u786e\u5b9a\u200b\u97f3\u7b26\u200b\u7684\u200b\u5206\u5e03\u200b\u95f4\u8ddd\u200b\u3002
\\notes ... \\en % Suitable for sixteenth notes\n\\Notes ... \\en % Suitable for eighth notes\n\\NOtes ... \\en % Suitable for quarter notes\n
\\notes
\\Notes
\\NOtes
"},{"location":"latex/misc/musixtex/#_5","title":"\u97f3\u7b26","text":"\u200b\u97f3\u7b26\u200b\u547d\u4ee4\u200b\u7531\u200b\u4e24\u200b\u90e8\u5206\u200b\u7ec4\u6210\u200b\uff1a\u200b\u65f6\u503c\u200b+\u200b\u65b9\u5411\u200b\u3002\u200b\u4e0d\u540c\u200b\u97f3\u7b26\u200b\u7684\u200b\u65f6\u503c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u547d\u4ee4\u200b\u5982\u4e0b\u200b\u8868\u200b\u6240\u793a\u200b
\u200b\u65f6\u503c\u200b \u200b\u5168\u97f3\u7b26\u200b \u200b\u4e8c\u5206\u200b \u200b\u56db\u5206\u200b \u200b\u516b\u5206\u200b \u200b\u5341\u516d\u5206\u200b \u200b\u547d\u4ee4\u200b w
h
q
c
cc
u
\u200b\u8868\u793a\u200b\u5411\u4e0a\u200b\u7684\u200b\u97f3\u7b26\u200b\uff0cl
\u200b\u8868\u793a\u200b\u5411\u4e0b\u200b\u7684\u200b\u97f3\u7b26\u200b\uff0ca
\u200b\u8868\u793a\u200b\u81ea\u52a8\u200b\u8bbe\u7f6e\u200b\u97f3\u7b26\u200b\u65b9\u5411\u200b\u3002\u200b\u5982\u200b\\qu{p}
\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u5411\u4e0a\u200b\u7684\u200b\u56db\u5206\u97f3\u7b26\u200b\u3002\u200b\u5982\u679c\u200b\u4e0d\u200b\u52a0\u200b\u65b9\u5411\u200b\uff0c\u200b\u5219\u200b\u6ca1\u6709\u200b\u97f3\u7b26\u200b\u7684\u200b\u201c\u200b\u6746\u200b\u201d\u3002
\u200b\u5728\u200b\u65b9\u5411\u200b\u540e\u9762\u200b\u52a0\u4e0a\u200bp
\u200b\u8868\u793a\u200b\u9644\u70b9\u200b\uff0cpp
\u200b\u8868\u793a\u200b\u53cc\u200b\u9644\u70b9\u200b\u3002
\u200b\u6bcf\u200b\u8f93\u5165\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\uff0c\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u547d\u4ee4\u200b\u8f93\u5165\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u4fbf\u4f1a\u200b\u5411\u200b\u540e\u200b\u79fb\u52a8\u200b\u3002\u200b\u5982\u679c\u200b\u8981\u200b\u8f93\u5165\u200b\u548c\u5f26\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u4e4b\u524d\u200b\uff0c\u200b\u4f7f\u7528\u200bz
+\u200b\u65f6\u503c\u200b\u8868\u793a\u200b\u8fd9\u4e2a\u200b\u97f3\u7b26\u200b\u4e0d\u5411\u200b\u540e\u200b\u79fb\u52a8\u200b\u8f93\u5165\u200b\u4f4d\u7f6e\u200b\u3002
\u200b\u5982\u679c\u200b\u4e24\u4e2a\u200b\u97f3\u7b26\u200b\u79bb\u5f97\u200b\u8fc7\u8fd1\u200b\uff0c\u200b\u4f7f\u7528\u200bl
\u200b\u5c06\u200b\u97f3\u7b26\u200b\u5411\u200b\u5de6\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u7684\u200b\u4f4d\u7f6e\u200b\uff0cr
\u200b\u5c06\u200b\u97f3\u7b26\u200b\u5411\u200b\u53f3\u200b\u79fb\u52a8\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u3002
\\NOtes \\zq d\\qu g\\rq g\\qu f\\zq e\\qu h\\zq f\\qu k \\en\n
"},{"location":"latex/misc/musixtex/#_6","title":"\u7b26\u6760","text":"\u200b\u5982\u679c\u200b\u516b\u5206\u200b\u6216\u200b\u66f4\u200b\u77ed\u200b\u7684\u200b\u97f3\u7b26\u200b\u8fde\u7eed\u200b\u51fa\u73b0\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u97f3\u7b26\u200b\u4e4b\u95f4\u200b\u4f7f\u7528\u200b\u7b26\u6760\u200b\u76f8\u8fde\u200b\uff0c\u200b\u901a\u5e38\u200b\u6bcf\u200b\u56db\u4e2a\u200b\u97f3\u7b26\u200b\u8fde\u6210\u200b\u4e00\u7ec4\u200b\u3002\u200b\u7b26\u6760\u200b\u7684\u200b\u5b9a\u4e49\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b
% \u200b\u4e0a\u65b9\u200b\n\\ibu{n}{p}{s} <notes-under-beam> \\tbu{n} <the-last-note>\n% \u200b\u4e0b\u65b9\u200b\n\\ibl{n}{p}{s} <notes-under-beam> \\tbl{n} <the-last-note>\n
\u200b\u5176\u4e2d\u200bn
\u200b\u4e3a\u200b\u7f16\u53f7\u200b\uff0cp
\u200b\u4e3a\u200b\u5f00\u59cb\u200b\u7684\u200b\u97f3\u7b26\u200b\u9ad8\u5ea6\u200b\uff0cs
\u200b\u4e3a\u200b\u659c\u5ea6\u200b\u3002\u200b\u547d\u4ee4\u200b\u91cc\u200bb
\u200b\u7684\u200b\u4e2a\u6570\u200b\u7b49\u4e8e\u200b\u663e\u793a\u200b\u7684\u200b\u7b26\u200b\u6760\u6570\u200b\u3002\u200b\u4e0e\u200b\u7b26\u6760\u200b\u76f8\u8fde\u200b\u7684\u200b\u97f3\u7b26\u200b\u6807\u8bb0\u200b\u4e3a\u200b\u65f6\u503c\u200b+b
+\u200b\u7f16\u53f7\u200b\uff0c\u200b\u5982\u679c\u200b\u540c\u4e00\u200b\u4f4d\u7f6e\u200b\u6709\u200b\u591a\u4e2a\u200b\u97f3\u7b26\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u65f6\u503c\u200b\u524d\u9762\u200b\u52a0\u200bz
\u3002\u200b\u6ce8\u610f\u200b\u97f3\u7b26\u200b\u4e4b\u95f4\u200b\u4e0d\u8981\u200b\u52a0\u200b\u7a7a\u683c\u200b\u3002
\\Notes\\ibu0j0\\qb0j\\qb0j\\qb0j\\tbu0\\qb0j\\en\n\\notes\\ibbu0j0\\qb0j\\qb0j\\qb0j\\tbu0\\qb0j\\en\n\\NOtes\\qu j\\en\n
\\tbu{n}\\qb{n}{p}
\u200b\u53ef\u4ee5\u200b\u7f29\u5199\u200b\u4e3a\u200b\\tqu{n}{p}
\uff0c\\tbl{n}{p}\\qb{n}{p}
\u200b\u53ef\u4ee5\u200b\u7f29\u5199\u200b\u4e3a\u200b\\tql{n}{p}
\uff0c\\tbu{n}\\zqb{n}{p}
\u200b\u53ef\u4ee5\u200b\u7f29\u5199\u200b\u4e3a\u200b\\zqu{n}{p}
\uff0c\\tbl{n}{p}\\zqb{n}{p}
\u200b\u53ef\u4ee5\u200b\u7f29\u5199\u200b\u4e3a\u200b\\zql{n}{p}
\\ibu
\u200b\u4e2d\u200b\u9700\u8981\u200b\u624b\u52a8\u200b\u786e\u5b9a\u200b\u659c\u7387\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200b\u5bf9\u5e94\u200b\u7684\u200b\\Ibu
\u200b\u547d\u4ee4\u200b\u81ea\u52a8\u200b\u786e\u5b9a\u200b\uff1a
\\Ibu{n}{p1}{p2}{np}\n
\u200b\u5176\u4e2d\u200b{n}
\u200b\u4e3a\u200b\u7f16\u53f7\u200b\uff0cp1
\u200b\u4e3a\u200b\u7b2c\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u9ad8\u5ea6\u200b\uff0cp2
\u200b\u4e3a\u200b\u6700\u540e\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u9ad8\u5ea6\u200b\uff0cnp
\u200b\u4e3a\u200b\u97f3\u7b26\u200b\u4e2a\u6570\u200b\u3002
\\Notes\\Ibu0dk4\\qb0d\\qb0h\\qb0f\\tbu0\\qb0k\\en\n\\Notes\\Ibu0kd4\\qb0k\\qb0f\\qb0h\\tbu0\\qb0d\\en\n
\u200b\u5f53\u200b\u4e0d\u200b\u5305\u542b\u200b\u548c\u5f26\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200bD
\u3001T
\u3001Q
\u200b\u5feb\u901f\u200b\u8f93\u5165\u200b\u5305\u542b\u200b2\u30013\u30014\u200b\u4e2a\u200b\u97f3\u7b26\u200b\u7684\u200b\u7b26\u6760\u200b\u3002
\\Notes\\Qqbu dhfk\\en\n\\notes\\Qqbbu kfhd\\Qqbbl dhfk\\en\n
\u200b\u5f53\u200b\u5728\u200b\u7b26\u6760\u200b\u4e2d\u200b\u9700\u8981\u200b\u6539\u53d8\u200b\u7b49\u7ea7\u200b\u65f6\u200b\uff0c\u200b\u4f7f\u7528\u200b\\nbu
\u200b\u5c06\u200b\u7b49\u7ea7\u200b\u589e\u52a0\u200b\u5230\u200bb
\u200b\u7684\u200b\u4e2a\u6570\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7ea7\u6570\u200b\uff0c\u200b\u4f7f\u7528\u200b\\ibu
\u200b\u5c06\u200b\u7b49\u7ea7\u200b\u51cf\u5c11\u200b\u5230\u200bb
\u200b\u7684\u200b\u4e2a\u6570\u200b\u51cf\u4e00\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7ea7\u6570\u200b\u3002
\\Notes\\ibu0k0\\qb0j\\en\\notes\\nbbu0\\qb0j\\tbu0\\qb0j\\en\n\\notes\\ibbu0j0\\qb0j\\tbbu0\\qb0j\\en\\Notes\\tbu0\\qb0j\\en\n
\u200b\u4f7f\u7528\u200b\\roff{}
\u200b\u5728\u200b\u5f53\u524d\u200b\u97f3\u7b26\u200b\u53f3\u4fa7\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u5bf9\u5e94\u200b\u7b49\u7ea7\u200b\u7684\u200b\u77ed\u6760\u200b\uff0c\u200b\u5f53\u200b\\tbbu
\u200b\u914d\u5408\u200b\u66f4\u200b\u9ad8\u7b49\u7ea7\u200b\u8f93\u5165\u200b\u65f6\u200b\uff0c\u200b\u5728\u200b\u5f53\u524d\u200b\u97f3\u7b26\u200b\u5de6\u4fa7\u200b\u4f4d\u7f6e\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u5bf9\u5e94\u200b\u7b49\u7ea7\u200b\u77ed\u6760\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u6765\u200b\u8f93\u5165\u200b\u5207\u5206\u97f3\u200b\u3002
\\notes\\ibbu0j0\\qb0j\\tbbu0\\qb0j\\en\n\\Notes\\tbu0\\qb0j\\en\n\n\\notes\\ibbu0j0\\roff{\\tbbu0}\\qb0j\\en\n\\Notes\\qb0j\\tbbu0\\en\n\\notes\\tbu0\\qb0j\\en\n
"},{"location":"latex/misc/musixtex/#_7","title":"\u4f11\u6b62\u7b26","text":"\u200b\u4f11\u6b62\u7b26\u200b\u7684\u200b\u547d\u4ee4\u200b\u4e3a\u200b
\u200b\u65f6\u503c\u200b \u200b\u5168\u97f3\u7b26\u200b \u200b\u4e8c\u5206\u200b \u200b\u56db\u5206\u200b \u200b\u516b\u5206\u200b \u200b\u5341\u516d\u5206\u200b \u200b\u547d\u4ee4\u200b \\pause
\\hp
\\qp
\\ds
\\qs
\u200b\u5728\u200b\u547d\u4ee4\u200b\u524d\u200b\u4f7f\u7528\u200b\\raise
\u200b\u8c03\u6574\u200b\u4f11\u6b62\u7b26\u200b\u9ad8\u5ea6\u200b\uff0c\\Interligne
\u200b\u8868\u793a\u200b\u7ebf\u200b\u95f4\u8ddd\u200b\uff1b\u200b\u4f7f\u7528\u200b\\rlap
\u200b\u4f7f\u4e0b\u200b\u4e00\u4e2a\u200b\u97f3\u7b26\u200b\u505c\u7559\u200b\u5728\u200b\u539f\u4f4d\u200b\u3002
\\NOtes\\qp\\en\n\\Notes\\ds\\ds\\en\n\\NOtes\\raise2\\Interligne\\rlap\\qp\\raise-2\\Interligne\\qp\\qp \\en \\doublebar\n
"},{"location":"latex/misc/musixtex/#_8","title":"\u6587\u672c","text":"\u200b\u4f7f\u7528\u200bcharnote{p}{text}
\u200b\u524d\u9762\u200b\u52a0\u200b\\z
\u3001\\c
\u3001\\l
\u200b\u5728\u200b\u8c31\u200b\u4e0a\u200b\u6dfb\u52a0\u200b\u6587\u5b57\u200b\uff0c\\z
\u3001\\c
\u3001\\l
\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u5de6\u200b\u3001\u200b\u4e2d\u200b\u3001\u200b\u53f3\u200b\u5bf9\u9f50\u200b\u5f53\u524d\u200b\u97f3\u7b26\u200b\u3002char{num}{text}
\u200b\u548c\u200bcharnote
\u200b\u7528\u6cd5\u200b\u76f8\u540c\u200b\uff0c\u200b\u4f46\u200b\u4f7f\u7528\u200b\u6570\u5b57\u200b\u6765\u200b\u8868\u793a\u200b\u4f4d\u7f6e\u200b\uff1a\u200b\u4ece\u200b\u6700\u200b\u4e0b\u65b9\u200b\u7684\u200b\u7ebf\u200b\u5f00\u59cb\u200b\uff0c\u200b\u6587\u672c\u200b\u57fa\u7ebf\u200b\u5bf9\u9f50\u200b\u6570\u5b57\u200b\u8868\u793a\u200b\u7684\u200b\u7ebf\u200b\u3002
"},{"location":"latex/misc/musixtex/#_9","title":"\u8282\u62cd","text":"\u200b\u4f7f\u7528\u200b\\metron{\\qu}{60}
\u200b\u6765\u200b\u8bbe\u7f6e\u200b\u8282\u62cd\u200b\uff0c\u200b\u8282\u62cd\u200b\u4e5f\u200b\u662f\u200b\u6587\u672c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200b\u76f8\u5173\u200b\u547d\u4ee4\u200b\u653e\u5728\u200b\u8c31\u200b\u4e0a\u200b\u3002\u200b\u53ef\u4ee5\u200b\u7528\u200b\\smallnotesize
\u3001\\tinynotesize
\u200b\u8c03\u8282\u200b\u97f3\u7b26\u200b\u5927\u5c0f\u200b\u3002
"},{"location":"latex/misc/musixtex/#_10","title":"\u9f13\u8c31","text":"\u200b\u9f13\u8c31\u200b\u4e2d\u200b\u4ee3\u8868\u200b\u51fb\u6253\u200b\u9572\u200b\u7247\u200b\u7684\u200b\u97f3\u7b26\u200b\u7531\u200bmusixper
\u200b\u6269\u5c55\u200b\u5305\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u4f7f\u7528\u200b\\input
\u200b\u547d\u4ee4\u200b\u5f15\u5165\u200b\u3002\u200b\u5982\u4e0b\u200b\u7b26\u53f7\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\\dc, \\dh, \\do, \\y, \\x, \\ox, \\ro, k
\uff0c\u200b\u52a0\u200b\u5728\u200b\u5bf9\u5e94\u200b\u7684\u200b\u97f3\u7b26\u200b\u65f6\u503c\u200b\u524d\u200b\u3002
\\Notes\\ibu0o0\\dcqb0o\\dhqb0o\\doqb0o\\tbu0\\yqb0o\\en\n\\Notes\\ibu0o0\\xqb0o\\oxqb0o\\roqb0o\\tbu0\\kqb0o\\en\n
\u200b\u6253\u51fb\u4e50\u200b\u4f7f\u7528\u200b\u7684\u200b\u8c31\u53f7\u200b\u7528\u200b\\setclefsymbol1{\\drumclef}
\u200b\u547d\u4ee4\u200b\u5f15\u5165\u200b\u3002\u200b\u97f3\u9ad8\u200b\u8bb0\u53f7\u200b\u548c\u200b\u9ad8\u97f3\u200b\u8c31\u53f7\u200b\u4e00\u81f4\u200b\uff0c\u200b\u7235\u58eb\u9f13\u200b\u4e2d\u200b\u7684\u200b\u4e0d\u540c\u200b\u58f0\u90e8\u200b\u5bf9\u5e94\u200b\u4e94\u7ebf\u8c31\u200b\u7684\u200b\u4e0d\u540c\u200b\u97f3\u9ad8\u200b\u5982\u4e0b\u200b\u56fe\u200b\u6240\u793a\u200b
"},{"location":"latex/tikz/pgfplots/","title":"pgfplots","text":"\u200b\u501f\u52a9\u200b\u5b8f\u5305\u200bpgfplots
\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200bTikZ\u200b\u7ed8\u5236\u200b\u6298\u7ebf\u56fe\u200b\uff0c\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\u3002
pgfplots\u200b\u7ed8\u5236\u200b\u6298\u7ebf\u56fe\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{figure}[htbp]\n \\begin{tikzpicture}\n \\begin{axis}[sharp plot]\n \\addplot coordinates{(0, 5)(1, 9)(2, 7)(3, 4)(4, 10)};\n \\end{axis}\n \\end{tikzpicture}\n\\end{figure}\n
axis
\u200b\u63a7\u5236\u200b\u4e00\u4e2a\u200b\u56fe\u50cf\u200b\uff0c\\begin{axis}
\u200b\u540e\u200b\u53ef\u4ee5\u200b\u52a0\u200b\u4e00\u5bf9\u200b\u65b9\u62ec\u53f7\u200b\uff0c\u200b\u7528\u4e8e\u200b\u8bbe\u5b9a\u200b\u56fe\u7247\u200b\u7684\u200b\u53c2\u6570\u200b\u3002addplot
\u200b\u63a7\u5236\u200b\u56fe\u50cf\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5176\u540e\u200b\u540c\u6837\u200b\u53ef\u4ee5\u200b\u52a0\u200b\u4e00\u5bf9\u200b\u65b9\u62ec\u53f7\u200b\u7528\u4e8e\u200b\u63a7\u5236\u53c2\u6570\u200b\u3002
"},{"location":"latex/tikz/pgfplots/#axis","title":"axis
\u200b\u73af\u5883","text":"axis
\u200b\u73af\u5883\u200b\u53ef\u7528\u200b\u7684\u200b\u53c2\u6570\u200b\u5982\u4e0b\u200b\u6240\u200b\u5217\u200b\uff1a
[sharp plot, smooth]
\u200b\u7b49\u200b\uff0c\u200b\u8868\u660e\u200b\u6298\u7ebf\u56fe\u200b\u7684\u200b\u66f2\u7ebf\u200b\u662f\u5426\u200b\u7ecf\u8fc7\u200b\u5e73\u6ed1\u200b xlabel
\u200b\u4e0e\u200bylabel
\uff0c\u200b\u63a7\u5236\u200b\u5750\u6807\u8f74\u200b\u7684\u200b\u6807\u6ce8\u200b\u3002 title
\u200b\u63a7\u5236\u200b\u56fe\u50cf\u200b\u7684\u200b\u6807\u9898\u200b xmode
\u200b\u4e0e\u200bymode
\u200b\u63a7\u5236\u200b\u5750\u6807\u8f74\u200b\u662f\u200b\u7ebf\u6027\u200b\u5750\u6807\u8f74\u200b\uff08normal
\uff09\u200b\u8fd8\u662f\u200b\u5bf9\u6570\u200b\u5750\u6807\u8f74\u200b\uff08log
\uff09 xtick distance
\u200b\u4e0e\u200bytick distance
\u200b\u63a7\u5236\u200b\u5750\u6807\u8f74\u200b\u523b\u5ea6\u200b\u5927\u5c0f\u200b xmin, xmax
\u200b\u4e0e\u200bymin, ymax
\u200b\u63a7\u5236\u200b\u5750\u6807\u8f74\u200b\u7684\u200b\u8303\u56f4\u200b - \u200b\u5f53\u200b\u6307\u5b9a\u200b\u5750\u6807\u8f74\u200b\u8303\u56f4\u200b\u65f6\u200b\uff0c\u200b\u5982\u679c\u200b
enlargelimits
\u200b\u6307\u5b9a\u200b\u4e3a\u200btrue
\uff0c\u200b\u5219\u200b\u5750\u6807\u8f74\u200b\u4f1a\u200b\u81ea\u52a8\u200b\u653e\u5927\u200b\u4ee5\u200b\u7b26\u5408\u200b\u8f93\u5165\u200b\u6570\u636e\u200b
\u200b\u5982\u4e0b\u200b\u521b\u5efa\u200b\u4e00\u4e2a\u200b\u7a7a\u200b\u7684\u200b\u56fe\u50cf\u200b\uff0cx\u200b\u5750\u6807\u8f74\u200b\u4e3a\u200b\u7ebf\u6027\u200b\uff0cy\u200b\u5750\u6807\u8f74\u200b\u4e3a\u200b\u5bf9\u6570\u200b\uff1a
axis\u200b\u53c2\u6570\u200b\u793a\u4f8b\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{figure}[htbp]\n \\begin{tikzpicture}\n \\begin{axis}[\n xlabel=Year,\n ylabel=Inventory,\n xmin=2019, xmax=2021,\n ymin=100, ymax=1000,\n xtick distance=1,\n title=Inventory Graph,\n xmode=normal, ymode=log\n ]\n \\end{axis}\n \\end{tikzpicture}\n\\end{figure}\n
\u200b\u6709\u5173\u200b\u66f4\u200b\u591a\u200b\u53c2\u6570\u200b\uff0c\u200b\u8bf7\u200b\u53c2\u89c1\u200bpgfplots \u200b\u624b\u518c\u200b
"},{"location":"latex/tikz/pgfplots/#addplot","title":"\\addplot
","text":"\\addplot
\u200b\u547d\u4ee4\u200b\u53ef\u4ee5\u200b\u5411\u200b\u56fe\u50cf\u200b\u4e2d\u200b\u6dfb\u52a0\u200b\u6298\u7ebf\u56fe\u200b\u6216\u200b\u51fd\u6570\u200b\u3002
\\addplot coordinates{}
\u200b\u7528\u4e8e\u200b\u7ed8\u5236\u200b\u6298\u7ebf\u56fe\u200b\uff0c\u200b\u5176\u4e2d\u200bcoordinates
\u200b\u4e2d\u200b\u7684\u200b\u5750\u6807\u200b\u7528\u200b\u5706\u62ec\u53f7\u200b\u62ec\u8d77\u200b \\addplot [smooth] {f(x)}
\u200b\u7528\u4e8e\u200b\u7ed8\u5236\u200b\u5e73\u6ed1\u200b\u7684\u200b\u6298\u7ebf\u56fe\u200b\uff0c\u200b\u5176\u4e2d\u200bf(x)
\u200b\u4e3a\u200b\u51fd\u6570\u200b\u8868\u8fbe\u5f0f\u200b
axis\u200b\u53c2\u6570\u200b\u793a\u4f8b\u200b
tex\u200b\u4ee3\u7801\u200b\u6e32\u67d3\u200b\u7ed3\u679c\u200b \\begin{figure}[htbp]\n \\begin{tikzpicture}\n \\begin{axis}[\n xlabel=$x$ variable,\n ylabel=$y$ variable,\n xmin=0, xmax=7,\n title=Regression Example,\n ]\n \\addplot coordinates{(0, 5)(1, 9)(2, 7)(3, 4)(4, 10)};\n \\addlegendentry{\\small Data}\n \\addplot [smooth, red]{0.5*x + 6};\n \\addlegendentry{\\small Regressor}\n \\end{axis}\n \\end{tikzpicture}\n\\end{figure}\n
\\addplot
\u200b\u6709\u200b\u5982\u4e0b\u200b\u53c2\u6570\u200b\uff1a
smooth
\u200b\u5982\u679c\u200b\u5b58\u5728\u200b\uff0c\u200b\u7ed8\u5236\u200b\u4e0d\u200b\u5305\u542b\u200b\u70b9\u200b\u5750\u6807\u200b\u7684\u200b\u5e73\u6ed1\u200b\u56fe\u50cf\u200b [color]
\u200b\u8bbe\u7f6e\u200b\u989c\u8272\u200b\u3002
"},{"location":"math/","title":"\u8bfe\u7a0b\u200b\u7b14\u8bb0","text":"\u200b\u4ee5\u4e0b\u200b\u6574\u7406\u200b\u4e86\u200b\u8bfe\u4e0a\u200b\u7684\u200b\u5185\u5bb9\u200b
- \u200b\u79bb\u6563\u6570\u5b66\u200b
- \u200b\u8fd0\u7b79\u5b66\u200b\u4e0e\u200b\u7ebf\u6027\u89c4\u5212\u200b
- \u200b\u5bf9\u7b56\u200b\u3001\u200b\u51b3\u7b56\u200b\u4e0e\u200b\u6392\u961f\u200b\u8bba\u200b
- \u200b\u8fd0\u4f5c\u200b\u7ba1\u7406\u200b
- \u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b
- \u200b\u51f8\u200b\u4f18\u5316\u200b
- \u200b\u56e0\u679c\u200b\u63a8\u65ad\u200b
"},{"location":"math/#_2","title":"\u6269\u5c55\u200b\u9605\u8bfb","text":""},{"location":"math/#_3","title":"\u6570\u5b66\u5206\u6790","text":" - \u200b\u521d\u4e2d\u200b\u7ade\u8d5b\u200b:\\(x+y+z=1\\)\uff0c\u200b\u6c42\u200b\\(xy+2yz+3zx\\)\u200b\u7684\u200b\u6700\u5927\u503c\u200b? - \u200b\u4e88\u4e00\u4eba\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u628a\u200b\\([-0.5,0.5]\\)\u200b\u5185\u200b\u6240\u6709\u200b\u5b9e\u6570\u200b\u76f8\u52a0\u200b\uff0c\u200b\u5f97\u51fa\u200b\u7684\u200b\u7ed3\u679c\u200b\u662f\u200b\\(0\\)\u200b\u5417\u200b\uff1f - Be2SiO4\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u5982\u4f55\u200b\u6c42\u200b\u5fae\u5206\u65b9\u7a0b\u200b \\(y'' + y = 0\\) \u200b\u7684\u200b\u901a\u89e3\u200b\uff1f - \u200b\u4e88\u4e00\u4eba\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u4e3a\u4ec0\u4e48\u200b \\(\\ln x\\) \u200b\u6c42\u5bfc\u200b\u662f\u200b \\(1/x\\)\uff1f - \u200b\u8881\u8d85\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \\(\\ln x (x>1, x\\in \\mathbb Z)\\) \u200b\u53ef\u80fd\u200b\u662f\u200b\u6709\u7406\u6570\u200b\u5417\u200b\uff1f - \u200b\u4e88\u4e00\u4eba\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u79ef\u5206\u200b\u7b26\u53f7\u200b\u5185\u53d6\u200b\u5fae\u5206\u200b\u662f\u200b\u4e00\u79cd\u200b\u4ec0\u4e48\u200b\u65b9\u6cd5\u200b\uff1f - \u200b\u77e5\u4e4e\u200b
- \u200b\u4e00\u6761\u200b\u4ece\u200b\\((0,0)\\)\u200b\u51fa\u53d1\u200b\u7684\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(1\\)\u200b\u7684\u200b\u66f2\u7ebf\u200b\uff0c\u200b\u56f4\u7ed5\u200b\\(x\\)\u200b\u8f74\u200b\u65cb\u8f6c\u200b\u4ea7\u751f\u200b\u7684\u200b\u65cb\u8f6c\u4f53\u200b\u7684\u200b\u6700\u5927\u200b\u4f53\u79ef\u200b\u662f\u200b\u591a\u5c11\u200b\uff1f - \u200b\u865a\u200b\u8c03\u5b50\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
"},{"location":"math/#_4","title":"\u6982\u7387\u8bba\u200b\u4e0e\u200b\u968f\u673a\u200b\u8fc7\u7a0b","text":" - \u200b\u6570\u5b66\u200b\u671f\u671b\u200b\u5927\u4e8e\u200b\u96f6\u200b\u7684\u200b\u6e38\u620f\u200b\u4e00\u5b9a\u200b\u80fd\u200b\u8d5a\u94b1\u200b\u5417\u200b - \u200b\u9648\u58a8\u77b3\u200bnono\u200b\u7684\u200b\u6587\u7ae0\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u7532\u4e59\u200b\u4e24\u4eba\u200b\u4e0b\u56f4\u68cb\u200b\uff0c\u200b\u7532\u80dc\u200b\u7684\u200b\u6982\u7387\u200b\u4e3a\u200b\\(a\\)\uff0c\u200b\u4e59\u80dc\u200b\u7684\u200b\u6982\u7387\u200b\u4e3a\u200b\\(b\\)\uff0c\\(a+b=1\\)\uff0c\u200b\u6bd4\u200b\u5bf9\u65b9\u200b\u591a\u200b\u8d62\u200b\u4e24\u5c40\u200b\u8005\u200b\u83b7\u80dc\u200b\uff0c\u200b\u6c42\u7532\u200b\u8d62\u200b\u7684\u200b\u6982\u7387\u200b? - Dylaaan\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u5f3a\u5927\u200b\u6570\u5f8b\u200b\uff08SLLN) - \u200b\u4f55\u5bb6\u5fd7\u200b\u7684\u200b\u6587\u7ae0\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u5982\u679c\u200b\u6211\u200b\u6709\u200b \\(2^{-n}\\) \u200b\u6982\u7387\u200b\u83b7\u5f97\u200b \\(2^n\\) \u200b\u5143\u200b\uff0c\u200b\u90a3\u200b\u83b7\u5f97\u200b\u94b1\u200b\u7684\u200b\u6570\u5b66\u200b\u671f\u671b\u503c\u200b\u5e94\u8be5\u200b\u662f\u200b\u65e0\u7a77\u200b\uff0c\u200b\u4f46\u200b\u5b9e\u9645\u200b\u4e0d\u662f\u200b\u8fd9\u6837\u200b\uff0c\u200b\u4e3a\u4ec0\u4e48\u200b\uff1f - ClefRybak\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
"},{"location":"math/#_5","title":"\u7ebf\u6027\u4ee3\u6570","text":" - \u200b\u5982\u4f55\u200b\u5224\u5b9a\u200b\u4e0d\u53ef\u200b\u7ea6\u200b\u591a\u9879\u5f0f\u200b\uff1f - \u200b\u5982\u8564\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u8ba1\u7b97\u673a\u200b\u56fe\u5f62\u5b66\u200b\u4e00\u200b\uff1a\u200b\u57fa\u7840\u200b\u53d8\u6362\u200b\u77e9\u9635\u200b\u603b\u7ed3\u200b(\u200b\u7f29\u653e\u200b\uff0c\u200b\u65cb\u8f6c\u200b\uff0c\u200b\u4f4d\u79fb\u200b)
"},{"location":"math/#_6","title":"\u79bb\u6563\u6570\u5b66\u200b\u4e0e\u200b\u6570\u8bba","text":" - \u200b\u4e00\u822c\u200b\u4e00\u5143\u200b\u4e94\u6b21\u200b\u65b9\u7a0b\u200b\u6ca1\u6709\u200b\u6839\u5f0f\u200b\u89e3\u200b\u7684\u200b\u79d8\u5bc6\u200b\u7a76\u7adf\u200b\u5728\u200b\u54ea\u91cc\u200b\uff1f\u200b\u82b1\u8d39\u200b\u4eba\u7c7b\u200b\u4e09\u767e\u5e74\u200b.? - Geometrie\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u7ec4\u5408\u200b\u6570\u5b66\u200b\u5b66\u4e60\u200b\u7b14\u8bb0\u200b\uff08\u200b\u5341\u200b\uff09 - sola\u200b\u7684\u200b\u6587\u7ae0\u200b - \u200b\u77e5\u4e4e\u200b
- ACM\u2014\u2014\u200b\u5e38\u89c1\u200b\u7684\u200b\u51e0\u79cd\u200b\u5206\u89e3\u200b\u8d28\u200b\u56e0\u5b50\u200b\u7684\u200b\u65b9\u6cd5\u200b - \u200b\u4e25\u683c\u200b\u9e3d\u200b\u7684\u200b\u6587\u7ae0\u200b - \u200b\u77e5\u4e4e\u200b
"},{"location":"math/#_7","title":"\u5176\u4ed6","text":" - \u200b\u4e94\u4e2a\u200b\u56da\u72af\u200b\u5148\u540e\u200b\u4ece\u200b100\u200b\u9897\u200b\u7eff\u8c46\u200b\u4e2d\u200b\u6293\u200b\u7eff\u8c46\u200b\u3002\u200b\u6293\u5f97\u200b\u6700\u200b\u591a\u200b\u548c\u200b\u6700\u5c11\u200b\u7684\u200b\u4eba\u200b\u5c06\u200b\u88ab\u200b\u5904\u6b7b\u200b\uff0c\u200b\u4e0d\u80fd\u200b\u4ea4\u6d41\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6478\u200b\u51fa\u200b\u5269\u4e0b\u200b\u7eff\u8c46\u200b\u7684\u200b\u6570\u91cf\u200b\uff0c\u200b\u8c01\u200b\u7684\u200b\u5b58\u6d3b\u200b\u51e0\u7387\u200b\u6700\u5927\u200b\uff1f - \u200b\u66fe\u52a0\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- 1000\u200b\u6876\u200b\u6c34\u200b\uff0c\u200b\u5176\u4e2d\u200b\u4e00\u6876\u200b\u6709\u6bd2\u200b\uff0c\u200b\u732a\u200b\u559d\u200b\u6bd2\u6c34\u200b\u540e\u4f1a\u200b\u5728\u200b15\u200b\u5206\u949f\u200b\u5185\u200b\u6b7b\u53bb\u200b\uff0c\u200b\u60f3\u200b\u7528\u200b\u4e00\u4e2a\u200b\u5c0f\u65f6\u200b\u627e\u5230\u200b\u8fd9\u6876\u200b\u6bd2\u6c34\u200b\uff0c\u200b\u81f3\u5c11\u200b\u9700\u8981\u200b\u51e0\u5934\u200b\u732a\u200b\uff1f - \u200b\u82d7\u534e\u680b\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u9664\u4e86\u200b 3\uff0c4\uff0c5 \u200b\u4ee5\u5916\u200b\u662f\u5426\u200b\u8fd8\u6709\u200b\u522b\u7684\u200b\u4e09\u89d2\u5f62\u200b\uff0c\u200b\u5b83\u200b\u7684\u200b\u4e09\u6761\u200b\u8fb9\u200b\u662f\u200b\u8fde\u7eed\u200b\u81ea\u7136\u6570\u200b\uff0c\u200b\u5b83\u200b\u7684\u200b\u9762\u79ef\u200b\u4e5f\u200b\u662f\u200b\u81ea\u7136\u6570\u200b\uff1f - Pandora Eartha\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u72b6\u6001\u200b\u7a7a\u95f4\u200b\u8868\u8fbe\u5f0f\u200b\u7684\u200b\u89e3\u200b - Anonymity67\u200b\u7684\u200b\u6587\u7ae0\u200b - \u200b\u77e5\u4e4e\u200b
- \u200b\u5982\u4f55\u200b\u6c42\u200b\u6570\u5217\u200b\\(a_{n+1} = a_n^2 - 2a_n\\)? - Reuental\u200b\u7684\u200b\u56de\u7b54\u200b - \u200b\u77e5\u4e4e\u200b
"},{"location":"math/causal-inference/","title":"\u56e0\u679c\u200b\u63a8\u65ad","text":"According to Causal Inference: What If.
- A definition of causal effect
- Randomized experiments
- Observational studies
- Effect modification
- Interaction
- Graphical representation of causal effects
- Confounding
- Selection bias
- Measurement bias and \"noncausal\" diagrams
"},{"location":"math/causal-inference/causal-inference-stale/","title":"\u56e0\u679c\u200b\u63a8\u65ad","text":"Casual inference is about studying the consequence of doing one thing vs another.
Simpson\u2019s Paradox
\u200b\u67d0\u4e2a\u200b\u7edf\u8ba1\u200b\u5173\u8054\u200b\uff0c\u200b\u53ef\u80fd\u200b\u5728\u200b\u6240\u6709\u200b\u5b50\u200b\u7fa4\u4f53\u200b\u4e0a\u200b\u7684\u200b\u6548\u679c\u200b\u90fd\u200b\u662f\u200b\u76f8\u53cd\u200b\u7684\u200b\u3002
A statistical association that holds for the entire population can be reversed in every subpopulation.
Berkson\u2019s Paradox
Variables that have no relationships can appear to have strong associations in a selected subpopulation.
\u200b\u56e0\u679c\u200b\u63a8\u65ad\u200b\u6709\u200b\u4e24\u4e2a\u200b\u4e3b\u8981\u200b\u7684\u200b\u7814\u7a76\u200b\u6846\u67b6\u200b\uff0c\u200b\u5373\u200b Potential outcome framework \u200b\u548c\u200b Causal graph \u3002
"},{"location":"math/causal-inference/causal-inference-stale/#potential-outcome-framework","title":"Potential Outcome Framework","text":""},{"location":"math/causal-inference/causal-inference-stale/#_2","title":"\u6846\u67b6\u200b\u8bbe\u5b9a","text":" - Unit of analysis\uff1a\u200b\u4e0d\u540c\u200b\u65f6\u95f4\u200b\u4e0b\u200b\u7684\u200b\u540c\u4e00\u4e2a\u200b\u4e2a\u4f53\u200b\u5e94\u5f53\u200b\u770b\u4f5c\u200b\u4e0d\u540c\u200b\u7684\u200b\u4e2a\u4f53\u200b
- Treatment \\(D\\)\uff1a\u200b\u901a\u5e38\u200b\u5212\u5206\u200b\u4e3a\u200b\u5b9e\u9a8c\u7ec4\u200b\uff08\\(D=1\\)\uff09\u200b\u4e0e\u200b\u5bf9\u7167\u7ec4\u200b\uff08\\(D=0\\)\uff09\uff0c\u200b\u4f46\u200b\\(D\\)\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u53d6\u591a\u503c\u200b\u6216\u200b\u8fde\u7eed\u200b
- Potential outcome \\(Y(d)\\)\uff1a\u200b\u5f53\u200b\u5e72\u9884\u200b\u6c34\u5e73\u200b\u4e3a\u200b\\(d\\)\u200b\u65f6\u200b\u5e94\u5f53\u200b\u51fa\u73b0\u200b\u7684\u200b\u7ed3\u679c\u200b\u3002
- Counterfactual outcome\uff1a\u200b\u5f53\u200b\u5e72\u9884\u200b\u6c34\u5e73\u200b\u4e3a\u200b\\(D\\)\u200b\u65f6\u200b\u6240\u6709\u200b\\(d\\not = D\\)\u200b\u7684\u200b\u7ed3\u679c\u200b\u2014\u2014\u200b\u5b58\u5728\u200b\u4f46\u200b\u65e0\u6cd5\u200b\u89c2\u6d4b\u200b\u5230\u200b
- Casual effect\uff1a\u200b\u6bd4\u8f83\u200b\u4e24\u4e2a\u200b\u5e73\u884c\u200b\u7ed3\u679c\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5dee\u5f02\u200b\uff0c\\(Y(1) - Y(0)\\)
\u200b\u5f53\u200b\u4e00\u4e2a\u200b\u4e2a\u4f53\u200b\u63a5\u6536\u200b\u5230\u200b\\(d=D\\)\u200b\u4e4b\u540e\u200b\uff0c\u200b\u5176\u200b\u5e72\u9884\u200b\u72b6\u6001\u200b\u5c31\u200b\u4e0d\u4f1a\u200b\u518d\u200b\u6539\u53d8\u200b\u3002\u200b\u56e0\u6b64\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u89c2\u6d4b\u200b\u5230\u200b\u4e00\u4e2a\u200b\u4e2a\u4f53\u6240\u6709\u200b\u53ef\u80fd\u200b\u51fa\u73b0\u200b\u7684\u200b\u5e72\u9884\u200b\u7ed3\u679c\u200b\u3002
SUTVA assumption
\u200b\u5047\u8bbe\u200b\u4e2a\u4f53\u200b\\(i\\)\u200b\u7684\u200b\u5e72\u9884\u200b\u72b6\u6001\u200b\\(D_i\\)\u3001\u200b\u5e72\u9884\u200b\u548c\u200b\u4e0d\u200b\u5e72\u9884\u200b\u7684\u200b\u6548\u679c\u200b\\(Y_i(0), Y_i(1)\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u5373\u200b
\\[ \\{D_i, Y_i(0), Y_i(1)\\}\\sim\\{D, Y(0), Y(1)\\} \\] \u200b\u540c\u65f6\u200b\u5047\u8bbe\u200b
- \u200b\u6bcf\u4e2a\u200b\u4e2a\u4f53\u200b\u7684\u200b\u7ed3\u679c\u200b\u4e0d\u200b\u53d7\u5230\u200b\u5176\u4ed6\u200b\u4e2a\u4f53\u200b\u5e72\u9884\u200b\u6c34\u5e73\u200b\u7684\u200b\u5f71\u54cd\u200b\uff08\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e2a\u4f53\u200b\u4e4b\u95f4\u200b\u7684\u200b\u76f8\u4e92\u5f71\u54cd\u200b\uff0c\u200b\u4e2a\u4f53\u200b\u7684\u200b\u7ed3\u679c\u200b\u53ea\u53d7\u200b\u5e72\u9884\u200b\u6c34\u5e73\u200b\u7684\u200b\u5f71\u54cd\u200b\uff09
- \u200b\u4e0d\u200b\u5b58\u5728\u200b\u5e72\u9884\u200b\u6c34\u5e73\u200b\u7684\u200b\u9690\u85cf\u200b\u72b6\u6001\u200b\uff08\u200b\u5373\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5e72\u9884\u200b\u72b6\u6001\u200b\u90fd\u200b\u662f\u200b\u539f\u5b50\u200b\u7684\u200b\uff0c\u200b\u4e0d\u200b\u53ef\u4ee5\u200b\u8fdb\u4e00\u6b65\u200b\u5212\u5206\u200b\uff09
\u200b\u8003\u8651\u200b\u603b\u4f53\u200b\u7684\u200b\u671f\u671b\u200b\u5e72\u9884\u200b\u6548\u679c\u200b\uff08 Average Treatment Effect, ATE\uff09
\\[ \\tau = \\mathbb E[Y(1) - Y(0)] \\] \u200b\u7531\u4e8e\u200b\u5bf9\u4e8e\u200b\u4e2a\u4f53\u200b\\(i\\)\uff0c\u200b\u65e0\u6cd5\u200b\u540c\u65f6\u200b\u89c2\u6d4b\u200b\\(Y_i(1), Y_i(0)\\)\uff0c\u200b\u56e0\u6b64\u200b\\(\\tau\\)\u200b\u7684\u200b\u786e\u5207\u200b\u6570\u503c\u200b\u540c\u6837\u200b\u65e0\u6cd5\u200b\u89c2\u6d4b\u200b\u3002
\\[ \\begin{aligned} \\hat\\tau &= \\frac{1}{n_1} \\sum_{i;D_i = 1}Y_i - \\frac{1}{n_0} \\sum_{i;D_i = 0}Y_i \\\\ &= \\mathbb E[Y(1) | D = 1] - \\mathbb E[Y(0) | D = 0] \\end{aligned} \\] \u200b\u9700\u8981\u200b\u8003\u8651\u200b\\(D\\)\u200b\u7684\u200b\u5206\u5e03\u200b\uff0c\u200b\u5373\u200b\u5b9e\u9a8c\u7ec4\u200b\u4e0e\u200b\u5bf9\u7167\u7ec4\u200b\u5982\u4f55\u200b\u4ea7\u751f\u200b\uff0c\u200b\u6216\u200b\\(Y, D\\)\u200b\u7684\u200b\u72ec\u7acb\u6027\u200b\u3002
\u200b\u5f53\u200b\\(Y, D\\)\u200b\u6ee1\u8db3\u200b
\\[ (Y(0), Y(1))\\perp D \\label{1} \\] \u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(\\hat\\tau = \\tau\\)
"},{"location":"math/causal-inference/causal-inference-stale/#_3","title":"\u6df7\u6dc6\u200b\u56e0\u5b50","text":"\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u573a\u666f\u200b\uff1a
- \u200b\u4e00\u7fa4\u200b\u88ab\u8bd5\u200b\u968f\u673a\u200b\u63a5\u53d7\u200b\u836f\u7269\u200b\u8bd5\u9a8c\u200b
- \u200b\u88ab\u200b\u8bd5\u4e2d\u200b\u75c7\u72b6\u200b\u6bd4\u8f83\u4e25\u91cd\u200b\u7684\u200b\u4e2a\u4f53\u200b\u63a5\u53d7\u200b\u836f\u7269\u200b\u5b9e\u9a8c\u200b
- \u200b\u968f\u673a\u200b\u8bd5\u9a8c\u200b\u6307\u200b\u5206\u914d\u673a\u5236\u200b\u7531\u200b\u7814\u7a76\u8005\u200b\u53ef\u63a7\u200b\u3002\u200b\u5982\u200b\u6309\u7167\u200b\\(p = 0.5\\)\u200b\u7684\u200b\u6982\u7387\u200b\u8fdb\u884c\u200b\u4f2f\u52aa\u5229\u200b\u5b9e\u9a8c\u200b\u968f\u673a\u200b\u5206\u914d\u200b\uff0c\u200b\u5219\u200b\\((Y(1)\uff0c Y(0))\\perp D\\)\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b\\(\\hat\\tau = \\tau\\)
- \u200b\u89c2\u6d4b\u200b\u7814\u7a76\u200b\u6307\u200b\u5206\u914d\u673a\u5236\u200b\u4e0d\u7531\u200b\u7814\u7a76\u8005\u200b\u63a7\u5236\u200b\u3002\u200b\u5982\u200b\u88ab\u200b\u8bd5\u200b\u6839\u636e\u200b\u4e2a\u4f53\u200b\u611f\u53d7\u200b\u81ea\u884c\u51b3\u5b9a\u200b\u5403\u836f\u200b\u3002\u200b\u6b64\u65f6\u200b\u5b58\u5728\u200b\uff08\u200b\u53ef\u4ee5\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\uff09\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\\(X\\)
\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b
\u200b\u53d8\u91cf\u200b\\(X\\)\u200b\u662f\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\uff0c\u200b\u5982\u679c\u200b\uff1a
- \\(X\\)\u200b\u4f1a\u200b\u5f71\u54cd\u200b\u5206\u914d\u200b\uff0c\u200b\u5373\u200b\\(X\\not \\perp D\\)\uff0c\u200b\u6216\u200b
- \\(X\\)\u200b\u4f1a\u200b\u5f71\u54cd\u200b\u7ed3\u679c\u200b\uff0c\u200b\u5373\u200b\\(X\\not \\perp (Y(1)\uff0c Y(0))\\)
\u200b\u901a\u5e38\u200b\u5c06\u200b\u53ef\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u8bb0\u200b\u4e3a\u200b\\(X\\)\uff0c\u200b\u4e0d\u80fd\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u8bb0\u200b\u4e3a\u200b\\(U\\)\u3002
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u5f53\u200b\u5b58\u5728\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u65f6\u200b\uff0c\\(\\eqref{1}\\)\u200b\u4e0d\u518d\u200b\u6210\u7acb\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\\(D\\)\u200b\u53d8\u4e3a\u200b\\(D|X\\)
\u200b\u5f53\u200b\u6240\u6709\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u90fd\u200b\u88ab\u200b\u89c2\u6d4b\u200b\u5230\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u9002\u7528\u200b unconfoundedness assumption
Unconfoundedness assumption
\u200b\u5047\u8bbe\u200b\u6210\u7acb\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b
\\[ (Y(1), Y(0)) \\perp D|X \\] \u200b\u63a7\u5236\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b
\\[\\begin{aligned} & \\mathbb E [\\mathbb E[Y | D = 1, X] - \\mathbb E[Y | D = 0, X]] \\\\ =& \\mathbb E [\\mathbb E[Y(1) | D = 1, X] - \\mathbb E[Y(0) | D = 0, X]] \\\\ =& \\mathbb E [\\mathbb E[Y(1) | X] - \\mathbb E[Y(0) | X]] \\\\ =& \\mathbb E [\\mathbb E[Y(1) - Y(0) | X]] \\\\ =& \\mathbb E[Y(1) - Y(0)] \\end{aligned} \\] \u200b\u4f46\u200b\u5b9e\u9645\u4e0a\u200b\uff0c\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u89c2\u6d4b\u200b\u5230\u200b\u6240\u6709\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u3002\u200b\u6b64\u65f6\u200b
\\[ \\begin{aligned} & \\bbE [Y | D = 1] - \\bbE [Y| D = 0] \\\\ =& \\bbE[\\bbE[Y | D = 1, X] | D = 1] - \\bbE[\\bbE[Y | D = 0, X] | D = 0] \\end{aligned} \\] \u200b\u4f46\u200b\u5b9e\u9645\u4e0a\u200b\uff0c\\(\\bbP(X|D = 1) \\not = \\bbP(X|D = 0)\\)\uff0c\u200b\u56e0\u6b64\u200b\u9020\u6210\u200b\u504f\u5dee\u200b\u3002
\u200b\u5e72\u9884\u200b\u4e0e\u200b\u6761\u4ef6\u200b
- \\(\\bbE(Y|D = 0)\\)\u200b\u53cd\u6620\u200b\u6761\u4ef6\u200b\uff0c\u200b\u4f5c\u7528\u200b\u5728\u200b\u7fa4\u4f53\u200b\\(D = 0\\)\u200b\u4e0a\u200b\u3002
- \\(\\bbE(Y(0))\\)\u200b\u53cd\u6620\u200b\u5e72\u9884\u200b\uff0c\u200b\u4f5c\u7528\u200b\u5728\u200b\u5168\u4f53\u200b\u4e0a\u200b\u3002
\u200b\u5f53\u200b\\((Y(1), Y(0))\\perp D | X\\)\u200b\u6210\u7acb\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b
\\[ \\bbE(Y(1) | X) = \\bbE(Y | D = 1, X) \\] \u200b\u524d\u63d0\u200b\u662f\u200b\uff0c overlap assumption \u200b\u6210\u7acb\u200b\u3002
Overlap assumption
\u200b\u5bf9\u4e8e\u200b\u6240\u6709\u200b\u7684\u200b\\(X\\)\uff0c\\(Y(0), Y(1)\\)\u200b\u5fc5\u987b\u200b\u90fd\u200b\u5b58\u5728\u200b\uff0c\u200b\u5373\u200b
\\[ \\bbP(D=1|X)\\in (0, 1) \\] \u200b\u5b9a\u4e49\u200b\\(\\bbP(D=1|X)\\in (0, 1)\\)\u200b\u4e3a\u200bpropensity score\u3002
"},{"location":"math/causal-inference/causal-inference-stale/#_4","title":"\u5b9e\u8bc1\u200b\u7814\u7a76","text":"\u200b\u5b9e\u9645\u4e0a\u200b\uff0c unconfoundedness \u200b\u548c\u200b overlap \u200b\u5047\u8bbe\u200b\u5747\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u6210\u7acb\u200b\uff0c\u200b\u56e0\u4e3a\u200b\u6709\u200b\u8bb8\u591a\u200b\u9690\u85cf\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u524d\u200b\u6587\u4e2d\u200b\u7684\u200b Simpson\u2019s Paradox \uff0c\u200b\u51fa\u73b0\u200b\u53cd\u200b\u76f4\u89c9\u200b\u73b0\u8c61\u200b\u7684\u200b\u539f\u56e0\u200b\u5728\u4e8e\u200b\uff0c\u200b\u6027\u522b\u200b\u662f\u200b\u4e00\u4e2a\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\uff1a
- \u200b\u5973\u6027\u200b\u7684\u200b\u88ab\u200b\u8bd5\u200b\u6bd4\u4f8b\u200b\u66f4\u9ad8\u200b\uff08\\(D\\not\\perp X\\)\uff09
- \u200b\u5973\u6027\u200b\u6574\u4f53\u200b\u7684\u200b\u5eb7\u590d\u200b\u7387\u200b\u66f4\u200b\u4f4e\u200b\uff08\\(Y\\not\\perp X\\)\uff09
\u200b\u5728\u200b\u5b9e\u8bc1\u200b\u7814\u7a76\u200b\u4e2d\u200b\uff0c\u200b\u5f80\u5f80\u200b\u8fd8\u6709\u200b\u7814\u7a76\u8005\u200b\u672a\u80fd\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u3002
\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u65e2\u200b\u662f\u200b\u969c\u788d\u200b\uff0c\u200b\u4e5f\u200b\u662f\u200b\u5de5\u5177\u200b\u3002\u200b\u5728\u200b\u7406\u60f3\u5316\u200b\u7684\u200b\u7edf\u8ba1\u200b\u63a8\u65ad\u200b\u4e2d\u200b\uff0c\u200b\u76f8\u5173\u6027\u200b\u4e0d\u80fd\u200b\u63a8\u51fa\u200b\u56e0\u679c\u6027\u200b\u3002\u200b\u4f46\u200b\u5728\u200b\u5b9e\u8bc1\u200b\u7814\u7a76\u200b\u4e2d\u200b\uff0c\u200b\u7531\u4e8e\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u7684\u200b\u5b58\u5728\u200b\uff0c\u200b\u4f7f\u5f97\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u533a\u5206\u200b\u76f8\u5173\u6027\u200b\u4e2d\u200b\u7684\u200b\u56e0\u679c\u5173\u7cfb\u200b\u3002
\u200b\u4e00\u4e9b\u200b\u8861\u91cf\u200b\u5e72\u9884\u200b\u6548\u679c\u200b\u7684\u200b\u6307\u6807\u200b\uff08\u200b\u53c2\u6570\u200b\uff09
ATE
\\[ \\tau = \\bbE[Y(1) - Y(0)] \\] \u200b\u88ab\u8bd5\u200b\u7684\u200b ATE
\\[ \\tau_1 = \\bbE[Y(1) - Y(0) | D = 1] \\] \u200b\u6761\u4ef6\u200b ATE\uff08 CATE \uff09
\\[ \\tau_C = \\bbE[Y(1) - Y(0) | (D, X)\\in \\text{subgroup}] \\] QTE\uff08 Quantile treatment effect \uff09
\\[ \\begin{gathered} \\text{QTE} = F_1^{-1}(\\gamma) - F_0^{-1}(\\gamma) \\\\ F_d^{-1}(\\gamma) = \\inf\\{y|\\bbP(Y(d)\\leq y)\\geq \\gamma\\} \\end{gathered} \\] Causal risk ratio\uff08\u200b\u53ea\u200b\u9002\u7528\u200b\u4e8e\u200b\u7ed3\u679c\u200b\u4e8c\u5206\u200b\u7684\u200b\u60c5\u51b5\u200b\uff09
\\[ \\text{CRR} = \\bbP(Y(1) = 1) / \\bbP(Y(0) = 1) \\] \u200b\u4ee5\u4e0a\u200b\u8fd9\u4e9b\u200b\u53c2\u6570\u200b\u90fd\u200b\u53d7\u5230\u200b\u6df7\u6dc6\u200b\u53d8\u91cf\u200b\uff08\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u80fd\u200b\u88ab\u200b\u89c2\u6d4b\u200b\u5230\u200b\uff09\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002\u200b\u76f8\u5bf9\u200b\u5e94\u200b\u7684\u200b\uff0c\u200b\u4ece\u200b\u5b9e\u9a8c\u200b\u7ed3\u679c\u200b\u7684\u200b\u7edf\u8ba1\u200b\u6307\u6807\u200b\u4e2d\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u8fd9\u4e9b\u200b\u6307\u6807\u200b\u7684\u200b\u4e00\u4e2a\u200b\u4f30\u8ba1\u200b\u3002
\u200b\u5982\u200b\u5bf9\u4e8e\u200b ATE \u200b\u6307\u6807\u200b\\(\\tau = \\bbE[Y(1) - Y(0)]\\)\uff0c\\(\\tilde \\tau = \\bbE[Y | D = 1] - \\bbE[Y | D = 0]\\)\u200b\u5c31\u662f\u200b\\(\\tau\\)\u200b\u7684\u200b\u4e00\u4e2a\u200b\u4f30\u8ba1\u200b\u3002
\\(\\tau\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\u56e0\u679c\u200b\u53c2\u6570\u200b\uff0c\u200b\u53d7\u5230\u200b\\(X, D, Y(0), Y(1)\\)\u200b\u7684\u200b\u5171\u540c\u200b\u5f71\u54cd\u200b\u3002\\(\\tilde\\tau\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\u53ef\u4ee5\u200b\u4ece\u200b\u7edf\u8ba1\u6570\u636e\u200b\u4e2d\u200b\u89c2\u6d4b\u200b\u5230\u200b\u7684\u200b\u6307\u6807\u200b\uff0c\u200b\u53d7\u5230\u200b\\(X, D, Y\\)\u200b\u7684\u200b\u5171\u540c\u200b\u5f71\u54cd\u200b\u3002
\u200b\u5982\u679c\u200b\u67d0\u4e2a\u200b\u53c2\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4ece\u200b\u7edf\u8ba1\u6570\u636e\u200b\u4e2d\u200b\u89c2\u6d4b\u200b\u5230\u200b\u4e00\u4e2a\u200b\u552f\u4e00\u200b\u7684\u200b\u65e0\u504f\u200b\u4f30\u8ba1\u200b\uff0c\u200b\u5219\u200b\u79f0\u4e3a\u200b identifiable \u3002\u200b\u7531\u4e8e\u200b\u53cd\u200b\u4e8b\u5b9e\u200b\u7684\u200b\u5b58\u5728\u200b\uff0c\u200b\u6211\u4eec\u200b\u53ea\u80fd\u200b\u89c2\u6d4b\u200b\u5230\u200b\\(Y = Y(D)\\)\uff0c\u200b\u56e0\u6b64\u200b\u5373\u4f7f\u200b\u6709\u200b\u65e0\u9650\u200b\u591a\u200b\u7684\u200b\u6570\u636e\u200b\u96c6\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u80fd\u200b\u5b9e\u73b0\u200b identification \u3002\u200b\u5728\u200b unconfoundedness \u200b\u5047\u8bbe\u200b\u6210\u7acb\u200b\u7684\u200b\u6761\u4ef6\u200b\u4e0b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5b9e\u73b0\u200b identification \u3002
\u200b\u56e0\u6b64\u200b\uff0c\u200b\u4e3a\u4e86\u200b\u9a8c\u8bc1\u200b\u4e00\u4e2a\u200b\u56e0\u679c\u5173\u7cfb\u200b\u662f\u5426\u200b\u6210\u7acb\u200b\uff0c\u200b\u6211\u4eec\u200b\u9700\u8981\u200b\u4e24\u200b\u65b9\u9762\u200b\u7684\u200b\u4fe1\u606f\u200b
- \u200b\u5145\u8db3\u200b\u7684\u200b\u6570\u636e\u200b\u96c6\u4ee5\u200b\u53cd\u6620\u200b\\(X, D, Y\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u3002
- \u200b\u5173\u4e8e\u200b\\(X, D, Y(0), Y(1)\\)\u200b\u7684\u200b\u4e00\u4e9b\u200b\u5047\u8bbe\u200b\uff0c\u200b\u5982\u200b\u968f\u673a\u200b\u8bd5\u9a8c\u200b\u5047\u8bbe\u200b\u6216\u200b unconfoundedness \u200b\u5047\u8bbe\u200b\u3002
"},{"location":"math/causal-inference/causal-inference-stale/#causal-graph","title":"Causal Graph","text":"\u200b\u4e00\u7cfb\u5217\u200b\u53d8\u91cf\u200b\u7684\u200b\u56e0\u679c\u5173\u7cfb\u200b\u53ef\u4ee5\u200b\u6784\u6210\u200b\u56e0\u679c\u200b\u56fe\u200b\u3002\u200b\u56e0\u679c\u200b\u56fe\u662f\u200b\u4e00\u4e2a\u200b\u6709\u200b\u5411\u200b\u65e0\u200b\u73af\u56fe\u200b\uff08 DAG \uff09\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\u8282\u70b9\u200b\u8868\u793a\u200b\u53d8\u91cf\u200b\uff0c\u200b\u6bcf\u6761\u200b\u8fb9\u200b\u4ece\u7236\u200b\u53d8\u91cf\u200b\uff08\u200b\u8282\u70b9\u200b\uff09\u200b\u51fa\u53d1\u200b\uff0c\u200b\u6307\u5411\u200b\u5b50\u200b\u53d8\u91cf\u200b\uff08\u200b\u8282\u70b9\u200b\uff09\u3002
- \u200b\u76f8\u90bb\u200b\uff1a\u200b\u5982\u679c\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\u4e4b\u95f4\u200b\u6709\u200b\u4e00\u6761\u200b\u8fb9\u200b\uff0c\u200b\u79f0\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\u76f8\u90bb\u200b
- \uff08\u200b\u56e0\u679c\u200b\uff09\u200b\u8def\u5f84\u200b\uff1a\u200b\u4e00\u7cfb\u5217\u200b\u76f8\u90bb\u200b\u7684\u200b\u8282\u70b9\u200b\u7ec4\u6210\u200b\u4e00\u6761\u200b\u8def\u5f84\u200b\uff08\u200b\u65e0\u89c6\u200b\u8fb9\u200b\u7684\u200b\u65b9\u5411\u200b\uff09
- \u200b\u6709\u200b\u5411\u200b\u8def\u5f84\u200b\uff1a\u200b\u65b9\u5411\u200b\u76f8\u540c\u200b\u7684\u200b\u4e00\u7cfb\u5217\u200b\u8def\u5f84\u200b\u6240\u200b\u8fde\u63a5\u200b\u7684\u200b\u8282\u70b9\u200b\u5f62\u6210\u200b\u7684\u200b\u8def\u5f84\u200b
\u200b\u8def\u5f84\u200b\u6709\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\uff1a
- \u200b\u94fe\u200b\uff1a\\(A\\ra B\\ra C\\)
- \u200b\u6c47\u805a\u200b\uff1a\\(A\\ra B\\la C\\)
- \u200b\u5206\u652f\u200b\uff1a\\(A\\la B\\ra C\\)
\u200b\u5728\u200b\u56e0\u679c\u200b\u56fe\u4e2d\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u8282\u70b9\u200b\u90fd\u200b\u662f\u200b\u5176\u5b50\u200b\u8282\u70b9\u200b\uff08\u200b\u540e\u4ee3\u200b\uff09\u200b\u7684\u200b\u76f4\u63a5\u200b\u539f\u56e0\u200b\uff08\u200b\u7956\u5148\u200b\uff09\uff08\u200b\u5373\u200b\uff0c\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e2d\u95f4\u200b\u7684\u200b\u53d8\u91cf\u200b\u5f71\u54cd\u200b\u5b50\u200b\u8282\u70b9\u200b\uff09\u3002
\u200b\u5bf9\u4e8e\u200b\u5982\u4e0b\u200b\u56fe\u200b\u6240\u793a\u200b\u7684\u200b\u56e0\u679c\u200b\u56fe\u200b
- \\(X_1\\)\u200b\u5f71\u54cd\u200b\u53d8\u91cf\u200b\\(X_4\\)\uff0c\u200b\u4f46\u200b\u4e0d\u662f\u200b\u76f4\u63a5\u200b\u5f71\u54cd\u200b\u3002
-
\u200b\u5982\u679c\u200b\u56fa\u5b9a\u200b\\(X_3\\)\uff0c\u200b\u5219\u200b\\(X_1\\)\u200b\u7684\u200b\u53d8\u5316\u200b\u4e0d\u4f1a\u200b\u5f71\u54cd\u200b\\(X_4\\)\uff0c\u200b\u5373\u200b
\\[ X_4\\perp (X_1, X_2) | X_3 \\] -
\u200b\u4f46\u200b\\(X_4\\)\u200b\u4ecd\u7136\u200b\u4e0e\u200b\\(X_5\\)\u200b\u6709\u5173\u200b\u3002
\u200b\u8fdb\u4e00\u6b65\u200b\u5730\u200b\uff0c\u200b\u6211\u4eec\u200b\u4e0d\u59a8\u200b\u5047\u8bbe\u200b\uff0c\u200b\u5982\u679c\u200b\u63a7\u5236\u200b\u4e86\u200b\u67d0\u4e2a\u200b\u53d8\u91cf\u200b\\(X_i\\)\u200b\u5168\u90e8\u200b\u7684\u200b\u76f4\u63a5\u200b\u7956\u5148\u200b\uff0c\u200b\u5219\u200b\\(X_i\\)\u200b\u53ea\u200b\u4e0e\u5176\u200b\u540e\u4ee3\u200b\u6709\u5173\u200b\uff08\u200b\u56e0\u679c\u200bMarkov\u200b\u5047\u8bbe\u200b\uff09\u3002
Markov\u200b\u56e0\u5b50\u200b\u5206\u89e3\u200b
\u200b\u5f53\u200bMarkov\u200b\u5047\u8bbe\u200b\u6210\u7acb\u200b\u65f6\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\\(n\\)\u200b\u4e2a\u200b\u53d8\u91cf\u200b\\(X_1, \\ldots, X_n\\)\uff0c\u200b\u6709\u200b
\\[ \\bbP(X_1, \\ldots, X_n) = \\prod_{i=1}^n \\bbP(X_i | A_i) \\] \u200b\u5f0f\u200b\u4e2d\u200b\uff0c\\(A_i\\)\u200b\u4e3a\u200b\\(X_i\\)\u200b\u5168\u90e8\u200b\u7684\u200b\u7956\u5148\u200b\u3002
"},{"location":"math/causal-inference/causal-inference-stale/#d-","title":"d-\u200b\u5206\u5272","text":"\u200b\u5bf9\u4e8e\u200b\u6709\u200b\u4e24\u4e2a\u200b\u8282\u70b9\u200b\u7684\u200b\u56e0\u679c\u200b\u56fe\u200b\uff0c\\(X_1\\la X_2\\)\u200b\u548c\u200b\\(X_1\\ra X_2\\)\u200b\u662f\u200b\u4e24\u4e2a\u200b\u4e0d\u540c\u200b\u7684\u200b\u56e0\u679c\u5173\u7cfb\u200b\uff0c\u200b\u4f46\u200b\u5728\u200b\u76f8\u5173\u6027\u200b\u4e0a\u200b\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u8868\u73b0\u200b\uff0c\u200b\u65e0\u6cd5\u200b\u533a\u5206\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u6709\u200b\u4e09\u4e2a\u200b\u8282\u70b9\u200b\u7684\u200b\u56e0\u679c\u200b\u56fe\u200b\uff1a
- \\(X_1\\ra X_2\\ra X_3\\)\u200b\u548c\u200b\\(X_1\\la X_2\\ra X_3\\)\u200b\u662f\u200b\u4e24\u4e2a\u200b\u4e0d\u540c\u200b\u7684\u200b\u56e0\u679c\u5173\u7cfb\u200b\uff0c\u200b\u4f46\u200b\u5b83\u4eec\u200b\u90fd\u200b\u6ee1\u8db3\u200b\\(X_1\\perp X_3 | X_2, X_1\\not\\perp X_3\\)\uff0c\u200b\u4ecd\u7136\u200b\u65e0\u6cd5\u200b\u533a\u5206\u200b\u3002\u200b\u5e76\u4e14\u200b\u7531\u4e8e\u200b\u53d8\u91cf\u200b\\(X_2\\)\u200b\u7684\u200b\u5b58\u5728\u200b\uff0c\u200b\u5373\u4f7f\u200b\\(X_1, X_3\\)\u200b\u5b58\u5728\u200b\u76f8\u5173\u200b\u5173\u7cfb\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u80fd\u200b\u8bf4\u660e\u200b\u5176\u200b\u5b58\u5728\u200b\u76f4\u63a5\u200b\u6216\u200b\u95f4\u63a5\u200b\u7684\u200b\u56e0\u679c\u5173\u7cfb\u200b\u3002\u200b\u63a7\u5236\u200b\\(X_2\\)\u200b\u53ef\u4ee5\u200b\u963b\u65ad\u200b\\(X_1, X_3\\)\u200b\u7684\u200b\u56e0\u679c\u200b\u94fe\u200b\u3002
- \u200b\u5bf9\u4e8e\u200b\\(\\X_1\\ra X_2\\la X_3\\)\uff0c\u200b\u5982\u679c\u200b\u63a7\u5236\u200b\\(X_2\\)\uff0c\u200b\u5219\u200b\u6709\u200b\\(X_1\\not \\perp X_3 | X_2\\)\uff0c\u200b\u4f46\u200b\\(X_1\\perp X_3\\)\u3002\\(X_2\\)\u200b\u963b\u65ad\u200b\u4e86\u200b\\(X_1, X_3\\)\u200b\u7684\u200b\u56e0\u679c\u200b\u94fe\u200b\u3002
- \u200b\u5982\u679c\u200b\u6709\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\\(X_4\\)\u200b\u6ee1\u8db3\u200b\\(X_2\\ra X_4\\)\uff0c\u200b\u5219\u200b\u63a7\u5236\u200b\\(X_4\\)\u200b\u4e5f\u200b\u4f1a\u200b\u4f7f\u200b\\(X_1, X_3\\)\u200b\u8868\u73b0\u200b\u51fa\u200b\u76f8\u5173\u200b\uff0c\u200b\u5373\u200b\\(X_1\\not \\perp X_3 | X_4\\)\u3002
\u200b\u963b\u65ad\u200b\u56e0\u679c\u200b\u94fe\u200b
\u200b\u4e24\u4e2a\u200b\u53d8\u91cf\u200b\u4e4b\u95f4\u200b\u7684\u200b\u8def\u5f84\u200b\u5982\u679c\u200b\u6ee1\u8db3\u200b\u4e0b\u5217\u200b\u4e4b\u4e00\u200b\uff0c\u200b\u5219\u200b\u56e0\u679c\u5173\u7cfb\u200b\u4e0d\u80fd\u200b\u901a\u8fc7\u200b\u8fd9\u200b\u6761\u200b\u8def\u5f84\u200b\uff08\u200b\u88ab\u200b\u963b\u65ad\u200b\uff09\u3002
- \u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u6ca1\u6709\u200b\u88ab\u200b\u63a7\u5236\u200b\u7684\u200b\u6c47\u805a\u200b\u8282\u70b9\u200b\uff1b
- \u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u88ab\u200b\u63a7\u5236\u200b\u7684\u200b\u975e\u200b\u6c47\u805a\u200b\u8282\u70b9\u200b\u3002
\u200b\u5982\u679c\u200b\u4e24\u4e2a\u200b\u53d8\u91cf\u200b\u4e4b\u95f4\u200b\u7684\u200b\u6240\u6709\u200b\u8def\u5f84\u200b\u90fd\u200b\u88ab\u200b\u963b\u65ad\u200b\uff0c\u200b\u5219\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u53d8\u91cf\u200b\u88ab\u200b\u5206\u5272\u200b\u3002
\u200b\u4e00\u822c\u200b\u5b9a\u4e49\u200b\u88ab\u200b\u63a7\u5236\u200b\u7684\u200b\u53d8\u91cf\u200b\u96c6\u5408\u200b\u4e3a\u200b\\(Z\\)\u3002\u200b\u5982\u679c\u200b\u56e0\u679c\u200b\u56fe\u200b\\(\\calG\\)\u200b\u4e2d\u200b\uff0c\u200b\u63a7\u5236\u53d8\u91cf\u200b\\(Z\\)\u200b\u5c06\u200b\u56e0\u679c\u200b\u56fe\u200b\u5206\u4e3a\u200b\u4e86\u200b\u4e24\u4e2a\u200b\u90e8\u5206\u200b\uff0c\u200b\u5219\u200b\u8fd9\u200b\u4e24\u4e2a\u200b\u90e8\u5206\u200b\\(X, Y\\)\u200b\u6784\u6210\u200b\u4e86\u200b\u56e0\u679c\u200b\u56fe\u200b\u7684\u200b\u4e00\u4e2a\u200bd-\u200b\u5206\u5272\u200b\uff0c\u200b\u5373\u200b\\(X\\perp_\\calG Y | Z\\)\u3002\u200b\u8fdb\u4e00\u6b65\u200b\u5730\u200b\uff0c\u200b\u5982\u679c\u200b\u6ee1\u8db3\u200b Markov \u200b\u5047\u8bbe\u200b\uff0c\u200b\u5219\u200b\\(X\\)\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u53d8\u91cf\u200b\u548c\u200b\\(Y\\)\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u53d8\u91cf\u200b\u72ec\u7acb\u200b\u3002
\u200b\u4f46\u662f\u200b\u53d8\u91cf\u200b\u72ec\u7acb\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u80fd\u200b\u5bfc\u51fa\u200bd-\u200b\u5206\u5272\u200b\uff0c\u200b\u7531\u6b64\u200b\u5f97\u5230\u200b faithfulness assumption
faithfulness assumption
\u200b\u5bf9\u4e8e\u200b\u56e0\u679c\u200b\u56fe\u200b\\(\\calG\\)\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u4e92\u4e0d\u200b\u76f8\u4ea4\u200b\u7684\u200b\\(X, Y, Z\\)\u200b\u4e14\u200b\\(X\\perp Y | Z\\)\uff0c\u200b\u5219\u200b\\(X, Y\\)\u200b\u6784\u6210\u200b\u4e00\u4e2a\u200bd-\u200b\u5206\u5272\u200b\u3002
\u200b\u5728\u200b Markov \u200b\u5047\u8bbe\u200b\u548c\u200b faithfulness \u200b\u5047\u8bbe\u200b\u6210\u7acb\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0cd-\u200b\u5206\u5272\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u53d8\u91cf\u200b\u72ec\u7acb\u200b\u3002
"},{"location":"math/causal-inference/causal-inference-stale/#_5","title":"\u76f8\u5173\u6027\u200b\u4e0e\u200b\u56e0\u679c\u6027\u200b\u7684\u200b\u8def\u5f84","text":"\u200b\u5728\u200b\u56e0\u679c\u200b\u56fe\u4e0a\u200b\uff1a
- \u200b\u76f8\u5173\u6027\u200b\u6cbf\u200b\u8def\u5f84\u200b\u6d41\u52a8\u200b
- \u200b\u56e0\u679c\u6027\u200b\u6cbf\u6709\u200b\u5411\u200b\u8def\u5f84\u200b\u6d41\u52a8\u200b
\u200b\u5982\u679c\u200b\u963b\u65ad\u200b\u4e86\u200b\u6240\u6709\u200b\u975e\u200b\u56e0\u679c\u6027\u200b\u7684\u200b\u8def\u5f84\u200b\uff0c\u200b\u5219\u200b\u4e24\u4e2a\u200b\u53d8\u91cf\u200b\u4e4b\u95f4\u200b\u5b58\u5728\u200b\u56e0\u679c\u5173\u7cfb\u200b\u3002
do\u200b\u7b97\u5b50\u200b
\u200b\u5728\u200b\u56e0\u679c\u200b\u56fe\u4e2d\u200b\uff0c\u200b\u5bf9\u200b\u4e00\u4e2a\u200b\u53d8\u91cf\u200b\u7684\u200b\u5e72\u9884\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u963b\u65ad\u200b\u6240\u6709\u200b\u6307\u5411\u200b\u8be5\u200b\u53d8\u91cf\u200b\u7684\u200b\u8fb9\u200b\u5b9e\u73b0\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\mathrm {do}(\\cdot)\\)
\u200b\u975e\u200b\u56e0\u679c\u200b\u7684\u200b\u8def\u5f84\u200b\u6709\u200b\u4e24\u4e2a\u200b\u6765\u6e90\u200b\uff1a
- \u200b\u6ca1\u6709\u200b\u63a7\u5236\u200b\u5206\u652f\u200b\u53d8\u91cf\u200b\uff0c\u200b\u5373\u200b confounding bias
- \u200b\u63a7\u5236\u200b\u4e86\u200b\u6c47\u805a\u200b\u53d8\u91cf\u200b\uff0c\u200b\u5373\u200b selection bias
"},{"location":"math/causal-inference/causal-inference-stale/#confounding","title":"Confounding \u200b\u4e0e\u200b\u540e\u95e8\u200b\u8c03\u6574","text":"Confounding \u200b\u6307\u200b\u56e0\u679c\u200b\u8def\u5f84\u200b\u7684\u200b\u8d77\u59cb\u200b\u548c\u200b\u7ec8\u7ed3\u200b\u53d8\u91cf\u200b\u90fd\u200b\u53d7\u5230\u200b\u540c\u4e00\u4e2a\u200b\u6df7\u6dc6\u200b\u56e0\u5b50\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u540e\u95e8\u200b\u8c03\u6574\u200b\u6d88\u9664\u200b\u5f71\u54cd\u200b\u3002
"},{"location":"math/causal-inference/chapter-1/","title":"A Definition of Causal Effect","text":"Key concepts: treatment, outcome, average causal effect, potential outcome, consistency, causation-association difference, identifiability
"},{"location":"math/causal-inference/chapter-1/#treatment-and-outcome","title":"Treatment and Outcome","text":"We want to compare the result when a specified action is or is not applied to an individual. The action is called a treatment, and the result is called an outcome, which are denoted by \\(A\\) and \\(Y\\) respectively. Usually we take \\(A\\) and \\(Y\\) to be both binary.
The outcome under a specified treatment \\(A = a\\) is denoted by \\(Y^{A = a}\\). In reality, we can only observe one value of \\(Y^{A = 1}\\) or \\(Y^{A = 0}\\) for each individual. Each \\(Y^{A = a}\\) is called a potential outcome. If \\(A = a\\) is observed, \\(Y^{A = a}\\) is factual, and \\(Y^{A = 1 - a}\\) is counterfactual. The probability of potential outcome \\(Y = 1\\) is called risk.
Consistency assumption
If \\(A = a\\) is observed, then \\(Y = Y^{A = a}\\).
"},{"location":"math/causal-inference/chapter-1/#causal-effects","title":"Causal Effects","text":"Identifiability
A quantity is identifiable if it can be expressed (unbiasedly) as a function of the distribution of the observed data.
Before we clarify the definition of causal effect, we need to make some assumptions on individual outcome.
No interference assumption
The potential outcome under \\(A = a\\) does not depend on the treatment of other individuals (i.e. no interference).
"},{"location":"math/causal-inference/chapter-1/#individual-causal-effect","title":"Individual Causal Effect","text":"If for individual \\(i\\), \\(Y_i^{A = 1} \\not = Y_i^{A = 0}\\), then we say that the treatment has a causal effect for individual \\(i\\).
"},{"location":"math/causal-inference/chapter-1/#average-causal-effect","title":"Average Causal Effect","text":"The average causal effect is defined as
\\[ P(Y^{A = 1} = 1) - P(Y^{A = 0} = 1) \\] or
\\[ E(Y^{A = 1}) - E(Y^{A = 0}) \\] The two forms of average causal effect are equivalent. We can test average causal effect by testing the causal null hypothesis \\(H_0: P(Y^{A = 1} = 1) = P(Y^{A = 0} = 1)\\). However, the absence of average causal effect does not imply the absence of individual causal effect. We call the null hypothesis \\(H_0: \\forall i, Y_i^{a = 1} = Y_i^{a = 0}\\) as sharp causal null hypothesis.
"},{"location":"math/causal-inference/chapter-1/#functional-causal-effect","title":"Functional Causal Effect","text":"We can measure the outcome \\(Y\\) over a function \\(f(y)\\). For example \\(V(Y^{a = 1}) - V(Y^{a = 0})\\) as the causal effect on sample variance. Notice that \\(V(Y^{a = 1}) - V(Y^{a = 0})\\) usually does not equal to \\(V(Y^{a = 1} - Y^{a = 0})\\).
"},{"location":"math/causal-inference/chapter-1/#measuring-causal-effects","title":"Measuring Causal Effects","text":"The causal null hypothesis can be written as
- Difference: \\(H_0: P(Y^{a = 1} = 1) - P(Y^{a = 0} = 1) = 0\\)
- Ratio: \\(H_0: \\frac{P(Y^{a = 1} = 1)}{P(Y^{a = 0} = 1)} = 1\\)
- Odds ratio: \\(H_0: \\frac{P(Y^{a = 1} = 1) / P(Y^{a = 1} = 0)}{P(Y^{a = 0} = 1) / P(Y^{a = 0} = 0)} = 1\\)
When \\(H_0\\) is rejected, we can use number needed to treat (NNT) to measure the strength of causal effect. NNT is defined as the number of individuals needed to be treated to prevent one additional bad outcome. NNT is given by:
\\[ \\text{NNT} = \\frac{-1}{P(Y^{a = 1} = 1) - P(Y^{a = 0} = 1)} \\]"},{"location":"math/causal-inference/chapter-1/#random-variability","title":"Random Variability","text":"In reality, we can only collect a sample of individuals in the population, and our estimate on causal effect suffers from random variability.
- Sampling variablility: We use \\(\\hat P(Y^{a = 1} = 1) = N(Y^{a = 1}) / N(Y)\\) as an estimator of \\(P(Y^{a = 1} = 1)\\). The estimator suffers from random variability.
- Potential outcomes are usually not deterministic, which makes another source of random variability.
"},{"location":"math/causal-inference/chapter-1/#causation-and-association","title":"Causation and Association","text":"In the real world, we can only observe one potential outcome for each individual. Therefore, we cannot directly measure the outcome \\(P(Y^{a = 1} = 1)\\) and \\(P(Y^{a = 0} = 1)\\). Instead, we can only use \\(P(Y = 1 | A = 1)\\) and \\(P(Y = 1 | A = 0)\\) as estimators.
Like the causal null hypothesis, we can also define the independent (\\(A\\perp Y\\)) null hypothesis in three forms:
- Risk difference: \\(H_0: P(Y = 1 | A = 1) - P(Y = 1 | A = 0) = 0\\)
- Risk ratio: \\(H_0: \\frac{P(Y = 1 | A = 1)}{P(Y = 1 | A = 0)} = 1\\)
- Odds ratio: \\(H_0: \\frac{P(Y = 1 | A = 1) / P(Y = 0 | A = 1)}{P(Y = 1 | A = 0) / P(Y = 0 | A = 0)} = 1\\)
Notice that any terms in the form of conditional probability or expectation are associations. Only marginal probability or expectation can be causal effects, since the marginal probability takes all other factors into consideration.
"},{"location":"math/causal-inference/chapter-2/","title":"Randomized Experiments","text":"Key concepts: random experiment, exchangeability, effect modification
"},{"location":"math/causal-inference/chapter-2/#randomized-experiments_1","title":"Randomized Experiments","text":"Consider the following treatment assignment:
Assume that the treatment assignment is determined by a random procedure, the experiment is called a random experiment. Then exchanging the individual in treated group with those in control group will not affect the association measure.
If a random experiment satisfies the following conditions, it is called an ideal randomized experiment:
- Full adherence: All individuals follow the treatment assignment.
- No loss to follow-up: All individuals are followed up and their outcomes are observed.
- Single treatment: Each individual is assigned to one treatment only.
- Double-blind assignment: The treatment assignment is unknown to both the individuals and the researchers.
If all the possible values of treatment variable \\(A = a\\) are sequentially assigned to individuals, the experiment is called crossover experiment. Individual causal effects can be estimated using crossover experiments if the following conditions are met:
- No carryover effect: The treatment effect of \\(a\\) does not depend on the previous treatments.
- The individual causal effect \\(\\alpha_i = Y^{a_t = 1}_{it} - Y^{a_t = 0}_{it}\\) does not depend on time.
- The potential outcome under no treatment does not depend on time.
By assigning the treatment value sequence randomly, we can remove the required conditiona 3. In such case:
\\[ (Y_{i1} - Y_{i0})A_{i1} - (Y_{i0} - Y_{i1})A_{i0} \\] estimates the individual causal effect \\(E(\\alpha_i)\\) under condition 2. If condition 2 is not met, the estimator estimates \\(E(\\alpha_{i0} + \\alpha_{i1}) / 2\\).
"},{"location":"math/causal-inference/chapter-2/#exchangeability","title":"Exchangeability","text":"Exchangeability
- (Full) exchangeability indicates that swapping the treatment assignment of two individuals does not affect the association measure, or \\(Y^a \\perp A\\).
- Mean exchangeability indicates that \\(\\forall a', E(Y^a | A = a') = E(Y^a)\\), or the expectation of switched potential outcome is the same as the original one.
When \\(Y\\) and \\(A\\) are binary, full exchangeability is equivalent to mean exchangeability. Mean exchangeability is sufficient for deriving \\(E(Y^a) = E(Y | A = a)\\).
Exchangeability indicates that all the potential outcome and the treatment assignment are independent, i.e. \\(\\forall a, Y^{A = a} \\perp A\\), or the treatment assignment is exogenous. Under exchangeability, \\(P(Y = 1 | A = a)\\) is an unbiased estimator of \\(P(Y^{a} = 1)\\).
\\(Y^a\\perp A\\) and \\(Y\\perp A\\)
Notice that \\(Y^a \\perp A\\) is not equivalent to \\(Y \\perp A\\). The latter indicates that treatment \\(A\\) does not have any causal effect on the outcome \\(Y\\). If \\(\\forall a, E(Y^a) = E(Y)\\), then \\(Y\\perp A\\).
Notice that a randomized experiment could be unexchangeable even if infinite samples are collected.
"},{"location":"math/causal-inference/chapter-2/#conditional-randomization","title":"Conditional Randomization","text":"Consider an additional factor \\(L\\) affects the assignment of treatments, i.e., when \\(L\\) takes different values, the distribution of \\(A\\) is different. Such a randomized experiment is called conditional randomized experiment. In a conditional randomized experiment, the corresponding randomized experiment using the overall distribution of \\(A\\) is called marginally randomized experiment.
Although the marginally randomized experiment is exchangeable, the conditional randomized experiment is not exchangeable in general. Only conditional exchangeability holds in such randomized experiments, i.e. \\(\\forall a, Y^a \\perp A | L\\).
We can measure the causal effects on sub-groups \\(P(Y^{a = 1} = 1 | L = l) - P(Y^{a = 0} = 1 | L = l)\\) using conditional exchangeability (stratification) or directly measure the overall causal effect \\(P(Y^{a = 1} = 1) - P(Y^{a = 0} = 1)\\) on the population using marginal exchangeability. For different sub-groups, the causal effects may be different, which is called effect modification or treatment effect heterogeneity.
Stratification
Stratification is to split the population into mutually exclusive sub-groups in which the treatment assignment is exchangeable. The causal effect can be estimated in each sub-group.
"},{"location":"math/causal-inference/chapter-2/#standardization","title":"Standardization","text":"We can view the marginal risk as a weighted average of the conditional risks:
\\[ P(Y^a = 1) = \\sum_{l\\in \\calL} P(Y^a = 1 | L = l) P(L = l) \\] With conditional exchangeability holds, we can derive that \\(P(Y^a = 1) = \\sum_{l\\in \\calL} P(Y = 1 | A = a, L = l) P(L = l)\\), which is called standardization, making the unobserved potential outcome \\(P(Y^a = 1)\\) to be identifiable.
"},{"location":"math/causal-inference/chapter-2/#inverse-probability-weighting","title":"Inverse Probability Weighting","text":"Notice that
\\[ P(A = a | L = l) = \\frac{P(A = a, L = l)}{P(L = l)} \\] We can assign the weight \\(w_l = \\frac{1}{P(A = a | L = l)}\\) to each individual with \\(L = l\\) to construct a pseudo-population. The pseudo-population satisfies exchangeability, and we can use the pseudo-population to estimate the causal effect. The IP weighted mean of outcome \\(Y\\) is \\(E\\left( I(A = a) Y / P(A = a | L)\\right)\\), where \\(I(A = a)\\) is the indicator function.
Assuming that \\(\\forall l, P(A = a | L = l) > 0\\), we can derive that
\\[ \\begin{aligned} & E\\left( \\frac{I(A = a) Y}{P(A = a | L)}\\right) \\\\ =& \\sum_{l} \\frac{E\\left( I(A = a) Y | L = l\\right) P(L = l)}{P(A = a | L = l)} \\\\ =& \\sum_{l} \\frac{E\\left( Y | A = a, L = l\\right) P(A = a | L = l)P(L = l)}{P(A = a | L = l)} \\\\ =& \\sum_{l} E\\left( Y | A = a, L = l\\right) P(L = l) \\\\ =& \\sum_{l} E(Y^a | L = l) P(L = l) \\\\ =& E(Y^a) \\end{aligned} \\] Therefore, under positivity assumption, IP weighting is equivalent to standardization.
Positivity
For any individual in any sub-group \\(l\\) has a non-zero probability of receiving treatment \\(a\\), i.e. \\(\\forall l, \\forall a, P(A = a | L = l) > 0\\).
"},{"location":"math/causal-inference/chapter-3/","title":"Observational Studies","text":"In an observational study, the variables are neither assigned nor controlled by the researcher. The researcher only observes the values of the variables. Compared with randomized experiments, observational studies are more limited to the researchers.
"},{"location":"math/causal-inference/chapter-3/#identifiability-conditions","title":"Identifiability Conditions","text":"If the following identifiability conditions are met, the observational study can be regarded as a conditionally randomized experiment.
Identifiability condition
- Consistency: The values of treatment under comparison correspond to well-defined interventions that, in turn, correspond to the versions of treatment in the data.
- Exchangeability: The conditional probability of receiving any value of treatment depends only on observed covariates \\(L\\).
- Positivity: The probability of receiving any value of treatment is strictly positive for all combinations of covariates \\(L\\).
If the identifiability conditions are not met, we can use other methods including instrumental variable to establish another group of identifiability condition.
"},{"location":"math/causal-inference/chapter-3/#exchangeability","title":"Exchangeability","text":"In observational studies, the exchangeablitiy condition may or may not hold, as the observed \\(L\\) may not be the only predictor of the treatment. The true predictor may even be unobserved or unobservable.
Exchangeability is given by
\\[ Y^a \\perp A \\mid L \\Longleftrightarrow \\forall a, P(Y^a = 1 \\mid A = a, L = l) = P(Y^a = 1\\mid A \\not = a, L = l) \\] However, in observational studies, \\(P(Y^a = 1\\mid A\\not = a, L = l)\\) is unidentifiable. Thus, the exchangeablitiy cannot be empirically verified.
"},{"location":"math/causal-inference/chapter-3/#positivity","title":"Positivity","text":"To measure causal effects, we need to measure the distribution of outcome under treatment and under no treatment. That is, in the whole sample or any observed subgroup, the probability of receiving any value of treatment should be strictly positive, which is called positivity. Notice that positivity is only required for these observed covariates that requires exchangeability.
Standardization and IP weighting are meaningful only if positivity holds.
IP weighting without positivity
If positivity does not hold, IP weighting is undefined since the denominator in
\\[ E\\left[\\frac{I(A = a)Y}{P(A = a | L)}\\right] \\] is zero. However, the IP weighted mean is still defined.
\\[ E\\left[\\frac{I(A = a)Y}{N(A = a, L) / N(L)}\\right] \\] Notice that \\(N(A = a, L) / N(L)\\) is defined on observed data. Let \\(Q(a) = \\{l | N(A = a, L) / N(L) > 0\\}\\). Now, \\(E\\left[\\frac{I(A = a)Y}{N(a, L) / N(L)}\\right] = E[Y^a | L \\in Q(a)]P(L\\in Q(a))\\) is a biased estimator of \\(E[Y^a]\\).
When positivity does not hold, then \\(Q(0) \\not = Q(1)\\), under this condition, the difference between IP weighted means (\\(E\\left[\\frac{I(A = 1)Y}{N(A = 1, L) / N(L)}\\right] - E\\left[\\frac{I(A = 0)Y}{N(A = 0, L) / N(L)}\\right]\\)) cannot be interpreted causally.
"},{"location":"math/causal-inference/chapter-3/#consistency","title":"Consistency","text":"Consider the following examples in heart transplant studies:
- Two patients received heart transplants performed by different surgeons.
- Two patients received heart transplants performed under different procedures.
Due to the complexity of real-world situations, we always need to aggregate the different treatments into a single treatment value. The map between discrete values of the treatment variable and real-world intervention is called treatment protocol. The first step for investigating the causal effect is to precisely specify the treatment protocol, so that any variation regarded as treatment will lead to the same outcome, or treatment variation irrelevance. Under this condition can we define the potential outcome under the specified treatment value. In addition, the treatment protocol of interest and the treatment protocol of the observed data should be the same.
Under the treatment variation irrelevance, we can define the potential outcome \\(Y^a\\).
Treatment variation irrelevance
Suppose that receiving heart transplant is denoted as \\(a\\), the heart transplant is performed by Alex and Bob. But the treatment protocol is observed as the heart transplant is performed by Alex. Then, the treatment variation irrelevance is violated and consistency assumption \\(Y = Y^{a = 1}\\) does not hold.
"},{"location":"math/causal-inference/chapter-3/#target-trial","title":"Target Trial","text":"Under the identifiability conditions, we can regard the observational study as a conditionally randomized experiment. The equivalent hypothetical, randomized experiment is called target trial.
"},{"location":"math/causal-inference/chapter-4/","title":"Effect Modification","text":"A null average causal effect does not imply a null average causal effect for a subset of the population. A variable \\(V\\) is an effect modifier if the average causal effect of \\(A\\) on \\(Y\\) differs across levels of \\(V\\).
An effect modifier does need to directly have causal relationship with the different causal effect. If the difference in causal effects can be interpreted causally, the variable is a causal effect modifier, otherwise it is a surrogate effect modifier.
Effects in the treated
Notice the treatment variable itself can be regarded as a subgroup. The average causal effect in the treated is measured on subgroup \\(A = 1\\).
\\[ P(Y^{a = 1} = 1 | A = 1) - P(Y^{a = 0} = 1 | A = 1) \\] - If the distribution of individual causal effects varies between the treated and untreated, the average causal effect in the treated is not equal to the average causal effect in the population.
- \\(P(Y^{a = 0} = 1 | A = 1)\\) is unidentifiable. Estimating \\(P(Y^{a = 0} = 1 | A = 1)\\) requires partial exchangeability \\(Y^{a = 0} \\perp A \\mid L\\).
- Following the definition of effects in the treated, we can define effects in the untreated, which is defined on subgroup \\(a = 0\\). Effects in the untreated requires partial exchangeability \\(Y^{a = 1} \\perp A \\mid L\\).
The counterfactual \\(P(Y^{a} = 1 | A = a')\\) can be estimated using standardization or IP weighting.
- Standardization: \\(P(Y^{a} = 1 | A = a') = \\sum_{l} P(Y = 1 | A = a, L = l) P(L = l | A = a')\\)
- IP weighting: \\(P(Y^{a} = 1 | A = a') = E\\left[\\frac{I(A = a)Y}{f(A | L)P(A = a' | L)}\\right]/E\\left[\\frac{I(A = a)}{f(A | L)P(A = a' | L)}\\right]\\)
The extrapolation of computed causal effects across populations are called transportability. Transportability is an unverifiable assumption. If the effect modification measure, version of treatment and the in-group interference are similar, we can assume transportability.
From effect modification, we can identify the subgroup that benefits most from the treatment or intervention. Moreover, effect modification helps us to learn underlying mechanisms of the outcome.
"},{"location":"math/causal-inference/chapter-4/#effect-modification-vs-prognostic-factor","title":"Effect Modification v.s. Prognostic Factor","text":"When marginal randomization does not hold, there exists a prognostic factor \\(L\\) is a variable that affect the treatment assignment, while an effect modifier \\(V\\) affects the effect. To estimate causal effects in such conditions, extra adjustments are required
"},{"location":"math/causal-inference/chapter-4/#stratification","title":"Stratification","text":"Stratification can be used to adjust the marginal causal effect of \\(A\\) on \\(V\\). However, it requires to take all the combinations of \\(V\\) and \\(L\\) into account. And stratification requires positivity condition to be met on \\(L\\).
Using stratification, we can yield the conditional causal effect of \\(A\\) on \\(Y\\) for each stratum. The per-stratum causal effect can be further weighted to get a pooled causal effect.
Notice that stratification will introduce sampling variability when the stratification is getting finer.
"},{"location":"math/causal-inference/chapter-4/#matching","title":"Matching","text":"Matching strategy is similar but inversed approach to IP weighting.
The goal of matching is to construct a subset of the population in which the distribution of \\(L\\) is similar between the treated and untreated by sampling in the treated part or untreated part. Stratas with only treated or untreated individuals are excluded.
Usually, the group with more individuals between the treated and untreated is sampled to match the other group. The subgroup being matched is used to calculate the average effect in the treated or untreated.
However, as matching changes the distribution of \\(L\\), the distribution of causal modifier \\(V\\) will also be changed.
"},{"location":"math/causal-inference/chapter-4/#overview-of-adjustment-methods","title":"Overview of Adjustment Methods","text":"There are 4 methods to adjust the causal effect of \\(A\\) on \\(Y\\), including standardization, IP weighting, matching and stratification.
- Standardization and IP weighting can be used to compute marginal or conditional causal effects.
- Matching and stratification can be used to compute conditional causal effects in subgroups.
- With effect modification, the causal effect of different adjustment methods may be different.
"},{"location":"math/causal-inference/chapter-5/","title":"Interaction","text":"This chapter considers a system that consists multiple treatment variables.
"},{"location":"math/causal-inference/chapter-5/#from-joint-intervention-to-interaction","title":"From Joint Intervention to Interaction","text":"Intervention is to manually set the value of treatment variable ignoring the original distribution of the variable. Intervention on multiple variables are called joint intervention.
Let the treatment variable be \\(A\\) and \\(B\\). If the causal effect (measured in risk difference) of treatment \\(A\\) is different with different values of \\(B\\), then \\(B\\) has an additive interaction on \\(A\\). Notice that \\(B\\) has an interaction on \\(A\\) is equivalent to \\(A\\) has an interaction on \\(B\\).
\\[ P(Y^{a = 1, b = 1} = 1) - P(Y^{a = 0, b = 1} = 1) \\not = P(Y^{a = 1, b = 0} = 1) - P(Y^{a = 0, b = 0} = 1) \\] Superadditive and subadditive
Rewrite the above inequality as
\\[ \\begin{aligned} P(Y^{a = 1, b = 1} = 1) - P(Y^{a = 0, b = 0} = 1) &\\not = [P(Y^{a = 1, b = 1} = 1) - P(Y^{a = 0, b = 1} = 1)] \\\\ &+ [P(Y^{a = 1, b = 0} = 1) - P(Y^{a = 0, b = 0} = 1)] \\end{aligned} \\] If the \\(\\not =\\) can be replaced by \\(>\\) or \\(<\\), then the interaction is called superadditive or subadditive, respectively.
Similarly, if the causal effect (measured in risk ratio) of treatment \\(A\\) is different with different values of \\(B\\), or vice versa, then there is a multiplicative interaction between \\(A\\) and \\(B\\). If the \\(\\not =\\) can be replaced by \\(>\\) or \\(<\\), then the interaction is called supermultiplicative or submultiplicative, respectively.
\\[ \\frac{P(Y^{a = 1, b = 1} = 1)}{P(Y^{a = 0, b = 0} = 1)} \\not = \\frac{P(Y^{a = 1, b = 0} = 1)}{P(Y^{a = 0, b = 0} = 1)} \\times \\frac{P(Y^{a = 1, b = 1} = 1)}{P(Y^{a = 0, b = 1} = 1)} \\]"},{"location":"math/causal-inference/chapter-5/#idenfication-of-interactions","title":"Idenfication of Interactions","text":"To identify the interaction between \\(A\\) and \\(B\\), we need make sure that consistency, exchangeability, positivity for \\(A\\) is satisfied for all values of both \\(A\\) and \\(B\\).
Notice the difference between effect modification and interaction. If \\(B\\) is randomly assigned, then \\(B\\) interacts with \\(A\\) is equivalent to that \\(B\\) serves as an effect modifier for \\(A\\).
Effect modification v.s. interaction
In an interaction, the two variables are of equal status, we can intervene on either or both of them. In effect modification, one variable is the treatment and the other is the modifier, we can only intervene on the treatment variable.
For treatment variables, we need consistency, exchangeability, positivity. But such conditions are not required for modifier variables.
"},{"location":"math/causal-inference/chapter-5/#response-type","title":"Response Type","text":"For each individual, the potential outcome pattern for receiving different levels of treatment is called response type.
For binary outcome and one binary treatment, there are \\(2^{2^1} = 4\\) response types. For binary outcome and two binary treatments, there are \\(2^{2 ^ 2} = 16\\) response types.
Monotonicity
For a response type, when treatment variables except \\(A\\) are fixed, if \\(Y^{a = 1} \\geq Y^{a = 0}\\), then the causal effect of \\(A\\) on \\(Y\\) is monotonic.
"},{"location":"math/causal-inference/chapter-5/#sufficient-cause-interaction","title":"Sufficient Cause Interaction","text":"Consider the mechanism of yielding certain outcome by controlling one binary treatment variable \\(A\\). There are three types of mechanisms to inevitably yield the outcome.
- With treatment \\(A\\).
- Without treatment \\(A\\).
- \\(A\\) is irrelevant to the outcome.
Since the outcome is stochastic, there exists some unknown factors \\(U_1, U_2, U_0\\) that leads to the outcome, respectively. For example, we can say \\(\\{A = 1, U_1 = 1\\}, \\{A = 0, U_2 = 1\\}\\) or \\(\\{U_3 = 1\\}\\) are sufficient-component causes for the outcome.
For models with \\(k\\) binary treatment variables, there are \\(3^k\\) possible mechanisms. If any individual \\(U_i = 1\\) corresponds to multiple variables exists, then there exists sufficient cause interaction among these variables.
Let \\(k = 2\\) and the treatment variables be \\(A, B\\), respectively. The sufficient cause interaction is synergistic if \\(A = 1, B = 1\\) is a sufficient-component cause for the outcome. The sufficient cause interaction is antagonistic if \\(A = 1, B = 0\\) or \\(A = 0, B = 1\\) are sufficient-component causes for the outcome.
When monotonicity holds, some sufficient causes are not possible.
"},{"location":"math/causal-inference/chapter-5/#summary","title":"Summary","text":"Sufficient-component-cause framework and the counterfactual framework focus on different interaction questions:
- Sufficient-component-cause framework focuses on the causal mechanism (reason) of the outcome.
- Counterfactual framework focuses on the causal effect of the treatment.
"},{"location":"math/causal-inference/chapter-6/","title":"Graphical Representation of Causal Effects","text":"A causal graph consists the following elements:
- Nodes in causal graphs represent random variables.
- Edges in causal graphs represent direct causal effects.
- A trail is a sequence of edges that does not meet the same node twice.
- A path is a trail that all the edges are pointing in the same direction.
- Conventionally, time flows from left to right in causal graphs.
- Causal graphs follow the properties of Bayesian networks (acyclic, markov factorization).
Markov Factorization
The joint distribution of a set of random variables can be factorized into a product of conditional distributions of each variable given its parents in the graph.
\\[ P(X_1, \\dots, X_n) = \\prod_{i=1}^n P(X_i \\mid \\text{Pa}(X_i)) \\] where \\(\\text{Pa}(X_i)\\) is the set of parents of \\(X_i\\).
Markov factorization is equivalent to the following local independence property:
\\[ X_i \\perp \\text{ND}(X_i) \\mid \\text{Pa}(X_i) \\] where \\(\\text{ND}(X_i)\\) is the set of non-descendants of \\(X_i\\).
A causal graph contains the following building blocks: fork, chain, collider.
"},{"location":"math/causal-inference/chapter-6/#d-seperation-and-independence","title":"D-seperation and Independence","text":"Conditional independence relations are encoded in the graph structure.
"},{"location":"math/causal-inference/chapter-6/#blocked-trails-and-d-seperation","title":"Blocked Trails and D-seperation","text":"Trails in causal graphs are regarded as blocked or open according to the following rules:
- If there are no nodes being observed, a path is blocked if and only if there exists one or more colliders on the path.
- If the trail contains a non-collider that is observed, the trail is blocked.
- A collider which is observed does not block the trail.
- A collider which any of its descendants is observed does not block the trail.
A trail is blocked if it satisfies any of the following conditions:
- There exists a collider on the trail that itself or all of its descendants are not observed.
- There exists a non-collider on the trail that is observed.
If all possible trails between two nodes \\(X, Y\\) are blocked \\(Z\\), the two nodes are d-separated. D-separated nodes are conditionally independent given the observed nodes, i.e., \\(X \\perp Y \\mid Z\\).
Faithfulness assumption
Faithfulness assumptions states that the observed conditional independence relations are consistent with the graph structure. That is: observed conditional independence \\(X \\perp Y \\mid Z\\) implies that \\(X\\) and \\(Y\\) are d-separated given \\(Z\\) in the graph.
"},{"location":"math/causal-inference/chapter-6/#flows-of-association-and-causation","title":"Flows of Association and Causation","text":"If two nodes are not d-separated, there exists at least one open trail between the nodes.
- Association flows along open trails.
- Causation flows along open paths.
There may be multiple trails and paths between two nodes, each trail provides a flow of association or causation. The overall observed association is affected by all the flows of association and causation. Existence of undesired flows of association may lead to lack of exchangeability and biased estimation of causal effects. If there are no flow of association between two nodes, the association is causal.
There two types of flows of association:
-
Common cause: two nodes are associated because they are both affected by a common cause.
-
Condition on common effect: two nodes are associated because they are both affecting an observed common effect.
Blocking a trail can be regarded as blocking the flow of association or causation on the graph.
"},{"location":"math/causal-inference/chapter-6/#hidden-properties","title":"Hidden Properties","text":"Causal graphs only encode conditional independence relations and flows of causation or association. Some properties or assumptions cannot be represent in causal graphs.
- Positivity: Positivity in causal graphs can be represented that all of the edges in the graph are not deterministic.
- Consistency: Consistency is implicitly assumed in causal graphs.
In a causal graph, the treatment node should lead to well-defined treatment.\\
"},{"location":"math/causal-inference/chapter-7/","title":"Confounding","text":"Confounding is a situation in which the effect of an exposure on an outcome is distorted by the presence of another variable that is associated with both the exposure and the outcome. The confounding effect is a non-causal association that leads to biased estimation of causal effect.
In a causal graph, the confounding effect is caused by an open backdoor path. A backdoor path is a non-path trail from treatment variable \\(A\\) to outcome variable \\(Y\\) that points to \\(A\\). The simplest structure of confounding contains a variable \\(L\\) pointing to treatment \\(A\\) and outcome \\(Y\\).
Suppose the causal graph is the true causal graph and satisfies faithfulness.
"},{"location":"math/causal-inference/chapter-7/#exchangeability","title":"Exchangeability","text":"Following the definition of backdoor path, the definition of confounding can be alternatively expressed as
Alternative definition of confounding
Confounding is any systematic bias that can be removed by randomized assignment of treatment \\(A\\) (eliminating the backdoor path).
When backdoor criterion is satisfied, exchangeability stands. The backdoor criterion requires on of the following:
- No confounding: no common cause of treatment \\(A\\) and outcome \\(Y\\).
- No unmeasured confounding: common cause of \\(A\\) and \\(Y\\) exists but a subset \\(L\\) of measured (observed) non-descendants of \\(A\\) blocks all the backdoor paths. The corresponding set \\(L\\) is called a sufficient set for confounding adjustment. Variable \\(L\\) is also called a confounder.
Unconditional causal effect can be measured when unconditional exchangeability is satisfied. Conditional causal effect can be measured when conditional exchangeability is satisfied. The following table shows causal graph structures holding different exchangeability. The conditioned variable is \\(L\\).
Causal identifiability table Unconditional exchangeable Not unconditional exchangeable Conditional exchangeable Not conditional exchangeable To identify conditional or unconditional causal effect, we can apply standardization on measured variables when conditional or unconditional exchangeability is satisfied. Take the following graph as an example.
When either \\(L_2\\) or \\(L\\) is observed, neither unconditional nor conditional exchangeability is satisfied. However, when both \\(L_2\\) and \\(L\\) are observed, both unconditional and conditional exchangeability is satisfied. We can identify the following causal effect based on observation.
- Conditional causal effect within strata of \\(L\\) and \\(L_2\\): \\(E[Y | A = a, L = l, L_2 = l_2]\\)
- Unconditional causal effect: \\(E[Y | A = a, L = l, L_2 = l_2]P(L_2 = l_2, L = l)\\)
- Conditional causal effect within strata of \\(L_2\\): \\(E[Y | A = a, L_2 = l_2, L = l]P(L = l | L_2 = l_2)\\)
- Conditional causal effect within strata of \\(L\\): \\(E[Y | A = a, L = l, L_2 = l_2]P(L_2 = l_2 | L = l)\\)
"},{"location":"math/causal-inference/chapter-7/#confounders","title":"Confounders","text":"The sufficient set for identifying confounder depends on variables observed or measured. For a causal graph, there may also exist multiple sufficient sets for confounding adjustment.
"},{"location":"math/causal-inference/chapter-7/#traditional-confounder","title":"Traditional Confounder","text":"A confounder satisfies the following conditions, which is the definition of a traditional confounder.
- The variable associates with the treatment.
- Condition on the treatment, the variable associates with the outcome.
- The variable is not on the causal path from the treatment to the outcome.
However, a variable that satisfies the above conditions is not necessarily a confounder. Variable \\(L\\) in the following graph is a traditional confounder. When \\(L\\) is not adjusted, unconditional causal effect can be directly identified, adjusting for \\(L\\) will introduce extra selection bias.
"},{"location":"math/causal-inference/chapter-7/#surrogate-confounder","title":"Surrogate Confounder","text":"A surrogate confounder is a variable that is the result of an unobserved common cause of the treatment and the outcome. The surrogate confounder itself does not lie on a backdoor path. The following graph shows a surrogate confounder \\(L\\).
Although \\(L\\) does not lie on the backdoor path, observing distribution of \\(L\\) may provide information about the unobserved common cause \\(U\\). In this case, adjusting for \\(L\\) can partially reduce the confounding bias.
"},{"location":"math/causal-inference/chapter-7/#single-world-intervention-graph","title":"Single-world Intervention Graph","text":"A single-world intervention graph (SWIG) is a causal graph that explicitly include the conterfactual variables on the graph. Unlike the causal graph that represents the real world, the SWIG represents a counterfactual world created by an intervention.
Causal graph Single-world intervention graph In a SWIG, the original treatment variable \\(A\\) is now regarded as two distinct nodes \\(A\\) and \\(a\\). \\(A\\) encodes the possible value of \\(A\\) under no intervention, \\(a\\) is the value of intervened treatment variable. Any descendant \\(X\\) of \\(A\\) is replaced by \\(X^a\\), which is the value of \\(X\\) under intervention \\(A = a\\). From the SWIG, we can see that after conditioning on \\(L\\), the trail \\(A\\leftarrow L\\leftarrow U\\rightarrow Y^a\\) is blocked, indicating that exchangeability \\(A \\perp Y^a | L\\) holds.
Confounder cannot be descendants of treatment
A confounder cannot be a descendant of the treatment variable. Suppose \\(L\\) is a descendant of \\(A\\), and \\(L\\) connects to \\(Y\\) through some trail. If the trail is a path from \\(L\\) to \\(Y\\), then the whole path through \\(L\\) is a causal path, adjustment on \\(L\\) will block such path. Otherwise, there should be a collider on the path. If the collider is \\(L\\), adjustment on \\(L\\) will open the non-causal trail, introducing extra selection bias. If the collider is not \\(L\\), adjustment on \\(L\\) have no effect.
"},{"location":"math/causal-inference/chapter-7/#confounding-adjustment","title":"Confounding Adjustment","text":"Methods adjust for confounder \\(L\\) can be classified into two categories:
- G-methods: methods that adjust for \\(L\\) by conditioning on \\(L\\) - IP weighting, G-estimation, standardization.
- Stratification methods: methods that adjust for \\(L\\) by stratifying on \\(L\\) - stratification, matching.
- Other methods: difference-in-difference, instrumental variable, front-door adjustment. These methods does not rely on conditional exchangeability.
"},{"location":"math/causal-inference/chapter-7/#difference-in-difference","title":"Difference-in-Difference","text":"Consider the following causal graph. We want to measure causal effect on treated \\(E(Y^1 | A = 1) - E(Y^0 | A = 1)\\). But there exists some unknown factors \\(U\\) that affects both treatment \\(A\\) and outcome \\(Y\\). For example, \\(U\\) can be the severity of disease, which affects both the treatment decision and the outcome.
Notice that
\\[ \\begin{aligned} &&& \\underbrace{E(Y | A = 1) - E(Y | A = 0)}_{\\text{Measured association}} \\\\ &=&& E(Y^1 | A = 1) - E(Y^0 | A = 0) \\\\ &=&& \\underbrace{(E(Y^1 | A = 1) - E(Y^0 | A = 1))}_{\\text{Causal effect on treated}} + \\underbrace{(E(Y^0 | A = 1) - E(Y^0 | A = 0))}_{\\text{Confounding effect}} \\end{aligned} \\] To estimate confounding effect \\(E(Y^0 | A = 1) - E(Y^0 | A = 0)\\) we can measure a pre-treatment outcome \\(C\\) before the treatment is applied. There is no direct causal relationship between pre-treatment outcome \\(C\\) and treatment \\(A\\), but \\(C\\) and \\(A\\) show some association since backdoor \\(C\\leftarrow U\\rightarrow A\\) presents, that is, \\(E(C | A = 1) - E(C | A = 0) \\neq 0\\). The metric \\(E(C | A = 1) - E(C | A = 0) \\neq 0\\) measures the strength of confounding effect of \\(A\\) on \\(C\\). If the confounding effect of \\(A\\) on \\(Y\\) caused by \\(Y\\leftarrow U\\rightarrow A\\) is the same as the confounding effect of \\(A\\) on \\(C\\) (additive equi-confounding assumption), then the confounding effect of \\(A\\) on \\(Y\\) can be removed by difference-in-difference.
\\[ E(Y^0 | A = 1) - E(Y^0 | A = 0) = E(C | A = 1) - E(C | A = 0) \\] The causal effect can be measured in
\\[ \\begin{aligned} &&& E(Y^1 | A = 1) - E(Y^0 | A = 1) \\\\ &=&& (E(Y | A = 1) - E(Y | A = 0)) - (E(C | A = 1) - E(C | A = 0)) \\end{aligned} \\]"},{"location":"math/causal-inference/chapter-7/#front-door-criterion","title":"Front-door Criterion","text":"Consider a causal graph with a treatment \\(A\\), a mediator \\(M\\) and an outcome \\(Y\\). The causal effect of \\(A\\) on \\(Y\\) is confounded by an unobserved variable \\(U\\). The mediator fully mediates the effect of \\(A\\) on \\(Y\\), i.e. all the causal path from \\(A\\) to \\(Y\\) passes through \\(M\\).
First we have
\\[ P(Y^a = 1) = \\sum_{m} P(Y^a = 1 | M^a = m) P(M^a = m) \\] \\(M\\) is not confounded, so
\\[ P(M^a = m) = P(M = m | A = a) \\] Notice that
\\[ P(Y^a = 1 | M^a = m) = P(Y^m = 1) = P(Y = 1 | M = m) \\] and
\\[ P(Y = 1 | M = m) = \\sum_{a'} P(Y^m = 1 | M = m, A = a')P(A = a') \\] by conditional exchangeability \\(Y^m \\perp M \\mid A\\). Under this case, \\(P(Y^a)\\) can be identified by
\\[ P(Y^a = 1) = \\sum_{m} P(M = m | A = a)\\sum_{a'} P(Y = 1 | M = m, A = a')P(A = a') \\]"},{"location":"math/causal-inference/chapter-8/","title":"Selection bias","text":"Selection bias is caused by extra association caused by only part of the population is selected for analysis. Selection bias is caused by conditioning on a common effect of treatment and outcome, even if the treatment actually has no individual causal effect on the outcome.
On the causal graph, selection bias is caused by either condition on a collider or descendant of a collider. In reality, selection bias can both appear in observational studies or randomized experiments since participants may be removed from the study before the outcome is observed. If participants are removed not in random, selection bias is introduced.
\\[ \\frac{P(Y = 1 | A = 1)}{P(Y = 1 | A = 0)} = \\frac{P(Y^{a = 1} = 1)}{P(Y^{a = 0} = 1)} \\not = \\frac{P(Y = 1 | A = 1, L = 0)}{P(Y = 0 | A = 1, L = 0)} \\] Selection bias and hazard ratio
Hazards is defined as the probability of a participant to die at a certain time. Following the definition of risk, the hazard ratio is the same as risk ratio. Consider the following causal graph.
In the graph, treatment \\(A\\) denote the heart transplant. The outcome \\(Y_1\\) and \\(Y_2\\) denote the death of the patient. Unmeasured variable \\(U\\) affect the overall death rate of the patient. For each time, we can define the associational hazard ratio as
\\[ \\begin{aligned} aRR_{AY_1} &= \\frac{P(Y_1 = 1 | A = 1)}{P(Y_1 = 1 | A = 0)} \\\\ aRR_{AY_2} &= \\frac{P(Y_2 = 1 | A = 1)}{P(Y_2 = 1 | A = 0)} \\end{aligned} \\] However, we can only measure the hazard ratio among the patients who are still alive at that time, that is:
\\[ aRR_{AY_2 \\mid Y_1 = 0} = \\frac{P(Y_1 = 1 | A = 1, Y_1 = 0)}{P(Y_1 = 1 | A = 0, Y_1 = 0)} \\] However, condition on \\(Y_1\\) opens a trail \\(A \\ra Y_1 \\la U\\ra Y_2\\). Therefore, unless \\(U\\) is measured, from the data collected we cannot distinguish the existence of the path \\(A \\ra Y_2\\).
"},{"location":"math/causal-inference/chapter-8/#selection-without-bias","title":"Selection without Bias","text":"Selection will cause bias within the study, but in some cases such bias can be restricted to some strata of the study. Consider the following causal graph. \\(Y = 0\\) if and only if \\(Y_A = Y_E = Y_O = 0\\).
- \\(Y = 0\\) is equivalent to \\(Y_A = 0\\) and \\(Y_E = 0\\). In such case, \\(A\\) is independent of \\(E\\).
- Consider the case when \\(Y = 1\\) and \\(Y_O = 0\\), then \\(Y_A = 0\\) indicates \\(Y_E = 1\\) and vice versa. In such case, \\(A\\) is dependent of \\(E\\).
"},{"location":"math/causal-inference/chapter-8/#adjustment-for-selection-bias","title":"Adjustment for Selection Bias","text":"Assume that positivity holds for \\(C = 0\\) and consistency holds for the analysis. Selection bias arises when the participants are not randomly removed from the study, causing the distribution of remaining participants to be different from the original population, i.e. the joint distribution \\(P'(A, L) = P(A, L | C = 0)\\) is no longer identical to \\(P(A, L)\\).
Selection bias is often unavoidable. IP weighting and standardization can be used to adjust for selection bias. The inverse probability weight \\(W^C\\) is defined as
\\[ W^C = \\frac{1}{P(C = 0 | \\cdot)} \\] where \\(\\cdot\\) denote all the variable that directly affects \\(C\\). Since we can only observed variables for uncensored (\\(C = 0\\)) individuals, the IP weight only uses \\(C = 0\\). IP weighting assigns different weight to the probability distribution of each pair of \\((A, L)\\), so that the distribution of the weighted sample is identical to the original population.
\\[ \\begin{aligned} &&& \\frac{P(A = a, L = l, C = 0)}{P(C = 0 | A = a, L = l)} \\\\ &=&& \\frac{P(A = a, L = l, C = 0)}{P(A = a, L = l, C = 0) / P(A = a, L = l)} \\\\ &=&& P(A = a, L = l) \\end{aligned} \\] Difference in confounding bias and selection bias
In confounding bias, IP weighting is applied on the treatment variable \\(A\\), while in selection bias, IP weighting is applied on the censoring variable \\(C\\).
When there are measured variable \\(L\\) on the trail through \\(C\\) that is able to block the trail causing selection bias, we can use stratification to adjust for selection bias by conditioning on \\(L\\).
"},{"location":"math/causal-inference/chapter-9/","title":"Measurement bias and \"noncausal\" diagrams","text":""},{"location":"math/causal-inference/chapter-9/#measurement-bias","title":"Measurement Bias","text":"Measurement bias is caused by errors in measuring values of variables, i.e. \\(A^* \\not = A\\). Measurement error is defined as the difference between the measured value and the true value of a variable, \\(e_A = A^* - A\\). Taken measurement error into consideration, the causal diagram is modified as follows:
Measurement error follow two properties:
- Indepedence: \\(e_A \\perp e_Y\\).
- Nondifferentiality: \\(e_A \\perp Y\\) and \\(e_Y \\perp A\\).
Lack of either property will bring extra association and lead to bias.
- Edge \\(Y\\ra U_A\\) will introduce recall bias.
- Edge \\(A\\ra U_Y\\) will introduce reverse causation bias.
- Edge \\(U_A\\la U_{AY}\\ra U_Y\\) will introduce independent measurement error.
Correcting for measurement error usually requires additional validated non-biased samples.
"},{"location":"math/causal-inference/chapter-9/#noncausal-diagrams","title":"\"Noncausal\" Diagrams","text":"A causal graph requires that all of the edges in the graph can be interpreted causally, together with well-defined intervention. For graphs with non-causal edges, adjustments might fail to remove bias, as the adjusted variable is not on the true causal path.
"},{"location":"math/convex-optimization/","title":"\u51f8\u200b\u4f18\u5316","text":""},{"location":"math/convex-optimization/#_2","title":"\u76ee\u5f55","text":" - \u200b\u51f8\u96c6\u200b
- \u200b\u51f8\u51fd\u6570\u200b
"},{"location":"math/convex-optimization/#notations-and-definitions","title":"Notations and Definitions","text":"\u200b\u672c\u200b\u8282\u200b\u5217\u4e3e\u200b\u51f8\u200b\u4f18\u5316\u200b\u4e2d\u200b\u6240\u7528\u200b\u7b26\u53f7\u200b\u7684\u200b\u8868\u8ff0\u200b\uff0c\u200b\u5e76\u200b\u501f\u6b64\u200b\u56de\u987e\u200b\u76f8\u5173\u200b\u7684\u200b\u6570\u5b66\u200b\u6982\u5ff5\u200b
"},{"location":"math/convex-optimization/#_3","title":"\u6570\u57df","text":" - \\(\\mathbb R, \\mathbb N, \\mathbb Z, \\mathbb C\\)\uff1a\u200b\u5b9e\u6570\u200b\u57df\u200b\u3001\u200b\u81ea\u7136\u6570\u200b\u57df\u200b\u3001\u200b\u6574\u6570\u200b\u57df\u200b\u3001\u200b\u590d\u6570\u200b\u57df\u200b
- \u200b\u4e0b\u6807\u200b \\({}_\\plus, {}_{\\plus\\plus}\\) \u200b\u5728\u200b\u5b9e\u6570\u200b\u57df\u548c\u5b9e\u200b\u5411\u91cf\u200b\u57df\u200b\u4e0a\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u975e\u8d1f\u200b\u3001\u200b\u4e25\u683c\u200b\u6b63\u200b\uff0c\u200b\u5728\u200b\u5b9e\u77e9\u9635\u200b\u57df\u200b\u4e0a\u200b\u8868\u793a\u200b\u534a\u200b\u6b63\u5b9a\u200b\u3001\u200b\u6b63\u5b9a\u200b\u3002
"},{"location":"math/convex-optimization/#_4","title":"\u77e9\u9635\u200b\u4e0e\u200b\u5411\u91cf","text":"\\(A\\in \\mathbb R^{m\\times n}\\)\u200b\u8868\u793a\u200b\\(A\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(m\\)\u200b\u884c\u200b\\(n\\)\u200b\u5217\u200b\u7684\u200b\u5b9e\u77e9\u9635\u200b\uff0c\u200b\u5176\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u4e3a\u200b\\(a_{ij}\\)\uff0c\u200b\u67d0\u5217\u200b\uff08\u200b\u6216\u200b\u67d0\u884c\u200b\uff09\u200b\u7684\u200b\u5207\u7247\u200b\u4e3a\u200b\\(A_{\\cdot j}\\)
\\(\\boldsymbol x\\in \\mathbb R^m\\)\u200b\u8868\u793a\u200b\\(\\boldsymbol x\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(m\\)\u200b\u7ef4\u7684\u5b9e\u200b\u5411\u91cf\u200b\uff0c\\(\\boldsymbol 1\\)\u200b\u8868\u793a\u200b\u6240\u6709\u200b\u5206\u91cf\u200b\u5747\u200b\u4e3a\u200b\\(1\\)\u200b\u7684\u200b\u5411\u91cf\u200b\u3002
\u200b\u65b9\u9635\u200b\u662f\u200b\u884c\u6570\u200b\u4e0e\u200b\u5217\u6570\u200b\u76f8\u7b49\u200b\u7684\u200b\u77e9\u9635\u200b\uff0c\\(A\\in \\mathbb R^{n\\times n}\\)\u3002\u200b\u5bf9\u79f0\u200b\u77e9\u9635\u200b\u6ee1\u8db3\u200b\\(A^\\top = A\\)\uff0c\u200b\u53cd\u5bf9\u200b\u79f0\u200b\u77e9\u9635\u200b\u6ee1\u8db3\u200b\\(A^\\top = - A\\)\u3002\u200b\u6b63\u5b9a\u200b\u77e9\u9635\u200b\u6ee1\u8db3\u200b\\(\\forall x\\in \\mathbb R^n, x^\\top Ax > 0\\)\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(A\\succ 0\\)\uff1b\u200b\u534a\u200b\u6b63\u5b9a\u200b\u77e9\u9635\u200b\u6ee1\u8db3\u200b\\(\\forall x\\in \\mathbb R^n, x^\\top Ax \\geq 0\\)\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(A\\succeq 0\\)\u3002\u200b\u5bf9\u4e8e\u200b\u590d\u200b\u65b9\u9635\u200b\\(A\\in \\mathbb C^{n\\times n}\\)\uff0c\u200b\u5b9a\u4e49\u200b\u5171\u8f6d\u200b\u8f6c\u7f6e\u200b\uff08Hermitian\uff09\u200b\u77e9\u9635\u200b\u4e3a\u200b\\(A^* = \\overline {A^\\top}\\)\u3002\u200b\u5168\u4f53\u200b\\(k\\)\u200b\u9636\u200b\u5bf9\u79f0\u200b\u77e9\u9635\u200b\u7684\u200b\u96c6\u5408\u200b\u4e3a\u200b\\(\\mathbb S^k\\)\u3002
\u200b\u77e9\u9635\u7684\u8ff9\u200b\u662f\u200b\u5bf9\u89d2\u7ebf\u200b\u4e0a\u200b\u5404\u4e2a\u200b\u5143\u7d20\u200b\u4e4b\u200b\u548c\u200b
\\[ \\mathrm {tr}(A) = \\sum_{i=1}^n a_{ii} \\] \u200b\u8ff9\u200b\u7684\u200b\u6027\u8d28\u200b - \\(\\mathrm {tr}(A) = \\mathrm {tr}(A^\\top)\\)
- \\(\\mathrm {tr}(A+B) = \\mathrm {tr}(A) + \\mathrm {tr}(B)\\)
- \\(\\mathrm {tr}(t\\cdot A) = t\\cdot \\mathrm {tr}(A)\\)
- \\(\\mathrm {tr}(AB) = \\mathrm {tr}(BA)\\)\uff08\u200b\u4e0d\u200b\u8981\u6c42\u200b\\(A, B, \\cdots\\)\u200b\u4e3a\u200b\u65b9\u9635\u200b\uff0c\u200b\u53ea\u200b\u9700\u8981\u200b\u6ee1\u8db3\u200b\u8fd0\u7b97\u200b\u7ed3\u679c\u200b\u4e3a\u200b\u65b9\u9635\u200b\u5373\u53ef\u200b\uff1b\u200b\u5bf9\u4e8e\u200b\u591a\u4e2a\u200b\u5143\u7d20\u200b\uff0c\u200b\u4e58\u6cd5\u200b\u987a\u5e8f\u200b\u9700\u8981\u200b\u6ee1\u8db3\u200b\u8f6e\u6362\u200b\u5bf9\u79f0\u6027\u200b\u624d\u80fd\u200b\u4fdd\u8bc1\u200b\u7b49\u5f0f\u200b\u6210\u7acb\u200b\uff09
\u200b\u5b9a\u4e49\u200b\u4e24\u4e2a\u200b\u77e9\u9635\u200b\\(X, Y\\)\u200b\u7684\u200b\u5185\u79ef\u200b\u4e3a\u200b\u5176\u200b\u4e58\u79ef\u200b\u7684\u200b\u8ff9\u200b\\(\\mathrm{tr}(XY)\\)
"},{"location":"math/convex-optimization/#_5","title":"\u8303\u6570","text":"\u200b\u8303\u6570\u200b\u662f\u200b\u6ee1\u8db3\u200b\u4ee5\u4e0b\u200b\u6027\u8d28\u200b\u7684\u200b\u51fd\u6570\u200b\\(f\\)
- \u200b\u975e\u200b\u8d1f\u6027\u200b\uff1a\\(f(\\boldsymbol{x}) \\geq 0\\)
- \u200b\u89c4\u8303\u6027\u200b\uff1a\\(f(\\boldsymbol{x}) = 0 \\Leftrightarrow \\boldsymbol x = 0\\)
- \u200b\u9f50\u6b21\u200b\u6027\u200b\uff1a\\(f(t\\cdot \\boldsymbol{x}) = t\\cdot f(\\boldsymbol{x})\\)
- \u200b\u4e09\u89d2\u200b\u4e0d\u7b49\u5f0f\u200b\uff1a\\(f(\\boldsymbol x + \\boldsymbol y)\\leq f(\\boldsymbol x) + f(\\boldsymbol y)\\)
\u200b\u5e38\u89c1\u200b\u7684\u200b\u8303\u6570\u200b - 1-\u200b\u8303\u6570\u200b\uff1a\\(f(\\boldsymbol{x}) = \\sum_{i=1}^n \\left|x_i\\right|\\)
- 2-\u200b\u8303\u6570\u200b\uff1a\\(f(\\boldsymbol{x}) = \\sqrt{\\sum_{i=1}^n \\left|x_i^2\\right|}\\)
- \\(\\infty\\)-\u200b\u8303\u6570\u200b\uff1a\\(f(\\boldsymbol{x}) = \\sqrt[\\infty]{\\sum_{i=1}^n \\left|x_i^\\infty\\right|}\\)
- 0-\u200b\u8303\u6570\u200b\uff08\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u5b9a\u4e49\u200b3\uff0c\u200b\u56e0\u6b64\u200b\u4e0d\u662f\u200b\u8303\u6570\u200b\uff09\uff1a\\(f(\\boldsymbol{x}) = \\sum_{i=1}^n \\boldsymbol{1}_{\\{x_i \\not = 0\\}}\\)
- \\(l_p\\)-\u200b\u8303\u6570\u200b\uff1a\\(f(\\boldsymbol{x}) = \\sqrt[p]{\\sum_{i=1}^n \\left|x_i^p\\right|}\\)
- Frobenius\u200b\u8303\u6570\u200b\uff1a\\(f(A) = \\sqrt{\\sum_i\\sum_j a_{ij}^2} = \\sqrt{\\mathrm{tr}(A^\\top A)}\\)
\u200b\u8303\u6570\u200b\u7b49\u4ef7\u200b\u5b9a\u7406\u200b\uff1a\u200b\u5bf9\u4e8e\u200b\u4e24\u4e2a\u200b\u8303\u6570\u200b\\(f, g\\)\uff0c\u200b\u5b58\u5728\u200b\u6b63\u5e38\u200b\u6570\u200b\\(c\\)\u200b\u4f7f\u5f97\u200b\\(\\forall \\boldsymbol{x}, f(\\boldsymbol{x}) \\leq cg(\\boldsymbol{x})\\)
\u200b\u8bbe\u200b\\(f\\)\u200b\u4e3a\u200b\\(\\mathbb R^n\\)\u200b\u4e0a\u200b\u7684\u200b\u8303\u6570\u200b\uff0c\u200b\u5bf9\u5076\u200b\u8303\u6570\u200b\\(f_*\\)\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b
\\[ f_*(\\boldsymbol{z}) = \\sup_{\\boldsymbol{x}} \\{\\boldsymbol{z^\\top x} | f(\\boldsymbol{x}) \\leq 1\\} \\] \u200b\u5bf9\u5076\u200b\u8303\u6570\u200b \u200b\u6839\u636e\u200b\u8303\u6570\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u7403\u200b\u7684\u200b\u6982\u5ff5\u200b
\u200b\u7403\u200b \u200b\u7ed9\u5b9a\u200b\\(\\mathbb R^n\\)\u200b\u7a7a\u95f4\u200b\u4e2d\u200b\u7684\u200b\u8303\u6570\u200b\\(\\Vert\\cdot\\Vert\\)\uff0c\\(B(x, r)\\)\u200b\u8868\u793a\u200b\u8303\u6570\u200b\\(\\Vert \\cdot\\Vert\\)\u200b\u4e2d\u200b\u7684\u200b\uff08\u200b\u5f00\u200b\uff09\u200b\u7403\u200b\uff0c\u200b\u5373\u200b
\\[ B(x, r) = \\{y | \\Vert y - x\\Vert < r\\} \\] \\(\\bar B(x, r)\\)\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u95ed\u7403\u200b
\\[ \\bar B(x, r) = \\{y | \\Vert y - x\\Vert \\leq r\\} \\]"},{"location":"math/convex-optimization/#_6","title":"\u96c6\u5408","text":"\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(C\\subseteq \\mathbb R^n, x\\in C\\)\uff0c\u200b\u4f7f\u7528\u200b2-\u200b\u8303\u6570\u200b\u5ea6\u91cf\u200b\u8ddd\u79bb\u200b\u3002
- \u200b\u82e5\u200b\\(\\exists r \\in \\mathbb R_{\\plus\\plus}, B(x, r)\\subseteq C\\)\uff0c\u200b\u79f0\u200b\\(x\\)\u200b\u4e3a\u200b\u5185\u70b9\u200b\u3002\u200b\u5168\u4f53\u200b\u5185\u70b9\u200b\u6784\u6210\u200b\u96c6\u5408\u200b\u7684\u200b\u5185\u90e8\u200b\\(C^\\circ\\)\uff0c\u200b\u663e\u7136\u200b\\(C^\\circ \\subseteq C\\)\u3002
- \u200b\u82e5\u200b\\(\\forall r\\in \\mathbb R_{+}, B(x, r)\\cap C \\not = \\varnothing, B(x, r) \\cap C^C \\not = \\varnothing\\)\uff0c\u200b\u79f0\u200b\\(x\\)\u200b\u4e3a\u200b\u8fb9\u754c\u70b9\u200b\u3002\u200b\u5168\u4f53\u200b\u8fb9\u754c\u70b9\u200b\u6784\u6210\u200b\u96c6\u5408\u200b\u7684\u200b\u8fb9\u754c\u200b\\(\\partial C\\)\u3002
- \u200b\u6839\u636e\u200b\u8fb9\u754c\u70b9\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u6709\u200b\\(\\partial C = \\partial C^C\\)\u3002
- \u200b\u82e5\u200b\\(x\\)\u200b\u4e0d\u662f\u200b\u5185\u70b9\u200b\uff0c\u200b\u5219\u200b\\(x\\)\u200b\u4e3a\u200b\u8fb9\u754c\u70b9\u200b\uff0c\u200b\u5373\u200b\\(\\partial C \\cup C^\\circ = C, \\partial C\\cap C^\\circ = \\varnothing\\)\u3002
\u200b\u82e5\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u70b9\u200b\u90fd\u200b\u662f\u200b\u5185\u70b9\u200b\uff0c\u200b\u5373\u200b\\(C^\\circ = C\\)\uff0c\u200b\u79f0\u200b\\(C\\)\u200b\u4e3a\u200b\u5f00\u96c6\u200b\u3002\u200b\u82e5\u200b\\(C\\)\u200b\u4e0d\u662f\u200b\u5f00\u96c6\u200b\uff0c\u200b\u5219\u200b\\(C\\)\u200b\u4e3a\u200b\u95ed\u96c6\u200b\u3002\u200b\u5f00\u96c6\u200b\u7684\u200b\u8865\u96c6\u200b\u662f\u200b\u95ed\u96c6\u200b\u3002
\u200b\u5b9a\u4e49\u200b\u95ed\u5305\u200b\u4e3a\u200b
\\[ \\mathbf{cl}C = \\{x \\in \\mathbb R^n| \\forall r\\in \\mathbb R_{++}, B(x, r)\\cap C\\not = \\varnothing\\} \\] \u200b\u76f4\u89c2\u200b\u4e0a\u200b\uff0c\u200b\u95ed\u5305\u200b\u53ef\u4ee5\u200b\u7406\u89e3\u200b\u4e3a\u200b\\(C\\cup \\partial C^C\\)\uff0c\u200b\u5373\u200b\u96c6\u5408\u200b\u4e0e\u5176\u200b\u8865\u96c6\u200b\u7684\u200b\u8fb9\u754c\u200b\u7684\u200b\u5e76\u200b\u3002
\\(\\varnothing, \\mathbb R^n\\)\u200b\u65e2\u200b\u662f\u200b\u5f00\u96c6\u200b\u4e5f\u200b\u662f\u200b\u95ed\u96c6\u200b\uff1a
- \\(\\varnothing\\)\u200b\u7684\u200b\u95ed\u5305\u200b\u4ecd\u200b\u4e3a\u200b\\(\\varnothing\\)\uff0c\u200b\u6240\u4ee5\u200b\u662f\u200b\u95ed\u96c6\u200b\uff1b\u200b\u7136\u800c\u200b\\(\\varnothing^\\circ = \\varnothing\\)\uff0c\u200b\u6240\u4ee5\u200b\u662f\u200b\u5f00\u96c6\u200b\u3002
- \\(\\varnothing^C = \\mathbb R^n\\)\uff0c\u200b\u6240\u4ee5\u200b\\(\\mathbb R^n\\)\u200b\u65e2\u200b\u662f\u200b\u5f00\u96c6\u200b\u4e5f\u200b\u662f\u200b\u95ed\u96c6\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/","title":"\u51f8\u51fd\u6570\u200b\u53ca\u5176\u200b\u6027\u8d28","text":"\u200b\u51f8\u51fd\u6570\u200b\u662f\u200b\u4e00\u7c7b\u200b\u51fd\u6570\u200b\u4e0a\u65b9\u200b\uff08\u200b\u4e0a\u5883\u200b\u56fe\u200b\uff0cepigraph\uff09\u200b\u662f\u200b\u51f8\u96c6\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5373\u200b\u51fd\u6570\u200b\u66f2\u7ebf\u200b\u4e0a\u200b\u4efb\u610f\u200b\u4e24\u70b9\u200b\u8fde\u6210\u200b\u7684\u200b\u7ebf\u6bb5\u200b\u90fd\u200b\u5728\u200b\u51fd\u6570\u200b\u66f2\u7ebf\u200b\u7684\u200b\u4e0a\u65b9\u200b\u3002
\u200b\u82e5\u200b\u51fd\u6570\u200b\\(f: \\mathbb R^n\\rightarrow \\mathbb R\\)\u200b\u6ee1\u8db3\u200b\u7434\u751f\u200b\u4e0d\u7b49\u5f0f\u200b\uff1a
\\[ f(\\theta x + (1 - \\theta)y)\\leq \\theta f(x) + (1 - \\theta)f(y), 0\\leq \\theta\\leq 1 \\] \uff0c\u200b\u5219\u200b\u79f0\u200b\\(f\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u7434\u751f\u200b\u4e0d\u7b49\u5f0f\u200b\u7684\u200b\u6269\u5c55\u200b \u200b\u7434\u751f\u200b\u4e0d\u7b49\u5f0f\u200b\u53ef\u4ee5\u200b\u6269\u5c55\u200b\u5230\u200b\u66f4\u200b\u591a\u70b9\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b\u4e0a\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u51f8\u51fd\u6570\u200b\\(f\\)\uff0c\u200b\u8bbe\u200b\\(\\theta_1, \\ldots, \\theta_k\\geq 0, \\theta_1 + \\cdots + \\theta_k = 1\\)\uff0c\u200b\u5219\u200b
\\[ f(\\theta_1 x_1 + \\cdots + \\theta_k x_k)\\leq \\theta_1 f(x_1) + \\cdots + \\theta_k f(x_k) \\] \u200b\u8be5\u5f0f\u200b\u53ef\u4ee5\u200b\u8fdb\u4e00\u6b65\u200b\u62d3\u5c55\u200b\u81f3\u200b\u7ea7\u6570\u200b\u3001\u200b\u79ef\u5206\u200b\u3001\u200b\u671f\u671b\u200b\u7b49\u200b\u5f62\u5f0f\u200b\u3002
\u200b\u82e5\u200b\\(f(\\theta x + (1 - \\theta)y)< \\theta f(x) + (1 - \\theta)f(y), 0\\leq \\theta\\leq 1\\)\uff0c\u200b\u5219\u200b\u4e3a\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\u3002\u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u4e0a\u200b\u5883\u56fe\u200b\uff08\\(\\mathbf{epi}f\\)\uff09\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002
\u200b\u5982\u679c\u200b\\(-f\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u51f9\u200b\u51fd\u6570\u200b\uff0c\u200b\u82e5\u200b\\(-f\\)\u200b\u662f\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u4e25\u683c\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002\u200b\u51f9\u200b\u51fd\u6570\u200b\u7684\u200b\u4e9a\u56fe\u200b\uff08\\(\\mathbf{hypo}f\\)\uff09\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002
\u200b\u6240\u6709\u200b\u7684\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u90fd\u200b\u65e2\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u4e5f\u200b\u662f\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002
\\(f\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u5728\u200b\u5b9a\u4e49\u57df\u200b\u5185\u200b\u4efb\u4f55\u200b\u76f4\u7ebf\u200b\u4e0a\u200b\u90fd\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5373\u200b
\\[ \\forall v,\\forall x, g(t; v, x) = f(x + tv) \\] \u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u8bb0\u200b\\(f\\)\u200b\u7684\u200b\u5ef6\u4f38\u200b\\(\\tilde f\\)\u200b\u4e3a\u200b\u5206\u6bb5\u200b\u51fd\u6570\u200b
\\[ \\tilde f(x) = \\left\\{\\begin{aligned} & f(x) & x\\in \\mathbf{dom}f \\\\ & \\infty & x\\not\\in \\mathbf{dom}f \\end{aligned}\\right. \\] \u200b\u7c7b\u4f3c\u200b\u5730\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u51f9\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5176\u200b\u5b9a\u4e49\u57df\u200b\u5916\u200b\u7684\u200b\u90e8\u5206\u200b\u5ef6\u4f38\u200b\u81f3\u200b\\(-\\infty\\)\u3002 \u200b\u5728\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e2d\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u793a\u6027\u200b\u51fd\u6570\u200b\\(\\tilde I_C(x) = 0, x\\in C\\)\u200b\u6765\u200b\u5c06\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u89e3\u200b\u9650\u5b9a\u200b\u5230\u200b\u51f8\u96c6\u200b\\(C\\)\u200b\u4e0a\u200b\u3002\\(\\tilde I_C(x)\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u5176\u4ed6\u200b\u7684\u200b\u51f8\u51fd\u6570\u200b\u8fd8\u6709\u200b
- \u200b\u6307\u6570\u51fd\u6570\u200b\\(f: \\mathbb R\\rightarrow\\mathbb R = e^{ax}, a\\in \\mathbb R\\)
- \u200b\u5e42\u51fd\u6570\u200b\\(f: \\mathbb R_{ + + }\\rightarrow\\mathbb R = x^a, a\\geq 1\\)\u200b\u6216\u200b\\(a\\leq 0\\)
- \u200b\u7edd\u5bf9\u503c\u200b\u5e42\u51fd\u6570\u200b\\(f: \\mathbb R\\rightarrow\\mathbb R = |x|^p, p\\geq 1\\)
- \u200b\u8d1f\u200b\u5bf9\u6570\u51fd\u6570\u200b\\(f: \\mathbb R_{\\plus\\plus}\\rightarrow \\mathbb R = -\\log x\\)
- \u200b\u8d1f\u71b5\u200b\\(f: \\mathbb R_{\\plus\\plus}\\rightarrow \\mathbb R = x\\log x\\)
- \u200b\u8303\u6570\u200b\uff08\u200b\u4e09\u89d2\u200b\u4e0d\u7b49\u5f0f\u200b\uff09
- \u200b\u6700\u5927\u503c\u200b\u51fd\u6570\u200b\u76f8\u5f53\u4e8e\u200b\u65e0\u7a77\u200b\u9636\u200b\u8303\u6570\u200b\\(\\Vert\\cdot\\Vert_\\infty\\)\uff0c\u200b\u56e0\u6b64\u200b\u4e5f\u200b\u662f\u200b\u51f8\u200b\u7684\u200b\u3002
- \u200b\u6307\u6570\u200b\u548c\u200b\u7684\u200b\u5bf9\u6570\u200b\\(f: \\mathbb R^n\\rightarrow \\mathbb R = \\log \\sum_{i=1}^n e^{x_i}\\)
\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(\\alpha\\)\uff0c\u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\\(\\{x\\in \\mathbf{dom} f | f(x) \\leq \\alpha\\}\\)\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002\u200b\u6216\u8005\u8bf4\u200b\uff0c\u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u7b49\u9ad8\u7ebf\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_2","title":"\u4e00\u9636\u200b\u6761\u4ef6\u200b\u4e0e\u200b\u4e8c\u9636\u200b\u6761\u4ef6","text":""},{"location":"math/convex-optimization/convex-function/#_3","title":"\u4e00\u9636\u200b\u6761\u4ef6","text":"\u200b\u82e5\u200b\\(f\\)\u200b\u7684\u200b\u5b9a\u4e49\u57df\u200b\u4e3a\u200b\u51f8\u200b\u96c6\u4e14\u200b\u53ef\u5fae\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u7b49\u4ef7\u200b\u4e8e\u200b
\\[ f(y) \\geq f(x) + (\\nabla f(x))^\\top (y - x) \\] \u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u4e00\u9636\u200b\u8fd1\u4f3c\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u5168\u5c40\u200b\u4e0b\u200b\u4f30\u8ba1\u200b\u3002
\u200b\u4e00\u9636\u200b\u6761\u4ef6\u200b\u540c\u6837\u200b\u4e5f\u200b\u80fd\u200b\u7528\u6765\u200b\u53cd\u6620\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\u3001\u200b\u51f9\u200b\u51fd\u6570\u200b\u548c\u200b\u4e25\u683c\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_4","title":"\u4e8c\u9636\u200b\u6761\u4ef6","text":"\u200b\u82e5\u200b\\(f\\)\u200b\u7684\u200b\u5b9a\u4e49\u57df\u200b\u4e3a\u200b\u51f8\u200b\u96c6\u4e14\u200b\u4e8c\u9636\u200b\u53ef\u5fae\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u7b49\u4ef7\u200b\u4e8e\u200b
\\[ \\nabla ^2f(x)\\succeq 0 \\] \u200b\u4e8c\u9636\u200b\u6761\u4ef6\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u6765\u200b\u53cd\u6620\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\u3001\u200b\u51f9\u200b\u51fd\u6570\u200b\u548c\u200b\u4e25\u683c\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002\u200b\u6ce8\u610f\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u6ee1\u8db3\u200b\\(\\nabla^2 f(x)\\succ 0\\)\uff0c\u200b\u4e25\u683c\u200b\u51f9\u200b\u51fd\u6570\u200b\u540c\u7406\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_5","title":"\u4fdd\u51f8\u200b\u8fd0\u7b97","text":"\u200b\u5bf9\u4e8e\u200b\u51fd\u6570\u200b\\(f, g, f_1, \\ldots f_k: \\bbR^n\\rightarrow \\bbR\\)\uff08\u200b\u5982\u672a\u200b\u6307\u660e\u200b\uff0c\u200b\u5219\u200b\u5047\u5b9a\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff09\uff0c\u200b\u4ee5\u4e0b\u200b\u51fd\u6570\u200b\u4ecd\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff1a
-
\u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u7ebf\u6027\u7ec4\u5408\u200b\uff1a\\(f'(x) = \\sum_{i=1}^k \\theta_i f_i(x)\\)
\u200b\u6269\u5c55\u200b\u5230\u200b\u79ef\u5206\u200b\u5f62\u5f0f\u200b \u200b\u8bbe\u200b\\(f(x, y)\\)\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(y\\)\uff0c\u200b\u5173\u4e8e\u200b\\(x\\)\u200b\u90fd\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u51fd\u6570\u200b\\(w(y)\\)\u200b\u6ee1\u8db3\u200b\\(w(y)\\geq 0\\)\uff0c\u200b\u5219\u200b
\\[ g(x) = \\int_{\\mathcal A} w(y)f(x, y)\\dd y \\] \u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u3002
-
\u200b\u4eff\u5c04\u53d8\u6362\u200b\uff1a\\(f'(x): \\bbR^m\\rightarrow \\bbR = f(Ax + b)\\)\uff0c\u200b\u5176\u4e2d\u200b\\(A\\in \\bbR^{m\\times n}, b\\in \\bbR^n\\)
-
\u200b\u9010\u70b9\u200b\u6700\u5927\u200b\uff1a\\(f'(x) = \\max\\{f_1(x), \\ldots, f_k(x)\\}\\)
\u200b\u9010\u70b9\u200b\u6700\u5927\u200b\u53ef\u4ee5\u200b\u7406\u89e3\u200b\u4e3a\u200b\u4e00\u7cfb\u5217\u200b\u51fd\u6570\u200b\u4e0a\u5883\u200b\u56fe\u200b\u7684\u200b\u4ea4\u96c6\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\\(f'\\)\uff0c\u200b\u6709\u200b
\\[ \\mathbf{epi} f' = \\bigcap_{i=1}^k \\mathbf{epi} f_k \\] \u200b\u6839\u636e\u200b\u51f8\u96c6\u200b\u7684\u200b\u4fdd\u51f8\u200b\u6027\u8d28\u200b\u53ef\u77e5\u200b\uff0c\\(\\mathbf{epi} f'\\)\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002
\u200b\u6269\u5c55\u200b\u5230\u200b\u65e0\u9650\u200b\u4e2a\u200b\u51fd\u6570\u200b\u7684\u200b\u5f62\u5f0f\u200b \u200b\u8bbe\u200b\\(f(x, y)\\)\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(y\\)\uff0c\u200b\u5173\u4e8e\u200b\\(x\\)\u200b\u90fd\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b
\\[ g(x) = \\sup_{y\\in \\calA} f(x, y) \\] \u200b\u4e5f\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u3002
-
\u200b\u590d\u5408\u200b\u51fd\u6570\u200b\uff1a\\(g\\circ f\\)
- \u200b\u5f53\u200b\\(g: \\bbR\\rightarrow \\bbR\\)\u200b\u65f6\u200b\uff0c\\(f' = g\\circ f = g(f(x))\\)\u200b\u6ee1\u8db3\u200b
- \u200b\u82e5\u200b\\(g\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u4e14\u200b\u975e\u51cf\u200b\uff0c\\(f\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f'\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b
- \u200b\u82e5\u200b\\(g\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u4e14\u200b\u975e\u589e\u200b\uff0c\\(f\\)\u200b\u4e3a\u200b\u51f9\u200b\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f'\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b
- \u200b\u5f53\u200b\\(g: \\bbR^k\\rightarrow \\bbR\\)\u200b\u65f6\u200b\uff0c\\(f' = g\\circ f = g(f_1(x), \\ldots, f_k(x))\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
- \u200b\u82e5\u200b\\(g\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u4e14\u200b\u5728\u200b\u5404\u4e2a\u200b\u5206\u91cf\u200b\u4e0a\u200b\u975e\u51cf\u200b\uff0c\\(f_i\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f'\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b
- \u200b\u82e5\u200b\\(g\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u4e14\u200b\u5728\u200b\u5404\u4e2a\u200b\u5206\u91cf\u200b\u4e0a\u200b\u975e\u589e\u200b\uff0c\\(f_i\\)\u200b\u4e3a\u200b\u51f9\u200b\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f'\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b
-
\u200b\u6700\u5c0f\u5316\u200b\uff1a\u200b\u82e5\u200b\\(f(x, y): \\bbR^m\\times \\bbR^n\\rightarrow \\bbR\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\u5bf9\u4e8e\u200b\u975e\u7a7a\u200b\u51f8\u96c6\u200b\\(C\\)\uff0c\\(\\inf_{y\\in C}f(x, y)\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u3002
- \u200b\u900f\u89c6\u200b\u51fd\u6570\u200b\uff1a\\(g(x, t) = tf(x / t)\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_6","title":"\u5171\u8f6d\u200b\u51fd\u6570","text":"\u200b\u51fd\u6570\u200b\\(f: \\bbR^n\\rightarrow \\bbR\\)\u200b\u7684\u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\\(f^*: \\bbR^n\\rightarrow\\bbR\\)\u200b\u4e3a\u200b
\\[ f^*(y)\\triangleq \\sup_{x\\in \\mathbf{dom}f} (y^\\top x - f(x)) \\] \u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002\\(f^{**}\\)\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u548c\u200b\\(f\\)\u200b\u76f8\u7b49\u200b\uff0c\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u65f6\u200b\uff0c\\(f^{**} = f\\)\u3002
\u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\u7684\u200b\u51f8\u6027\u200b \u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u51fd\u6570\u200b\\(f: \\bbR^n\\rightarrow \\bbR\\)\u200b\u548c\u200b\\(x\\in \\bbR^n\\)\uff0c\\(g(y, x) = y^\\top x - f(x)\\)\u200b\u4e3a\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\uff08\u200b\u4e5f\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff09
\\(f^*(y)\\)\u200b\u4e3a\u200b\\(g(y, x)\\)\u200b\u5173\u4e8e\u200b\\(x\\)\u200b\u7684\u200b\u9010\u70b9\u200b\u4e0a\u200b\u786e\u754c\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u6839\u636e\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u51fd\u6570\u200b\\(f\\)\u200b\u53ca\u5176\u200b\u5171\u8f6d\u200b\u6ee1\u8db3\u200b
\\[ f(x) + f^*(y)\\geq x^\\top y \\] \u200b\u4e8c\u6b21\u200b\u51fd\u6570\u200b\u7684\u200b\u5171\u8f6d\u200b \u200b\u5bf9\u4e8e\u200b\u4e8c\u6b21\u200b\u51fd\u6570\u200b\\(f(x) = \\frac{1}{2} x^\\top Qx, Q\\in \\bbS_{\\plus\\plus}^n\\)\uff0c\u200b\u5176\u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ f^*(y) = \\frac{1}{2} y^\\top Q^{-1}y \\] \u200b\u8303\u6570\u200b\u7684\u200b\u5171\u8f6d\u200b \u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u8303\u6570\u200b\\(\\Vert\\cdot\\Vert\\)\uff0c\u200b\u5176\u200b\u5bf9\u5076\u200b\u8303\u6570\u200b\u4e3a\u200b\\(\\Vert\\cdot\\Vert_*\\)\uff0c\u200b\u5219\u200b\\(f(x) = \\Vert x\\Vert\\)\u200b\u7684\u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ f^*(y) = \\left\\{ \\begin{aligned} & 0 & \\Vert y\\Vert_* \\leq 1 \\\\ & \\infty & \\text{otherwise} \\end{aligned} \\right. \\] \u200b\u51fd\u6570\u200b\u548c\u200b\u7684\u200b\u5171\u8f6d\u200b\u7b49\u4e8e\u200b\u5176\u200b\u5171\u8f6d\u200b\u7684\u200b\u548c\u200b
\\[ (f + g)^* = f^* + g^* \\] \u200b\u5bf9\u4e8e\u200b\u53ef\u5fae\u200b\u51fd\u6570\u200b\\(f\\)\uff0c\u200b\u6709\u200b
\\[ \\begin{gather*} f(y) = z^\\top \\nabla f(z) - f(z) \\\\ \\nabla f(z) = y \\end{gather*} \\] \u200b\u7ebf\u6027\u53d8\u6362\u200b\u7684\u200b\u5171\u8f6d\u200b \u200b\u8bbe\u200b\\(g(x) = f(Ax + b)\\)\uff0c\u200b\u5176\u4e2d\u200b\\(A\\in \\bbR^{n\\times n}\\)\u200b\u4e14\u200b\u6ee1\u200b\u79e9\u200b\uff0c\u200b\u5219\u200b
\\[ \\begin{aligned} g^*(y) &= \\sup_{x} (x^\\top y - f(Ax + b)) \\\\ &= \\sup_{x} [A^{-1}[(Ax + b) - b]]^\\top y - f(Ax + b) \\\\ &= \\sup_x [(A^{-1}(Ax + b))^\\top y - f(Ax + b)] - b^\\top A^{-\\top}y \\\\ &= \\sup_x [(Ax+b)^\\top (A^{-\\top}y) - f(Ax + b)] - b^\\top A^{-\\top}y \\\\ &= f^*(A^{-\\top}y) - b^\\top A^{-\\top}y \\end{aligned} \\] \u200b\u8bbe\u200b\\(h(x) = af(x) + b\\)\uff0c\u200b\u5219\u200b\uff1a
\\[ \\begin{aligned} h^*(y) &= \\sup_x y^\\top x - af(x) - b \\\\ &= \\sup_{x} a(a^{-1}y^\\top x - f(x)) - b \\\\ &= af^*(a^{-1}y) - b \\end{aligned} \\]"},{"location":"math/convex-optimization/convex-function/#_7","title":"\u62df\u51f8\u51fd\u6570","text":"\u200b\u82e5\u200b\u51fd\u6570\u200b\\(f\\)\u200b\u7684\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\\(\\{x|f(x)\\leq \\alpha\\}\\)\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(\\alpha\\)\u200b\u90fd\u200b\u4e3a\u200b\u51f8\u96c6\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u62df\u51f8\u51fd\u6570\u200b\u3002\u200b\u82e5\u200b\\(-f\\)\u200b\u4e3a\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u62df\u51f9\u51fd\u6570\u200b\u3002\u200b\u82e5\u200b\\(f\\)\u200b\u65e2\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u53c8\u200b\u662f\u200b\u62df\u51f9\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u62df\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u3002
\u200b\u6240\u6709\u200b\u7684\u200b\u51f8\u51fd\u6570\u200b\u90fd\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u3002\u200b\u4f46\u200b\u62df\u51f8\u51fd\u6570\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff0c\\(\\nabla f(x_0) = 0\\not \\Rightarrow f(x)\\geq f(x_0)\\)
"},{"location":"math/convex-optimization/convex-function/#_8","title":"\u6027\u8d28","text":"\u200b\u62df\u51f8\u51fd\u6570\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
-
\u200b\u51fd\u6570\u200b\\(f\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\mathbf{dom} f\\)\u200b\u662f\u200b\u51f8\u96c6\u200b\uff0c\u200b\u4e14\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b
\\[ f(\\theta x + (1 - \\theta)y)\\leq \\max\\{f(x), f(y)\\} \\] -
\u200b\u5bf9\u4e8e\u200b\u5b9a\u4e49\u200b\u5728\u200b\\(\\bbR\\)\u200b\u4e0a\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\\(f\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u5176\u4e2d\u200b\u4e4b\u4e00\u200b
- \\(f\\)\u200b\u662f\u200b\u5355\u8c03\u200b\u51fd\u6570\u200b
- \\(\\exists x_0\\)\uff0c\u200b\u5bf9\u4e8e\u200b\\(x\\geq x_0, f\\)\u200b\u975e\u51cf\u200b\uff0c\\(x\\leq x_0, f\\)\u200b\u975e\u589e\u200b
- \u200b\u5bf9\u4e8e\u200b\\(\\bbR\\rightarrow \\bbR\\)\u200b\u4e0a\u200b\u7684\u200b\u4efb\u610f\u200b\u5355\u8c03\u200b\u51fd\u6570\u200b\\(f\\)\uff0c\\(-f\\)\u200b\u4e5f\u200b\u662f\u200b\u5355\u8c03\u200b\u51fd\u6570\u200b\uff0c\u200b\u56e0\u6b64\u200b\\(f\\)\u200b\u662f\u200b\u62df\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_9","title":"\u4e00\u9636\u200b\u6761\u4ef6\u200b\u4e0e\u200b\u4e8c\u9636\u200b\u6761\u4ef6","text":"\uff08\u200b\u4e00\u9636\u200b\u6761\u4ef6\u200b\uff09\u200b\u5bf9\u4e8e\u200b\u5b9a\u4e49\u200b\u5728\u200b\u51f8\u96c6\u200b\u4e0a\u200b\u7684\u200b\u53ef\u5fae\u200b\u51fd\u6570\u200b\\(f: \\bbR^n\\rightarrow \\bbR, f\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b
\\[ \\forall x, y\\in \\mathbf{dom}f, f(y) \\leq f(x)\\Longrightarrow \\nabla f(x)^\\top (y - x)\\leq 0 \\] \u200b\u4e00\u9636\u200b\u6761\u4ef6\u200b\u7684\u200b\u51e0\u4f55\u200b\u89e3\u91ca\u200b \u200b\u6839\u636e\u200b\u62df\u51f8\u51fd\u6570\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(x\\)\uff0c\u200b\u5176\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\\(S_x = \\{y | f(y)\\leq f(x)\\}\\)\u200b\u5747\u200b\u4e3a\u200b\u51f8\u96c6\u200b\u3002
\u200b\u6839\u636e\u200b\u51f8\u96c6\u200b\u7684\u200b\u6027\u8d28\u200b\uff0c\u200b\u4efb\u4f55\u200b\u51f8\u96c6\u200b\u90fd\u200b\u80fd\u200b\u8868\u793a\u200b\u6210\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u5bf9\u5e94\u200b\u534a\u200b\u7a7a\u95f4\u200b\u7684\u200b\u4ea4\u96c6\u200b\u3002\u200b\u96c6\u5408\u200b\\(\\{y | \\nabla f(x)^\\top (y - x)\\leq 0\\}\\)\u200b\u662f\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\\(S_x\\)\u200b\u5728\u200b\\(x\\)\u200b\u5904\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u5bf9\u5e94\u200b\u7684\u200b\u534a\u200b\u7a7a\u95f4\u200b\u3002
\uff08\u200b\u4e8c\u9636\u200b\u6761\u4ef6\u200b\uff09\u200b\u5bf9\u4e8e\u200b\u5b9a\u4e49\u200b\u5728\u200b\u51f8\u96c6\u200b\u4e0a\u200b\u7684\u200b\u4e8c\u6b21\u200b\u53ef\u5fae\u200b\u51fd\u6570\u200b\\(f: \\bbR^n\\rightarrow \\bbR, f\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b
\\[ \\forall x\\in \\mathbf{dom} f, \\nabla f(x) = 0\\Longrightarrow \\nabla^2 f(x)\\succeq 0 \\] \u200b\u5373\u200b\\(f\\)\u200b\u5728\u200b\u68af\u5ea6\u200b\u4e3a\u200b\\(0\\)\u200b\u7684\u200b\u5730\u65b9\u200b\uff0c\u200b\u4e8c\u9636\u200b\u68af\u5ea6\u200b\u6b63\u5b9a\u200b\uff08\u200b\u975e\u8d1f\u200b\uff09\u3002
\u200b\u62df\u51f8\u51fd\u6570\u200b\u7684\u200b\u4e8c\u9636\u200b\u68af\u5ea6\u200b\u6700\u200b\u591a\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u8d1f\u200b\u7279\u5f81\u503c\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_10","title":"\u4fdd\u62df\u200b\u51f8\u200b\u8fd0\u7b97","text":"\u200b\u8bbe\u200b\\(f, g, f_1,\\ldots, f_k\\)\u200b\u4e3a\u200b\u62df\u51f8\u51fd\u6570\u200b\u3002\u200b\u5982\u672a\u200b\u6307\u660e\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u51fd\u6570\u200b\u5b9a\u4e49\u200b\u5728\u200b\\(\\bbR^n \\rightarrow \\bbR\\)\u200b\u4e0a\u200b\u3002\u200b\u4ee5\u4e0b\u200b\u51fd\u6570\u200b\u4e3a\u200b\u62df\u51f8\u51fd\u6570\u200b\uff1a
- \u200b\u975e\u8d1f\u200b\u52a0\u6743\u200b\u6700\u5927\u503c\u200b\uff1a\u200b\u8bbe\u200b\\(w_1, \\ldots, w_k\\geq 0, f' = \\max\\{w_1f_1(x), \\ldots, w_kf_k(x)\\}\\)\u200b\u4e3a\u200b\u62df\u51f8\u51fd\u6570\u200b\u3002
- \u200b\u590d\u5408\u200b\u51fd\u6570\u200b\uff1a\\(f' = g\\circ f\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5176\u4e2d\u200b\\(g: \\bbR\\rightarrow \\bbR\\)\u200b\u5355\u8c03\u200b\u975e\u51cf\u200b\u3002
- \u200b\u6700\u5c0f\u503c\u200b\uff1a\\(f(x, y): \\bbR^m\\times \\bbR^n\\rightarrow \\bbR\\)\u200b\u5173\u4e8e\u200b\\(x, y\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u51f8\u96c6\u200b\\(C, g(x) = \\inf_{y\\in C}f(x, y)\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#-","title":"\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570","text":"\u200b\u5b9a\u4e49\u200b\\(\\log 0 = -\\infty\\)\u3002\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u51fd\u6570\u200b\\(f: \\bbR^n\\rightarrow \\bbR_{\\plus}\\)\uff0c\u200b\u6709\u200b\\(\\log f\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\u79f0\u200b\\(f\\)\u200b\u4e3a\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\u3002\u200b\u82e5\u200b\\(1 / f\\)\u200b\u4e3a\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002
\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff08\u200b\u6307\u6570\u51fd\u6570\u200b\\(e^x\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\uff09\uff0c\u200b\u975e\u8d1f\u200b\u7684\u200b\u51f9\u200b\u51fd\u6570\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\uff0c\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\u662f\u200b\u62df\u51f9\u51fd\u6570\u200b\u3002
\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\u7684\u200b\u5145\u8981\u6761\u4ef6\u200b \\(f: \\bbR^n \\rightarrow \\bbR\\)\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b
\\[ f(\\theta x + (1 - \\theta)y)\\geq f^\\theta(x)f^{1 - \\theta}(y) \\] \u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(x, y\\in \\mathbf{dom} f, 0\\leq\\theta\\leq 1\\)\u200b\u6210\u7acb\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u4e8c\u6b21\u200b\u53ef\u5fae\u200b\u7684\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\\(f\\)\uff0c\u200b\u6709\u200b
\\[ f(x)\\nabla^2 f(x)\\preceq \\nabla f(x)^\\top \\nabla f(x) \\] \u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(x\\in \\mathbf{dom} f\\)\u200b\u6210\u7acb\u200b\uff0c\u200b\u53cd\u4e4b\u4ea6\u7136\u200b\u3002
\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\u4e4b\u200b\u548c\u200b\u4ecd\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\uff08\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\u4e4b\u200b\u548c\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f9\u200b\u51fd\u6570\u200b\uff09\uff0c\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u200b\uff08\u200b\u51f9\u200b\uff09\u200b\u51fd\u6570\u200b\u7684\u200b\u4e58\u79ef\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u200b\uff08\u200b\u51f9\u200b\uff09\u200b\u51fd\u6570\u200b\u3002
\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\u4e4b\u200b\u548c\u200b\u6027\u8d28\u200b\u7684\u200b\u62d3\u5c55\u200b \u200b\u8bbe\u200b\\(f(x, y): \\bbR^n\\times \\bbR^m\\rightarrow \\bbR\\)\u200b\u6ee1\u8db3\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(y\\)\uff0c\\(f(x, y)\\)\u200b\u5173\u4e8e\u200b\\(x\\)\u200b\u662f\u200b\u5bf9\u6570\u200b-\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b
\\[ \\int_{y} f(x, y)\\dd y \\] \u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-function/#_11","title":"\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u5b9a\u4e49\u200b\u7684\u200b\u51f8\u6027","text":"\u200b\u8bbe\u200b\\(K\\)\u200b\u4e3a\u200b\u6b63\u5e38\u200b\u9525\u200b\uff0c\u200b\u5b9a\u4e49\u200b\\(f(x)\\)\u200b\u7684\u200b\u589e\u51cf\u200b\u6027\u200b\u5982\u4e0b\u200b\u3002
- \\(f\\)\u200b\u4e3a\u200b\\(K\\)-\u200b\u589e\u200b\uff0c\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b\\(x\\succeq_K y, x\\not = y\\Longrightarrow f(x)\\succ_K f(y)\\)\uff0c\u200b\u82e5\u200b\\(-f\\)\u200b\u4e3a\u200b\\(K\\)-\u200b\u589e\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\\(f\\)\u200b\u4e3a\u200b\\(K\\)-\u200b\u975e\u200b\u589e\u51fd\u6570\u200b\u3002
- \\(f\\)\u200b\u4e3a\u200b\\(K\\)-\u200b\u975e\u51cf\u200b\uff0c\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(f\\)\u200b\u6ee1\u8db3\u200b\\(x\\succeq_K y\\Longrightarrow f(x)\\succeq_K f(y)\\)
\\(f\\)\u200b\u662f\u200b\\(K\\)-\u200b\u975e\u51cf\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\nabla f\\succeq_{K^*} 0\\)\uff0c\\(f\\)\u200b\u662f\u200b\\(K\\)-\u200b\u589e\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\nabla f\\succ_{K^*} 0\\)\u3002
\\(f\\)\u200b\u662f\u200b\\(K\\)-\u200b\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\forall x, y, \\theta f(x) + (1 - \\theta) f(y)\\succeq_K f(\\theta x + (1 - \\theta) y)\\)
\\(f\\)\u200b\u662f\u200b\u4e25\u683c\u200b\\(K\\)-\u200b\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\forall x\\not = y, \\theta f(x) + (1 - \\theta) f(y)\\succ_K f(\\theta x + (1 - \\theta) y)\\)
\\(f\\)\u200b\u662f\u200b\\(K\\)-\u200b\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\forall w\\succeq_{K^*} 0, w^\\top f(x)\\)\u200b\u4e3a\u200b\u51f8\u51fd\u6570\u200b\uff1b\\(f\\)\u200b\u662f\u200b\u4e25\u683c\u200b\\(K\\)-\u200b\u51f8\u51fd\u6570\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\forall w\\succeq_{K^*} 0, w\\not = 0, w^\\top f\\)\u200b\u662f\u200b\u4e25\u683c\u200b\u51f8\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/","title":"\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898","text":"\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u662f\u200b\u6307\u200b\u5728\u200b\u4e00\u5b9a\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff08\u200b\u7b49\u5f0f\u200b\u6216\u200b\u4e0d\u7b49\u5f0f\u200b\uff09\u200b\u4e0b\u200b\u4f7f\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u53d6\u5f97\u200b\u6700\u5927\u200b\uff08\u200b\u6700\u5c0f\u200b\uff09\u200b\u503c\u200b\u7684\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_2","title":"\u4e00\u822c\u200b\u4f18\u5316\u200b\u95ee\u9898","text":"\\(\\eqref{1}\\)\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
\\[ \\label{1} \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & f_i(x)\\leq 0 & i = \\oneto m\\\\ & h_i(x) = 0 & i = \\oneto p \\end{aligned} }} \\] \u200b\u5f0f\u200b\\(\\eqref{1}\\)\u200b\u4e2d\u200b\uff0c\\(x\\in \\bbR^n\\)\u200b\u4e3a\u200b\u4f18\u5316\u200b\u53d8\u91cf\u200b\uff0c\\(f_0(x): \\bbR^n \\ra \\bbR\\)\u200b\u4e3a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\uff0c\u200b\u4e0d\u7b49\u5f0f\u200b\\(f_i(x)\\leq 0\\)\u200b\u79f0\u4e3a\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\uff0c\\(h_0(x) = 0\\)\u200b\u79f0\u4e3a\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u3002\\(m = p = 0\\)\u200b\u7684\u200b\u95ee\u9898\u200b\u79f0\u4e3a\u200b\u65e0\u7ea6\u675f\u200b\u95ee\u9898\u200b\u3002
\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u548c\u200b\u5168\u4f53\u200b\u7ea6\u675f\u200b\u51fd\u6570\u200b\u7684\u200b\u5b9a\u4e49\u57df\u200b\u4ea4\u96c6\u200b\u662f\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u5b9a\u4e49\u57df\u200b\\(\\calD\\)\uff0c\u200b\u5f53\u200b\u5b58\u5728\u200b\\(x\\)\u200b\u6ee1\u8db3\u200b\u6240\u6709\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u65f6\u200b\uff0c\u200b\u79f0\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u662f\u200b\u53ef\u884c\u200b\u7684\u200b\uff0c\u200b\u5426\u5219\u200b\u662f\u200b\u4e0d\u200b\u53ef\u884c\u200b\u7684\u200b\u3002\u200b\u5b9a\u4e49\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u53ef\u884c\u200b\u57df\u200b\u4e3a\u200b\u5168\u4f53\u200b\u53ef\u884c\u200b\u70b9\u200b\u7684\u200b\u96c6\u5408\u200b\u3002
\\[ X = \\{x | f_i(x)\\leq 0, h_j(x) = 0, i = \\oneto m, j = \\oneto p\\} \\] \u200b\u5bf9\u4e8e\u200b\u6700\u5c0f\u5316\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u5176\u200b\u6700\u4f18\u200b\u503c\u4e3a\u200b
\\[ p^\\ast = \\inf\\{f_0(x) | x\\in X\\} \\] \u200b\u53ef\u884c\u200b\u57df\u200b\u4e3a\u200b\u7a7a\u96c6\u200b\u7684\u200b\u60c5\u51b5\u200b
\u200b\u6211\u4eec\u200b\u5141\u8bb8\u200b\\(p^*\\)\u200b\u53d6\u200b\\(\\pm\\infty\\)\uff0c\u200b\u5e76\u4e14\u200b\u5b9a\u4e49\u200b
\\[ \\begin{aligned} \\inf\\varnothing &= \\infty \\\\ \\sup\\varnothing &= -\\infty \\end{aligned} \\] \u200b\u5982\u679c\u200b\u5b58\u5728\u200b\u4e00\u7ec4\u200b\u53ef\u884c\u200b\u89e3\u200b\\(x_1, \\ldots, x_k\\)\u200b\u6ee1\u8db3\u200b\\(k\\ra\\infty\\)\u200b\u65f6\u200b\\(f_0(x_k)\\ra -\\infty\\)\uff0c\u200b\u79f0\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u65e0\u200b\u4e0b\u754c\u200b\u3002
\u200b\u5982\u679c\u200b\u5b58\u5728\u200b\\(x^*\\in X, f_0(x^*) = p^*\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\\(x^*\\)\u200b\u4e3a\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u5168\u4f53\u200b\u6700\u4f18\u200b\u89e3\u200b\u7684\u200b\u96c6\u5408\u200b\u4e3a\u200b\u6700\u4f18\u200b\u96c6\u200b\u3002\u200b\u82e5\u200b\u6700\u4f18\u200b\u96c6\u975e\u7a7a\u200b\uff0c\u200b\u79f0\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u53ef\u89e3\u200b\u3002\u200b\u5f53\u200b\u95ee\u9898\u200b\u4e0d\u53ef\u200b\u89e3\u65f6\u200b\uff0c\u200b\u96c6\u5408\u200b\\(\\{x | x\\in X, f_0(x) \\leq p^* + \\varepsilon\\}\\)\u200b\u79f0\u4e3a\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\\(\\varepsilon\\)-\u200b\u6b21\u4f18\u200b\u96c6\u200b\u3002
\u200b\u6700\u4f18\u200b\u503c\u200b\u4e0d\u53ef\u200b\u8fbe\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b
\u200b\u8bbe\u200b\u7ea6\u675f\u200b\u95ee\u9898\u200b\u4e3a\u200b\\(\\eqref{2}\\)\uff0c\u200b\u4ee5\u4e0b\u200b\u95ee\u9898\u200b\u90fd\u200b\u662f\u200b\u6700\u4f18\u200b\u503c\u200b\u4e0d\u53ef\u200b\u8fbe\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff1a
\\[ \\optim{\\min}{f_0(x)}{x > 0} \\label{2} \\] - \u200b\u5f53\u200b\\(f_0(x) = 1/x\\)\u200b\u65f6\u200b\uff0c\\(p^* = 0\\)\uff0c\u200b\u4f46\u200b\u6700\u4f18\u200b\u96c6\u4e3a\u200b\u7a7a\u200b\u3002
- \u200b\u5f53\u200b\\(f_0(x) = -\\log x\\)\u200b\u65f6\u200b\uff0c\\(p^* = -\\infty\\)\uff0c\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u65e0\u200b\u4e0b\u754c\u200b\u3002
\u200b\u5982\u679c\u200b\\(x_0\\)\u200b\u6ee1\u8db3\u200b\\(\\eqref{3}\\)\uff0c\u200b\u79f0\u4e3a\u200b\u5c40\u90e8\u200b\u6700\u4f18\u200b\u3002
\\[ \\begin{gathered} & x_0\\in X \\\\ & \\forall z\\in X, \\Vert z - x_0\\Vert_2\\leq R, f_0(z)\\geq f_0(x_0) \\end{gathered} \\label{3} \\] \u200b\u82e5\u200b\\(f_i(x^*) = 0\\)\uff0c\u200b\u79f0\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\\(f_i\\)\u200b\u5728\u200b\u6700\u4f18\u200b\u503c\u5904\u200b\u8d77\u200b\u4f5c\u7528\u200b\uff0c\u200b\u5426\u5219\u200b\u4e0d\u8d77\u4f5c\u7528\u200b\u3002\u200b\u5982\u679c\u200b\u4ece\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e2d\u200b\u5220\u9664\u200b\u67d0\u4e2a\u200b\u7ea6\u675f\u200b\u4e0d\u4f1a\u200b\u5f71\u54cd\u200b\u53ef\u884c\u200b\u57df\u200b\uff0c\u200b\u79f0\u200b\u7ea6\u675f\u200b\u5197\u4f59\u200b\u3002
\u200b\u53ef\u884c\u6027\u200b\u95ee\u9898\u200b
\u200b\u5f53\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\\(f_0(x) = 0\\)\u200b\u65f6\u200b\uff0c\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u662f\u200b\u4e00\u4e2a\u200b\u53ef\u884c\u6027\u200b\u95ee\u9898\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b
\\[ \\begin{gathered} p^* = -\\infty \\Lolra X = \\varnothing \\\\ p^* = 0 \\Lolra X \\not = \\varnothing \\end{gathered} \\] \u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\uff1a
- \u200b\u7ea6\u675f\u200b\u7684\u200b\u53f3\u7aef\u200b\u9879\u4e3a\u200b\u96f6\u200b
- \u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\u4e3a\u200b\u6781\u5c0f\u200b\u5316\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b
- \u200b\u9664\u4e86\u200b\u975e\u8d1f\u200b\u7ea6\u675f\u200b\u4ee5\u5916\u200b\uff0c\u200b\u4e0d\u200b\u5305\u542b\u200b\\(\\geq\\)\u200b\u7ea6\u675f\u200b
"},{"location":"math/convex-optimization/convex-optimization/#_3","title":"\u95ee\u9898\u200b\u7684\u200b\u7b49\u4ef7\u200b\u53d8\u6362","text":"\u200b\u4e00\u4e9b\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u6027\u8d28\u200b\u53ef\u80fd\u200b\u4e0d\u591f\u200b\u5f3a\u200b\u5bfc\u81f4\u200b\u96be\u4ee5\u200b\u8fdb\u884c\u200b\u4f18\u5316\u200b\uff0c\u200b\u6b64\u65f6\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e00\u4e9b\u200b\u7b49\u4ef7\u200b\u53d8\u6362\u200b\uff0c\u200b\u5c06\u200b\u539f\u672c\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u8f6c\u53d8\u200b\u4e3a\u200b\u6027\u8d28\u200b\u8f83\u5f3a\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_4","title":"\u53d8\u91cf\u200b\u4ee3\u6362","text":"\u200b\u8bbe\u200b\u51fd\u6570\u200b\\(\\phi: \\bbR^n\\ra\\bbR^n\\)\u200b\u662f\u200b\u53cc\u5c04\u200b\uff0c\u200b\u4e14\u200b\u51fd\u6570\u200b\u7684\u200b\u503c\u57df\u200b\u5305\u542b\u200b\u95ee\u9898\u200b\u7684\u200b\u5b9a\u4e49\u57df\u200b\uff0c\u200b\u5219\u200b\u5982\u4e0b\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e0e\u200b\u539f\u200b\u95ee\u9898\u200b\\(\\eqref{1}\\)\u200b\u7b49\u4ef7\u200b\uff1a
\\[ \\optim{\\min}{f_0(\\phi(z))}{\\cases{ \\begin{aligned} & f_i(\\phi(z))\\leq 0 & i = \\oneto m \\\\ & h_i(\\phi(z)) = 0 & i = \\oneto p \\end{aligned} }} \\]"},{"location":"math/convex-optimization/convex-optimization/#_5","title":"\u51fd\u6570\u200b\u4ee3\u6362","text":"\u200b\u8bbe\u200b\u51fd\u6570\u200b\\(\\psi_0: \\bbR\\ra\\bbR\\)\u200b\u5355\u8c03\u200b\u9012\u589e\u200b\uff0c\\(\\psi_{1}, \\ldots, \\psi_{m}\\)\u200b\u6ee1\u8db3\u200b\\(u\\leq 0\\Lora \\psi_{i}(u) = 0\\)\uff0c\\(\\phi_{1}, \\ldots, \\psi_{p}\\)\u200b\u6ee1\u8db3\u200b\\(u = 0\\Lora \\phi_i(u) = 0\\)\uff0c\u200b\u5219\u200b\u5982\u4e0b\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e0e\u200b\u539f\u200b\u95ee\u9898\u200b\\(\\eqref{1}\\)\u200b\u7b49\u4ef7\u200b\uff1a
\\[ \\optim{\\min}{\\psi_0(f_0(x))}{\\cases{ \\begin{aligned} & \\psi_i(f_i(z))\\leq 0 & i = \\oneto m \\\\ & \\phi_i(h_i(z)) = 0 & i = \\oneto p \\end{aligned} }} \\]"},{"location":"math/convex-optimization/convex-optimization/#_6","title":"\u6d88\u9664\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f","text":"\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u52a0\u5165\u200b\u975e\u8d1f\u200b\u53d8\u91cf\u200b\u7684\u200b\u65b9\u5f0f\u200b\u5c06\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u548c\u200b\u975e\u8d1f\u200b\u7ea6\u675f\u200b\u3002
\\[ \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & s_i\\geq 0 & i = \\oneto m \\\\ & f_i(x) + s_i 0 & i = \\oneto m \\\\ & h_i(x) = 0 & i = \\oneto p \\end{aligned} }} \\] \u200b\u79f0\u200b\\(s_i\\)\u200b\u4e3a\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u5171\u6709\u200b\\(n + m\\)\u200b\u4e2a\u200b\u4f18\u5316\u200b\u53d8\u91cf\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_7","title":"\u6d88\u9664\u200b\u7b49\u5f0f\u200b\u7ea6\u675f","text":"\u200b\u8bbe\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u7684\u200b\u89e3\u96c6\u200b\u53ef\u4ee5\u200b\u7528\u200b\u53cc\u5c04\u200b\\(\\phi: \\bbR^k\\ra\\bbR^n\\)\u200b\u8868\u793a\u200b\uff0c\u200b\u5219\u200b\u539f\u200b\u95ee\u9898\u200b\\(\\eqref{1}\\)\u200b\u4e0e\u200b\u5982\u4e0b\u200b\u95ee\u9898\u200b\u7b49\u4ef7\u200b\uff1a
\\[ \\optim{\\min}{f_0(\\phi(z))}{f_i(\\phi(z))\\leq 0} \\] \u200b\u5bf9\u4e8e\u200b\u7ebf\u6027\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\\(Ax - b = 0\\)\uff0c\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\\(\\phi(z) = Fz + x_0\\)\uff0c\u200b\u5176\u4e2d\u200b\\(x_0\\)\u200b\u4e3a\u200b\\(Ax - b = 0\\)\u200b\u7684\u200b\u4e00\u4e2a\u200b\u7279\u89e3\u200b\uff0c\\(F\\)\u200b\u4e3a\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u7684\u200b\u96f6\u7a7a\u95f4\u200b\u7684\u200b\u4e00\u7ec4\u200b\u57fa\u200b\u6784\u6210\u200b\u7684\u200b\u77e9\u9635\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_8","title":"\u4f18\u5316\u200b\u90e8\u5206\u200b\u53d8\u91cf","text":"\u200b\u6ce8\u610f\u200b\u5230\u200b\\(\\inf_{x}\\inf{y} f(x, y) = \\inf_{(x, y)}f(x, y) = \\inf_{y}\\inf_x f(x, y)\\)\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5148\u200b\u4f18\u5316\u200b\u4e00\u90e8\u5206\u200b\u53d8\u91cf\u200b\uff0c\u200b\u518d\u200b\u4f18\u5316\u200b\u53e6\u200b\u4e00\u90e8\u5206\u200b\u53d8\u91cf\u200b\uff0c\u200b\u7531\u6b64\u200b\u5f97\u5230\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e0e\u200b\u539f\u200b\u95ee\u9898\u200b\\(\\eqref{1}\\)\u200b\u7b49\u4ef7\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_9","title":"\u4e0a\u5883\u200b\u56fe\u200b\u95ee\u9898","text":"\u200b\u5982\u4e0b\u200b\u95ee\u9898\u200b\u4e0e\u200b\u539f\u200b\u95ee\u9898\u200b\\(\\eqref{1}\\)\u200b\u7b49\u4ef7\u200b\uff1a
\\[ \\optim{\\min}{t}{\\cases{ \\begin{aligned} & f_0(x) - t\\leq 0 \\\\ & f_i(x)\\leq 0 & i = \\oneto m \\\\ & h_i(x) = 0 & i= \\oneto p \\end{aligned} }} \\]"},{"location":"math/convex-optimization/convex-optimization/#_10","title":"\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u53ca\u5176\u200b\u6027\u8d28","text":"\\(\\eqref{4}\\)\u200b\u662f\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff1a
\\[ \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & f_i(x)\\leq 0 & i = \\oneto m \\\\ & A^\\top x = b \\end{aligned} }} \\label{4} \\] \u200b\u5e76\u4e14\u200b\uff0c\u200b\u6709\u200b
- \\(A\\in \\bbR^{p\\times n}, b\\in \\bbR^p\\)
- \\(f_i, i\\in 0, \\ldots, m\\)\u200b\u662f\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u5982\u679c\u200b\\(f_0(x)\\)\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5219\u200b\u4e3a\u200b\u62df\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_11","title":"\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u6027\u8d28","text":"\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \u200b\u53ef\u884c\u200b\u57df\u200b\u662f\u200b\u51f8\u96c6\u200b
- \u200b\u4efb\u610f\u200b\u5c40\u90e8\u200b\u6700\u4f18\u200b\u89e3\u90fd\u200b\u662f\u200b\u5168\u5c40\u200b\u6700\u4f18\u200b\u89e3\u200b
- \u200b\u5982\u679c\u200b\\(f_0\\)\u200b\u53ef\u5fae\u200b\uff0c\u200b\u5219\u200b\\(\\forall x\\in X, \\nabla f_0(x)^\\top (x - x^*)\\geq 0\\)
- \u200b\u5bf9\u4e8e\u200b\u65e0\u7ea6\u675f\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u65b9\u7a0b\u200b\\(\\nabla f_0(x) = 0\\)\u200b\u7684\u200b\u89e3\u5373\u200b\u4e3a\u200b\u6700\u4f18\u200b
- \u200b\u5bf9\u4e8e\u200b\u4ec5\u200b\u5305\u542b\u200b\u7ebf\u6027\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\\(Ax - b = 0\\)\u200b\u7684\u200b\u95ee\u9898\u200b\uff0c\u200b\u65b9\u7a0b\u200b\\(\\nabla f_0(x)^\\top v = 0, v\\in \\ker A\\)\u200b\u7684\u200b\u89e3\u4e3a\u200b\u6700\u4f18\u200b
- \u200b\u5bf9\u4e8e\u200b\u4ec5\u200b\u5305\u542b\u200b\u7b26\u53f7\u200b\u7ea6\u675f\u200b\\(x\\succeq 0\\)\u200b\u7684\u200b\u95ee\u9898\u200b\uff0c\\(\\nabla f_0(x)\\succeq 0, \\nabla f_0(x)^\\top x = 0\\)\u200b\u7684\u200b\u89e3\u5373\u200b\u4e3a\u200b\u6700\u4f18\u200b\uff08\u200b\u89e3\u200b\u548c\u200b\u6b64\u5904\u200b\u7684\u200b\u68af\u5ea6\u200b\u81f3\u5c11\u200b\u6709\u200b\u4e00\u4e2a\u200b\u5206\u91cf\u200b\u4e3a\u200b\u96f6\u200b\uff09\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_12","title":"\u4fdd\u51f8\u200b\u8fd0\u7b97","text":"\u200b\u5bf9\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u8fdb\u884c\u200b\u5982\u4e0b\u200b\u53d8\u6362\u200b\uff0c\u200b\u5f97\u5230\u200b\u7684\u200b\u95ee\u9898\u200b\u4ecd\u7136\u200b\u662f\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b
- \u200b\u6d88\u9664\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b
- \u200b\u5f15\u5165\u200b\uff08\u200b\u7ebf\u6027\u200b\uff09\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b
- \u200b\u5f15\u5165\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b
- \u200b\u8f6c\u5316\u200b\u4e3a\u200b\u4e0a\u200b\u5883\u56fe\u200b\u95ee\u9898\u200b
- \u200b\u5206\u6b65\u200b\u4f18\u5316\u200b\u53d8\u91cf\u200b
"},{"location":"math/convex-optimization/convex-optimization/#_13","title":"\u62df\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u6027\u8d28","text":"\u200b\u62df\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u5b58\u5728\u200b\uff08\u200b\u4e0d\u662f\u200b\u5168\u5c40\u200b\u6700\u4f18\u200b\u7684\u200b\uff09\u200b\u5c40\u90e8\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u53ef\u5fae\u200b\u7684\u200b\u62df\u51f8\u51fd\u6570\u200b\\(f_0\\)\uff0c\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\u4ecd\u7136\u200b\u6210\u7acb\u200b\uff1a
\\[ \\forall x\\in X, \\nabla f_0(x)^\\top (x - x^*)\\geq 0 \\] \u200b\u4f46\u200b\u4f7f\u5f97\u200b\\(\\forall x\\in X, \\nabla f_0(x)^\\top (x - y)\\geq 0\\)\u200b\u6210\u7acb\u200b\u7684\u200b\\(y\\)\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u5168\u5c40\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002\u200b\u62df\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u200b\u7684\u200b\u5145\u8981\u6761\u4ef6\u200b\u4e3a\u200b
\\[ \\nabla f_0(x)^\\top (y - x) > 0, y\\in X - \\{x\\} \\] \u200b\u62df\u51f8\u51fd\u6570\u200b\u7684\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u662f\u200b\u51f8\u96c6\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e00\u7ec4\u200b\u51f8\u51fd\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u4e0d\u7b49\u5f0f\u200b\u6761\u4ef6\u200b\u8868\u793a\u200b\u5176\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\u3002\u200b\u7531\u6b64\u200b\uff0c\u200b\u62df\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u53ef\u4ee5\u200b\u5bf9\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u8fdb\u884c\u200b\u4e8c\u5206\u200b\u4ee5\u200b\u6784\u9020\u200b\u76f8\u5e94\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u6c42\u89e3\u200b\u6700\u4f18\u200b\u503c\u200b\\(p^*\\)\u3002\u200b\u5bf9\u4e8e\u200b\u5f62\u200b\u5982\u200b\\(\\eqref{4}\\)\u200b\u7684\u200b\u62df\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u6784\u9020\u200b\u53ef\u884c\u6027\u200b\u95ee\u9898\u200b\\(\\eqref{5}\\)\uff1a
\\[ \\optim{\\min}{0}{\\cases{ \\begin{aligned} & \\phi(x; t)\\leq 0 \\\\ & f_i(x)\\leq 0 & i = \\oneto m \\\\ & Ax=b \\end{aligned} }} \\label{5} \\] \u200b\u5176\u4e2d\u200b\\(\\phi(x, t): \\bbR^n\\times \\bbR\\ra\\bbR\\)\u200b\u662f\u200b\u6ee1\u8db3\u200b\\(f_0(x) \\leq t\\Lolra \\phi(x, t)\\leq 0\\)\u200b\u7684\u200b\u51f8\u51fd\u6570\u200b\u3002
\u200b\u5982\u679c\u200b\u5bf9\u4e8e\u200b\u67d0\u4e2a\u200b\\(t\\)\uff0c\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\\(\\eqref{5}\\)\u200b\u53ef\u884c\u200b\uff0c\u200b\u5219\u200b\u5728\u200b\\(f_0(x) \\geq t\\)\u200b\u7684\u200b\u533a\u95f4\u200b\u5185\u200b\u5bfb\u627e\u200b\u6700\u4f18\u200b\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u5728\u200b\\(f_0(x) < t\\)\u200b\u7684\u200b\u533a\u95f4\u200b\u5185\u200b\u5bfb\u627e\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#-","title":"\u51e0\u4f55\u200b\u89c4\u5212\u200b - \u200b\u8f6c\u5316\u200b\u4e3a\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898","text":"\u200b\u5f62\u200b\u5982\u200b\\(\\eqref{5}\\)\u200b\u7684\u200b\u51fd\u6570\u200b\u79f0\u4e3a\u200b\u5355\u9879\u5f0f\u200b\uff0c\u200b\u5355\u9879\u5f0f\u200b\u7684\u200b\u548c\u200b\u79f0\u4e3a\u200b\u6b63\u9879\u200b\u5f0f\u200b\u3002
\\[ f(x) = c\\prod_{i=1}^n x_i^{a_i} \\label{5} \\] \u200b\u5f0f\u200b\u4e2d\u200b\uff0c\\(x\\in \\bbR^n_{\\plus\\plus}, c > 0\\)\u3002
\u200b\u5f62\u200b\u5982\u200b\\(\\eqref{6}\\)\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e3a\u200b\u51e0\u4f55\u200b\u89c4\u5212\u200b\uff08GP\uff09
\\[ \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & f_i(x)\\leq 1 & i = \\oneto m \\\\ & h_i(x) = 1 & i = \\oneto p \\end{aligned} }} \\label{6} \\] \u200b\u5176\u4e2d\u200b\\(f_i\\)\u200b\u4e3a\u200b\u6b63\u200b\u9879\u5f0f\u200b\uff0c\\(h_i\\)\u200b\u4e3a\u200b\u5355\u9879\u5f0f\u200b\u3002
\u200b\u51e0\u4f55\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u4e0d\u662f\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u4f46\u662f\u200b\u53ef\u4ee5\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u7b49\u4ef7\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_14","title":"\u4e00\u4e9b\u200b\u5e38\u89c1\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898","text":""},{"location":"math/convex-optimization/convex-optimization/#_15","title":"\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898","text":"\u200b\u5982\u679c\u200b\\(\\eqref{4}\\)\u200b\u4e2d\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u548c\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u90fd\u200b\u662f\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u65f6\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e3a\u200b\u7ebf\u6027\u89c4\u5212\u200b\uff08LP\uff09\u3002
\\[ \\optim{\\min}{c^\\top x + d}{\\cases{ \\begin{aligned} & Gx\\preceq h \\\\ & Ax = b \\end{aligned} }} \\] \u200b\u6d88\u9664\u200b\u7ebf\u6027\u89c4\u5212\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e2d\u200b\u7684\u200b\u5e38\u6570\u200b\u9879\u200b\u3001\u200b\u5f15\u5165\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\u4ee5\u200b\u6d88\u9664\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u3001\u200b\u4f7f\u7528\u200b\u975e\u8d1f\u200b\u53d8\u91cf\u200b\u8868\u793a\u200b\u65e0\u7ea6\u675f\u200b\u53d8\u91cf\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\uff1a
\\[ \\optim{\\min}{c^\\top x}{\\cases{ \\begin{aligned} & A^\\top x = b \\\\ & x\\succeq 0 \\end{aligned} }} \\label{7} \\] \u200b\u5982\u679c\u200b\\(\\eqref{4}\\)\u200b\u4e2d\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u662f\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u4e4b\u200b\u6bd4\u200b\uff0c\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u65f6\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\uff0c\u200b\u6b64\u65f6\u200b\u5f97\u5230\u200b\u7ebf\u6027\u200b\u5206\u5f0f\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u3002
\\[ \\optim{\\min}{\\frac{c^\\top x + d}{e^\\top x + f}}{\\cases{ \\begin{aligned} & Gx\\preceq h \\\\ & Ax = b \\end{aligned} }} \\] \u200b\u7ebf\u6027\u200b\u5206\u5f0f\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u662f\u200b\u62df\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8f6c\u5316\u200b\u5982\u4e0b\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b
\\[ \\optim{\\min}{c^\\top y + dz}{\\cases{ \\begin{aligned} & Gy - hz\\preceq 0 \\\\ & Ay - bz = 0 \\\\ & e^\\top y + fz = 1 \\\\ & z\\geq 0 \\end{aligned} }} \\] \u200b\u7531\u4e8e\u200b\u4e00\u7ec4\u200b\u62df\u51f8\u51fd\u6570\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u4ecd\u200b\u662f\u200b\u62df\u51f8\u51fd\u6570\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u7ebf\u6027\u200b\u5206\u5f0f\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u66ff\u6362\u200b\u4e3a\u200b\u4e00\u200b\u7ec4\u5206\u200b\u5f0f\u200b\u51fd\u6570\u200b\u7684\u200b\u6700\u5927\u503c\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4ecd\u7136\u200b\u662f\u200b\u62df\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_16","title":"\u4e8c\u6b21\u200b\u4f18\u5316\u200b\u95ee\u9898","text":"\u200b\u5982\u679c\u200b\\(\\eqref{4}\\)\u200b\u4e2d\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u548c\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u90fd\u200b\u662f\u200b\u51f8\u200b\u4e8c\u6b21\u200b\u578b\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e3a\u200b\u4e8c\u6b21\u200b\u7ea6\u675f\u200b\u4e8c\u6b21\u200b\u89c4\u5212\u200b\uff08QCQP\uff09\u200b\u95ee\u9898\u200b\u3002
\\[ \\optim{\\min}{\\frac 12x^\\top P_0x + q_0^\\top x + r}{\\cases{ \\begin{aligned} & \\frac 12x^\\top P_ix + q_i^\\top x + r_i\\leq 0 & i = \\oneto m \\\\ & Ax = b \\end{aligned} }} \\label{8} \\] \u200b\u5f0f\u200b\u4e2d\u200b\\(P_i\\in \\bbS^n_\\plus, q_i\\in \\bbR^n, A\\in \\bbR^{p\\times n}\\)\u3002
\u200b\u5982\u679c\u200b\\(\\eqref{8}\\)\u200b\u4e2d\u200b\u7684\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u662f\u200b\u7ebf\u6027\u200b\u7684\u200b\uff0c\u200b\u5219\u200b\u79f0\u4e3a\u200b\u4e8c\u6b21\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\uff08QP\uff09\u3002
\\[ \\optim{\\min}{\\frac 12x^\\top Px + q^\\top x + r}{\\cases{ \\begin{aligned} & Gx\\preceq h \\\\ & Ax = b \\end{aligned} }} \\label{9} \\] \u200b\u5f0f\u200b\u4e2d\u200b\\(G\\in \\bbR^{m\\times n}\\)
"},{"location":"math/convex-optimization/convex-optimization/#_17","title":"\u4e8c\u9636\u200b\u9525\u200b\u89c4\u5212","text":"\u200b\u5f53\u200b\\(\\eqref{4}\\)\u200b\u4e2d\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e3a\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\uff0c\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u6784\u6210\u200b\u4e8c\u9636\u200b\u51f8\u9525\u200b\uff0c\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u662f\u200b\u4e8c\u9636\u200b\u9525\u200b\u89c4\u5212\u200b\uff08SOCP\uff09\u3002
\\[ \\optim{\\min}{f^\\top x}{\\cases{ \\begin{aligned} & \\Vert A_ix + b\\Vert_2\\leq c_i^\\top x + d_i & i = \\oneto m \\\\ & Fx = g \\end{aligned} }} \\label{10} \\] \u200b\u79f0\u200b\\(\\Vert A_ix + b\\Vert_2\\leq c_i^\\top x + d_i\\)\u200b\u4e3a\u200b\u4e8c\u9636\u200b\u9525\u200b\u7ea6\u675f\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_18","title":"\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u4e0b\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898","text":"\u200b\u672c\u200b\u8282\u200b\u8ba8\u8bba\u200b\\(f_i: \\bbR^n\\ra\\bbR^{k_i}\\)\u200b\u5728\u200b\\(\\preceq_{K_i}\\)\u200b\u60c5\u5f62\u200b\u4e0b\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_19","title":"\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f","text":"\u200b\u5f62\u200b\u5982\u4e0b\u200b\u5f0f\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u79f0\u4e3a\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
\\[ \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & f_i\\preceq_{K_i} 0 & i = \\oneto m \\\\ & Ax = b \\end{aligned} }} \\] \u200b\u5f0f\u200b\u4e2d\u200b\\(f_0: \\bbR^n\\ra\\bbR\\)\uff0c\\(K_i\\subseteq \\bbR^{k_i}\\)\u200b\u4e3a\u200b\u6b63\u5e38\u200b\u9525\u200b\uff0c\\(f_i: \\bbR^n\\ra\\bbR^{k_i}\\)\u200b\u4e3a\u200b\\(K_i\\)-\u200b\u51f8\u51fd\u6570\u200b\u3002\u200b\u5927\u591a\u6570\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u7ed3\u8bba\u200b\u5728\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u4e0b\u200b\u4ecd\u7136\u200b\u6210\u7acb\u200b\u3002
"},{"location":"math/convex-optimization/convex-optimization/#_20","title":"\u9525\u200b\u89c4\u5212","text":"\u200b\u9525\u200b\u89c4\u5212\u200b\u662f\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b
\\[ \\optim{\\min}{c^\\top x}{\\cases{ \\begin{aligned} & Fx + g\\preceq_K 0 \\\\ & Ax = b \\end{aligned} }} \\] \u200b\u5f53\u200b\\(K = \\bbR^n_{\\plus\\plus}\\)\u200b\u65f6\u200b\uff0c\u200b\u9525\u200b\u89c4\u5212\u200b\u9000\u5316\u200b\u4e3a\u200bLP\u3002\u200b\u4eff\u7167\u200bLP\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u7684\u200b\u9525\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u3002
\\[ \\optim{\\min}{c^\\top x}{\\cases{ \\begin{aligned} & x\\succeq_K 0 \\\\ & Ax = b \\end{aligned} }} \\]"},{"location":"math/convex-optimization/convex-optimization/#_21","title":"\u534a\u5b9a\u200b\u89c4\u5212","text":"\u200b\u5f53\u200b\\(K\\in \\bbS^k_{\\plus}\\)\u200b\u65f6\u200b\uff0c\u200b\u76f8\u5e94\u200b\u7684\u200b\u9525\u200b\u89c4\u5212\u200b\u4e3a\u200b\u534a\u5b9a\u200b\u89c4\u5212\u200b\uff08SDP\uff09\u3002
\\[ \\optim{\\min}{c^\\top x}{\\cases{ \\begin{aligned} & \\sum_{i=1}^n x_iF_i + G\\preceq 0 \\\\ & Ax = b \\end{aligned} }} \\] \u200b\u5f0f\u200b\u4e2d\u200b\\(G, F_i\\in \\bbS^k\\)\u3002\u200b\u82e5\u200b\u8fd9\u4e9b\u200b\u77e9\u9635\u200b\u90fd\u200b\u662f\u200b\u5bf9\u89d2\u200b\u77e9\u9635\u200b\uff0cSDP\u200b\u9000\u5316\u200b\u4e3a\u200bLP\u3002\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\\(\\sum_{i=1}^n x_iF_i\\preceq G\\)\u200b\u79f0\u4e3a\u200b\u7ebf\u6027\u200b\u77e9\u9635\u200b\u4e0d\u7b49\u5f0f\u200b\uff08LMI\uff09\uff0c\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u5206\u5757\u200b\u5bf9\u89d2\u200b\u77e9\u9635\u200b\u5c06\u200b\u591a\u4e2a\u200bLMI\u200b\u7ec4\u5408\u200b\u5728\u200b\u4e00\u8d77\u200b\u3002
\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u7684\u200b\u534a\u5b9a\u200b\u89c4\u5212\u200b\u4e3a\u200b
\\[ \\optim{\\min}{\\mathbf{tr}(CX)}{\\cases{ \\begin{aligned} & \\mathbf{tr(A_iX)} = b_i & i = \\oneto p \\\\ & X\\succeq 0 \\end{aligned} }} \\]"},{"location":"math/convex-optimization/convex-optimization/#_22","title":"\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u5305\u542b\u200b\u5173\u7cfb","text":" - \u200b\u5f53\u200bQP\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e2d\u200b\u7684\u200b\\(P = 0\\)\u200b\u65f6\u200b\uff0cQP\u200b\u9000\u5316\u200b\u4e3a\u200bLP\u200b\u95ee\u9898\u200b
- \u200b\u5f53\u200bQCQP\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4e2d\u200b\u7684\u200b\\(P_i = 0\\)\u200b\u65f6\u200b\uff0cQCQP\u200b\u9000\u5316\u200b\u4e3a\u200bQP\u200b\u95ee\u9898\u200b
- \u200b\u5f53\u200bSOCP\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4e2d\u200b\u7684\u200b\\(c_i = 0\\)\u200b\u65f6\u200b\uff0cSOCP\u200b\u9000\u5316\u200b\u4e3a\u200bQCQP
- \u200b\u5f62\u200b\u5982\u200b\\(\\eqref{10}\\)\u200b\u7684\u200bSOCP\u200b\u4e0e\u200b\u5982\u4e0b\u200bSDP\u200b\u95ee\u9898\u200b\u7b49\u4ef7\u200b
\\[ \\optim{\\min}{f^\\top x}{\\cases{ \\begin{bmatrix} (c_i^\\top x + d_i)I & A_ix + b_i \\\\ (A_ix + b_i)I & (c_i^\\top + d_i) \\end{bmatrix}\\succeq_{\\bbS_\\plus^n} 0 }} \\] \u200b\u56e0\u6b64\u200b\uff0c\u200b\u6709\u200b
\\[ \\text{LP}\\subseteq \\text{QP}\\subseteq \\text{QCQP}\\subseteq \\text{SOCP}\\subseteq \\text{SDP} \\]"},{"location":"math/convex-optimization/convex-set/","title":"\u51f8\u96c6\u200b\u53ca\u5176\u200b\u6027\u8d28","text":"\u200b\u4ece\u200b\u76f4\u89c2\u200b\u610f\u4e49\u200b\u4e0a\u200b\u8bb2\u200b\uff0c\u200b\u51f8\u96c6\u200b\u5c31\u662f\u200b\u6ca1\u6709\u200b\u51f9\u200b\u8fdb\u53bb\u200b\u7684\u200b\u90e8\u5206\u200b\u7684\u200b\u96c6\u5408\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_2","title":"\u5b9a\u4e49","text":""},{"location":"math/convex-optimization/convex-set/#_3","title":"\u76f4\u7ebf","text":"\u200b\u8bbe\u200b\\(x_1 \\not = x_2\\)\u200b\u4e3a\u200b\\(\\mathbb R^n\\)\u200b\u4e0a\u200b\u7684\u200b\u4e24\u4e2a\u200b\u70b9\u200b\uff0c\u200b\u5219\u200b
- \\(y = \\theta x_1 + (1 - \\theta) x_2\\) \u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u6761\u200b\u76f4\u7ebf\u200b\u3002
- \\(y = \\theta x_1 + (1 - \\theta) x_2, 0\\leq\\theta\\leq 1\\) \u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u6761\u200b\u7ebf\u6bb5\u200b\u3002
\u200b\u76f4\u7ebf\u200b\\(y = \\theta x_1 + (1 - \\theta) x_2\\)\u200b\u662f\u200b\u4e00\u6761\u200b\u4ece\u200b\\(x_2\\)\u200b\u51fa\u53d1\u200b\uff0c\u200b\u6cbf\u200b\u5411\u91cf\u200b\\(x_1 - x_2\\)\u200b\u65b9\u5411\u200b\u5ef6\u4f38\u200b\u7684\u200b\u76f4\u7ebf\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_4","title":"\u4eff\u5c04\u200b\u96c6\u5408","text":"\u200b\u5bf9\u4e8e\u200b\\(\\mathbb R^n\\)\u200b\u4e2d\u200b\u7684\u200b\\(m\\)\u200b\u4e2a\u70b9\u200b\\(x_1, \\ldots, x_m\\)\uff0c\u200b\u82e5\u200b\\(\\sum_{i = 1}^m \\theta_i = 1\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\\(\\sum_{i=1}^m \\theta_ix_i\\)\u200b\u4e3a\u200b\\(x_1, \\ldots, x_m\\)\u200b\u7684\u200b\u4eff\u5c04\u200b\u7ec4\u5408\u200b\u3002
\u200b\u5982\u679c\u200b\u4e00\u7ec4\u200b\u5411\u91cf\u200b\\(x_1, \\ldots, x_m\\)\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u5411\u91cf\u200b\u90fd\u200b\u4e0d\u80fd\u200b\u7531\u200b\u5176\u4ed6\u200b\u5411\u91cf\u200b\u7ecf\u200b\u4eff\u5c04\u200b\u7ec4\u5408\u200b\u5f97\u5230\u200b\uff0c\u200b\u79f0\u200b\u8fd9\u7ec4\u200b\u5411\u91cf\u200b\u4eff\u5c04\u200b\u65e0\u5173\u200b\u3002
\u200b\u4eff\u5c04\u200b\u65e0\u5173\u200b\u4e0e\u200b\u7ebf\u6027\u200b\u65e0\u5173\u200b \u200b\u4e00\u7ec4\u200b\u5411\u91cf\u200b\\(x_0, x_1, \\ldots, x_m\\)\u200b\u4eff\u5c04\u200b\u65e0\u200b\uff08\u200b\u76f8\u200b\uff09\u200b\u5173\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u5411\u91cf\u200b\\(x_1 - x_0, \\ldots, x_m - x_0\\)\u200b\u7ebf\u6027\u200b\u65e0\u200b\uff08\u200b\u76f8\u200b\uff09\u200b\u5173\u200b\u3002
\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(C \\subseteq \\mathbb R^n\\)\uff0c\u200b\u82e5\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u4e2d\u200b\u7684\u200b\u4efb\u610f\u200b\u4e24\u4e2a\u200b\u4e0d\u540c\u70b9\u200b\u6784\u6210\u200b\u7684\u200b\u76f4\u7ebf\u200b\uff08\u200b\u5373\u200b\u5b83\u4eec\u200b\u7684\u200b\u4eff\u5c04\u200b\u7ec4\u5408\u200b\uff09\u200b\u4ecd\u7136\u200b\u4f4d\u4e8e\u200b\u96c6\u5408\u200b\u4e2d\u200b\uff0c\u200b\u5219\u200b\\(C\\)\u200b\u4e3a\u200b\u4eff\u5c04\u200b\u96c6\u5408\u200b\u3002
\\[ \\forall x_1, x_2 \\in C, x_1 \\not = x_2, \\forall \\theta\\in \\mathbb R, y = \\theta x_1 + (1 - \\theta) x_2\\in C \\] \u200b\u4eff\u5c04\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \\(C\\)\u200b\u4e2d\u200b\u5305\u542b\u200b\u5176\u4e2d\u200b\u4efb\u610f\u200b\u4e2a\u70b9\u200b\u7684\u200b\u4eff\u5c04\u200b\u7ec4\u5408\u200b\u3002
- \u200b\u96c6\u5408\u200b\\(V = \\{x - x_0 | x \\in C\\}\\)\u200b\u4e3a\u200b\\(\\mathbb R^n\\)\u200b\u7684\u200b\u5b50\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u4e14\u200b\u5176\u7ef4\u6570\u200b\u4e0e\u200b\u504f\u79fb\u200b\\(x_0\\)\u200b\u65e0\u5173\u200b\u3002\u200b\u5b9a\u4e49\u200b\u4eff\u5c04\u200b\u96c6\u5408\u200b\u7684\u200b\u7ef4\u6570\u200b\u4e3a\u200b\\(V\\)\u200b\u7684\u200b\u7ef4\u6570\u200b\u3002
\u200b\u8bbe\u200b\\(C\\)\u200b\u4e3a\u200b\u4efb\u610f\u200b\u96c6\u5408\u200b\uff0c\u200b\u5219\u200b\\(C\\)\u200b\u4e2d\u200b\u6240\u6709\u200b\u70b9\u200b\u7684\u200b\u4eff\u5c04\u200b\u7ec4\u5408\u200b\u79f0\u4e3a\u200b\\(C\\)\u200b\u7684\u200b\u4eff\u5c04\u200b\u5305\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\mathbf{aff} C\\)\uff0c\u200b\u4eff\u5c04\u200b\u5305\u662f\u200b\u5305\u542b\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u7684\u200b\u6700\u5c0f\u200b\uff08\u200b\u5373\u7ef4\u6570\u200b\u6700\u4f4e\u200b\u7684\u200b\uff09\u200b\u4eff\u5c04\u200b\u96c6\u5408\u200b\uff0c\u200b\u5176\u7ef4\u6570\u200b\u79f0\u4e3a\u200b\u4eff\u5c04\u200b\u7ef4\u6570\u200b\u3002
\u200b\u5f53\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u7684\u200b\u4eff\u5c04\u200b\u7ef4\u6570\u200b\\(\\dim \\mathbf{aff} C < n\\)\u200b\u65f6\u200b\uff0c\\(C^\\circ = \\varnothing\\)\u3002\u200b\u6b64\u65f6\u200b\u9700\u8981\u200b\u5b9a\u4e49\u200b\u76f8\u5bf9\u200b\u5185\u90e8\u200b\u4e0e\u200b\u76f8\u5bf9\u200b\u8fb9\u754c\u200b\u3002
- \u200b\u96c6\u5408\u200b\\(C\\)\u200b\u7684\u200b\u76f8\u5bf9\u200b\u5185\u90e8\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\\(\\mathbf{relint}C = \\{x\\in C | \\exists r\\in \\mathbb R_{ + + }, B(x, r)\\cap \\mathbf{aff} C \\subseteq C\\}\\)
- \u200b\u96c6\u5408\u200b\\(C\\)\u200b\u7684\u200b\u76f8\u5bf9\u200b\u8fb9\u754c\u200b\u5b9a\u4e49\u200b\u4e3a\u200b\\(\\mathbf{cl} C - \\mathbf{relint}C\\)\u3002
"},{"location":"math/convex-optimization/convex-set/#_5","title":"\u51f8\u96c6","text":"\u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\\(C\\subseteq \\mathbb R^n\\)\u200b\u4e2d\u200b\u7684\u200b\\(m\\)\u200b\u4e2a\u70b9\u200b\\(x_1, \\ldots, x_m\\)\uff0c\u200b\u82e5\u200b\\(\\sum_{i=1}^m \\theta_i = 1, \\theta_i \\geq 0\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\\(\\sum_{i=1}^m \\theta_i x_i\\)\u200b\u4e3a\u200b\\(x_1, \\ldots, x_m\\)\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b\u3002
\u200b\u82e5\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\u5185\u200b\u4efb\u610f\u200b\u4e24\u70b9\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b\u90fd\u200b\u5728\u200b\u8be5\u200b\u96c6\u5408\u200b\u4e2d\u200b\uff0c\u200b\u79f0\u8be5\u200b\u96c6\u5408\u200b\u4e3a\u200b\u51f8\u96c6\u200b\u3002
\\[ \\forall x_1, x_2\\in C, \\forall 0\\leq \\theta\\leq 1, \\theta x_1 + (1 - \\theta) x_2\\in C \\] \u200b\u96c6\u5408\u200b\\(C\\)\u200b\u7684\u200b\u6240\u6709\u200b\u70b9\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b\u79f0\u4e3a\u200b\u51f8\u5305\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\mathbf{conv}C\\)\uff0c\\(C\\)\u200b\u7684\u200b\u51f8\u200b\u5305\u662f\u200b\u5305\u542b\u200b\\(C\\)\u200b\u7684\u200b\u6700\u5c0f\u200b\u51f8\u96c6\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_6","title":"\u9525","text":"\u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\\(C\\)\uff0c\u200b\u82e5\u200b\\(\\forall x\\in C, \\forall \\theta\\geq 0, \\theta x\\in C\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\\(C\\)\u200b\u4e3a\u200b\u9525\u200b\u3002\u200b\u82e5\u200b\\(C\\)\u200b\u8fd8\u662f\u200b\u51f8\u96c6\u200b\uff0c\u200b\u5219\u200b\u79f0\u4e3a\u200b\u51f8\u9525\u200b\u3002\u200b\u51f8\u9525\u200b\u6ee1\u8db3\u200b
\\[ \\forall x_1, x_2\\in C, \\forall \\theta_1, \\theta_2 \\geq 0, \\theta_1x_1 + \\theta_2x_2 \\in C \\] \u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\\(C\\subseteq \\mathbb R^n\\)\u200b\u4e2d\u200b\u7684\u200b\\(m\\)\u200b\u4e2a\u70b9\u200b\\(x_1, \\ldots, x_m\\)\uff0c\u200b\u82e5\u200b\\(\\theta_i \\geq 0\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\\(\\sum_{i=1}^m \\theta_i x_i\\)\u200b\u4e3a\u200b\\(x_1, \\ldots, x_m\\)\u200b\u7684\u200b\u9525\u200b\u7ec4\u5408\u200b\u3002
\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u4e2d\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u7ec4\u6210\u200b\u7684\u200b\u6240\u6709\u200b\u9525\u200b\u7ec4\u5408\u200b\u79f0\u4e3a\u200b\u9525\u5305\u200b\uff0c\\(C\\)\u200b\u7684\u200b\u9525\u200b\u5305\u662f\u200b\u5305\u542b\u200b\\(C\\)\u200b\u7684\u200b\u6700\u5c0f\u200b\u51f8\u9525\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_7","title":"\u5e38\u89c1\u200b\u7684\u200b\u51f8\u96c6","text":"\u200b\u4ee5\u4e0b\u200b\u662f\u200b\u4e00\u4e9b\u200b\u5e73\u51e1\u200b\u51f8\u96c6\u200b\uff1a
- \u200b\u7a7a\u96c6\u200b\\(\\varnothing\\)\u3001\u200b\u5355\u70b9\u200b\u96c6\u200b\\(\\{x_0\\}\\)\u3001\u200b\u5168\u7a7a\u95f4\u200b\\(\\mathbb R^n\\)\u200b\u53ca\u5176\u200b\u5b50\u200b\u7a7a\u95f4\u200b\u90fd\u200b\u662f\u200b\u4eff\u5c04\u200b\u96c6\u200b\uff08\u200b\u4e5f\u200b\u662f\u200b\u51f8\u96c6\u200b\uff09\u3002
- \u200b\u4efb\u610f\u200b\u76f4\u7ebf\u200b\u90fd\u200b\u662f\u200b\u51f8\u96c6\u200b\uff1b\u200b\u8fc7\u200b\u539f\u70b9\u200b\u7684\u200b\u76f4\u7ebf\u200b\u662f\u200b\u4eff\u5c04\u200b\u96c6\u200b\uff1b\u200b\u7ebf\u6bb5\u200b\u662f\u200b\u51f8\u96c6\u200b\uff1b\u200b\u5c04\u7ebf\u200b\u662f\u200b\u51f8\u96c6\u200b\uff1b\u200b\u8d77\u70b9\u200b\u5728\u200b\u539f\u70b9\u200b\u7684\u200b\u5c04\u7ebf\u200b\u662f\u200b\u51f8\u200b\u9525\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_8","title":"\u8d85\u5e73\u9762\u200b\u4e0e\u200b\u534a\u200b\u7a7a\u95f4","text":"\u200b\u8bbe\u200b\\(a\\in \\mathbb R^n, a \\not = 0, b\\in \\mathbb R\\)\uff0c\u200b\u65b9\u7a0b\u200b\\(a^\\top x = b\\)\u200b\u786e\u5b9a\u200b\u4e86\u200b\u7ebf\u6027\u200b\u7a7a\u95f4\u200b\\(\\mathbb R^n\\)\u200b\u5185\u200b\u7684\u200b\u4e00\u4e2a\u200b\u8d85\u5e73\u9762\u200b\uff0c\u200b\u8fd9\u4e2a\u200b\u8d85\u5e73\u9762\u200b\u5c06\u200b\u7a7a\u95f4\u200b\u5206\u4e3a\u200b\u4e24\u200b\u90e8\u5206\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u5f00\u534a\u200b\u7a7a\u95f4\u200b\uff0c\u200b\u6bcf\u200b\u4e00\u90e8\u5206\u200b\u52a0\u4e0a\u200b\u8d85\u5e73\u9762\u200b\u79f0\u4e3a\u200b\u534a\u200b\u7a7a\u95f4\u200b\u3002
- \u200b\u8d85\u5e73\u9762\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\\(\\{x | a^\\top x = b\\}\\)
- \u200b\u534a\u200b\u7a7a\u95f4\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\\(\\{x | a^\\top x\\leq b\\}\\)
\u200b\u5411\u91cf\u200b\\(a\\)\u200b\u4e3a\u200b\u8d85\u5e73\u9762\u200b\u7684\u200b\u6cd5\u7ebf\u200b\u65b9\u5411\u200b\uff0c\u200b\u8d85\u5e73\u9762\u200b\u4e0a\u200b\u7684\u200b\u6240\u6709\u200b\u70b9\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u7531\u200b\u4e00\u4e2a\u200b\u8d77\u70b9\u200b\\(x_0\\)\u200b\u52a0\u4e0a\u200b\u4e0e\u200b\\(a\\)\u200b\u6b63\u4ea4\u200b\u7684\u200b\u6240\u6709\u200b\u5411\u91cf\u200b\u5f97\u5230\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_9","title":"\u7403","text":"\\(\\mathbb R^n\\)\u200b\u4e2d\u200b\u7684\u200b\u6b27\u6c0f\u200b\u7403\u4e3a\u200b2-\u200b\u8303\u6570\u200b\u4e0b\u200b\u7684\u200b\u7403\u200b\uff0c\u200b\u5373\u200b
\\[ B(x, r) = \\{y | \\Vert y - x\\Vert_2\\leq r\\} \\] \u200b\u5176\u4e2d\u200b\\(x\\in \\mathbb R^n\\)\u200b\u4e3a\u200b\u6b27\u6c0f\u200b\u7403\u200b\u7684\u200b\u7403\u5fc3\u200b\uff0c\\(r\\in \\mathbb R_}\\)\u200b\u4e3a\u200b\u5176\u200b\u534a\u5f84\u200b\u3002
\u200b\u692d\u7403\u200b\u662f\u200b\u5404\u4e2a\u200b\u65b9\u5411\u200b\u5ef6\u4f38\u200b\u7a0b\u5ea6\u200b\u4e0d\u540c\u200b\u7684\u200b\u6b27\u6c0f\u200b\u7403\u200b\uff0c\u200b\u5ef6\u4f38\u200b\u7a0b\u5ea6\u200b\u7531\u200b\u77e9\u9635\u200b\\(P\\in \\mathbb S_{\\)\u200b\u786e\u5b9a\u200b\uff0c\u200b\u534a\u8f74\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(\\sqrt{\\lambda_i}\\)\u3002
\\[ \\mathcal E = \\{y | (x - y)^\\top P^{-1}(x - y)\\leq 1\\} \\] \u200b\u5f53\u200b\\(P = r^2I\\)\u200b\u65f6\u200b\uff0c\\(\\mathcal E = B(x, r)\\)\u3002
\u200b\u5c06\u200b\u6b27\u6c0f\u200b\u7403\u4e2d\u200b\u7684\u200b2-\u200b\u8303\u6570\u200b\u6362\u6210\u200b\u5176\u4ed6\u200b\u7684\u200b\u8303\u6570\u200b\uff0c\u200b\u5c31\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u8303\u6570\u200b\u7403\u200b\uff1a
\\[ B_*(x, r) = \\{y | \\Vert y - x\\Vert_* \\leq r\\} \\]"},{"location":"math/convex-optimization/convex-set/#_10","title":"\u9525","text":"\u200b\u65b9\u7a0b\u200b\\(\\Vert x\\Vert_2 \\leq t\\)\u200b\u5728\u200b\\(R^{n+1}\\)\u200b\u4e0a\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u9525\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u4e8c\u9636\u200b\u9525\u200b\u3002\u200b\u9525\u200b\u53ef\u4ee5\u200b\u89c6\u4e3a\u200b\u7531\u200b\u4f4e\u200b\u4e00\u7ef4\u200b\u7684\u200b\u7403\u200b\u5806\u79ef\u200b\u5f97\u5230\u200b\u3002
\u200b\u5c06\u200b2-\u200b\u8303\u6570\u200b\u66ff\u6362\u200b\u4e3a\u200b\u5176\u4ed6\u200b\u8303\u6570\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u8303\u6570\u200b\u9525\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_11","title":"\u591a\u9762\u4f53","text":"\u200b\u6709\u9650\u200b\u4e2a\u200b\u7ebf\u6027\u200b\u7b49\u5f0f\u200b\u548c\u200b\u4e0d\u7b49\u5f0f\u200b\u7684\u200b\u89e3\u96c6\u200b\u6784\u6210\u200b\u591a\u9762\u4f53\u200b\u3002
\\[ \\begin{aligned} \\mathcal P &= \\{x | a_i^\\top x\\leq b_i, i = 1, \\ldots, m, c_j^\\top x = d_j, j = 1, \\ldots, p\\} \\\\ &= \\{x | Ax\\preceq b, Cx = d\\} \\end{aligned} \\] \u200b\u591a\u9762\u4f53\u200b\u53ef\u4ee5\u200b\u662f\u200b\u9525\u200b\uff0c\u200b\u5982\u975e\u200b\u8d1f\u200b\u8c61\u9650\u200b\u3002
\u200b\u5355\u7eaf\u5f62\u200b\u662f\u200b\u4e00\u79cd\u200b\u7279\u6b8a\u200b\u7684\u200b\u591a\u9762\u4f53\u200b\uff0c\u200b\u4e00\u7ec4\u200b\u4eff\u5c04\u200b\u65e0\u5173\u200b\u7684\u200b\u70b9\u200b\\(x_0, x_1, \\ldots, x_m\\)\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b\u786e\u5b9a\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u5355\u7eaf\u5f62\u200b\uff0c\u200b\u7528\u200b\\(\\mathbf{conv}\\{x_0, \\ldots, x_m\\}\\)\u200b\u8868\u793a\u200b\uff0c\u200b\u5176\u200b\u4eff\u5c04\u200b\u7ef4\u5ea6\u200b\u4e3a\u200b\\(m\\)\u3002
\\[ \\mathbf{conv}\\{x_0, \\ldots, x_m\\} = \\left\\{\\theta_0x_0 + \\theta_1x_1 + \\cdots + \\theta_mx_m \\middle| \\theta_i \\geq 0, \\sum_{i=1}^m \\theta_i = 1\\right\\} \\] - \u200b\u5355\u4f4d\u200b\u5355\u7eaf\u5f62\u200b\u662f\u200b\u96f6\u200b\u5411\u91cf\u200b\u548c\u200b\u5355\u4f4d\u5411\u91cf\u200b\u786e\u5b9a\u200b\u7684\u200b\\(n\\)\u200b\u7ef4\u200b\u5355\u7eaf\u5f62\u200b\uff0c\u200b\u5373\u200b\\(\\{x | x\\geq 0, \\mathbf{1}^\\top x \\leq 1\\}\\)\u3002
- \u200b\u6982\u7387\u200b\u5355\u7eaf\u5f62\u200b\u662f\u200b\u5355\u4f4d\u5411\u91cf\u200b\u786e\u5b9a\u200b\u7684\u200b\\(n-1\\)\u200b\u7ef4\u200b\u5355\u7eaf\u5f62\u200b\uff0c\u200b\u5373\u200b\\(\\{x | \\mathbf 1^\\top x = 1\\}\\)\u3002
\u200b\u5355\u7eaf\u5f62\u200b\u4e0e\u200b\u591a\u9762\u4f53\u200b \u200b\u5355\u7eaf\u5f62\u200b\u662f\u200b\u4e00\u79cd\u200b\u7279\u6b8a\u200b\u7684\u200b\u591a\u9762\u4f53\u200b\u3002\u200b\u8bbe\u200b\u5355\u7eaf\u5f62\u200b\\(C\\)\u200b\u7531\u200b\u4eff\u5c04\u200b\u65e0\u5173\u200b\u7684\u200b\u5411\u91cf\u200b\\(x_0, \\ldots, x_m\\)\u200b\u786e\u5b9a\u200b\uff0c\u200b\u5219\u200b
\\[ B = \\begin{bmatrix} x_1 - x_0 & \\cdots & x_m - x_0 \\end{bmatrix} \\] \\(B\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(n\\times m\\)\u200b\u7ef4\u200b\u7684\u200b\u6ee1\u200b\u79e9\u200b\u77e9\u9635\u200b\u3002\u200b\u4ee4\u200b\\(\\theta = \\begin{pmatrix}\\theta_0 & \\theta_1 & \\cdots & \\theta_m\\end{pmatrix}, \\theta' = \\begin{pmatrix}\\theta_1 & \\cdots & \\theta_m\\end{pmatrix}\\)\u3002\u200b\u5f53\u200b\u7a7a\u95f4\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u70b9\u200b\\(x\\)\u200b\u6ee1\u8db3\u200b\\(x\\in C\\)\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b
\\[ \\exists \\theta\\succeq 0, \\mathbf 1^\\top \\theta = 1, x = \\sum_{i=0}^m \\theta_i x_i \\Longleftrightarrow \\exists \\theta'\\succeq 0, \\mathbf 1^\\top \\theta' \\leq 1, x = x_0 + B\\theta' \\] \u200b\u800c\u200b\\(B\\)\u200b\u662f\u200b\u6ee1\u200b\u79e9\u200b\u77e9\u9635\u200b\uff0c\u200b\u5219\u200b\u5b58\u5728\u200b\u6ee1\u200b\u79e9\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u4f7f\u5f97\u200b
\\[ AB = \\begin{bmatrix} A_1 \\\\ A_2 \\end{bmatrix}B = \\begin{bmatrix} I \\\\ 0 \\end{bmatrix} \\] \u200b\u5219\u200b
\\[ Ax = \\begin{bmatrix} A_1 \\\\ A_2 \\end{bmatrix}x = \\begin{bmatrix} A_1x \\\\ A_2x \\end{bmatrix} = \\begin{bmatrix} A_1x_0 + \\theta' \\\\ A_2x_0 \\end{bmatrix} \\] \u200b\u8be5\u200b\u5355\u7eaf\u5f62\u200b\u7684\u200b\u591a\u9762\u4f53\u200b\u8868\u793a\u200b\u4e3a\u200b\uff1a
\\[ C = \\{x | A_1x\\succeq A_1x_0, A_2x = A_2x_0, \\mathbf 1^\\top A_1x - \\mathbf 1^\\top A_1x_0\\leq 1\\} \\]"},{"location":"math/convex-optimization/convex-set/#_12","title":"\u534a\u200b\u6b63\u5b9a\u200b\u9525","text":"\u200b\u8bbe\u200b\\(\\mathbb S^n_{+}\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\\(n\\)\u200b\u9636\u200b\u5bf9\u79f0\u200b\u534a\u200b\u6b63\u5b9a\u200b\u77e9\u9635\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u5219\u200b\\(\\mathbb S^n_+\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\u51f8\u9525\u200b\u3002\uff08\u200b\u6ce8\u610f\u200b\u6b64\u5904\u200b\u5bf9\u200b\u9525\u200b\u7684\u200b\u7406\u89e3\u200b\u548c\u200b\u8303\u6570\u200b\u9525\u200b\u4e0d\u540c\u200b\uff09\u3002
\\[ A\\succeq 0, B\\succeq 0\\Longrightarrow x^\\top (\\theta_1 A + \\theta_2 B)x \\geq 0\\Longrightarrow (\\theta_1A + \\theta_2B)\\succeq 0 \\]"},{"location":"math/convex-optimization/convex-set/#_13","title":"\u4fdd\u51f8\u200b\u8fd0\u7b97","text":"\u200b\u4fdd\u51f8\u200b\u8fd0\u7b97\u200b\u662f\u200b\u5728\u200b\u8fd0\u7b97\u200b\u524d\u540e\u200b\u4fdd\u6301\u200b\u96c6\u5408\u200b\u51f8\u6027\u200b\u7684\u200b\u8fd0\u7b97\u200b\u3002
- \u200b\u90e8\u5206\u200b\u548c\u200b\\(\\{(x, y_1 + y_2) | (x, y_1) \\in A, (x, y_2)\\in B\\}\\)\uff0c\u200b\u6709\u200b\u4e24\u79cd\u200b\u6781\u7aef\u200b\u60c5\u51b5\u200b
- \\(\\dim y_1 = \\dim y_2 = 0\\)\u200b\u65f6\u200b\u9000\u5316\u200b\u4e3a\u4ea4\u200b\u8fd0\u7b97\u200b\\(\\cap\\)\uff1a\u200b\u4e00\u4e2a\u200b\u51f8\u96c6\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\u4e00\u7cfb\u5217\u200b\u534a\u200b\u7a7a\u95f4\u200b\u7684\u200b\u4ea4\u96c6\u200b\u3002
- \\(\\dim x = 0\\)\u200b\u65f6\u200b\u9000\u5316\u200b\u4e3a\u200b\u548c\u200b\\(+: A + B = \\{x + y | x\\in A, y\\in B\\}\\)\u3002
- \u200b\u7ebf\u6027\u53d8\u6362\u200b\\(f: \\mathbb R^n\\rightarrow \\mathbb R^m = Ax + b\\)\u3002
- \u200b\u76f4\u79ef\u200b\\(\\times, A\\times B = \\{(x, y) | x\\in A, y\\in B\\}\\)\u3002
- \u200b\u6295\u5f71\u200b\u51fd\u6570\u200b\\(P: \\mathbb R^n\\times \\mathbb R_}\\rightarrow \\mathbb R^n\\)\uff0c\\(P(z, t) = z / t\\)\u3002\u200b\u6295\u5f71\u200b\u51fd\u6570\u200b\u5c06\u200b\\(\\mathbb R^{n}\\times \\mathbb R_{\\)\u200b\u7a7a\u95f4\u200b\u4e2d\u200b\u7684\u200b\u70b9\u200b\u6295\u5f71\u200b\u5230\u200b\u5e73\u9762\u200b\\(x_{n+1} = 1\\)\u200b\u4e0a\u200b\u3002
- \u200b\u7ebf\u6027\u53d8\u6362\u200b\u548c\u200b\u6295\u5f71\u200b\u51fd\u6570\u200b\u7684\u200b\u7ec4\u5408\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u7ebf\u6027\u200b\u5206\u5f0f\u200b\u51fd\u6570\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_14","title":"\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f","text":"\u200b\u5b9a\u4e49\u200b\u6b63\u5e38\u200b\u9525\u4e3a\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u9525\u200b\uff1a
- \u200b\u662f\u200b\u51f8\u200b\u9525\u200b\u3002
- \u200b\u662f\u200b\u95ed\u96c6\u200b\uff08\u200b\u5b58\u5728\u200b\u8fb9\u754c\u200b\uff09
- \u200b\u5b58\u5728\u200b\u5185\u90e8\u200b\u3002
- \u200b\u4e0d\u200b\u5305\u542b\u200b\u76f4\u7ebf\u200b\uff08\\(x\\in K, -x\\in K\\Longleftrightarrow x = 0\\)\uff09
\u200b\u6b63\u5e38\u200b\u9525\u200b\\(K\\)\u200b\u53ef\u4ee5\u200b\u5728\u200b\u7a7a\u95f4\u200b\\(\\mathbb R^n\\)\u200b\u4e0a\u200b\u5b9a\u4e49\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\uff1a
\\[ \\begin{gathered} x \\preceq_K y \\triangleq y - x\\in K \\\\ x \\prec_K y \\triangleq y - x\\in K^\\circ \\end{gathered} \\] - \u200b\u82e5\u200b\\(K = \\mathbb R_+\\)\uff0c\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u5b9e\u6570\u200b\u57df\u200b\u4e0a\u200b\u7684\u200b\u4e0d\u7b49\u5f0f\u200b\u3002
- \u200b\u82e5\u200b\\(K = \\mathbb R^n_+\\)\uff0c\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\\(\\mathbb R^n\\)\u200b\u7a7a\u95f4\u200b\u4e2d\u200b\u5411\u91cf\u200b\u7684\u200b\u5206\u91cf\u200b\u4e0d\u7b49\u5f0f\u200b\u3002
- \u200b\u82e5\u200b\\(K = \\mathbb S^n_+\\)\uff0c\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u77e9\u9635\u200b\u4e0d\u7b49\u5f0f\u200b\u3002
\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \\(x\\preceq_K y, u\\preceq_K v\\Longrightarrow x + u\\preceq_K y + v\\)\uff0c\u200b\u5bf9\u200b\\(\\prec_K\\)\u200b\u4e5f\u200b\u6210\u7acb\u200b\u3002
- \\(x\\preceq_K y, y\\preceq_K z\\Longrightarrow x\\preceq_K z\\)\uff0c\u200b\u5bf9\u200b\\(\\prec_K\\)\u200b\u4e5f\u200b\u6210\u7acb\u200b\u3002
- \\(x\\preceq_K y, \\alpha\\geq 0\\Longrightarrow \\alpha x\\preceq_K \\alpha y\\)\uff0c\u200b\u5f53\u200b\\(\\alpha > 0\\)\u200b\u65f6\u200b\u5bf9\u200b\\(\\prec_K\\)\u200b\u4e5f\u200b\u6210\u7acb\u200b\u3002
- \\(x\\prec_K y\\Longrightarrow x\\preceq_K y\\)
- \\(x\\preceq_K x, x\\not\\prec_K x\\)
- \\(x\\preceq_K y, y\\preceq_K x\\Longrightarrow x = y\\)
- \\(\\forall i\\in \\mathbb N, x_i\\preceq_K y_i, \\lim_{i\\rightarrow\\infty} x_i = x, \\lim_{i\\rightarrow\\infty} y_i = y\\Longrightarrow x\\preceq_K y\\)
- \\(x\\preceq_K y\\Longrightarrow \\exists u, \\exists v, x + u\\prec_K y+ v\\)
\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u4e0d\u662f\u200b\u7ebf\u6027\u200b\u7684\u200b\uff0c\u200b\u5373\u200b\\(\\exists x, \\exists y, x\\not \\preceq_K y, y\\not \\preceq_K x\\)\uff0c\u200b\u6b64\u65f6\u200b\u79f0\u200b\\(x, y\\)\u200b\u4e0d\u53ef\u200b\u6bd4\u200b\u3002
\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u504f\u5e8f\u200b\u5173\u7cfb\u200b\u540e\u200b\u5c31\u200b\u53ef\u4ee5\u200b\u5728\u200b\u6b64\u57fa\u7840\u200b\u4e0a\u200b\u5b9a\u4e49\u200b\u6781\u5c0f\u503c\u200b\u4e0e\u200b\u6700\u5c0f\u503c\u200b\u3002
- \\(x\\in S\\)\u200b\u662f\u200b\u6700\u5c0f\u200b\u5143\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(S\\subseteq \\{y | y\\succeq_K x\\}\\)\uff0c\u200b\u5373\u200b\\(S\\)\u200b\u4e2d\u200b\u5143\u7d20\u200b\u5168\u90e8\u200b\u4e0e\u200b\\(x\\)\u200b\u53ef\u6bd4\u200b\u4e14\u200b\u5927\u4e8e\u200b\u7b49\u4e8e\u200b\\(x\\)\u3002
- \\(x\\in S\\)\u200b\u662f\u200b\u6781\u5c0f\u200b\u5143\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(S\\cap \\{y | y\\preceq_K x\\} = \\{x\\}\\)\uff0c\u200b\u5373\u200b\\(S\\)\u200b\u4e2d\u200b\u4e0d\u200b\u5b58\u5728\u200b\u548c\u200b\\(x\\)\u200b\u53ef\u6bd4\u200b\u4e14\u200b\u6bd4\u200b\\(x\\)\u200b\u66f4\u200b\u5c0f\u200b\u7684\u200b\u5143\u7d20\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_15","title":"\u8d85\u5e73\u9762\u200b\u4e0e\u200b\u51f8\u96c6","text":""},{"location":"math/convex-optimization/convex-set/#_16","title":"\u5206\u79bb\u200b\u8d85\u5e73\u9762","text":"\u200b\u7ed9\u5b9a\u200b\u51f8\u96c6\u200b\\(A, B\\)\u200b\u6ee1\u8db3\u200b\\(A\\cap B = \\varnothing\\)\uff0c\u200b\u5219\u200b\u5b58\u5728\u200b\\(a\\in \\mathbb R^n, b\\in \\mathbb R, a\\not = 0\\)\u200b\u4f7f\u5f97\u200b
\\[ \\forall x\\in A, \\forall y\\in B, a^\\top x - b\\leq 0, a^\\top y - b\\geq 0 \\] \u200b\u79f0\u200b\\(\\{x | a^\\top x = b\\}\\)\u200b\u4e3a\u200b\u96c6\u5408\u200b\\(A, B\\)\u200b\u7684\u200b\u5206\u79bb\u200b\u8d85\u5e73\u9762\u200b\u3002
\u200b\u82e5\u200b\u8d85\u5e73\u9762\u200b\\(\\{x | a^\\top x = b\\}\\)\u200b\u6ee1\u8db3\u200b
\\[ \\forall x\\in A, \\forall y\\in B, a^\\top x - b < 0, a^\\top y - b > 0 \\] \u200b\u79f0\u200b\\(\\{x | a^\\top x = b\\}\\)\u200b\u4e25\u683c\u200b\u5206\u79bb\u200b\\(A, B\\)\uff0c\u200b\u4e25\u683c\u200b\u5206\u79bb\u200b\u7684\u200b\u8d85\u5e73\u9762\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u5b58\u5728\u200b\u3002
\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e25\u683c\u200b\u5206\u79bb\u200b\u7684\u200b\u4f8b\u5b50\u200b \u200b\u8bbe\u200b\u96c6\u5408\u200b\\(A = \\{(x, y) | xy\\geq 1\\}, B = \\{(x, y) | x\\leq 0, y\\geq 0\\}\\)\uff0c\u200b\u5219\u200b\u96c6\u5408\u200b\\(A, B\\)\u200b\u88ab\u200b\u8d85\u5e73\u9762\u200b\\(\\{(x, y) | x = 0\\}\\)\u200b\u548c\u200b\\(\\{(x, y) | y = 0\\}\\)\u200b\u5206\u79bb\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e25\u683c\u200b\u5206\u79bb\u200b\u4e24\u4e2a\u200b\u96c6\u5408\u200b\u7684\u200b\u8d85\u5e73\u9762\u200b\u3002
\u200b\u540c\u7406\u200b\uff0c\\(\\{(x, y) | y\\leq \\ln x\\}\\)\u200b\u548c\u200b\\(\\{(x, y) | x\\leq 0\\}\\)\u200b\u4e4b\u95f4\u200b\u4e5f\u200b\u4e0d\u200b\u5b58\u5728\u200b\u4e25\u683c\u200b\u5206\u79bb\u200b\u7684\u200b\u8d85\u5e73\u9762\u200b
\u200b\u8d85\u5e73\u9762\u200b\u5206\u79bb\u200b\u7684\u200b\u9006\u5b9a\u7406\u200b\u4e0d\u200b\u6210\u7acb\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_17","title":"\u652f\u6491\u200b\u8d85\u5e73\u9762","text":"\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(C\\subseteq \\mathbb R^n\\)\uff0c\u200b\u5bf9\u4e8e\u200b\\(x_0\\in \\partial C\\)\uff0c\u200b\u82e5\u200b\u5b58\u5728\u200b\\(a\\not = 0\\)\u200b\u6ee1\u8db3\u200b
\\[ \\forall x\\in C, a^\\top x\\leq a^\\top x_0 \\] \u200b\u79f0\u200b\\(\\{x| a^\\top x = a^\\top x_0\\}\\)\u200b\u4e3a\u200b\\(C\\)\u200b\u5728\u200b\\(x_0\\)\u200b\u5904\u200b\u7684\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u8fb9\u754c\u200b\u4e0a\u200b\u7684\u200b\u67d0\u4e2a\u200b\u70b9\u200b\uff0c\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u552f\u4e00\u200b\u3002
\u200b\u82e5\u200b\u96c6\u5408\u200b\\(C\\)\u200b\u662f\u200b\u51f8\u96c6\u200b\uff0c\u200b\u5219\u200b\u5176\u200b\u8fb9\u754c\u200b\u4e0a\u200b\u6240\u6709\u200b\u70b9\u200b\u90fd\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u3002\u200b\u7ed9\u5b9a\u200b\\(C\\)\u200b\u662f\u200b\u95ed\u96c6\u4e14\u200b\\(C^\\circ\\not =\\varnothing\\)\uff0c\u200b\u5219\u200b\u9006\u5b9a\u7406\u200b\u4e5f\u200b\u6210\u7acb\u200b\u3002
"},{"location":"math/convex-optimization/convex-set/#_18","title":"\u5bf9\u5076\u200b\u9525","text":"\u200b\u7ed9\u5b9a\u200b\u9525\u200b\\(K\\)\uff0c\u200b\u82e5\u200b\\(K^*\\)\u200b\u6ee1\u8db3\u200b
\\[ y\\in K^* \\Longleftrightarrow \\forall x\\in K, x^\\top y\\geq 0 \\] \u200b\u79f0\u200b\\(K^*\\)\u200b\u4e3a\u200b\\(K\\)\u200b\u7684\u200b\u5bf9\u5076\u200b\u9525\u200b\u3002\u200b\u5bf9\u5076\u200b\u9525\u200b\u5fc5\u5b9a\u200b\u662f\u200b\u51f8\u200b\u9525\u200b\u3002
\u200b\u5bf9\u5076\u200b\u9525\u200b\u7684\u200b\u51f8\u6027\u200b \u200b\u7ed9\u5b9a\u200b\u9525\u200b\\(K\\)\uff0c\u200b\u6709\u200b\\(\\forall x\\in K, \\forall \\theta\\geq 0, \\theta x \\in K\\)\uff0c\u200b\u5219\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\\(y\\in K^*\\)
\\[ \\theta x^\\top y = x^\\top (\\theta y)\\geq 0\\Longrightarrow \\theta y\\in K^* \\] \u200b\u56e0\u6b64\u200b\\(K^*\\)\u200b\u662f\u200b\u9525\u200b\u3002\u200b\u8bbe\u200b\\(y_1, y_2\\in K^*, x\\in K, 0\\leq \\theta\\leq 1\\)\uff0c\u200b\u5219\u200b
\\[ x^\\top (\\theta y_1)\\geq 0, x^\\top(1 - \\theta)y_2\\geq 0\\Longrightarrow x^\\top (\\theta y_1 + (1 - \\theta)y_2)\\geq 0 \\] \u200b\u56e0\u6b64\u200b\\(K^*\\)\u200b\u662f\u200b\u51f8\u200b\u7684\u200b\u3002
\u200b\u5bf9\u5076\u200b\u9525\u200b\u53ef\u80fd\u200b\u548c\u200b\u539f\u9525\u200b\u76f8\u7b49\u200b\uff0c\u200b\u5982\u200b\\(\\mathbb R^n_{+}, \\mathbb S^n_{+}\\)\u200b\u7684\u200b\u5bf9\u5076\u200b\u5206\u522b\u200b\u662f\u200b\u5176\u200b\u672c\u8eab\u200b\u3002
- \\(K^*\\)\u200b\u662f\u200b\u95ed\u51f8\u200b\u9525\u200b\u3002
- \\(K_1\\subseteq K_2\\Longrightarrow K_2^*\\subseteq K_1^*\\)
- \u200b\u82e5\u200b\\(K^\\circ\\not = \\varnothing\\)\uff0c\u200b\u5219\u200b\\(K^*\\)\u200b\u662f\u200b\u5c16\u200b\u7684\u200b\u3002
- \u200b\u82e5\u200b\\(\\mathbf{cl}K\\)\u200b\u662f\u200b\u5c16\u200b\u7684\u200b\uff0c\u200b\u5219\u200b\\((K^*)^\\circ\\not = \\varnothing\\)
- \\(K^{**} = \\mathbf{cl}K\\)
\u200b\u5bf9\u4e8e\u200b\u6b63\u5e38\u200b\u9525\u200b\\(K\\)\uff0c\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u5bf9\u5076\u200b\u9525\u200b\\(K^*\\)\uff0c\u200b\u4e24\u8005\u200b\u90fd\u200b\u80fd\u200b\u7528\u4e8e\u200b\u5b9a\u4e49\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\\(\\preceq_K\\)\uff0c\u200b\u79f0\u200b\\(\\preceq_{K^*}\\)\u200b\u4e3a\u200b\\(\\preceq_K\\)\u200b\u7684\u200b\u5bf9\u5076\u200b\u3002
\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7684\u200b\u5bf9\u5076\u200b\\(\\preceq_{K^*}\\)\u200b\u6ee1\u8db3\u200b
- \\(x\\preceq_K y\\Longleftrightarrow \\forall \\lambda\\succeq_{K^*}0, \\lambda^\\top x\\leq \\lambda^\\top y\\)
- \\(x\\prec_K y\\Longleftrightarrow \\forall \\lambda\\succeq_{K^*}0, \\lambda\\not = 0, \\lambda^\\top x < \\lambda^\\top y\\)
\u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\\(S\\)\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\\(x\\in S\\)\uff1a
- \\(x\\)\u200b\u5173\u4e8e\u200b\\(\\preceq_K\\)\u200b\u662f\u200b\u6700\u5c0f\u200b\u5143\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\\(\\forall \\lambda \\succeq_{K^\\ast}0\\)\uff0c\\(x\\)\u200b\u662f\u200b\u6781\u5c0f\u200b\u5316\u200b\\(\\lambda^\\top z, z\\in S\\)\u200b\u7684\u200b\u552f\u4e00\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u5373\u200b\\(\\forall \\lambda \\succeq_{K^\\ast}0, \\{z | \\lambda^\\top x = \\lambda^\\top z\\}\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\u4e25\u683c\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u3002
- \u200b\u82e5\u200b\\(x\\)\u200b\u5173\u4e8e\u200b\\(\\preceq_K\\)\u200b\u662f\u200b\u6781\u5c0f\u200b\u5143\u200b\uff0c\u200b\u5219\u200b\u5b58\u5728\u200b\\(\\lambda\\succ_{K^*} 0\\)\uff0c\\(\\forall z\\in S, \\lambda^\\top z\\geq \\lambda^\\top x\\)\uff0c\u200b\u4e5f\u200b\u5373\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u4e25\u683c\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u3002\u200b\u5f53\u200b\\(S\\)\u200b\u4e3a\u200b\u51f8\u200b\u96c6\u65f6\u200b\uff0c\u200b\u9006\u5b9a\u7406\u200b\u5bf9\u4e8e\u200b\u5b58\u5728\u200b\\(\\lambda\\succeq_{K^*}0\\)\u200b\u6210\u7acb\u200b\u3002
"},{"location":"math/convex-optimization/duality/","title":"\u5bf9\u5076","text":""},{"location":"math/convex-optimization/duality/#_2","title":"\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570","text":"\\[ \\optim{\\min}{f_0(x)}{\\cases{\\begin{aligned} & f_i(x)\\leq 0 & i = \\oneto m \\\\ & h_i(x) = 0 & i = \\oneto p \\end{aligned}}} \\label{1} \\] \u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u5f62\u200b\u5982\u200b\\(\\eqref{1}\\)\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff08\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u662f\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff09\uff0c\u200b\u5176\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(L: \\bbR^n\\times \\bbR^m\\times \\bbR^p\\)\uff0c\u200b\u5176\u4e2d\u200b\\(\\lambda, \\nu\\)\u200b\u4e3a\u200b\u5411\u91cf\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u4e58\u5b50\u200b\u5411\u91cf\u200b\u3002
\\[ L(x, \\lambda, \\nu) = f_0(x) + \\sum_{i=1}^m \\lambda_if_i(x) + \\sum_{i=1}^p\\nu_i h_i(x) \\label{2} \\] \\(\\eqref{2}\\)\u200b\u5173\u4e8e\u200b\\(x\\)\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\\(g(\\lambda, \\nu)\\)\u200b\u79f0\u4e3a\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u3002
\\[ g(\\lambda, \\nu) = \\inf_{x\\in \\calD}\\left(f_0(x) + \\sum_{i=1}^m \\lambda_if_i(x) + \\sum_{i=1}^p\\nu_i h_i(x)\\right) \\label{3} \\] \u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u503c\u200b\u7684\u200b\u4e0b\u754c\u200b\uff1a\\(\\forall \\lambda \\succeq 0, \\forall \\nu, g(\\lambda, \\nu)\\leq p^*\\)\uff0c\u200b\u5e76\u4e14\u200b\u662f\u200b\u51f9\u200b\u51fd\u6570\u200b\u3002\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u7531\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\\(f_0\\)\u200b\u7684\u200b\u5171\u8f6d\u200b\u51fd\u6570\u200b\u8868\u793a\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_3","title":"\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u5076\u200b\u95ee\u9898","text":"\u200b\u8bb0\u200b\\(\\eqref{1}\\)\u200b\u7684\u200b\uff08\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\uff09\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e3a\u200b\uff1a
\\[ \\optim{\\max}{g(\\lambda, \\nu)}{\\lambda \\succeq 0} \\] \u200b\u5176\u200b\u6700\u4f18\u200b\u89e3\u200b\\((\\lambda^*, \\nu^*)\\)\u200b\u79f0\u4e3a\u200b\u5176\u200b\u5bf9\u5076\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u662f\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002
\u200b\u6807\u51c6\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b
\u200b\u8003\u8651\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b
\\[ \\optim{\\min}{c^\\top x}{\\cases{\\begin{aligned} & Ax = b \\\\ & x\\succeq 0 \\end{aligned}}} \\] \u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u4e3a\u200b
\\[ \\begin{aligned} g(\\lambda, \\nu) &= \\inf_{x}(c^\\top x - \\lambda^\\top x + \\nu^\\top (Ax - b)) \\\\ &= \\inf_{x}(-\\nu^\\top b + (c - \\lambda + A^\\top \\nu)^\\top x) \\\\ &= \\cases{\\begin{aligned} & -\\nu^\\top b & c - \\lambda + A^\\top\\nu = 0 \\\\ & -\\infty & \\otherwise \\end{aligned}} \\end{aligned} \\] \u200b\u56e0\u6b64\u200b\uff0c\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e3a\u200b
\\[ \\optim{\\max}{\\nu^\\top b}{\\cases{\\begin{aligned} & c - \\lambda + A^\\top \\nu = 0 \\\\ & \\lambda \\succeq 0 \\end{aligned}}} \\] \u200b\u5373\u200b
\\[ \\optim{\\max}{\\nu^\\top b}{ c + A^\\top \\nu \\succeq 0 } \\] \u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u5bf9\u5076\u200b\u7b49\u4ef7\u200b\u4e8e\u539f\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_4","title":"\u5f31\u200b\u5bf9\u5076\u6027","text":"\u200b\u8bb0\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u4e3a\u200b\\(d^*\\)\u3002\u200b\u6839\u636e\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u7684\u200b\u6027\u8d28\u200b\uff0c\u200b\u6709\u200b\\(d^*\\leq p^*\\)\uff0c\u200b\u6b64\u4e3a\u200b\u5f31\u200b\u5bf9\u5076\u6027\u200b\u3002
- \u200b\u82e5\u539f\u200b\u95ee\u9898\u200b\u65e0\u200b\u4e0b\u754c\u200b\uff0c\u200b\u5219\u200b\\(p^* = -\\infty\\)\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b\\(d^* = -\\infty\\)\uff0c\u200b\u5373\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e0d\u200b\u53ef\u884c\u200b\u3002
- \u200b\u82e5\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u65e0\u4e0a\u754c\u200b\uff0c\u200b\u5219\u200b\\(d^* = \\infty\\)\uff0c\u200b\u6b64\u65f6\u200b\\(p^* = \\infty\\)\uff0c\u200b\u5373\u539f\u200b\u95ee\u9898\u200b\u4e0d\u200b\u53ef\u884c\u200b\u3002
\u200b\u8bb0\u200b\\(p^* - d^*\\geq 0\\)\u200b\u4e3a\u200b\u5bf9\u5076\u200b\u6700\u4f18\u200b\u95f4\u9699\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_5","title":"\u5f3a\u200b\u5bf9\u5076\u6027","text":"\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u5373\u200b\\(p^* - d^* = 0\\)\u3002\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u5e76\u200b\u4e0d\u662f\u200b\u603b\u200b\u6210\u7acb\u200b\uff0c\u200b\u9700\u8981\u200b\u5bf9\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u65bd\u52a0\u200b\u7ea6\u675f\u200b\u51c6\u5219\u200b\u3002
\u200b\u82e5\u200b\uff08\u200b\u4efb\u610f\u200b\uff09\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u6ee1\u8db3\u200bSlater\u200b\u6761\u4ef6\u200b\uff0c\u200b\u5373\u200b\\(\\exists x\\in \\mathbf{relint} \\calD\\)\u200b\u4f7f\u5f97\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4e25\u683c\u200b\u6210\u7acb\u200b\uff0c\u200b\u5373\u200b
\\[ \\cases{\\begin{aligned} & f_i(x)\\leq 0 & i = \\oneto m \\\\ & Ax = b \\end{aligned}} \\] \u200b\u65f6\u200b\uff0c\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\u3002
\u200b\u5982\u679c\u200b\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u662f\u200b\u7ebf\u6027\u200b\u7684\u200b\uff0c\u200b\u5219\u200b\u8fd9\u4e2a\u200b\u7ea6\u675f\u200b\u4e0d\u200b\u9700\u8981\u200b\u6ee1\u8db3\u200b\u4e25\u683c\u200b\u6210\u7acb\u200b\u7684\u200b\u6761\u4ef6\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_6","title":"\u51e0\u4f55\u200b\u89e3\u91ca","text":"\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(\\calG = \\{(f_1(x), \\ldots, f_m(x), h_1(x), \\ldots, h_p(x), f_0(x))\\in \\bbR^m\\times \\bbR^p\\times\\bbR | x\\in \\calD\\}\\)\uff0c\u200b\u5219\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u4e3a\u200b
\\[ p^* = \\inf_t\\{(u, v, t)\\in \\calG | u\\preceq 0, v = 0\\} \\] \u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u5bf9\u200b\u5076\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\\(g(\\lambda, \\nu) = \\inf\\{ (\\lambda, \\nu, 1)^\\top (u, v, t) | (u, v, t)\\in \\calG\\}\\leq (\\lambda, \\nu, 1)^\\top (u, v, t)\\)\uff0c\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u4e00\u4e2a\u200b\u8d85\u5e73\u9762\u200b\uff0c\u200b\u5176\u6cd5\u200b\u5411\u91cf\u200b\u4e3a\u200b\\((\\lambda, \\nu, 1)\\)\uff0c\u200b\u4e0e\u200b\u76f4\u7ebf\u200b\\(u=v=0\\)\u200b\u76f8\u4ea4\u200b\u4e8e\u200b\\((0, 0, g(\\lambda, \\nu))\\)\u3002\u200b\u4e5f\u200b\u5373\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u89e3\u200b\u90fd\u200b\u662f\u200b\u96c6\u5408\u200b\\(\\calG\\)\u200b\u7684\u200b\u4e00\u4e2a\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u3002
\u200b\u5b9a\u4e49\u200b\\(\\calG\\)\u200b\u7684\u200b\u4e0a\u200b\u5883\u56fe\u200b\\(\\calA = \\calG + \\bbR_\\plus^m\\times\\{0\\}^p\\times \\bbR_\\plus\\)\uff0c\u200b\u5373\u200b
\\[ \\calA = \\{(u_0 + x, v_0, t_0 + z) | (u_0, v_0, t_0)\\in \\calG, x\\in \\bbR_\\plus^m, z\\in \\bbR_\\plus\\} \\] \u200b\u5219\u200b\u5bf9\u5e94\u200b\u7684\u200b\u539f\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u503c\u4e3a\u200b
\\[ p^* = \\inf\\{t | (0, 0, t)\\in \\calA\\} \\] \u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\calA\\)\u200b\u4e2d\u200b\u5b58\u5728\u200b\u4e00\u7ec4\u200b\\((u, v, t)\\in \\mathbf{bd}\\calA\\)\u200b\u4f7f\u5f97\u200b\u5728\u200b\u8be5\u5904\u200b\u7684\u200b\u652f\u6491\u200b\u8d85\u5e73\u9762\u200b\u4e0e\u200b\u5750\u6807\u8f74\u200b\\(u=v=0\\)\u200b\u76f8\u4ea4\u200b\u4e8e\u200b\\((0, 0, p^*)\\)\uff0c\u200b\u4e5f\u200b\u5373\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\calA\\)\u200b\u662f\u200b\u51f8\u96c6\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_7","title":"\u6700\u5927\u200b\u6700\u5c0f\u200b\u89e3\u91ca","text":"\u200b\u8bbe\u200b\\(p = 0\\)\u3002\u200b\u5219\u200b\u539f\u200b\u95ee\u9898\u200b\u53ef\u4ee5\u200b\u5199\u4f5c\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u65e0\u7ea6\u675f\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff1a
\\[ \\optim{\\min}{\\sup_{\\lambda\\succeq 0}L(x, \\lambda)}{x\\in \\bbR^n} \\] \u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u53ef\u4ee5\u200b\u5199\u4f5c\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff1a
\\[ \\optim{\\max}{\\inf_{x} L(x, \\lambda)}{\\lambda\\succeq 0} \\] \u200b\u56e0\u6b64\u200b\u5f31\u200b\u5bf9\u5076\u6027\u200b\u53ef\u4ee5\u200b\u5199\u4f5c\u200b
\\[ \\sup_{\\lambda\\succeq 0}\\inf_{x}L(x, \\lambda) \\leq \\inf_{x}\\sup_{\\lambda\\succeq 0}L(x, \\lambda) \\] \u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u53ef\u4ee5\u200b\u5199\u4f5c\u200b
\\[ \\sup_{\\lambda\\succeq 0}\\inf_{x}L(x, \\lambda) = \\inf_{x}\\sup_{\\lambda\\succeq 0}L(x, \\lambda) \\] \u200b\u5373\u200b\\(L(x, \\lambda)\\)\u200b\u6ee1\u8db3\u200b\u978d\u70b9\u200b\u6027\u8d28\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_8","title":"\u6700\u4f18\u6027\u200b\u6761\u4ef6","text":"\u200b\u5982\u679c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u53ef\u884c\u200b\u89e3\u200b\\((\\lambda, \\nu)\\)\uff0c\u200b\u5219\u200b\u8bf4\u660e\u200b\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u200b\u6ee1\u8db3\u200b\\(p^*\\geq g(\\lambda, \\nu)\\)\u3002\u200b\u6b64\u65f6\u200b\u5bf9\u4e8e\u200b\u4e00\u4e2a\u200b\u53ef\u884c\u200b\u89e3\u200b\\(x\\)\uff0c\\(x\\)\u200b\u662f\u200b\u4e00\u4e2a\u200b\\(\\varepsilon = f_0(x) - g(\\lambda, \\nu)\\)-\u200b\u6b21\u4f18\u200b\u89e3\u200b\u3002\u200b\u79f0\u200b\u6b64\u5904\u200b\u7684\u200b\\(f_0(x) - g(\\lambda, \\nu)\\)\u200b\u4e3a\u200b\u5bf9\u5076\u200b\u95f4\u9699\u200b\u3002
\u200b\u539f\u200b\u95ee\u9898\u200b\u548c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u200b\u6ee1\u8db3\u200b
\\[ p^*\\in [g(\\lambda, \\nu), f_0(x)]\\qquad d^*\\in [g(\\lambda, \\nu), f_0(x)] \\] \u200b\u53ef\u4ee5\u200b\u76f4\u63a5\u200b\u5f97\u51fa\u200b\u63a8\u8bba\u200b\uff1a\u200b\u82e5\u200b\\(f_0(x) = g(\\lambda, \\nu)\\)\uff0c\u200b\u5219\u200b\u6709\u200b\\(p^*=d^*=f_0(x)\\)
"},{"location":"math/convex-optimization/duality/#_9","title":"\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027","text":"\u200b\u5f53\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\u65f6\u200b\uff0c\u200b\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027\u6307\u200b\u5bf9\u4e8e\u200b\u539f\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u200b\\(x^*\\)\u200b\u53ca\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u200b\\(\\lambda^* = (\\lambda_1^*, \\ldots, \\lambda_m^*)\\)\uff0c\u200b\u6ee1\u8db3\u200b
\\[ \\lambda_i^* > 0 \\Lora f_i(x^*) = 0 \\] \u200b\u5373\u200b\u5bf9\u5076\u200b\u6700\u4f18\u200b\u89e3\u4e2d\u200b\u7684\u200b\u975e\u200b\u96f6\u200b\u5206\u91cf\u200b\u5bf9\u5e94\u200b\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\u7684\u200b\u7d27\u200b\u7ea6\u675f\u200b\u3002
"},{"location":"math/convex-optimization/duality/#kkt","title":"KKT\u200b\u6700\u4f18\u200b\u6761\u4ef6","text":"\u200b\u8bbe\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u548c\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u5747\u200b\u53ef\u5fae\u200b\uff0c\\(x^*\\)\u200b\u4e3a\u539f\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\\(\\lambda^*, \\nu^*\\)\u200b\u4e3a\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u4e14\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\uff0c\u200b\u5219\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u51fd\u6570\u200b\\(L(x, \\lambda^*, \\nu^*)\\)\u200b\u5728\u200b\\(x^*\\)\u200b\u5904\u200b\u53d6\u5f97\u200b\u6700\u5c0f\u503c\u200b\uff0c\u200b\u5219\u200b
\\[ \\nabla L(x^*, \\lambda^*, \\nu^*) = 0 \\] \u200b\u7efc\u5408\u200b\u5176\u5b83\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200bKKT\u200b\u6700\u4f18\u200b\u6761\u4ef6\u200b\u3002
\\[ \\cases{ \\begin{aligned} f_i(x^*) & \\leq 0 & \\text{\uff08\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\uff09} \\\\ h_i(x^*) & = 0 & \\text{\uff08\u200b\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\uff09} \\\\ \\lambda_i^* & \\geq 0 & \\text{\uff08\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7ea6\u675f\u200b\uff09} \\\\ \\lambda_i^* f_i(x^*) &= 0 & \\text{\uff08\u200b\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027\u200b\uff09} \\\\ \\nabla L(x^*, \\lambda^*, \\nu^*) &= 0 & \\text{\uff08\u200b\u6700\u4f18\u200b\u6761\u4ef6\u200b\uff09}\\\\ \\end{aligned} } \\] \u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u82e5\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\uff0c\u200b\u5219\u200b\u6700\u4f18\u200b\u89e3\u200b\u5fc5\u987b\u200b\u6ee1\u8db3\u200bKKT\u200b\u6761\u4ef6\u200b\uff08\u200b\u53cd\u8fc7\u6765\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u6210\u7acb\u200b\uff09\u3002\u200b\u5bf9\u4e8e\u200b\u6ee1\u8db3\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u7684\u200b\u51f8\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\uff0c\u200b\u6ee1\u8db3\u200bKKT\u200b\u6761\u4ef6\u200b\u7684\u200b\u70b9\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u548c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
"},{"location":"math/convex-optimization/duality/#_10","title":"\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\u7684\u200b\u5bf9\u5076\u200b\u95ee\u9898","text":"\u200b\u8bbe\u539f\u200b\u95ee\u9898\u200b\u4e3a\u200b
\\[ \\optim{\\min}{f_0(x)}{\\cases{ \\begin{aligned} & f_i(x)\\preceq_{K_i} 0 \\\\ & h_i(x) = 0 \\end{aligned} }} \\] \u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ L(x, \\lambda, \\nu) = f_0(x) + \\sum_{i=1}^m \\lambda_i^\\top f_i(x) + \\sum_{j=1}^p \\nu_j^\\top h_j(x) \\] \u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e3a\u200b
\\[ \\optim{\\max}{g(\\lambda, \\nu) = \\inf_{x}L(x, \\lambda, \\nu)}{\\lambda_i\\succeq_{K_i^*}0} \\] \u200b\u5728\u200b\u5e7f\u4e49\u200b\u4e0d\u7b49\u5f0f\u200b\u4e0b\u200b\uff0c\u200b\u5f31\u200b\u5bf9\u5076\u6027\u200b\u603b\u662f\u200b\u6210\u7acb\u200b\u3002\u200b\u6ee1\u8db3\u200b\uff08\u200b\u5e7f\u4e49\u200b\uff09Slater\u200b\u6761\u4ef6\u200b\\(\\eqnref{4}\\)\u200b\u65f6\u200b\uff0c\u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\u3002
\\[ \\forall i=1,\\ldots, m,\\exists x\\in \\mathbf{relint}\\calD, Ax=b, f_i(x)\\prec_{K_i}0 \\label{4} \\] \u200b\u5f3a\u200b\u5bf9\u5076\u6027\u200b\u6210\u7acb\u200b\u65f6\u200b\uff0c\u200b\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027\u200b\u548c\u200bKKT\u200b\u6761\u4ef6\u200b\u6210\u7acb\u200b\u3002
"},{"location":"math/convex-optimization/unconstrained-optimization/","title":"\u65e0\u7ea6\u675f\u200b\u4f18\u5316","text":"\u200b\u65e0\u7ea6\u675f\u200b\u4f18\u5316\u200b\u662f\u200b\u6307\u200b\u5728\u200b\\(\\bbR^n\\)\u200b\u4e0a\u200b\u6700\u5c0f\u5316\u200b\\(f(x)\\)\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u3002\u200b\u4e00\u822c\u6765\u8bf4\u200b\uff0c\\(f: \\bbR^n\\ra \\bbR\\)\u200b\u662f\u200b\u4e8c\u6b21\u200b\u53ef\u5fae\u200b\u7684\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u4e14\u200b\u5728\u200b\\(\\mathbf{dom} f\\)\u200b\u4e0a\u200b\u5b58\u5728\u200b\u6700\u5c0f\u503c\u200b\\(p^*\\)\uff0c\u200b\u4e14\u200b\u552f\u4e00\u200b\u5bf9\u5e94\u200b\u4e00\u4e2a\u200b\u89e3\u4e3a\u200b\\(x^*\\)\u3002\u200b\u6839\u636e\u200b\u6700\u4f18\u6027\u200b\u6761\u4ef6\u200b\uff0c\u200b\u6709\u200b
\\[ \\nabla f(x^*) = 0 \\label{1} \\] \\(\\eqref{1}\\)\u200b\u6709\u200b\u4e24\u79cd\u200b\u6c42\u89e3\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5373\u200b\u8fed\u4ee3\u6cd5\u200b\u6c42\u200b\u6570\u503c\u200b\u89e3\u200b\u6216\u200b\u76f4\u63a5\u200b\u6c42\u89e3\u200b\u65b9\u7a0b\u200b\u7684\u200b\u89e3\u6790\u200b\u89e3\u200b\u3002\u200b\u5728\u200b\u90e8\u5206\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\\(\\nabla f\\)\u200b\u53ef\u80fd\u200b\u96be\u4ee5\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u6b64\u65f6\u200b\u9700\u8981\u200b\u4f7f\u7528\u200b\u8fed\u4ee3\u6cd5\u200b\\(\\eqref{2}\\)\u3002\\(x^{(0)}, x^{(1)}, \\ldots\\)\u200b\u79f0\u4e3a\u200b\\(\\eqref{1}\\)\u200b\u7684\u200b\u6781\u5c0f\u200b\u5316\u70b9\u5217\u200b\u3002
\\[ x^{(0)}, x^{(1)}, \\ldots \\qquad \\lim_{k\\ra \\infty} f\\left(x^{(k)}\\right) = p^* \\label{2} \\] \u200b\u5bf9\u4e8e\u200b\u8fed\u4ee3\u6cd5\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u4e0d\u4f1a\u200b\u5728\u200b\u6709\u9650\u200b\u65f6\u95f4\u200b\u5185\u200b\u7ed3\u675f\u200b\u3002\u200b\u4f46\u200b\u5f53\u200b\\(f\\left(x^{(k)}\\right) - p^*\\leq \\varepsilon\\)\u200b\u65f6\u200b\uff0c\u200b\u5373\u53ef\u200b\u8ba4\u4e3a\u200b\u8fbe\u5230\u200b\u6700\u4f18\u200b\u503c\u200b\uff0c\u200b\u7b97\u6cd5\u200b\u7ec8\u6b62\u200b\u3002\u200b\u8fed\u4ee3\u200b\u7b97\u6cd5\u200b\u5bf9\u200b\u521d\u59cb\u200b\u70b9\u200b\\(x_0\\)\u200b\u6709\u200b\u4e00\u5b9a\u200b\u8981\u6c42\u200b\uff0c\u200b\u5373\u200b\\(f\\)\u200b\u5728\u200b\\(x_0\\)\u200b\u5904\u200b\u7684\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u662f\u200b\u95ed\u96c6\u200b\u3002
"},{"location":"math/convex-optimization/unconstrained-optimization/#_2","title":"\u5f3a\u51f8\u6027","text":"\u200b\u51fd\u6570\u200b\\(f\\)\u200b\u5982\u679c\u200b\u6ee1\u8db3\u200b\u4e00\u9636\u200b\u6761\u4ef6\u200b
\\[ f(y)\\geq f(x) + \\nabla f(x)^\\top (y - x) + \\frac{\\gamma}{2} \\Vert y - x\\Vert^2 \\label{3} \\] \u200b\u6216\u200b\u4e8c\u9636\u200b\u6761\u4ef6\u200b
\\[ \\nabla^2 f(x)\\succeq \\gamma I \\label{4} \\] \u200b\u5219\u200b\u79f0\u200b\\(f\\)\u200b\u4e3a\u200b\\(\\gamma\\)-\u200b\u5f3a\u200b\u51f8\u51fd\u6570\u200b\u3002\u200b\u5f3a\u200b\u51f8\u51fd\u6570\u200b\u76f8\u8f83\u200b\u4e8e\u200b\u51f8\u51fd\u6570\u200b\uff0c\u200b\u5728\u200b\u6700\u4f18\u200b\u503c\u5904\u200b\u6709\u200b\u66f4\u597d\u200b\u7684\u200b\u6027\u8d28\u200b\u3002
\u200b\u6b21\u4f18\u200b\u6027\u200b\u6761\u4ef6\u200b \u200b\u5bf9\u4e8e\u200b\u7ed9\u5b9a\u200b\\(x\\)\uff0c\\(\\eqref{3}\\)\u200b\u662f\u200b\\(y\\)\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5bf9\u200b\u5176\u6c42\u200b\u68af\u5ea6\u200b\u5f97\u5230\u200b
\\[ \\nabla f(y) = \\nabla f(x) + \\gamma(y - x) \\] \u200b\u4ee4\u200b\\(\\nabla f(\\tilde y) = 0\\)\uff0c\u200b\u5219\u200b\\(\\tilde y = x - \\nabla f(x) / \\gamma\\)\u3002\u200b\u6b64\u65f6\u200b\uff0c\u200b\u6709\u200b
\\[ f(y)\\geq f(\\tilde y)\\geq f(x) + \\nabla f(x)^\\top (\\tilde y - x) + \\frac{\\gamma}{2} \\Vert\\tilde y - x\\Vert^2 = f(x) - \\frac{1}{2\\gamma}\\Vert \\nabla f(x)\\Vert^2 \\] \u200b\u56e0\u6b64\u200b\uff0c\\(f(x) - p^*\\leq \\frac{1}{2\\gamma}\\Vert \\nabla f(x)\\Vert^2\\)\u3002\u200b\u5373\u200b\u4efb\u4f55\u200b\u68af\u5ea6\u200b\u8db3\u591f\u200b\u5c0f\u200b\u7684\u200b\u70b9\u200b\u90fd\u200b\u662f\u200b\u8fd1\u4f3c\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
\\[ \\Vert\\nabla f(x)\\Vert\\leq \\sqrt{2\\gamma\\varepsilon}\\Lora f(x) - p^*\\leq \\varepsilon \\] \u200b\u6216\u200b
\\[ \\Vert x - x^*\\Vert\\leq \\frac{2}{m}\\Vert\\nabla f(x)\\Vert \\] \u200b\u663e\u7136\u200b\uff0c\\(x^*\\)\u200b\u662f\u200b\u552f\u4e00\u200b\u7684\u200b\u3002
\u200b\u5728\u200b\u4e0b\u200b\u6c34\u5e73\u200b\u96c6\u200b\\(S\\)\u200b\u4e0a\u200b\uff0c\u200b\u4e8c\u9636\u200b\u68af\u5ea6\u200b\\(\\nabla^2 f\\)\u200b\u5b58\u5728\u200b\u4e0a\u200b\u754c\u200b\\(\\Gamma I\\)\uff0c\u200b\u5b9a\u4e49\u200b\\(\\kappa = \\Gamma / \\gamma\\)\u200b\u4e3a\u200b\\(\\nabla^2 f(x)\\)\u200b\u7684\u200b\u6761\u4ef6\u200b\u6570\u200b\u3002
"},{"location":"math/convex-optimization/unconstrained-optimization/#_3","title":"\u4e0b\u964d\u200b\u65b9\u6cd5","text":"\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\\(\\eqref{5}\\)\u200b\u7684\u200b\u65b9\u6cd5\u200b\u6784\u9020\u200b\u70b9\u5217\u200b\uff1a
\\[ x^{(k+1)} = x^{(k)} + t^{(k)}\\Delta x^{(k)} \\label{5} \\] \u200b\u5176\u4e2d\u200b\u6b65\u957f\u200b\\(t^{(k)} > 0\\)\uff0c\\(\\Delta x\\)\u200b\u4e3a\u200b\u524d\u8fdb\u65b9\u5411\u200b\u3002\u200b\u82e5\u200b\u6ee1\u8db3\u200b\\(f{(k+1)} < f{(k)}\\)\uff0c\u200b\u5219\u200b\u70b9\u5217\u200b\u6784\u6210\u200b\u4e00\u79cd\u200b\u4e0b\u964d\u200b\u65b9\u6cd5\u200b\u3002\u200b\u6839\u636e\u200b\uff08\u200b\u5f3a\u200b\uff09\u200b\u51f8\u51fd\u6570\u200b\u7684\u200b\u6027\u8d28\u200b\uff0c\\(\\Delta x^{(k)}\\)\u200b\u5fc5\u987b\u200b\u6ee1\u8db3\u200b
\\[ \\nabla f(x^{(k)})^\\top \\Delta x^{(k)} < 0 \\] \u200b\u5373\u200b\u524d\u8fdb\u65b9\u5411\u200b\u5fc5\u987b\u200b\u80cc\u5bf9\u200b\u68af\u5ea6\u65b9\u5411\u200b\u3002
"},{"location":"math/convex-optimization/unconstrained-optimization/#_4","title":"\u7b97\u6cd5\u200b\u8868\u8ff0","text":""},{"location":"math/discrete-mathematics/","title":"\u79bb\u6563\u6570\u5b66","text":"\u200b\u6839\u636e\u200b\u300a\u200b\u6570\u7406\u903b\u8f91\u200b\u4e0e\u200b\u96c6\u5408\u8bba\u200b\u300b\uff0c\u200b\u77f3\u200b\u7eaf\u4e00\u200b\u7b49\u200b\uff0c\u200b\u6e05\u534e\u5927\u5b66\u51fa\u7248\u793e\u200b\u4e0e\u200b\u6e05\u534e\u5927\u5b66\u200b\u8ba1\u7b97\u673a\u7cfb\u200b\u201c\u200b\u79bb\u6563\u6570\u5b66\u200b\u201d\u200b\u8bfe\u7a0b\u200b\u6574\u7406\u200b\u3002
- \u200b\u7b2c\u4e00\u7ae0\u200b \u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u57fa\u672c\u6982\u5ff5\u200b
- \u200b\u7b2c\u4e8c\u7ae0\u200b \u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u7b49\u503c\u200b\u548c\u200b\u63a8\u7406\u200b\u6f14\u7b97\u200b
- \u200b\u7b2c\u4e09\u7ae0\u200b \u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u5316\u200b
- \u200b\u7b2c\u56db\u7ae0\u200b \u200b\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u7684\u200b\u57fa\u672c\u6982\u5ff5\u200b
- \u200b\u7b2c\u4e94\u7ae0\u200b \u200b\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u7684\u200b\u7b49\u503c\u200b\u548c\u200b\u63a8\u7406\u200b\u6f14\u7b97\u200b
- \u200b\u7b2c\u4e5d\u7ae0\u200b \u200b\u96c6\u5408\u200b
"},{"location":"math/discrete-mathematics/chapter-1/","title":"\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u57fa\u672c\u6982\u5ff5","text":"\u200b\u547d\u9898\u200b\u662f\u200b\u4e00\u4e2a\u200b\u975e\u771f\u200b\u5373\u200b\u5047\u200b\u7684\u200b\u9648\u8ff0\u53e5\u200b\u3002
- \u200b\u547d\u9898\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u975e\u771f\u200b\u975e\u5047\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u200b\u53ef\u80fd\u200b\u65e2\u200b\u771f\u200b\u53c8\u200b\u5047\u200b
- \u200b\u547d\u9898\u200b\u7684\u200b\u771f\u5047\u200b\u6027\u200b\u53ef\u4ee5\u200b\u5f85\u5b9a\u200b
\u200b\u547d\u9898\u200b\u7684\u200b\u771f\u5047\u200b\u53ef\u4ee5\u200b\u7528\u200bTrue\u200b\u6216\u200bFalse\u200b\u8868\u793a\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7528\u200b1\u200b\u6216\u200b0\u200b\u8868\u793a\u200b
\u200b\u547d\u9898\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u4e0e\u200b\u3001\u200b\u6216\u200b\u3001\u200b\u975e\u200b\u7b49\u200b\u903b\u8f91\u200b\u8054\u7ed3\u8bcd\u200b\u8fde\u63a5\u200b\uff0c\u200b\u5f97\u5230\u200b\u590d\u5408\u200b\u547d\u9898\u200b
\u200b\u5f53\u200b\u4e0d\u200b\u6307\u5b9a\u200b\u547d\u9898\u200b\u7684\u200b\u5177\u4f53\u5185\u5bb9\u200b\u65f6\u200b\uff0c\u200b\u79f0\u8be5\u200b\u547d\u9898\u200b\u4e3a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5177\u4f53\u200b\u547d\u9898\u200b\u79f0\u4e3a\u200b\u8be5\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u7684\u200b\u4e00\u4e2a\u200b\u89e3\u91ca\u200b\u3002\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u7684\u200b\u89e3\u91ca\u200b\u53ef\u4ee5\u200b\u662f\u200b\u4efb\u610f\u200b\u547d\u9898\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-1/#_2","title":"\u903b\u8f91\u200b\u8054\u7ed3\u8bcd","text":"\u200b\u547d\u9898\u903b\u8f91\u200b\u4e2d\u200b\u5e38\u7528\u200b\u7684\u200b\u903b\u8f91\u200b\u8054\u7ed3\u8bcd\u200b\u4e3a\u200b\u4e0e\u200b\uff08\\(\\land\\)\uff0c\u200b\u5408\u53d6\u200b\uff09\u3001\u200b\u6216\u200b\uff08\\(\\lor\\)\uff0c\u200b\u6790\u53d6\u200b\uff09\u3001\u200b\u975e\u200b\uff08\\(\\lnot\\)\uff0c\u200b\u5426\u5b9a\u200b\uff09\u3001\u200b\u8574\u542b\u200b\uff08\\(\\rightarrow\\)\uff09\u3001\u200b\u53cc\u200b\u8574\u542b\u200b\uff08\\(\\leftrightarrow\\)\uff09\u200b\u7b49\u200b\u3002\u200b\u9664\u200b\\(\\lnot\\)\u200b\u4e3a\u200b\u4e00\u5143\u200b\u8fd0\u7b97\u7b26\u200b\u4ee5\u5916\u200b\uff0c\u200b\u5176\u4f59\u200b\u903b\u8f91\u200b\u8fd0\u7b97\u7b26\u200b\u5747\u200b\u4e3a\u200b\u4e8c\u5143\u200b\u8fd0\u7b97\u7b26\u200b\u3002\u200b\u8fd9\u4e9b\u200b\u8fd0\u7b97\u7b26\u200b\u7684\u200b\u771f\u503c\u8868\u200b\u5982\u4e0b\u200b\u6240\u200b\u5217\u200b\uff1a
\\(P\\) \\(Q\\) \\(P\\land Q\\) 0 0 0 0 1 0 1 0 0 1 1 1 \\(P\\) \\(Q\\) \\(P\\lor Q\\) 0 0 0 0 1 1 1 0 1 1 1 1 \\(P\\) \\(\\lnot P\\) 0 1 1 0 \\(P\\) \\(Q\\) \\(P\\rightarrow Q\\) 0 0 1 0 1 1 1 0 0 1 1 1 - \u200b\u53cc\u200b\u8574\u542b\u200b
\\(P\\) \\(Q\\) \\(P\\leftrightarrow Q\\) 0 0 1 0 1 0 1 0 0 1 1 1 \u200b\u6b64\u5916\u200b\uff0c\u200b\u5982\u4e0b\u200b\u903b\u8f91\u200b\u8054\u7ed3\u8bcd\u200b\u4e5f\u200b\u8f83\u4e3a\u200b\u5e38\u7528\u200b\uff1a
- \u200b\u4e0e\u975e\u200b\uff1a\\(A\\uparrow B = \\lnot (A\\land B)\\)
- \u200b\u6216\u975e\u200b\uff1a\\(A\\downarrow B = \\lnot (A\\lor B)\\)
- \u200b\u5f02\u6216\u200b\uff1a\\(A\\overline \\lor B = (A\\lor B)\\land (\\lnot A\\lor \\lnot B)\\)
"},{"location":"math/discrete-mathematics/chapter-1/#_3","title":"\u5408\u5f0f\u516c\u5f0f","text":"\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff08\u200b\u7b80\u79f0\u200b\u516c\u5f0f\u200b\uff09\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u89c4\u5219\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u7b80\u5355\u200b\u547d\u9898\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\\(\\lnot A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A, B\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\\(A\\land B, A\\lor B, A\\rightarrow B, A\\leftrightarrow B\\)\u200b\u5747\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\u7ecf\u8fc7\u200b\u6709\u9650\u200b\u6b21\u200b\u5e94\u7528\u200b\u524d\u200b\u4e09\u6761\u200b\u89c4\u5219\u200b\u6240\u200b\u5f97\u5230\u200b\u7684\u200b\u516c\u5f0f\u200b\u79f0\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4e2d\u200b\u8fd0\u7b97\u7b26\u200b\u7684\u200b\u4f18\u5148\u7ea7\u200b\u6392\u5217\u200b\u5982\u4e0b\u200b\uff1a
\\[ \\lnot > \\land > \\lor > \\rightarrow > \\leftrightarrow \\] \u200b\u5982\u679c\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u5728\u200b\u4efb\u610f\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u90fd\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u79f0\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u6216\u6c38\u771f\u5f0f\u200b\u3002\u200b\u5982\u679c\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u5728\u200b\u67d0\u4e2a\u200b\u89e3\u91ca\u200b\u4e0b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u79f0\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u53ef\u200b\u6ee1\u8db3\u200b\u3002\u200b\u5982\u679c\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u5728\u200b\u4efb\u610f\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u90fd\u200b\u4e3a\u200b\u5047\u200b\uff0c\u200b\u79f0\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4e3a\u200b\u77db\u76fe\u200b\u5f0f\u200b\u6216\u200b\u6c38\u5047\u5f0f\u200b\u3002\u200b\u4e24\u4e2a\u200b\u91cd\u8a00\u5f0f\u200b\u4f7f\u7528\u200b\\(\\land, \\lor, \\rightarrow, \\leftrightarrow\\)\u200b\u8fde\u63a5\u200b\u540e\u200b\u5f97\u5230\u200b\u7684\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4ecd\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-1/#_4","title":"\u91cd\u8a00\u5f0f\u200b\u7684\u200b\u4ee3\u5165\u200b\u89c4\u5219","text":"\u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\uff0c\u200b\u5c06\u200b\\(A\\)\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\\(C\\)\u200b\u66ff\u6362\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\\(D\\)\uff0c\u200b\u5219\u200b\u66ff\u6362\u200b\u540e\u200b\u7684\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u4ecd\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u3002\u200b\u8bb0\u200b\u4f5c\u200b\\(\\frac CD\\)
- \u200b\u4ee3\u5165\u200b\u89c4\u5219\u200b\u53ea\u80fd\u200b\u5bf9\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u8fdb\u884c\u200b\u66ff\u4ee3\u200b\uff0c\u200b\u800c\u200b\u4e0d\u80fd\u200b\u66ff\u4ee3\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u590d\u5408\u200b\u547d\u9898\u200b
- \u200b\u5bf9\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u67d0\u4e2a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u8fdb\u884c\u200b\u4ee3\u5165\u200b\u65f6\u200b\uff0c\u200b\u5fc5\u987b\u200b\u4ee3\u5165\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u7684\u200b\u6240\u6709\u200b\u547d\u9898\u200b\u53d8\u9879\u200b
"},{"location":"math/discrete-mathematics/chapter-2/","title":"\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u7b49\u503c\u200b\u548c\u200b\u63a8\u7406\u200b\u6f14\u7b97","text":"\u200b\u7b49\u503c\u200b\uff1a\u200b\u8bbe\u200b\\(A, B\\)\u200b\u4e3a\u200b\u516c\u5f0f\u200b\uff0c\\(P_1, \\dots, P_n\\)\u200b\u662f\u200b\u51fa\u73b0\u200b\u5728\u200b\\(A, B\\)\u200b\u4e2d\u200b\u6240\u6709\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u4efb\u610f\u200b\u7684\u200b\u4e00\u7ec4\u200b\\(\\left\\langle P_1, \\dots, P_n\\right\\rangle\\)\uff0c\u200b\u90fd\u200b\u6709\u200b\\(A=B\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u4e0e\u200b\u516c\u5f0f\u200b\\(B\\)\u200b\u7b49\u503c\u200b\uff08\u200b\u7b49\u4ef7\u200b\uff09\uff0c\u200b\u8bb0\u200b\u4e3a\u200b\\(A\\Leftrightarrow B\\)\u200b\u6216\u200b\\(A=B\\)\u3002
\u200b\u7b49\u503c\u200b\u5173\u7cfb\u200b\u6ee1\u8db3\u200b\u81ea\u53cd\u6027\u200b\u3001\u200b\u5bf9\u79f0\u6027\u200b\u4e0e\u200b\u4f20\u9012\u6027\u200b\uff1a
- \\(A=A\\)
- \u200b\u82e5\u200b\\(A=B\\)\uff0c\u200b\u5219\u200b\\(B=A\\)
- \u200b\u82e5\u200b\\(A=B, B=C\\)\uff0c\u200b\u5219\u200b\\(A=C\\)
\\(A=B\\)\u200b\u7684\u200b\u5145\u5206\u200b\u5fc5\u8981\u6761\u4ef6\u200b\u662f\u200b\\(A\\leftrightarrow B\\)\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-2/#_2","title":"\u7b49\u503c\u200b\u516c\u5f0f","text":"\u200b\u57fa\u672c\u200b\u7684\u200b\u7b49\u503c\u200b\u516c\u5f0f\u200b\u5217\u4e3e\u5982\u4e0b\u200b\uff1a
- \u200b\u53cc\u91cd\u200b\u5426\u5b9a\u200b\u5f8b\u200b
- \\(P = \\lnot \\lnot P\\)
- \u200b\u7ed3\u5408\u5f8b\u200b
- \\((P\\lor Q)\\lor R = P \\lor (Q\\lor R)\\)
- \\((P\\land Q)\\land R = P \\land (Q\\land R)\\)
- \\((P\\leftrightarrow Q)\\leftrightarrow R = P \\leftrightarrow (Q\\leftrightarrow R)\\)
- \u200b\u8fd0\u7b97\u7b26\u200b\\(\\rightarrow\\)\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u7ed3\u5408\u5f8b\u200b
- \u200b\u4ea4\u6362\u5f8b\u200b
- \\(P\\lor Q = Q\\lor P\\)
- \\(P\\land Q = Q\\land P\\)
- \\(P\\leftrightarrow Q = Q\\leftrightarrow P\\)
- \u200b\u8fd0\u7b97\u7b26\u200b\\(\\rightarrow\\)\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u4ea4\u6362\u5f8b\u200b
- \u200b\u5206\u914d\u5f8b\u200b
- \\(P\\lor (Q\\land R) = (P\\lor Q)\\land (P\\lor R)\\)
- \\(P\\land (Q\\lor R) = (P\\land Q)\\lor (P\\land R)\\)
- \\(P\\rightarrow (Q\\rightarrow R) = (P\\rightarrow Q)\\rightarrow (P\\rightarrow R)\\)
- \u200b\u8fd0\u7b97\u7b26\u200b\\(\\leftrightarrow\\)\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u5206\u914d\u5f8b\u200b
- \u200b\u6052\u7b49\u200b\u5f8b\u200b
- \\(P\\lor P = P\\)
- \\(P\\land P = P\\)
- \\(P\\rightarrow P = T\\)
- \\(P\\leftrightarrow P = T\\)
- \u200b\u5438\u6536\u7387\u200b
- \\(P\\lor (P\\land Q) = P\\)
- \\(P\\land (P\\lor Q) = P\\)
- \u200b\u6469\u6839\u200b\u5f8b\u200b
- \\(\\lnot (P\\lor Q) = \\lnot P\\land \\lnot Q\\)
- \\(\\lnot (P\\land Q) = \\lnot P\\lor \\lnot Q\\)
- \\(\\lnot (P\\rightarrow Q) = P\\land \\lnot Q\\)
- \\(\\lnot (P\\leftrightarrow Q) = (P\\land \\lnot Q) \\lor (\\lnot P\\land Q)\\)
- \u200b\u540c\u4e00\u5f8b\u200b
- \\(P\\lor F = P\\)
- \\(P\\land P = T\\)
- \\(T\\rightarrow P = P\\)
- \\(T\\leftrightarrow P = P\\)
- \\(P\\rightarrow F = \\lnot P\\)
- \\(P\\leftrightarrow F = \\lnot P\\)
- \u200b\u96f6\u5f8b\u200b
- \\(P\\lor T = T\\)
- \\(P\\land F = F\\)
- \\(P\\rightarrow T = T\\)
- \\(F\\rightarrow P = T\\)
- \u200b\u8865\u4f59\u5f8b\u200b
- \\(P\\lor \\lnot P = T\\)
- \\(P\\land \\lnot P = F\\)
- \\(P\\rightarrow \\lnot P = \\lnot P\\)
- \\(P\\leftrightarrow \\lnot P = F\\)
- \u200b\u5176\u4ed6\u200b\u5e38\u7528\u200b\u7684\u200b\u7b49\u503c\u200b\u516c\u5f0f\u200b
- \\(P\\rightarrow Q = \\lnot Q\\rightarrow \\lnot P\\)\uff08\u200b\u9006\u5426\u547d\u9898\u200b\uff09
- \\(P\\rightarrow (Q\\rightarrow R) = (P\\land Q)\\rightarrow R\\)
- \\((P\\rightarrow R)\\land (Q\\rightarrow R) = (P\\lor Q) \\rightarrow R\\)
\u200b\u7531\u200b\u516c\u5f0f\u200b2\u200b\u7684\u200b\u76f4\u63a5\u200b\u63a8\u8bba\u200b\uff1a\\(P\\rightarrow (Q\\rightarrow R) = Q\\rightarrow (P\\rightarrow R)\\)
\u200b\u7f6e\u6362\u200b\uff1a\u200b\u5bf9\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u7684\u200b\u5b50\u200b\u516c\u5f0f\u200b\\(B\\)\uff0c\u200b\u4f7f\u7528\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\u7684\u200b\u516c\u5f0f\u200b\u8fdb\u884c\u200b\u4ee3\u6362\u200b\u79f0\u4e3a\u200b\u7f6e\u6362\u200b
\u200b\u8bbe\u7f6e\u200b\u6362\u540e\u200b\u7684\u200b\u516c\u5f0f\u200b\u4e3a\u200b\\(C\\)\uff0c\u200b\u5219\u200b\u5fc5\u6709\u200b\\(A=C\\)
"},{"location":"math/discrete-mathematics/chapter-2/#_3","title":"\u4ece\u200b\u771f\u503c\u8868\u200b\u8ba1\u7b97\u200b\u751f\u6210\u200b\u547d\u9898\u200b\u516c\u5f0f","text":"\u200b\u4ece\u200b\u771f\u503c\u8868\u200b\u751f\u6210\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u6709\u200b\u4e24\u79cd\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u65e2\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u503c\u4e3a\u200b\\(T\\)\u200b\u7684\u200b\u884c\u200b\u751f\u6210\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u503c\u4e3a\u200b\\(F\\)\u200b\u7684\u200b\u884c\u200b\u751f\u6210\u200b
"},{"location":"math/discrete-mathematics/chapter-2/#t","title":"\u4ece\u503c\u200b\u4e3a\u200bT\u200b\u7684\u200b\u884c\u200b\u751f\u6210","text":"\u200b\u5bf9\u4e8e\u200b\u5305\u542b\u200b\\(n\\)\u200b\u4e2a\u200b\u547d\u9898\u200b\u53d8\u5143\u200b\\(P_1, \\dots, P_n\\)\u200b\u7684\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5199\u51fa\u200b\u5982\u4e0b\u200b\u5408\u53d6\u200b\u5f0f\u200b\uff1a
\\[ P_1\\land P_2\\land \\dots \\land P_n \\] \u200b\u5bf9\u4e8e\u200b\u771f\u503c\u8868\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u53d6\u503c\u200b\u4e3a\u200b\\(T\\)\u200b\u7684\u200b\u884c\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u5e94\u200b\u7684\u200b\\(P_i\\)\u200b\u4e3a\u200b\\(F\\)\uff0c\u200b\u5219\u200b\u5c06\u200b\u5408\u53d6\u200b\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u5bf9\u5e94\u200b\\(P_i\\)\u200b\u66ff\u6362\u200b\u4e3a\u200b\\(\\lnot P_i\\)\u3002\u200b\u5c06\u200b\u6240\u5f97\u200b\u7684\u200b\u516c\u5f0f\u200b\u4f7f\u7528\u200b\u6790\u53d6\u200b\u8fd0\u7b97\u7b26\u200b\u8fde\u63a5\u200b\u5373\u5f97\u200b\u7b26\u5408\u200b\u771f\u503c\u8868\u200b\u7684\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-2/#f","title":"\u4ece\u503c\u200b\u4e3a\u200bF\u200b\u7684\u200b\u884c\u200b\u751f\u6210","text":"\u200b\u5bf9\u4e8e\u200b\u5305\u542b\u200b\\(n\\)\u200b\u4e2a\u200b\u547d\u9898\u200b\u53d8\u5143\u200b\\(P_1, \\dots, P_n\\)\u200b\u7684\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5199\u51fa\u200b\u5982\u4e0b\u200b\u6790\u53d6\u200b\u5f0f\u200b\uff1a
\\[ P_1\\lor P_2\\lor \\dots \\lor P_n \\] \u200b\u5bf9\u4e8e\u200b\u771f\u503c\u8868\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u53d6\u503c\u200b\u4e3a\u200b\\(F\\)\u200b\u7684\u200b\u884c\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u5e94\u200b\u7684\u200b\\(P_i\\)\u200b\u4e3a\u200b\\(T\\)\uff0c\u200b\u5219\u200b\u5c06\u200b\u6790\u53d6\u200b\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u5bf9\u5e94\u200b\\(P_i\\)\u200b\u66ff\u6362\u200b\u4e3a\u200b\\(\\lnot P_i\\)\u3002\u200b\u5c06\u200b\u6240\u5f97\u200b\u7684\u200b\u516c\u5f0f\u200b\u4f7f\u7528\u200b\u5408\u53d6\u200b\u8fd0\u7b97\u7b26\u200b\u8fde\u63a5\u200b\u5373\u5f97\u200b\u7b26\u5408\u200b\u771f\u503c\u8868\u200b\u7684\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-2/#_4","title":"\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6","text":"\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u4e3a\u200b\u7531\u200b\u8054\u7ed3\u8bcd\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u82e5\u200b\u4efb\u610f\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u90fd\u200b\u6709\u200b\u901a\u8fc7\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u4f7f\u7528\u200b\\(A\\)\u200b\u4e2d\u200b\u7684\u200b\u8054\u7ed3\u8bcd\u200b\u7ec4\u5408\u800c\u6210\u200b\u7684\u200b\u516c\u5f0f\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\uff0c\u200b\u5219\u200b\\(A\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b
\u200b\u901a\u8fc7\u200b\u5982\u4e0a\u200b\u5bf9\u200b\u771f\u503c\u8868\u200b\u7684\u200b\u5206\u6790\u200b\uff0c\u200b\u4efb\u4f55\u200b\u771f\u503c\u8868\u200b\u90fd\u200b\u80fd\u200b\u4f7f\u7528\u200b\\(\\{\\land, \\lor, \\lnot\\}\\)\u200b\u4e09\u4e2a\u200b\u8fd0\u7b97\u7b26\u200b\u8868\u793a\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u3002\u200b\u5047\u8bbe\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u516c\u5f0f\u200b\\(P\\)\uff0c\u200b\u4e0d\u200b\u5b58\u5728\u200b\\(\\{\\land, \\lor, \\lnot\\}\\)\u200b\u7ec4\u6210\u200b\u7684\u200b\u516c\u5f0f\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\u3002\u200b\u4f46\u200b\u901a\u8fc7\u200b\\(P\\)\u200b\u7684\u200b\u771f\u503c\u8868\u200b\u53ef\u4ee5\u200b\u6784\u9020\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\\(Q\\)\uff0c\u200b\u5219\u200b\\(Q\\)\u200b\u4e0e\u200b\\(P\\)\u200b\u7684\u200b\u771f\u503c\u8868\u200b\u76f8\u540c\u200b\uff0c\\(P=Q\\)\uff0c\u200b\u77db\u76fe\u200b\u3002\u200b\u56e0\u6b64\u200b\\(\\{\\land, \\lor, \\lnot\\}\\)\u200b\u662f\u200b\u5b8c\u5907\u200b\u7684\u200b\u3002
\u200b\u4ee5\u4e0b\u200b\u5217\u51fa\u200b\u4e86\u200b\u4e00\u90e8\u5206\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u6700\u5c0f\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
- \\(\\{\\lor, \\lnot\\}\\)
- \\(\\{\\land, \\lnot\\}\\)
- \\(\\{\\uparrow\\}\\)
- \\(\\{\\downarrow\\}\\)
- \\(\\{\\lnot, \\rightarrow\\}\\)
\u200b\u5982\u679c\u200b\\(A\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff0c\u200b\u96c6\u5408\u200b\\(B\\)\u200b\u4e2d\u200b\u7684\u200b\u8054\u7ed3\u8bcd\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u7ec4\u5408\u200b\u5f97\u5230\u200b\u4e0e\u200b\\(A\\)\u200b\u4e2d\u200b\u8054\u7ed3\u8bcd\u200b\u7b49\u4ef7\u200b\u7684\u200b\u8054\u7ed3\u8bcd\u200b\uff0c\u200b\u5219\u200b\\(B\\)\u200b\u4e5f\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\u3002
\u200b\u8bc1\u660e\u200b\uff1a\\(\\{\\lor, \\lnot\\}\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
\\[ P\\land Q = \\lnot (\\lnot P\\lor \\lnot Q) \\] \u200b\u8bc1\u660e\u200b\uff1a\\(\\{\\land, \\lnot\\}\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
\\[ P\\lor Q = \\lnot (\\lnot P\\land \\lnot Q) \\] \u200b\u8bc1\u660e\u200b\uff1a\\(\\{\\uparrow\\}\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
- \u200b\u8bc1\u660e\u200b\\(\\lnot P\\)\u200b\u53ef\u4ee5\u200b\u4ec5\u200b\u4f7f\u7528\u200b\\(\\uparrow\\)\u200b\u8fd0\u7b97\u7b26\u200b\u8868\u793a\u200b\uff1a
$$ \\begin{aligned} \\lnot P &= \\lnot (P\\land P) \\ &= P\\uparrow P \\end{aligned} $$
- \u200b\u8bc1\u660e\u200b\\(P\\land Q\\)\u200b\u53ef\u4ee5\u200b\u4ec5\u200b\u4f7f\u7528\u200b\\(\\uparrow\\)\u200b\u8fd0\u7b97\u7b26\u200b\u8868\u793a\u200b\uff1a
$$ \\begin{aligned} P\\land Q&= \\lnot \\lnot (P\\land Q) \\ &= \\lnot (P\\uparrow Q) \\ &= (P\\uparrow Q) \\uparrow (P\\uparrow Q) \\end{aligned} $$
\u200b\u8bc1\u660e\u200b\uff1a\\(\\{\\downarrow\\}\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
- \u200b\u8bc1\u660e\u200b\\(\\lnot P\\)\u200b\u53ef\u4ee5\u200b\u4ec5\u200b\u4f7f\u7528\u200b\\(\\downarrow\\)\u200b\u8fd0\u7b97\u7b26\u200b\u8868\u793a\u200b\uff1a
$$ \\begin{aligned} \\lnot P &= \\lnot (P\\lor P) \\ &= P\\downarrow P \\end{aligned} $$
- \u200b\u8bc1\u660e\u200b\\(P\\lor Q\\)\u200b\u53ef\u4ee5\u200b\u4ec5\u200b\u4f7f\u7528\u200b\\(\\downarrow\\)\u200b\u8fd0\u7b97\u7b26\u200b\u8868\u793a\u200b\uff1a
$$ \\begin{aligned} P\\lor Q&= \\lnot \\lnot (P\\lor Q) \\ &= \\lnot (P\\downarrow Q) \\ &= (P\\downarrow Q) \\downarrow (P\\downarrow Q) \\end{aligned} $$
\u200b\u8bc1\u660e\u200b\uff1a\\(\\{\\rightarrow, \\lnot\\}\\)\u200b\u662f\u200b\u8054\u7ed3\u8bcd\u200b\u7684\u200b\u5b8c\u5907\u200b\u96c6\u200b\uff1a
\\(P\\lor Q = \\lnot \\lnot P\\lor Q = \\lnot P\\rightarrow Q\\)
"},{"location":"math/discrete-mathematics/chapter-2/#_5","title":"\u5bf9\u5076\u200b\u5f0f","text":"\u200b\u8bbe\u200b\\(A\\)\u200b\u4e3a\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5c06\u200b\\(A\\)\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u7684\u200b\\(\\lor, \\land, T, F\\)\u200b\u5206\u522b\u200b\u4f7f\u7528\u200b\\(\\land, \\lor, F, T\\)\u200b\u8fdb\u884c\u200b\u66ff\u6362\u200b\uff0c\u200b\u6240\u200b\u5f97\u5230\u200b\u7684\u200b\u516c\u5f0f\u200b\u79f0\u4e3a\u200b\\(A\\)\u200b\u7684\u200b\u5bf9\u5076\u200b\u5f0f\u200b\uff0c\u200b\u8bb0\u200b\u4e3a\u200b\\(A^*\\)
\u200b\u8bbe\u200b\\(A\\)\u200b\u4e3a\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5c06\u200b\\(A\\)\u200b\u4e2d\u200b\u51fa\u73b0\u200b\u7684\u200b\u6240\u6709\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\\(P_1,\\dots, P_n\\)\u200b\u66ff\u6362\u200b\u4e3a\u200b\\(\\lnot P_1, \\dots, \\lnot P_n\\)\uff0c\u200b\u6240\u200b\u5f97\u5230\u200b\u7684\u200b\u516c\u5f0f\u200b\u79f0\u4e3a\u200b\\(A\\)\u200b\u7684\u200b\u5426\u200b\u547d\u9898\u200b\uff0c\u200b\u8bb0\u200b\u4e3a\u200b\\(A^-\\)
\u200b\u5219\u200b\u53d6\u200b\u5bf9\u5076\u200b\u5f0f\u200b\u8fd0\u7b97\u200b\u3001\u200b\u53d6\u5426\u200b\u547d\u9898\u200b\u8fd0\u7b97\u200b\u6709\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \\(\\lnot (A^*) = (\\lnot A)^*, \\lnot (A^-) = (\\lnot A)^-\\)
- \\((A^*)^*=A, (A^-)^- =A\\)
- \\(A^{*-}=\\lnot A\\)
- \\(A=B\\Rightarrow A^*=B^*\\)
- \u200b\u5bf9\u200b\\(A\\rightarrow B\\)\u200b\u53d6\u200b\u5bf9\u5076\u200b\u5f0f\u200b\u53ef\u5f97\u200b\\(A\\rightarrow B=T\\Rightarrow B^*\\rightarrow A^*=T\\)
\u200b\u6839\u636e\u200b\u5bf9\u5076\u200b\u5f0f\u200b\u548c\u200b\u5426\u200b\u547d\u9898\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c2\u200b\u5f0f\u200b\u81ea\u7136\u200b\u6210\u7acb\u200b\u30021\u200b\u5f0f\u200b\u548c\u200b3\u200b\u5f0f\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u6570\u5b66\u200b\u5f52\u7eb3\u6cd5\u200b\u8fdb\u884c\u200b\u8bc1\u660e\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-2/#_6","title":"\u8303\u5f0f","text":"\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\u6982\u5ff5\u200b\uff1a
- \u200b\u6587\u5b57\u200b\uff1a\u200b\u7b80\u5355\u200b\u547d\u9898\u200b\\(P\\)\u200b\u53ca\u5176\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b
- \u200b\u5408\u53d6\u200b\u5f0f\u200b\uff1a\u200b\u4e00\u4e9b\u200b\u6587\u5b57\u200b\u7684\u200b\u5408\u53d6\u200b\uff0c\u200b\u5f62\u200b\u5982\u200b\\(P_1\\land \\dots \\land P_n\\)
- \u200b\u6790\u53d6\u200b\u5f0f\u200b\uff08\u200b\u5b50\u53e5\u200b\uff09\uff1a\u200b\u4e00\u4e9b\u200b\u6587\u5b57\u200b\u7684\u200b\u6790\u53d6\u200b\uff0c\u200b\u5f62\u200b\u5982\u200b\\(P_1\\lor \\dots\\lor P_n\\)
- \u200b\u4e92\u8865\u200b\u5bf9\u200b\uff1a\u200b\u6587\u5b57\u200b\u4e0e\u5176\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5426\u5b9a\u200b\u5f62\u5f0f\u200b
- \u200b\u6790\u53d6\u8303\u5f0f\u200b\uff1a\u200b\u5408\u53d6\u200b\u5f0f\u200b\u901a\u8fc7\u200b\u6790\u53d6\u200b\u8054\u7ed3\u8bcd\u200b\u8fde\u63a5\u200b\u7684\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5f62\u200b\u5982\u200b\\(A_1\\lor \\dots\\lor A_n\\)\uff0c\u200b\u5176\u4e2d\u200b\\(A_i\\)\u200b\u4e3a\u200b\u5408\u53d6\u200b\u5f0f\u200b
- \u200b\u5408\u53d6\u8303\u5f0f\u200b\uff1a\u200b\u6790\u53d6\u200b\u5f0f\u200b\u901a\u8fc7\u200b\u5408\u53d6\u200b\u8054\u7ed3\u8bcd\u200b\u8fde\u63a5\u200b\u7684\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5f62\u200b\u5982\u200b\\(A_1\\land \\dots \\land A_n\\)\uff0c\u200b\u5176\u4e2d\u200b\\(A_i\\)\u200b\u4e3a\u200b\u6790\u53d6\u200b\u5f0f\u200b
\u200b\u7531\u6b64\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5bfc\u51fa\u200b\u8303\u5f0f\u200b\u5b9a\u7406\u200b\uff0c\u200b\u5373\u200b\u4efb\u4e00\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u90fd\u200b\u5b58\u5728\u200b\u6709\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\u7684\u200b\u5408\u53d6\u8303\u5f0f\u200b\u4e0e\u200b\u6790\u53d6\u8303\u5f0f\u200b\u3002\u200b\u8303\u5f0f\u200b\u5b9a\u7406\u200b\u7684\u200b\u6b63\u786e\u6027\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u5217\u5199\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u7684\u200b\u771f\u503c\u8868\u200b\u4e0e\u200b\u4ece\u200b\u771f\u503c\u8868\u200b\u5217\u5199\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u8bc1\u660e\u200b\u3002
\u200b\u8ba1\u7b97\u200b\u5408\u53d6\u8303\u5f0f\u200b\u4e0e\u200b\u6790\u53d6\u8303\u5f0f\u200b\uff1a
- \u200b\u6d88\u200b\u53bb\u200b\u903b\u8f91\u200b\u8054\u7ed3\u8bcd\u200b\\(A\\rightarrow B\\)\u200b\u4e0e\u200b\\(A\\leftrightarrow B\\)\uff0c\u200b\u66ff\u6362\u200b\u4e3a\u200b\\(\\lnot A\\lor B\\)\u200b\u4e0e\u200b\\((\\lnot A\\lor B)\\land (A\\lor \\lnot B)\\)
- \u200b\u4f7f\u7528\u200b\u6469\u6839\u200b\u5f8b\u200b\u4e0e\u200b\u53cc\u91cd\u200b\u5426\u5b9a\u200b\u5f8b\u200b\u6d88\u9664\u200b\\(\\lor\\)\u200b\u6216\u200b\\(\\land\\)\uff0c\u200b\u5e76\u200b\u6d88\u9664\u200b\u591a\u4f59\u200b\u7684\u200b\\(\\lnot\\)
- \u200b\u5c06\u200b\u6240\u6709\u200b\u7684\u200b\\(\\lnot\\)\u200b\u79fb\u52a8\u200b\u5230\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\\(P_i\\)\u200b\u524d\u200b
- \u200b\u4f7f\u7528\u200b\u5206\u914d\u5f8b\u200b\u5c06\u200b\u516c\u5f0f\u5316\u200b\u4e3a\u200b\u8303\u5f0f\u200b
"},{"location":"math/discrete-mathematics/chapter-2/#_7","title":"\u4e3b\u200b\u8303\u5f0f","text":"\u200b\u5bf9\u4e8e\u200b\u516c\u5f0f\u200b\\(Q = Q_1\\land \\dots \\land Q_n\\)\uff0c\u200b\u5f0f\u200b\u4e2d\u200b\\(Q_i=P_i\\)\u200b\u6216\u200b\\(Q_i=\\lnot P_i\\)\u3002\u200b\u5219\u200b\\(Q\\)\u200b\u4e3a\u200b\u6781\u5c0f\u200b\u9879\u200b\uff0c\u200b\u8bb0\u200b\u4e3a\u200b\\(m_i\\)\u3002
- \u200b\u6781\u5c0f\u200b\u9879\u4e2d\u200b\u5fc5\u987b\u200b\u51fa\u73b0\u200b\u6240\u6709\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b
- \\(n\\)\u200b\u4e2a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u53ef\u4ee5\u200b\u7ec4\u6210\u200b\\(2^n\\)\u200b\u4e2a\u200b\u6781\u5c0f\u200b\u9879\u200b\uff0c\u200b\u4f9d\u6b21\u200b\u8868\u793a\u200b\u4e3a\u200b\\(m_1, \\dots m_{2^n}\\)
\u200b\u5bf9\u4e8e\u200b\u516c\u5f0f\u200b\\(R = R_1\\lor \\dots \\lor R_n\\)\uff0c\u200b\u5f0f\u200b\u4e2d\u200b\\(R_i = P_i\\)\u200b\u6216\u200b\\(R_i = \\lnot P_i\\)\u3002\u200b\u5219\u200b\\(R\\)\u200b\u4e3a\u200b\u6781\u5927\u200b\u9879\u200b\uff0c\u200b\u8bb0\u200b\u4e3a\u200b\\(M_i\\)
\u200b\u4e0e\u200b\u6781\u5c0f\u200b\u9879\u200b\u76f8\u540c\u200b\uff0c\u200b\u6240\u6709\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u5fc5\u987b\u200b\u90fd\u200b\u51fa\u73b0\u200b\u5728\u200b\u6781\u5927\u200b\u9879\u4e2d\u200b\uff0c\u200b\u4e14\u200b\\(n\\)\u200b\u4e2a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u53ef\u4ee5\u200b\u7ec4\u6210\u200b\\(2^n\\)\u200b\u4e2a\u200b\u6781\u5927\u200b\u9879\u200b\u3002
\u200b\u4efb\u610f\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u7684\u200b\u8303\u5f0f\u200b\u4e2d\u200b\uff0c\u200b\u4ec5\u200b\u7531\u200b\u6781\u5c0f\u200b\u9879\u200b\u6784\u6210\u200b\u7684\u200b\u6790\u53d6\u8303\u5f0f\u200b\u4e3a\u4e3b\u200b\u6790\u53d6\u8303\u5f0f\u200b\uff0c\u200b\u4ec5\u200b\u7531\u200b\u6781\u5927\u200b\u9879\u200b\u6784\u6210\u200b\u7684\u200b\u5408\u53d6\u8303\u5f0f\u200b\u4e3a\u4e3b\u200b\u5408\u53d6\u8303\u5f0f\u200b\u3002\u200b\u4e3b\u200b\u6790\u53d6\u8303\u5f0f\u200b\u4e0e\u200b\u4e3b\u200b\u5408\u53d6\u8303\u5f0f\u200b\u90fd\u200b\u662f\u200b\u552f\u4e00\u200b\u7684\u200b\u3002
\u200b\u6781\u5927\u200b\u9879\u200b\u3001\u200b\u6781\u5c0f\u200b\u9879\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \u200b\u6781\u5927\u200b\u9879\u200b\u3001\u200b\u6781\u5c0f\u200b\u9879\u200b\u7684\u200b\u6570\u91cf\u200b\u7b49\u4e8e\u200b\u516c\u5f0f\u200b\u53ef\u80fd\u200b\u7684\u200b\u89e3\u91ca\u200b\u6570\u91cf\u200b\uff0c\u200b\u5373\u200b\\(2^n\\)
- \u200b\u6bcf\u4e2a\u200b\u6781\u5c0f\u200b\u9879\u4ec5\u200b\u5728\u200b\u516c\u5f0f\u200b\u7684\u200b\u4e00\u4e2a\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u4e3a\u200b\\(T\\)\uff0c\u200b\u6bcf\u4e2a\u200b\u6781\u5927\u200b\u9879\u4ec5\u200b\u5728\u200b\u516c\u5f0f\u200b\u7684\u200b\u4e00\u4e2a\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u4e3a\u200b\\(F\\)
- \u200b\u6781\u5c0f\u200b\u9879\u200b\u3001\u200b\u6781\u5927\u200b\u9879\u200b\u4e24\u200b\u4e24\u200b\u4e0d\u200b\u7b49\u503c\u200b\uff0c\u200b\u6709\u200b\\(m_i\\land m_j\\leftrightarrow i=j, M_i\\lor M_j\\leftrightarrow i\\not= j\\)\u3002
- \u200b\u4efb\u4e00\u200b\u542b\u6709\u200b\\(n\\)\u200b\u4e2a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u7684\u200b\u516c\u5f0f\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u7528\u200b\\(k\\leq n\\)\u200b\u4e2a\u200b\u6781\u5c0f\u200b\u9879\u200b\u6216\u200b\\(k\\leq n\\)\u200b\u4e2a\u200b\u6781\u5927\u200b\u9879\u200b\u8868\u793a\u200b\u3002
- \\(\\bigwedge _{i=0} ^{2^n-1} M_i=F, \\bigvee _{i=0}^{2^n-1} m_i = T\\)
"},{"location":"math/discrete-mathematics/chapter-2/#_8","title":"\u63a8\u7406\u200b\u5f62\u5f0f","text":"\u200b\u5c06\u200b\u81ea\u7136\u200b\u8bed\u53e5\u200b\u63cf\u8ff0\u200b\u7684\u200b\u63a8\u7406\u200b\u5173\u7cfb\u200b\u7ecf\u200b\u62bd\u8c61\u5316\u200b\u540e\u200b\u4f7f\u7528\u200b\u6761\u4ef6\u200b\u5f0f\u200b\u7684\u200b\u8868\u793a\u200b
\u200b\u82e5\u200b\\(A\\rightarrow B=T\\)\uff0c\u200b\u79f0\u200b\\(A\\)\u200b\u91cd\u8a00\u200b\u8574\u542b\u200b\\(B\\)\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(A\\Rightarrow B\\)\u3002\u200b\u91cd\u8a00\u200b\u8574\u542b\u200b\u5173\u7cfb\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \u200b\u82e5\u200b\\(A=T\\)\uff0c\u200b\u4e14\u200b\\(A\\Rightarrow B\\)\uff0c\u200b\u5219\u200b\\(B=T\\)
- \u200b\u82e5\u200b\\(A\\Rightarrow B\\land B\\Rightarrow A\\)\uff0c\u200b\u5219\u200b\\(A=B\\)
- \u200b\u82e5\u200b\\(A\\Rightarrow B\\land B\\Rightarrow C\\)\uff0c\u200b\u5219\u200b\\(A\\Rightarrow C\\)
- \u200b\u82e5\u200b\\(A\\Rightarrow B\\land A\\Rightarrow C\\)\uff0c\u200b\u5219\u200b\\(A\\Rightarrow (B\\land C)\\)
- \u200b\u82e5\u200b\\(A\\Rightarrow C\\land B\\Rightarrow C\\)\uff0c\u200b\u5219\u200b\\((A\\lor B)\\Rightarrow C\\)
\u200b\u8981\u200b\u8bc1\u660e\u200b\u4e00\u4e2a\u200b\u5f0f\u5b50\u200b\u4e3a\u91cd\u200b\u8a00\u200b\u8574\u542b\u200b\u5f0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8bc1\u660e\u200b\\(A\\rightarrow B\\)\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u6216\u200b\\(\\lnot A\\land B\\)\u200b\u4e3a\u200b\u77db\u76fe\u200b\u5f0f\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-2/#_9","title":"\u57fa\u672c\u200b\u7684\u200b\u63a8\u7406\u200b\u516c\u5f0f","text":"\u200b\u5982\u4e0b\u200b\u5217\u51fa\u200b\u4e00\u4e9b\u200b\u57fa\u672c\u200b\u7684\u200b\u63a8\u7406\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5f0f\u200b\u4e2d\u200b\\(P,Q,R,S\\)\u200b\u5747\u200b\u4e3a\u200b\u4efb\u610f\u200b\u547d\u9898\u200b\u53d8\u9879\u200b
- \\(P\\land Q\\Rightarrow P\\)
- \\(\\lnot(P\\rightarrow Q)\\Rightarrow P\\)
- \\(\\lnot(P\\rightarrow Q)\\Rightarrow \\lnot Q\\)
- \\(P\\Rightarrow P\\lor Q\\)
- \\(\\lnot P\\Rightarrow P\\rightarrow Q\\)
- \\(Q\\Rightarrow P\\rightarrow Q\\)
- \\(\\lnot P \\land(P\\lor Q)\\Rightarrow Q\\)
- \\(P\\land (P\\rightarrow Q) \\Rightarrow Q\\)\uff0c\u200b\u5206\u79bb\u200b\u89c4\u5219\u200b
- \\(\\lnot Q\\land (P\\rightarrow Q)\\Rightarrow \\lnot P\\)
- \\((P\\rightarrow Q)\\land (Q\\rightarrow R)\\Rightarrow P\\rightarrow R\\)\uff0c\u200b\u4e09\u6bb5\u8bba\u200b
- \\((P\\leftrightarrow Q)\\land (Q\\leftrightarrow R)\\Rightarrow P\\leftrightarrow R\\)
- \\((P\\rightarrow R)\\land (Q\\rightarrow R)\\land (P\\lor Q)\\Rightarrow R\\)
- \\((R\\rightarrow Q)\\land (R\\rightarrow S)\\land (P\\lor R)\\Rightarrow Q\\lor S\\)
- \\((P\\rightarrow Q)\\land (R\\rightarrow S)\\land (\\lnot Q\\lor \\lnot S)\\Rightarrow (\\lnot P\\lor \\lnot R)\\)
- \\(Q\\rightarrow R\\Rightarrow ((P\\lor Q)\\rightarrow (P\\lor R))\\)
- \\(Q\\rightarrow R\\Rightarrow ((P\\rightarrow Q)\\rightarrow (P\\rightarrow R))\\)
"},{"location":"math/discrete-mathematics/chapter-2/#_10","title":"\u63a8\u7406\u200b\u6f14\u7b97","text":"\u200b\u63a8\u7406\u200b\u6f14\u7b97\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u89c4\u5219\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\uff1a
- \u200b\u524d\u63d0\u200b\u5f15\u5165\u200b\u89c4\u5219\u200b\uff1a\u200b\u63a8\u7406\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u53ef\u4ee5\u200b\u968f\u65f6\u200b\u5f15\u5165\u200b\u524d\u63d0\u200b
- \u200b\u7ed3\u8bba\u200b\u5f15\u7528\u200b\u89c4\u5219\u200b\uff1a\u200b\u63a8\u7406\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u7684\u200b\u4e2d\u95f4\u200b\u7ed3\u8bba\u200b\u53ef\u4ee5\u200b\u4f5c\u4e3a\u200b\u540e\u7eed\u200b\u63a8\u7406\u200b\u7684\u200b\u524d\u63d0\u200b
- \u200b\u4ee3\u5165\u200b\u89c4\u5219\u200b\uff1a\u200b\u63a8\u7406\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u5bf9\u200b\u91cd\u8a00\u5f0f\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4ee3\u5165\u200b\u89c4\u5219\u200b
- \u200b\u7f6e\u6362\u200b\u89c4\u5219\u200b\uff1a\u200b\u63a8\u7406\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u4efb\u4f55\u200b\u90e8\u5206\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u7528\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\u7684\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u8fdb\u884c\u200b\u66ff\u6362\u200b
- \u200b\u5206\u79bb\u200b\u89c4\u5219\u200b\uff1a\u200b\u82e5\u200b\\(A\\)\u200b\u4e14\u200b\\(A\\rightarrow B\\)\u200b\u5219\u200b\\(B\\)
- \u200b\u6761\u4ef6\u200b\u8bc1\u660e\u200b\u89c4\u5219\u200b\uff1a\\(A_1\\land A_2\\Rightarrow B \\Leftrightarrow A_1\\Rightarrow A_2\\rightarrow B\\)
"},{"location":"math/discrete-mathematics/chapter-2/#_11","title":"\u5f52\u7ed3\u200b\u63a8\u7406","text":"\u200b\u601d\u8def\u200b\uff1a\u200b\u8981\u200b\u8bc1\u660e\u200b\\(A\\Rightarrow B\\)\uff0c\u200b\u53ef\u200b\u8bc1\u660e\u200b\\(A\\land \\lnot B=F\\)\u3002
- \u200b\u5c06\u200b\\(C = A\\land \\lnot B\\)\u200b\u5316\u4e3a\u200b\u5408\u53d6\u8303\u5f0f\u200b\\(Q_1\\land \\dots \\land Q_n\\)\uff0c\u200b\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u6790\u53d6\u200b\u5f0f\u200b\u6784\u6210\u200b\u5b50\u53e5\u200b\u96c6\u5408\u200b\\(\\{Q_1,\\dots, Q_n\\}\\)
- \u200b\u6d88\u200b\u53bb\u200b\u5b50\u53e5\u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u4e92\u8865\u200b\u5bf9\u200b\uff0c\u200b\u5982\u200b\\(P\\lor R\\)\u200b\u4e0e\u200b\\(\\lnot P\\lor \\lnot Q\\)\u200b\u5f52\u7ed3\u200b\u5f97\u5230\u200b\\(R\\lor \\lnot Q\\)\u3002\u200b\u4e0d\u65ad\u200b\u91cd\u590d\u200b\u6d88\u200b\u53bb\u200b\u8fc7\u7a0b\u200b\u3002
- \u200b\u76f4\u5230\u200b\u5b50\u53e5\u200b\u96c6\u5408\u200b\u4e3a\u7a7a\u200b\uff0c\u200b\u5f97\u5230\u200b\u7a7a\u5b50\u200b\u53e5\u200b\\(\\square\\)\uff0c\u200b\u8bc1\u660e\u200b\\(A\\land \\lnot B\\)\u200b\u662f\u200b\u77db\u76fe\u200b\u5f0f\u200b
"},{"location":"math/discrete-mathematics/chapter-3/","title":"\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u5316","text":"\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u7ed3\u6784\u200b\uff1a
- \u200b\u521d\u59cb\u200b\u7b26\u53f7\u200b\uff1a\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u5141\u8bb8\u200b\u51fa\u73b0\u200b\u7684\u200b\u7b26\u53f7\u200b\u96c6\u5408\u200b
- \u200b\u5f62\u6210\u200b\u89c4\u5219\u200b\uff1a\u200b\u5b9a\u4e49\u200b\u4e86\u200b\u7b26\u53f7\u200b\u5e8f\u5217\u200b\u7684\u200b\u5408\u6cd5\u6027\u200b
- \u200b\u516c\u7406\u200b\uff1a\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u6700\u200b\u57fa\u672c\u200b\u7684\u200b\u91cd\u8a00\u5f0f\u200b\uff0c\u200b\u662f\u200b\u63a8\u6f14\u200b\u5176\u4ed6\u200b\u6240\u6709\u200b\u91cd\u8a00\u5f0f\u200b\u7684\u200b\u4f9d\u636e\u200b
- \u200b\u53d8\u5f62\u200b\u89c4\u5219\u200b\uff1a\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u6240\u200b\u89c4\u5b9a\u200b\u7684\u200b\u63a8\u6f14\u200b\u89c4\u5219\u200b\uff0c\u200b\u516c\u7406\u200b\u901a\u8fc7\u200b\u53d8\u5f62\u200b\u89c4\u5219\u200b\u5f97\u5230\u200b\u7684\u200b\u516c\u5f0f\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u5b9a\u7406\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_2","title":"\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf","text":"\u200b\u4f9d\u636e\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u7684\u200b\u7ed3\u6784\u200b\u5efa\u7acb\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u3002\u200b\u5e94\u5f53\u200b\u6ce8\u610f\u200b\u5230\u200b\uff0c\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u4e0d\u662f\u200b\u552f\u4e00\u200b\u7684\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-3/#_3","title":"\u521d\u59cb\u200b\u7b26\u53f7","text":"\u200b\u5927\u5199\u200b\u82f1\u6587\u5b57\u6bcd\u200b\\(A,\\dots ,Z\\)\u200b\u8868\u793a\u200b\u547d\u9898\u200b \\(\\lnot, \\lor\\)\u200b\u8868\u793a\u200b\u8054\u7ed3\u8bcd\u200b \\((, )\\)\u200b\u4e00\u5bf9\u200b\u62ec\u53f7\u200b\u89c4\u5b9a\u200b\u4e86\u200b\u8054\u7ed3\u8bcd\u200b\u8fd0\u7b97\u200b\u7684\u200b\u4f18\u5148\u200b\u987a\u5e8f\u200b \\(\\vdash\\)\u200b\u8868\u660e\u200b\u4e00\u4e2a\u200b\u516c\u5f0f\u200b\u662f\u200b\u6c38\u771f\u5f0f\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_4","title":"\u5f62\u6210\u200b\u89c4\u5219","text":"\u200b\u79f0\u200b\u521d\u59cb\u200b\u7b26\u53f7\u200b\u6784\u6210\u200b\u7684\u200b\u7b26\u53f7\u200b\u5e8f\u5217\u200b\u4e3a\u200b\u516c\u5f0f\u200b\uff0c\u200b\u53ea\u6709\u200b\u7b26\u5408\u200b\u4ee5\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u7b26\u53f7\u200b\u5e8f\u5217\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff1a
- \u200b\u5355\u4e2a\u200b\u7b26\u53f7\u200b\\(\\pi\\)\uff0c\\(\\pi\\)\u200b\u662f\u200b\u5927\u5199\u200b\u82f1\u6587\u5b57\u6bcd\u200b
- \u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\\(\\lnot A\\)\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A, B\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\\((A\\lor B)\\)\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b
\u200b\u4e3a\u200b\u7b80\u5316\u200b\u5176\u4ed6\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u7684\u200b\u8868\u8fbe\u200b\uff0c\u200b\u5f15\u5165\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\u7684\u200b\u516c\u5f0f\u200b\uff1a
- \\((A\\rightarrow B):= (\\lnot A\\lor B)\\)
- \\((A\\land B):= \\lnot (\\lnot A\\lor \\lnot B)\\)
- \\((A\\leftrightarrow B):= ((A\\rightarrow B)\\land (B\\rightarrow A))\\)
"},{"location":"math/discrete-mathematics/chapter-3/#_5","title":"\u516c\u7406","text":"\u200b\u5728\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u5f15\u5165\u200b\u5982\u4e0b\u200b\u516c\u7406\u200b\uff1a
- \\(\\vdash ((P\\lor P)\\rightarrow P)\\)
- \\(\\vdash (P\\rightarrow (P\\lor Q))\\)
- \\(\\vdash ((P\\lor Q) \\rightarrow (Q\\lor P))\\)
- \\(\\vdash ((Q\\rightarrow R)\\rightarrow ((P\\lor Q)\\rightarrow (P\\lor R)))\\)
"},{"location":"math/discrete-mathematics/chapter-3/#_6","title":"\u63a8\u7406\u200b\u89c4\u5219","text":"\u200b\u4ee3\u5165\u200b\u89c4\u5219\u200b\u3001\u200b\u5206\u79bb\u200b\u89c4\u5219\u200b\u3001\u200b\u7f6e\u6362\u200b\u89c4\u5219\u200b\u662f\u200b\u547d\u9898\u903b\u8f91\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u63a8\u7406\u200b\u89c4\u5219\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_7","title":"\u738b\u6d69\u200b\u7b97\u6cd5","text":""},{"location":"math/discrete-mathematics/chapter-3/#_8","title":"\u521d\u59cb\u200b\u7b26\u53f7","text":"\u200b\u5927\u5199\u5b57\u6bcd\u200b\\(A, \\dots, Z\\)\u200b\u8868\u793a\u200b\u547d\u9898\u200b \\(\\lnot, \\land, \\lor, \\rightarrow, \\leftrightarrow\\)\u200b\u8868\u793a\u200b\u8054\u7ed3\u8bcd\u200b \\((, ), ,\\)\u200b\u8868\u793a\u200b\u5706\u62ec\u53f7\u200b\u4e0e\u200b\u9017\u53f7\u200b \\(\\alpha, \\beta, \\dots, \\omega\\)\u200b\u8868\u793a\u200b\u516c\u5f0f\u200b\u4e32\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_9","title":"\u5f62\u6210\u200b\u89c4\u5219","text":"\u200b\u7b26\u5408\u200b\u4ee5\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u7b26\u53f7\u200b\u5e8f\u5217\u200b\u79f0\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff1a
- \u200b\u5355\u4e2a\u200b\u7b26\u53f7\u200b\\(\\pi\\)\uff0c\\(\\pi\\)\u200b\u662f\u200b\u5927\u5199\u200b\u82f1\u6587\u5b57\u6bcd\u200b
- \u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\u200b\u5219\u200b\\(\\lnot A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A, B\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\u200b\u5219\u200b\\((A\\lnot B), (A\\lor B), (A\\rightarrow B), (A\\leftrightarrow B)\\)\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b
\u200b\u6ee1\u8db3\u200b\u4ee5\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u79f0\u4e3a\u200b\u516c\u5f0f\u200b\u4e32\u200b\uff1a
- \u200b\u7a7a\u200b\u7b26\u53f7\u4e32\u200b\u662f\u200b\u516c\u5f0f\u200b\u4e32\u200b
- \u200b\u5408\u5f0f\u516c\u5f0f\u200b\u662f\u200b\u516c\u5f0f\u200b\u4e32\u200b
- \u200b\u5982\u679c\u200b\\(\\alpha\\)\u200b\u548c\u200b\\(\\beta\\)\u200b\u662f\u200b\u516c\u5f0f\u200b\u4e32\u200b\uff0c\u200b\u5219\u200b\\(\\alpha, \\beta\\)\u200b\u662f\u200b\u516c\u5f0f\u200b\u4e32\u200b
\u200b\u516c\u5f0f\u200b\u4e32\u200b\u4e0e\u200b\u7ec4\u6210\u200b\u516c\u5f0f\u200b\u4e32\u200b\u7684\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u7684\u200b\u987a\u5e8f\u200b\u65e0\u5173\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-3/#_10","title":"\u5b9a\u4e49","text":" - \u200b\u5b9a\u4e49\u200b\u76f8\u7ee7\u200b\u5f0f\u200b\u4e3a\u200b\\(\\alpha\\stackrel s\\rightarrow\\beta\\)\uff0c\u200b\u5176\u4e2d\u200b\\(\\alpha, \\beta\\)\u200b\u90fd\u200b\u662f\u200b\u516c\u5f0f\u200b\u4e32\u200b
- \u200b\u524d\u4ef6\u200b\u4e2d\u200b\u7684\u200b\\(,\\)\u200b\u89e3\u91ca\u200b\u4e3a\u200b\\(\\land\\)\uff0c\u200b\u540e\u4ef6\u200b\u4e2d\u200b\u7684\u200b\\(,\\)\u200b\u89e3\u91ca\u200b\u4e3a\u200b\\(\\lor\\)
- \u200b\u82e5\u200b\\(\\alpha\\stackrel s\\rightarrow \\beta\\)\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8bb0\u200b\u4f5c\u200b\\(\\alpha\\stackrel s\\Rightarrow \\beta\\)
"},{"location":"math/discrete-mathematics/chapter-3/#_11","title":"\u516c\u7406","text":"\u200b\u82e5\u200b\\(\\alpha\\)\u200b\u548c\u200b\\(\\beta\\)\u200b\u7684\u200b\u516c\u5f0f\u200b\u4ec5\u4e3a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\uff0c\u200b\u4e0d\u200b\u5305\u542b\u200b\u8054\u7ed3\u8bcd\u200b\uff0c\u200b\u5219\u200b\\(\\alpha\\stackrel s\\rightarrow \\beta\\)\u200b\u4e3a\u200b\u91cd\u8a00\u5f0f\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\\(\\alpha\\)\u200b\u4e0e\u200b\\(\\beta\\)\u200b\u4e2d\u200b\u81f3\u5c11\u200b\u542b\u6709\u200b\u4e00\u4e2a\u200b\u76f8\u540c\u200b\u7684\u200b\u547d\u9898\u200b\u53d8\u9879\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_12","title":"\u63a8\u7406\u200b\u89c4\u5219","text":"\u200b\u5bf9\u4e8e\u200b\u5b58\u5728\u200b\u4e8e\u200b\u524d\u4ef6\u200b\u4e2d\u200b\u7684\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u63a8\u7406\u200b\u89c4\u5219\u200b\u5982\u4e0b\u200b\uff1a
- \\(\\lnot\\)\uff1a\u200b\u82e5\u200b\\(\\alpha, \\beta \\stackrel s\\Rightarrow X, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha, \\lnot X, \\beta \\stackrel x\\Rightarrow \\gamma\\)
- \\(\\land\\)\uff1a\u200b\u82e5\u200b\\(X, Y, \\alpha, \\beta\\stackrel s\\Rightarrow \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha, X\\land Y, \\beta\\stackrel s\\Rightarrow Y\\)
- \\(\\lor\\)\uff1a\u200b\u82e5\u200b\\(X, \\alpha, \\beta \\stackrel s\\Rightarrow \\gamma\\)\u200b\u4e14\u200b\\(Y, \\alpha, \\beta \\stackrel s\\Rightarrow X, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha, X\\lor Y, \\beta\\stackrel s\\Rightarrow \\gamma\\)
- \\(\\rightarrow\\)\uff1a\u200b\u82e5\u200b\\(Y, \\alpha, \\beta\\stackrel s\\Rightarrow \\gamma\\)\u200b\u4e14\u200b\\(\\alpha, \\beta\\stackrel s\\Rightarrow X, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha, X\\rightarrow Y, \\beta\\stackrel s\\Rightarrow \\gamma\\)
- \\(\\leftrightarrow\\)\uff1a\u200b\u82e5\u200b\\(X, Y, \\alpha, \\beta\\stackrel s\\Rightarrow \\gamma\\)\u200b\u4e14\u200b\\(\\alpha, \\beta\\stackrel s\\Rightarrow X, Y, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha, X\\leftrightarrow Y, \\beta\\stackrel s\\Rightarrow \\gamma\\)
\u200b\u5bf9\u4e8e\u200b\u5b58\u5728\u200b\u4e8e\u200b\u540e\u4ef6\u200b\u4e2d\u200b\u7684\u200b\u8fd0\u7b97\u7b26\u200b\uff0c\u200b\u63a8\u7406\u200b\u89c4\u5219\u200b\u5982\u4e0b\u200b\uff1a
- \\(\\lnot\\)\uff1a\u200b\u82e5\u200b\\(X, \\alpha\\stackrel s\\Rightarrow \\beta, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha\\stackrel s\\Rightarrow\\beta, \\lnot X, \\gamma\\)
- \\(\\land\\)\uff1a\u200b\u82e5\u200b\\(\\alpha\\stackrel s\\Rightarrow X, \\beta, \\gamma\\)\u200b\u4e14\u200b\\(\\alpha\\stackrel s\\Rightarrow\\)
- \\(\\land\\)\uff1a\u200b\u82e5\u200b\\(\\alpha\\stackrel s\\Rightarrow X, \\beta, \\gamma\\)\u200b\u4e14\u200b\\(\\alpha\\stackrel s\\Rightarrow Y, \\beta, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha \\stackrel s\\Rightarrow\\beta, X\\land Y, \\gamma\\)
- \\(\\lor\\)\uff1a\u200b\u82e5\u200b\\(\\alpha\\stackrel s\\Rightarrow X, Y, \\beta, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha\\stackrel s\\Rightarrow \\beta, X\\lor Y, \\gamma\\)
- \\(\\rightarrow\\)\uff1a\u200b\u82e5\u200b\\(X, \\alpha\\stackrel s\\Rightarrow Y, \\beta, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha\\stackrel s\\Rightarrow \\beta, X\\rightarrow Y, \\gamma\\)
- \\(\\leftrightarrow\\)\uff1a\u200b\u82e5\u200b\\(X, \\alpha\\stackrel s\\Rightarrow Y, \\beta, \\gamma\\)\u200b\u4e14\u200b\\(Y, \\alpha\\stackrel s\\Rightarrow X, \\beta, \\gamma\\)\uff0c\u200b\u5219\u200b\\(\\alpha \\stackrel s\\Rightarrow \\beta, X\\leftrightarrow Y, \\gamma\\)
\u200b\u5b9a\u7406\u200b\u7684\u200b\u63a8\u6f14\u200b\u8fc7\u7a0b\u200b\uff1a
- \u200b\u5c06\u8981\u200b\u8bc1\u660e\u200b\u7684\u200b\u5b9a\u7406\u200b\u5199\u6210\u200b\u76f8\u7ee7\u200b\u5f0f\u200b\u5f62\u5f0f\u200b
- \u200b\u4ece\u200b\u76f8\u7ee7\u200b\u5f0f\u200b\u51fa\u53d1\u200b\u4f7f\u7528\u200b\u53d8\u5f62\u200b\u89c4\u5219\u200b\u6d88\u200b\u53bb\u200b\u76f8\u7ee7\u200b\u5f0f\u200b\u4e24\u4fa7\u200b\u7684\u200b\u6240\u6709\u200b\u903b\u8f91\u200b\u8054\u7ed3\u8bcd\u200b
- \u200b\u82e5\u200b\u5f97\u5230\u200b\u7684\u200b\u6240\u6709\u200b\u76f8\u7ee7\u200b\u5f0f\u200b\u90fd\u200b\u662f\u200b\u516c\u7406\u200b\uff0c\u200b\u5219\u200b\u5b9a\u7406\u200b\u6210\u7acb\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_13","title":"\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf","text":""},{"location":"math/discrete-mathematics/chapter-3/#_14","title":"\u521d\u59cb\u200b\u7b26\u53f7","text":"\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf\u200b\u7684\u200b\u4e00\u90e8\u5206\u200b\u521d\u59cb\u200b\u7b26\u53f7\u200b\u7ee7\u627f\u200b\u81ea\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u3002\u200b\u6b64\u5916\u200b\uff0c\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf\u200b\u8fd8\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u521d\u59cb\u200b\u7b26\u53f7\u200b\uff1a
\\[ \\varGamma = \\{A_1, \\dots, A_n\\}=A_1, \\dots, A_n \\] \u200b\u8868\u793a\u200b\u6709\u9650\u200b\u4e2a\u200b\u547d\u9898\u200b\u516c\u5f0f\u200b\u96c6\u5408\u200b\uff0c\u200b\u5b9a\u4e49\u200b\\(\\varGamma \\vdash A\\)\u200b\u8868\u793a\u200b\\(\\varGamma, A\\)\u200b\u4e4b\u95f4\u200b\u6709\u200b\u5f62\u5f0f\u200b\u63a8\u7406\u200b\u5173\u7cfb\u200b\uff0c\\(\\varGamma\\)\u200b\u4e3a\u200b\u5f62\u5f0f\u200b\u524d\u63d0\u200b\uff0c\\(A\\)\u200b\u4e3a\u200b\u5f62\u5f0f\u200b\u7ed3\u8bba\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-3/#_15","title":"\u5f62\u6210\u200b\u89c4\u5219","text":"\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf\u200b\u7684\u200b\u5f62\u6210\u200b\u89c4\u5219\u200b\u4e0e\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u7684\u200b\u5f62\u6210\u200b\u89c4\u5219\u200b\u76f8\u540c\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_16","title":"\u53d8\u5f62\u200b\u89c4\u5219","text":"\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf\u200b\u6709\u200b\u5982\u4e0b\u200b\u53d8\u5f62\u200b\u89c4\u5219\u200b\uff1a
- \\(A_1, \\dots, A_n\\vdash A_i(i=1, \\dots, n)\\)\uff0c\u200b\u5373\u200b\u524d\u63d0\u200b\u4e2d\u200b\u7684\u200b\u4efb\u4f55\u200b\u547d\u9898\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u4f5c\u4e3a\u200b\u7ed3\u8bba\u200b\u51fa\u73b0\u200b
- \u200b\u4f20\u9012\u200b\u5f8b\u200b\uff1a\u200b\u82e5\u200b\\(\\varGamma \\vdash A\\)\u200b\u4e14\u200b\\(A\\vdash B\\)\uff0c\u200b\u5219\u200b\\(\\varGamma\\vdash B\\)
- \u200b\u53cd\u8bc1\u200b\u5f8b\u200b\uff1a\u200b\u82e5\u200b\\(\\varGamma, \\lnot A\\vdash B\\)\u200b\u4e14\u200b\\(\\varGamma, \\lnot A\\vdash \\lnot B\\)\uff0c\u200b\u5219\u200b\\(\\varGamma \\vdash A\\)\uff08\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u8bc1\u660e\u200b\\(\\varGamma \\land \\lnot A=F\\)\uff09
- \u200b\u5206\u79bb\u200b\u89c4\u5219\u200b\uff1a\\(A, A\\rightarrow B\\vdash B\\)
- \u200b\u8574\u542b\u200b\u8bcd\u200b\u5f15\u5165\u200b\uff1a\u200b\u82e5\u200b\\(\\varGamma, A\\vdash B\\)\uff0c\u200b\u5219\u200b\\(\\varGamma\\vdash A\\rightarrow B\\)
"},{"location":"math/discrete-mathematics/chapter-3/#_17","title":"\u5b9a\u7406","text":"\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u81ea\u7136\u200b\u6f14\u7ece\u200b\u7cfb\u7edf\u200b\u5305\u542b\u200b\u7684\u200b\u5b9a\u7406\u200b\u4e0e\u200b\u547d\u9898\u903b\u8f91\u200b\u7684\u200b\u516c\u7406\u200b\u7cfb\u7edf\u200b\u5305\u542b\u200b\u7684\u200b\u5b9a\u7406\u200b\u76f8\u540c\u200b
"},{"location":"math/discrete-mathematics/chapter-3/#_18","title":"\u975e\u6807\u51c6\u200b\u903b\u8f91","text":" - \u200b\u591a\u503c\u903b\u8f91\u200b\uff0c\u200b\u82e5\u200b\\(P\\)\u200b\u53d6\u503c\u200b\u4e8e\u200b\\([0,1]\\)\uff0c\u200b\u53ef\u4ee5\u200b\u89e3\u91ca\u200b\u4e3a\u200b
- \\(P=0\\)\u200b\u8868\u793a\u200b\\(P\\)\u200b\u771f\u200b
- \\(P=1\\)\u200b\u8868\u793a\u200b\\(P\\)\u200b\u5047\u200b
- \\(0<P<1\\)\u200b\u8868\u793a\u200b\\(P\\)\u200b\u4e3a\u200b\u771f\u7684\u200b\u6982\u7387\u200b\u4e3a\u200b\\(1-P\\)
- \u200b\u4e09\u503c\u200b\u903b\u8f91\u200b
- Kleene\u200b\u903b\u8f91\u200b\uff1a\\(T, F, U\\)\uff0c\\(U\\)\u200b\u8868\u793a\u200b\u672a\u77e5\u200b
- Lukasiewicz\u200b\u903b\u8f91\u200b\uff1a\\(T, F, I\\)\uff0c\\(I\\)\u200b\u8868\u793a\u200b\u5c06\u6765\u200b\u53ef\u80fd\u200b\uff0c\u200b\u76ee\u524d\u200b\u4e0d\u200b\u5177\u5907\u200b\u771f\u503c\u200b
- Bochvar\u200b\u903b\u8f91\u200b\uff1a\\(T, F, M\\)\uff0c\\(M\\)\u200b\u8868\u793a\u200b\u6096\u8bba\u200b
"},{"location":"math/discrete-mathematics/chapter-4/","title":"\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u7684\u200b\u57fa\u672c\u6982\u5ff5","text":"\u200b\u8c13\u8bcd\u200b\u8868\u793a\u200b\u4e86\u200b\u591a\u4e2a\u200b\u4e2a\u4f53\u200b\u8bcd\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5173\u7cfb\u200b\u3002\u200b\u8fdb\u4e00\u6b65\u200b\u5730\u200b\u8bb2\u200b\u662f\u200b\u7ed9\u5b9a\u200b\u7684\u200b\u4e2a\u4f53\u200b\u8bcd\u5230\u200b\u96c6\u5408\u200b\\(\\{T, F\\}\\)\u200b\u4e0a\u200b\u7684\u200b\u4e00\u4e2a\u200b\u6620\u5c04\u200b\uff0c\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5176\u200b\u5199\u200b\u4e3a\u200b\u51fd\u6570\u200b\u7684\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u5982\u200b\\(P(x, y)\\)
\u200b\u51fd\u6570\u200b\u8868\u793a\u200b\u4ece\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\u5230\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\u7684\u200b\u6620\u5c04\u200b\uff0c\u200b\u901a\u5e38\u200b\u4f7f\u7528\u200b\u5c0f\u5199\u5b57\u6bcd\u200b\u8fdb\u884c\u200b\u8868\u793a\u200b\u3002
\u200b\u6709\u200b\u4e24\u79cd\u200b\u91cf\u8bcd\u200b\uff0c\u200b\u5373\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u4e0e\u200b\u5b58\u5728\u200b\u91cf\u8bcd\u200b\u3002\u200b\u53d7\u5230\u200b\u91cf\u8bcd\u200b\u7ea6\u675f\u200b\u7684\u200b\u53d8\u5143\u200b\u79f0\u4e3a\u200b\u7ea6\u675f\u200b\u53d8\u5143\u200b\uff0c\u200b\u5426\u5219\u200b\u79f0\u4e3a\u200b\u81ea\u7531\u200b\u53d8\u5143\u200b\u3002\u200b\u91cf\u8bcd\u200b\u53ea\u80fd\u200b\u4f5c\u7528\u200b\u4e8e\u200b\u53d8\u5143\u200b\u800c\u200b\u4e0d\u80fd\u200b\u4f5c\u7528\u200b\u4e8e\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u4e0e\u200b\u8c13\u8bcd\u200b\u53d8\u9879\u200b\u3002\u200b\u53d8\u5143\u200b\u4f7f\u7528\u200b\u5c0f\u5199\u5b57\u6bcd\u200b\u8868\u793a\u200b\u3002
"},{"location":"math/discrete-mathematics/chapter-4/#_2","title":"\u5408\u5f0f\u516c\u5f0f","text":"\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u547d\u9898\u200b\u5e38\u9879\u200b\u3001\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u548c\u200b\u539f\u5b50\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u90fd\u200b\u662f\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\u200b\u5219\u200b\\(\\lnot A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
- \u200b\u82e5\u200b\\(A, B\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\u200b\u4e14\u200b\\(A, B\\)\u200b\u4e2d\u65e0\u53d8\u200b\u5143\u200b\u5728\u200b\u4e00\u4e2a\u200b\u4e2d\u200b\u7ea6\u675f\u200b\u800c\u200b\u5728\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u4e2d\u200b\u81ea\u7531\u200b\uff0c\u200b\u5219\u200b\\((A\\land B), (A\\lor B), (A\\rightarrow B), (A\\leftrightarrow B)\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\u3002
- \u200b\u82e5\u200b\\(A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff0c\\(x\\)\u200b\u5728\u200b\\(A\\)\u200b\u4e2d\u4e3a\u200b\u81ea\u7531\u200b\u53d8\u5143\u200b\uff0c\u200b\u5219\u200b\\((\\forall x)A, (\\exists x)A\\)\u200b\u4e3a\u200b\u5408\u5f0f\u516c\u5f0f\u200b
\u200b\u5728\u200b\u6709\u9650\u200b\u8bba\u57df\u200b\u4e0b\u200b\uff0c\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u4e0e\u200b\u7279\u79f0\u200b\u91cf\u8bcd\u200b\u53ef\u200b\u4e0e\u200bi\u200b\u8868\u793a\u200b\u4e3a\u200b\u547d\u9898\u903b\u8f91\u200b\u4e0b\u200b\u7684\u200b\u5408\u5f0f\u516c\u5f0f\u200b\uff1a
- \\((\\forall x)P(x) = P(1)\\land P(2)\\land \\dots \\land P(k)\\)
- \\((\\exists x)P(x) = P(1)\\lor P(2)\\lor \\dots \\lor P(k)\\)\\
\u200b\u5bf9\u4e8e\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\uff0c\u200b\u82e5\u200b\u5728\u200b\u4efb\u4f55\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u771f\u503c\u200b\u90fd\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u79f0\u8c13\u200b\u8bcd\u200b\u516c\u5f0f\u200b\u4e3a\u200b\u666e\u904d\u200b\u6709\u6548\u200b\u7684\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\uff1b\u200b\u82e5\u200b\u5728\u200b\u67d0\u4e2a\u200b\u89e3\u91ca\u200b\u4e0b\u200b\u771f\u503c\u200b\u4e3a\u200b\u771f\u200b\uff0c\u200b\u79f0\u8c13\u200b\u8bcd\u200b\u516c\u5f0f\u200b\u4e3a\u200b\u53ef\u200b\u6ee1\u8db3\u200b\u7684\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\uff0c\u200b\u5426\u5219\u200b\u79f0\u4e3a\u200b\u4e0d\u53ef\u200b\u6ee1\u8db3\u200b\u7684\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u3002
- \u200b\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u662f\u200b\u4e0d\u53ef\u5224\u5b9a\u200b\u7684\u200b
- \u200b\u53ea\u200b\u542b\u6709\u200b\u4e00\u5143\u200b\u8c13\u8bcd\u200b\u53d8\u9879\u200b\u7684\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u662f\u200b\u53ef\u200b\u5224\u5b9a\u200b\u7684\u200b
- \u200b\u4e2a\u4f53\u200b\u57df\u200b\u6709\u9650\u200b\u7684\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u662f\u200b\u53ef\u200b\u5224\u5b9a\u200b\u7684\u200b
"},{"location":"math/discrete-mathematics/chapter-5/","title":"\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u7684\u200b\u7b49\u503c\u200b\u548c\u200b\u63a8\u7406\u200b\u6f14\u7b97","text":"\u200b\u5bf9\u4e8e\u200b\u4e24\u4e2a\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\\(A, B\\)\uff0c\u200b\u82e5\u200b\u5728\u200b\\(A, B\\)\u200b\u7684\u200b\u4efb\u4e00\u200b\u89e3\u91ca\u200b\u4e0b\u200b\uff0c\\(A, B\\)\u200b\u90fd\u200b\u6709\u200b\u76f8\u540c\u200b\u7684\u200b\u771f\u503c\u200b\uff0c\u200b\u5373\u200b\\(A\\leftrightarrow B\\)\uff0c\u200b\u79f0\u200b\\(A, B\\)\u200b\u7b49\u503c\u200b\u3002\u200b\u8bb0\u200b\u4e3a\u200b\\(A=B\\)\u200b\u6216\u200b\\(A\\Leftrightarrow B\\)\u3002
"},{"location":"math/discrete-mathematics/chapter-5/#_2","title":"\u7b49\u503c\u200b\u5f0f","text":" - \u200b\u5c06\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4ee3\u5165\u200b\u547d\u9898\u903b\u8f91\u200b\u4e0b\u200b\u7684\u200b\u7b49\u503c\u200b\u516c\u5f0f\u200b\u5373\u53ef\u200b\u5f97\u5230\u200b\u8c13\u8bcd\u200b\u903b\u8f91\u200b\u7684\u200b\u7b49\u503c\u200b\u516c\u5f0f\u200b
- \u200b\u5426\u5b9a\u200b\u578b\u200b\u7b49\u503c\u200b\u5f0f\u200b
- \\(\\lnot (\\forall x)P(x) = (\\exists x)\\lnot P(x)\\)
- \\(\\lnot (\\exists x)P(x) = (\\forall x)\\lnot P(x)\\)
- \u200b\u91cf\u8bcd\u200b\u5206\u914d\u200b\u7b49\u503c\u200b\u5f0f\u200b\uff08\\(q\\)\u200b\u4e3a\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\uff0c\\(x\\)\u200b\u4e3a\u200b\u53d8\u5143\u200b\uff09
- \\((\\forall x)(P(x)\\lor q) = (\\forall x)P(x)\\lor q\\)
- \\((\\exists x)(P(x)\\lor q) = (\\exists x)P(x)\\lor q\\)
- \\((\\forall x)(P(x)\\land q) = (\\forall x)P(x)\\land q\\)
- \\((\\exists x)(P(x)\\land q) = (\\forall x)P(x)\\land q\\)
- \u200b\u5bf9\u200b\\(\\rightarrow\\)\u200b\u7684\u200b\u5206\u914d\u5f8b\u200b
- \\((\\forall x)(P(x)\\rightarrow q) = (\\exists x)P(x)\\rightarrow q\\)
- \\((\\exists x)(P(x)\\rightarrow q) = (\\forall x)P(x)\\rightarrow q\\)
- \\((\\forall x)(p\\rightarrow Q(x)) = p\\rightarrow (\\forall x)Q(x)\\)
- \\((\\exists x)(p\\rightarrow Q(x)) = p\\rightarrow (\\exists x)Q(x)\\)
- \u200b\u91cf\u8bcd\u200b\\(\\forall\\)\u200b\u5bf9\u200b\\(\\land\\)\u3001\u200b\u91cf\u8bcd\u200b\\(\\exists\\)\u200b\u5bf9\u200b\\(\\lor\\)\u200b\u7684\u200b\u5206\u914d\u5f8b\u200b
- \\((\\forall x)(P(x)\\land Q(x)) = (\\forall x)P(x) \\land (\\forall x)Q(x)\\)
- \\((\\exists x)(P(x)\\lor Q(x)) = (\\exists x)P(x) \\lor (\\exists x)Q(x)\\)
- \u200b\u53d8\u5143\u200b\u6613\u540d\u200b\u7684\u200b\u5206\u914d\u5f8b\u200b
- \\((\\forall x)(\\forall y)(P(x)\\lor Q(y)) = (\\forall x)P(x) \\lor (\\forall x)Q(x)\\)
- \\((\\exists x)(\\exists y)(P(x)\\land Q(y)) = (\\forall x)P(x) \\land (\\forall x)Q(x)\\)
"},{"location":"math/discrete-mathematics/chapter-5/#_3","title":"\u8303\u5f0f","text":"\u200b\u82e5\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u4e2d\u200b\u7684\u200b\u4e00\u5207\u200b\u91cf\u8bcd\u200b\u90fd\u200b\u4f4d\u4e8e\u200b\u516c\u5f0f\u200b\u7684\u200b\u6700\u200b\u5de6\u4fa7\u200b\uff0c\u200b\u4e14\u200b\u91cf\u8bcd\u200b\u7684\u200b\u4f5c\u7528\u57df\u200b\u5ef6\u4f38\u200b\u5230\u200b\u516c\u5f0f\u200b\u7684\u200b\u672b\u7aef\u200b\uff0c\u200b\u5219\u200b\u79f0\u8c13\u200b\u8bcd\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u4e3a\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\u3002\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\u7684\u200b\u4e00\u822c\u200b\u5f62\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
\\[ (Q_1x_1)\\dots (Q_nx_n)M(x_1, \\dots, x_n) \\] \u200b\u5176\u4e2d\u200b\\(Q_i\\)\u200b\u4e3a\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\\(\\forall\\)\u200b\u6216\u200b\u7279\u79f0\u200b\u91cf\u8bcd\u200b\\(\\exists\\)\uff0c\\(M\\)\u200b\u79f0\u4e3a\u200b\u6bcd\u5f0f\u200b\uff0c\u200b\u4e0d\u200b\u542b\u6709\u200b\u91cf\u8bcd\u200b\u3002
\u200b\u4efb\u4f55\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u90fd\u200b\u6709\u200b\u4e0e\u200b\u4e4b\u200b\u7b49\u503c\u200b\u7684\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\uff0c\u200b\u4f46\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\u4e0d\u200b\u552f\u4e00\u200b\u3002\u200b\u901a\u8fc7\u200b\u5982\u4e0b\u200b\u6d41\u7a0b\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u5316\u200b\u4e3a\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\uff1a
- \u200b\u5c06\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\\(\\rightarrow\\)\u200b\u8054\u7ed3\u8bcd\u200b\u4e0e\u200b\\(\\leftrightarrow\\)\u200b\u8054\u7ed3\u8bcd\u200b\u6d88\u200b\u53bb\u200b
- \u200b\u4f7f\u7528\u200b\u6469\u6839\u200b\u5f8b\u200b\uff0c\u200b\u5c06\u200b\\(\\lnot\\)\u200b\u5185\u79fb\u200b\u5230\u200b\u547d\u9898\u200b\u53d8\u9879\u200b\u6216\u200b\u8c13\u8bcd\u200b\u4e4b\u524d\u200b
- \u200b\u4f7f\u7528\u200b\u91cf\u8bcd\u200b\u5206\u914d\u200b\u7b49\u503c\u200b\u5f0f\u200b\u5c06\u200b\u91cf\u8bcd\u200b\u79fb\u52a8\u200b\u5230\u200b\u5de6\u4fa7\u200b
- \u200b\u4f7f\u7528\u200b\u53d8\u5143\u200b\u6613\u540d\u200b\u5206\u914d\u200b\u7b49\u503c\u200b\u5f0f\u200b\u5408\u5e76\u200b\u8c13\u8bcd\u200b
"},{"location":"math/discrete-mathematics/chapter-5/#skolem","title":"Skolem\u200b\u6807\u51c6\u578b","text":"\u200b\u79f0\u200b\u4e00\u4e2a\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4e3a\u200b\\(\\exists\\)\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u7684\u200b\u5b58\u5728\u200b\u91cf\u8bcd\u200b\u90fd\u200b\u5728\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u7684\u200b\u5de6\u8fb9\u200b\uff0c\u200b\u5e76\u4e14\u200b\u53ef\u4ee5\u200b\u4fdd\u6301\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u81f3\u5c11\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u5b58\u5728\u200b\u91cf\u8bcd\u200b\u3002\u200b\u6bcd\u5f0f\u200b\u4e2d\u200b\u4e0d\u200b\u542b\u6709\u200b\u4efb\u4f55\u200b\u91cf\u8bcd\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u200b\u542b\u200b\u81ea\u7531\u200b\u4e2a\u4f53\u200b\u53d8\u9879\u200b\u3002 \u200b\u79f0\u200b\u4e00\u4e2a\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4e3a\u200b\u4ec5\u200b\u4fdd\u7559\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u7684\u200b\u524d\u675f\u200b\u578b\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\u4e2d\u200b\u53ea\u200b\u5305\u542b\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u800c\u200b\u4e0d\u200b\u5305\u542b\u200b\u5b58\u5728\u200b\u91cf\u8bcd\u200b\u3002\u200b\u6bcd\u5f0f\u200b\u4e2d\u200b\u4e0d\u200b\u542b\u6709\u200b\u4efb\u4f55\u200b\u91cf\u8bcd\u200b\uff0c\u200b\u4e5f\u200b\u4e0d\u200b\u542b\u200b\u81ea\u7531\u200b\u4e2a\u4f53\u200b\u53d8\u9879\u200b\u3002
- \u200b\u4e00\u4e2a\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u53ef\u4ee5\u200b\u5316\u6210\u200b\u76f8\u5e94\u200b\u7684\u200b\\(\\exists\\)\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\uff0c\\(A\\)\u200b\u666e\u904d\u200b\u6709\u6548\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(\\exists\\)\u200b\u524d\u675f\u200b\u8303\u5f0f\u200b\u666e\u904d\u200b\u6709\u6548\u200b
- \u200b\u4e00\u4e2a\u200b\u8c13\u8bcd\u200b\u516c\u5f0f\u200b\\(A\\)\u200b\u53ef\u4ee5\u200b\u5316\u6210\u200b\u76f8\u5e94\u200b\u7684\u200b\u4ec5\u200b\u4fdd\u7559\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u7684\u200b\u524d\u675f\u200b\u578b\u200b\uff0c\\(A\\)\u200b\u4e0d\u53ef\u200b\u6ee1\u8db3\u200b\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u4ec5\u200b\u4fdd\u7559\u200b\u5168\u79f0\u200b\u91cf\u8bcd\u200b\u7684\u200b\u524d\u675f\u200b\u578b\u200b\u4e0d\u53ef\u200b\u6ee1\u8db3\u200b
"},{"location":"math/discrete-mathematics/chapter-9/","title":"\u96c6\u5408","text":"\u200b\u96c6\u5408\u200b\u662f\u200b\u4e00\u4e9b\u200b\u786e\u5b9a\u200b\u7684\u200b\u3001\u200b\u53ef\u4ee5\u200b\u533a\u5206\u200b\u7684\u200b\u4e8b\u7269\u200b\u6c47\u805a\u200b\u5728\u200b\u4e00\u8d77\u200b\u7ec4\u6210\u200b\u7684\u200b\u4e00\u4e2a\u200b\u6574\u4f53\u200b\uff0c\u200b\u7ec4\u6210\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u4e8b\u7269\u200b\u79f0\u4e3a\u200b\u8be5\u200b\u96c6\u5408\u200b\u7684\u200b\u4e00\u4e2a\u200b\u5143\u7d20\u200b\u3002
- \u200b\u96c6\u5408\u200b\u7684\u200b\u5143\u7d20\u200b\u53ef\u4ee5\u200b\u662f\u200b\u4efb\u4f55\u4e8b\u7269\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u662f\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\uff0c\u200b\u4f46\u200b\u4e0d\u80fd\u200b\u662f\u200b\u81ea\u8eab\u200b
- \u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u6ee1\u8db3\u200b\u552f\u4e00\u6027\u200b\uff0c\u200b\u4e0d\u4f1a\u200b\u51fa\u73b0\u200b\u76f8\u540c\u200b\u7684\u200b\u5143\u7d20\u200b
- \u200b\u96c6\u5408\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u6ca1\u6709\u200b\u987a\u5e8f\u200b\u5173\u7cfb\u200b
- \u200b\u5143\u7d20\u200b\u4e0e\u200b\u96c6\u5408\u200b\u7684\u200b\u5173\u7cfb\u200b\u662f\u200b\u786e\u5b9a\u200b\u7684\u200b\uff0c\u200b\u5373\u200b\u5c5e\u4e8e\u200b\uff08\\(\\in\\)\uff09\u200b\u4e0e\u200b\u4e0d\u200b\u5c5e\u4e8e\u200b\uff08\\(\\not\\in\\)\uff09
"},{"location":"math/discrete-mathematics/chapter-9/#_2","title":"\u96c6\u5408\u200b\u7684\u200b\u8868\u793a","text":"\u200b\u4ee5\u4e0b\u200b\u5217\u4e3e\u200b\u51fa\u200b\u5e38\u89c1\u200b\u7684\u200b\u96c6\u5408\u200b\uff1a
- \\(\\mathbf N\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\u81ea\u7136\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b
- \\(\\mathbf Z\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\u6574\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b
- \\(\\mathbf Q\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\u6709\u7406\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b
- \\(\\mathbf R\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\u5b9e\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b
- \\(\\mathbf C\\)\u200b\u8868\u793a\u200b\u5168\u4f53\u200b\u590d\u6570\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b
\u200b\u53ef\u4ee5\u200b\u7528\u200b\u5916\u5ef6\u200b\u8868\u793a\u6cd5\u200b\u6216\u200b\u5185\u6db5\u200b\u8868\u793a\u6cd5\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\uff1a
- \u200b\u5916\u5ef6\u200b\u8868\u793a\u6cd5\u200b\uff1a\u200b\u4e00\u4e00\u5217\u4e3e\u200b\u51fa\u200b\u96c6\u5408\u200b\u7684\u200b\u5168\u4f53\u200b\u5143\u7d20\u200b
- \u200b\u5185\u6db5\u200b\u8868\u793a\u6cd5\u200b\uff1a\u200b\u4f7f\u7528\u200b\u8c13\u8bcd\u200b\u8868\u8ff0\u200b\u96c6\u5408\u200b\u4e2d\u200b\u5143\u7d20\u200b\u7684\u200b\u6027\u8d28\u200b
"},{"location":"math/discrete-mathematics/chapter-9/#_3","title":"\u96c6\u5408\u200b\u7684\u200b\u8fd0\u7b97","text":""},{"location":"math/discrete-mathematics/chapter-9/#_4","title":"\u96c6\u5408\u200b\u7684\u200b\u5173\u7cfb\u200b\u8fd0\u7b97","text":"\u200b\u96c6\u5408\u200b\u4e0e\u200b\u5143\u7d20\u200b\u5b58\u5728\u200b\u5c5e\u4e8e\u200b\u4e0e\u200b\u4e0d\u200b\u5c5e\u4e8e\u200b\u5173\u7cfb\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\in, \\not\\in\\)
\u200b\u96c6\u5408\u200b\u4e4b\u95f4\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u5173\u7cfb\u200b\\(=, \\subseteq, \\subset, \\supseteq, \\supset\\)\u3002
- \\(A=B\\Leftrightarrow (\\forall x)(x\\in A\\leftrightarrow x\\in B)\\)
- \\(A\\subseteq B\\Leftrightarrow (\\forall x)(x\\in A\\rightarrow x\\in B)\\)
- \\(A\\subset B\\Leftrightarrow (\\forall x)(x\\in A\\rightarrow x\\in B)\\land A\\not =B\\)
- \\(A\\supseteq B\\Leftrightarrow B\\subseteq A\\)
- \\(A\\supset B\\Leftrightarrow B\\subset A\\)
\\(\\subseteq, \\supseteq, =\\)\u200b\u5173\u7cfb\u200b\u6ee1\u8db3\u200b\u81ea\u53cd\u6027\u200b\u3001\u200b\u4f20\u9012\u6027\u200b\uff0c\\(=\\)\u200b\u5173\u7cfb\u200b\u6ee1\u8db3\u200b\u5bf9\u79f0\u6027\u200b\u3002
\\(A\\subseteq B\\land B\\subseteq A\\Leftrightarrow A=B\\)
\u200b\u5b9a\u4e49\u200b\u7a7a\u96c6\u200b\u4e3a\u200b\u4e0d\u200b\u542b\u200b\u4efb\u4f55\u200b\u5143\u7d20\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\varnothing\\)\uff0c\u200b\u5176\u200b\u5185\u6db5\u200b\u8868\u793a\u200b\u4e3a\u200b\\(\\varnothing = \\{x|x\\not= x\\}\\)\uff0c\u200b\u7a7a\u96c6\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \u200b\u7a7a\u96c6\u200b\u662f\u200b\u4efb\u4f55\u200b\u96c6\u5408\u200b\u7684\u200b\u5b50\u96c6\u200b
- \u200b\u7a7a\u96c6\u200b\u662f\u200b\u552f\u4e00\u200b\u7684\u200b
\u200b\u5b9a\u4e49\u200b\u5168\u96c6\u200b\u4e3a\u200b\u6240\u6709\u200b\u4e8b\u7269\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(E\\)\uff0c\u200b\u5176\u200b\u5185\u6db5\u200b\u8868\u793a\u200b\u4e3a\u200b\\(E=\\{x|x=x\\}\\)
"},{"location":"math/discrete-mathematics/chapter-9/#_5","title":"\u96c6\u5408\u200b\u7684\u200b\u57fa\u672c\u200b\u8fd0\u7b97","text":"\u200b\u96c6\u5408\u200b\u5305\u542b\u200b\u5982\u4e0b\u200b\u57fa\u672c\u200b\u8fd0\u7b97\u200b\uff1a
- \u200b\u5e76\u96c6\u200b\uff1a\\(A\\cup B = \\{x\\in A\\lor x\\in B\\}\\)
- \u200b\u4ea4\u96c6\u200b\uff1a\\(A\\cap B = \\{x\\in A\\land x\\in B\\}\\)
- \u200b\u5dee\u96c6\u200b\uff1a\\(A-B = \\{x\\in A\\land x\\not \\in B\\}\\)
- \u200b\u8865\u96c6\u200b\uff1a\\(-A=E-A=\\{x|x\\not\\in A\\}\\)
- \u200b\u5bf9\u79f0\u200b\u5dee\u200b\uff1a\\(A\\oplus B=(A-B)\\cup (B-A) = \\{x| x\\in A\\overline\\lor x\\in B\\}\\)
\u200b\u57fa\u4e8e\u200b\u5e76\u96c6\u200b\u4e0e\u200b\u4ea4\u96c6\u200b\u8fd0\u7b97\u200b\u53ef\u4ee5\u200b\u62d3\u5c55\u200b\u51fa\u200b\u5e7f\u4e49\u200b\u5e76\u200b\u548c\u200b\u5e7f\u4e49\u200b\u4ea4\u200b\u7684\u200b\u6982\u5ff5\u200b\uff0c\u200b\u8bbe\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u7684\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u90fd\u200b\u662f\u200b\u96c6\u5408\u200b\uff0c\u200b\u5b9a\u4e49\u200b$A\u200b\u7684\u200b\u5e7f\u4e49\u200b\u5e76\u200b\u3001\u200b\u5e7f\u4e49\u200b\u4ea4\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u5e7f\u4e49\u200b\u5e76\u200b\uff1a\\(\\cup A=\\{x| (\\exists z)(z\\in A\\land x\\in z)\\}\\)
- \u200b\u5e7f\u4e49\u200b\u4ea4\u200b\uff1a\\(\\cap A=\\{x| (\\forall z)(z\\in A\\rightarrow x\\in z)\\}\\)
\u200b\u5373\u200b\uff1a\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u7684\u200b\u5e7f\u4e49\u200b\u5e76\u200b\u662f\u200b\u96c6\u5408\u200b\u4e2d\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u7684\u200b\u5e76\u200b\u96c6\u200b\uff0c\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u7684\u200b\u5e7f\u4e49\u200b\u4ea4\u662f\u200b\u96c6\u5408\u200b\u4e2d\u200b\u6240\u6709\u200b\u5143\u7d20\u200b\u7684\u200b\u4ea4\u96c6\u200b\u3002
\u200b\u5b9a\u4e49\u200b\u5e42\u96c6\u200b\u4e3a\u200b\u96c6\u5408\u200b\u6240\u6709\u200b\u5b50\u96c6\u200b\uff08\u200b\u5305\u62ec\u200b\u81ea\u8eab\u200b\uff09\u200b\u7ec4\u6210\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(P(A)\\)
\u200b\u5b9a\u4e49\u200b\u7b1b\u5361\u5c14\u200b\u79ef\u200b\\(A\\times B\\)\u200b\u4e3a\u200b\u4e8c\u5143\u200b\u7ec4\u200b\uff08\u200b\u6709\u5e8f\u200b\u5bf9\u200b\uff09\\(\\langle x, y\\rangle\\)\u200b\u7684\u200b\u96c6\u5408\u200b\uff0c\u200b\u5176\u4e2d\u200b\\(x\\in A, y\\in B\\)\u3002\u200b\u6709\u5e8f\u200b\u5bf9\u200b\u7684\u200b\u5b9a\u4e49\u200b\u4e0d\u200b\u4e00\u5b9a\u200b\u552f\u4e00\u200b\uff0c\u200b\u5982\u200b\u96c6\u5408\u200b\\(\\{x, \\{x, y\\}\\}\\)\u200b\u5373\u53ef\u200b\u8868\u793a\u200b\u4e00\u4e2a\u200b\u6709\u5e8f\u200b\u5bf9\u200b\u3002\u200b\u6709\u5e8f\u200b\u5bf9\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \\(x\\not = y\\Rightarrow \\langle x,y\\rangle \\not =\\langle y,x\\rangle\\)
- \\(\\langle x,y\\rangle = \\langle u,v\\rangle\\Leftrightarrow x=u\\land y=v\\)
\u200b\u53ef\u4ee5\u200b\u5728\u200b\u4e8c\u5143\u200b\u7ec4\u200b\u7684\u200b\u57fa\u7840\u200b\u4e0a\u200b\u62d3\u5c55\u200b\\(n\\)\u200b\u5143\u7ec4\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff1a\\(\\langle x_1, \\dots, x_n\\rangle =\\langle\\dots\\langle x_1, x_2\\rangle, \\dots, x_n\\rangle\\)\u3002\u200b\u7531\u6b64\u200b\\(n\\)\u200b\u9636\u200b\u7b1b\u5361\u5c14\u200b\u79ef\u200b\\(A_1\\times A_2\\times\\dots\\times A_n\\)\u200b\u5373\u200b\u4e3a\u200b\\(\\{\\langle x_1, \\dots, x_n\\rangle|x_1\\in A_1\\land \\dots\\land x_n\\in A_n\\}\\)
"},{"location":"math/discrete-mathematics/chapter-9/#_6","title":"\u96c6\u5408\u200b\u8fd0\u7b97\u200b\u7684\u200b\u4f18\u5148\u7ea7","text":"\u200b\u96c6\u5408\u200b\u8fd0\u7b97\u200b\u7684\u200b\u4f18\u5148\u7ea7\u200b\u5217\u4e3e\u5982\u4e0b\u200b\uff1a
\\[ \\begin{aligned} &-A, P(A), \\cap A, \\cup A \\\\ &-, \\cap, \\cup, \\oplus, \\times \\\\ &=, \\subseteq , \\subset, \\in \\\\ &\\lnot \\\\ &\\land, \\lor, \\rightarrow, \\leftrightarrow \\\\ &\\Leftrightarrow, \\Rightarrow \\end{aligned} \\]"},{"location":"math/discrete-mathematics/chapter-9/#_7","title":"\u96c6\u5408\u200b\u8fd0\u7b97\u200b\u7684\u200b\u6027\u8d28","text":"\u200b\u96c6\u5408\u200b\u7684\u200b\u57fa\u672c\u200b\u8fd0\u7b97\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \u200b\u4ea4\u6362\u5f8b\u200b
- \\(A\\cap B=B\\cap A\\)
- \\(A\\cup B=B\\cup A\\)
- \u200b\u7ed3\u5408\u5f8b\u200b
- \\((A\\cup B)\\cup C = A\\cup (B\\cup C)\\)
- \\((A\\cap B)\\cap C = A\\cap (B\\cap C)\\)
"},{"location":"math/discrete-mathematics/chapter-9/#_8","title":"\u96c6\u5408\u200b\u7684\u200b\u56fe\u793a\u200b\u6cd5","text":" - \u200b\u5bf9\u4e8e\u200b\u96c6\u5408\u200b\u7684\u200b\u57fa\u672c\u200b\u8fd0\u7b97\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6587\u6c0f\u56fe\u200b\u8868\u793a\u200b
- \u200b\u5bf9\u4e8e\u200b\u5e42\u96c6\u200b\u8fd0\u7b97\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u7f51\u7edc\u56fe\u200b\u8868\u793a\u200b
- \u200b\u5bf9\u4e8e\u200b\u7b1b\u5361\u5c14\u200b\u79ef\u200b\u8fd0\u7b97\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u4e8c\u7ef4\u200b\u5750\u6807\u7cfb\u200b\u8868\u793a\u200b
"},{"location":"math/operating-research/","title":"\u8fd0\u7b79\u5b66","text":" - \u200b\u7ebf\u6027\u89c4\u5212\u200b
- \u200b\u8fd0\u8f93\u200b\u95ee\u9898\u200b
- \u200b\u76ee\u6807\u200b\u89c4\u5212\u200b
"},{"location":"math/operating-research/chapter-1/","title":"\u7ebf\u6027\u89c4\u5212","text":"\u200b\u5b9a\u4e49\u200b
\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\uff1a\u200b\u7ed9\u5b9a\u200b\u4e00\u4e2a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\\(f(x_1, \\dots, x_n)\\)\u200b\u548c\u200b\u4e00\u7cfb\u5217\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u6c42\u200b\u6ee1\u8db3\u200b\u6240\u6709\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u7684\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u6539\u53d8\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\\(x_1, x_2, \\cdots, x_n\\)\u200b\u4f7f\u5f97\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u6240\u200b\u80fd\u200b\u8fbe\u5230\u200b\u7684\u200b\u6700\u5927\u503c\u200b\u6216\u200b\u6700\u5c0f\u503c\u200b\u3002\u200b\u5f53\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u53d6\u200b\u6700\u5927\u200b\uff08\u200b\u6700\u5c0f\u200b\uff09\u200b\u503c\u65f6\u200b\uff0c\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u7684\u200b\u503c\u79f0\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u7684\u200b\u89e3\u200b\u3002
\u200b\u7ebf\u6027\u89c4\u5212\u200b\uff1a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u548c\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u5747\u200b\u4e3a\u200b \u200b\u7ebf\u6027\u200b \u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b
\u200b\u7ebf\u6027\u89c4\u5212\u200b\u6a21\u578b\u200b\u7684\u200b\u6807\u51c6\u200b\u5f62\u5f0f\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} &\\max z = c_1x_1 + c_2x_2 + \\cdots + c_nx_n \\\\ s.t. & \\left\\{ \\begin{aligned} & a_{11}x_1 + a_{12}x_2 + \\cdots + a_{1n}x_n = b_1 \\\\ & a_{21}x_1 + a_{22}x_2 + \\cdots + a_{2n}x_n = b_2 \\\\ & \\vdots \\\\ & a_{m1}x_1 + a_{m2}x_2 + \\cdots + a_{mn}x_n = b_m \\\\ & x_j \\in \\mathbb R \\land x_j \\geq 0, j = 1, \\cdots, n \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5176\u4e2d\u200b\\(a_{ij}, b_i, c_i\\)\u200b\u4e3a\u200b\u5e38\u6570\u200b\uff0c\u200b\u5206\u522b\u200b\u4f7f\u7528\u200b\u77e9\u9635\u200b\\(A, b, c^T\\)\u200b\u8fdb\u884c\u200b\u8868\u793a\u200b\u3002\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\\((x_1, x_2, \\cdots, x_n)^T\\)\u200b\u4f7f\u7528\u200b\u5411\u91cf\u200b\\(x\\)\u200b\u8fdb\u884c\u200b\u8868\u793a\u200b\uff0c\u200b\u5219\u200b\u6807\u51c6\u578b\u200b\u53ef\u4ee5\u200b\u5199\u4f5c\u200b\uff1a
\\[ \\begin{aligned} & \\max z = CX \\\\ & s.t. \\left\\{ \\begin{aligned} & Ax = b \\\\ & x \\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5982\u679c\u200b\\(\\mathrm r(A) < m\\)\uff0c\u200b\u5219\u200b\u90e8\u5206\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u53ef\u4ee5\u200b\u76f8\u4e92\u200b\u62b5\u6d88\u200b\uff0c\u200b\u4ee5\u4e0a\u200b\u53ea\u200b\u8ba8\u8bba\u200b\\(\\mathrm r(A) = m\\)\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002
\u200b\u5982\u679c\u200b\u7ea6\u675f\u200b\u4e2d\u200b\u542b\u6709\u200b\u4e0d\u7b49\u5f0f\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u6dfb\u52a0\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\u4e0e\u200b\u5269\u4f59\u200b\u53d8\u91cf\u200b\u8f6c\u53d8\u200b\u4e3a\u200b\u7b49\u5f0f\u200b
- \u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\uff1a\\(a_{i1}x_1 + a_{i2}x_2 + \\cdots + a_{in}x_n \\leq b_i\\)\u200b\u52a0\u5165\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\\(x_{n+1}\\)\u200b\u540e\u200b\u8f6c\u4e3a\u200b\\(a_{i1}x_1 + a_{i2}x_2 + \\cdots + a_{in}x_n + x_{n+1}= b_i\\)
- \u200b\u5269\u4f59\u200b\u53d8\u91cf\u200b\uff1a\\(a_{j1}x_1 + a_{j2}x_2 + \\cdots + a_{jn}x_n \\geq b_j\\)\u200b\u52a0\u5165\u200b\u5269\u4f59\u200b\u53d8\u91cf\u200b\\(x_{n+1}\\)\u200b\u540e\u200b\u8f6c\u4e3a\u200b\\(a_{j1}x_1 + a_{j2}x_2 + \\cdots + a_{jn}x_n - x_{n+1}= b_j\\)
\u200b\u82e5\u200b\u67d0\u4e2a\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\\(x_i\\)\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u4e3a\u200b\\(\\leq\\)\uff0c\u200b\u5219\u200b\u5c06\u200b\\(x_i\\)\u200b\u66ff\u6362\u200b\u4e3a\u200b\\(x_i' = -x_i\\)\u3002
\u200b\u5bf9\u4e8e\u200b\u7ebf\u6027\u89c4\u5212\u200b\u4e2d\u200b\u7684\u200b\u4e0d\u7b49\u5f0f\u200b\u7ea6\u675f\u200b\uff0c\u200b\u82e5\u200b\u5728\u200b\u6700\u4f18\u200b\u65f6\u8be5\u200b\u7ea6\u675f\u200b\u4e3a\u200b\u7b49\u5f0f\u200b\uff0c\u200b\u5219\u200b\u79f0\u4e3a\u200b\u7d27\u200b\u7ea6\u675f\u200b\uff0c\u200b\u5426\u5219\u200b\u79f0\u4e3a\u200b\u975e\u7d27\u200b\u7ea6\u675f\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_2","title":"\u6c42\u89e3\u200b\u7ebf\u6027\u89c4\u5212","text":"\u200b\u7ebf\u6027\u89c4\u5212\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u56fe\u5f62\u200b\u6cd5\u200b\u3001\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u7b49\u200b\u65b9\u6cd5\u200b\u6c42\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_3","title":"\u56fe\u5f62\u200b\u6cd5","text":"\u200b\u56fe\u5f62\u200b\u6cd5\u200b\u53ea\u80fd\u200b\u7528\u4e8e\u200b\u6c42\u89e3\u200b\u5305\u542b\u200b\u4e24\u4e2a\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\u3002\u200b\u6b65\u9aa4\u200b\u53ef\u4ee5\u200b\u5217\u4e3e\u5982\u4e0b\u200b\uff1a
- \u200b\u5728\u200b\u5750\u6807\u8f74\u200b\u4e0a\u200b\u7ed8\u5236\u200b\u51fa\u200b\u6240\u6709\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u786e\u5b9a\u200b\u53ef\u884c\u200b\u57df\u200b
- \u200b\u5c06\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\\(z = c_1x_1 + c_2x_2\\)\u200b\u6539\u5199\u200b\u4e3a\u200b\\(x_2 = \\frac{z - c_1x_1}{c_2}\\)\uff0c\u200b\u5176\u200b\u659c\u7387\u200b\u4e3a\u200b\\(-\\frac{c_1}{c_2}\\)
- \u200b\u5728\u200b\u53ef\u884c\u200b\u57df\u200b\u4e2d\u200b\u5bfb\u627e\u200b\u4f7f\u5f97\u200b\u622a\u8ddd\u200b\u6700\u5927\u200b\uff08\u200b\u6700\u5c0f\u200b\uff09\u200b\u4e14\u200b\u659c\u7387\u200b\u4e3a\u200b\\(-\\frac{c_1}{c_2}\\)\u200b\u7684\u200b\u76f4\u7ebf\u200b\u3002\u200b\u8be5\u200b\u622a\u8ddd\u200b\u4e3a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7684\u200b\\(1/c_2\\)
- \u200b\u82e5\u200b\u53ef\u884c\u200b\u57df\u200b\u4e3a\u200b\u7a7a\u200b\uff0c\u200b\u5219\u200b\u7ebf\u6027\u89c4\u5212\u200b\u65e0\u200b\u89e3\u200b
- \u200b\u82e5\u200b\u76f4\u7ebf\u200b\u53ef\u4ee5\u200b\u65e0\u9650\u200b\u5411\u200b\u4f18\u5316\u200b\u65b9\u5411\u200b\u5e73\u79fb\u200b\uff0c\u200b\u5219\u200b\u7ebf\u6027\u89c4\u5212\u200b\u65e0\u200b\u754c\u200b
- \u200b\u82e5\u200b\u6700\u4f18\u200b\u65f6\u200b\u76f4\u7ebf\u200b\u4e0e\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u7684\u200b\u659c\u7387\u200b\u76f8\u540c\u200b\uff0c\u200b\u5219\u200b\u7ebf\u6027\u89c4\u5212\u200b\u6709\u200b\u65e0\u6570\u200b\u89e3\u200b
- \u200b\u5426\u5219\u200b\u7ebf\u6027\u89c4\u5212\u200b\u6709\u200b\u552f\u4e00\u200b\u6700\u4f18\u200b\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_4","title":"\u5355\u7eaf\u5f62\u6cd5","text":"\u200b\u5df2\u77e5\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u6ee1\u200b\u79e9\u200b\uff0c\u200b\u6784\u6210\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u7684\u200b\u5217\u200b\u5411\u91cf\u200b\u7684\u200b\u6781\u5927\u200b\u7ebf\u6027\u200b\u65e0\u5173\u200b\u7ec4\u200b\u5305\u542b\u200b\\(m\\)\u200b\u4e2a\u5217\u200b\u5411\u91cf\u200b\u3002\u200b\u56e0\u6b64\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u4f5c\u200b\u5982\u4e0b\u200b\u5212\u5206\u200b\uff1a
\\[ A = [B, N] \\] \u200b\u76f8\u4f3c\u200b\u5730\u200b\uff0c\u200b\u5411\u91cf\u200b\\(x\\)\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u4f5c\u200b\u5982\u4e0b\u200b\u5212\u5206\u200b\uff1a
\\[ x = \\begin{bmatrix} x_B \\\\ x_N \\end{bmatrix} \\] \u200b\u5176\u4e2d\u200b\\(B\\)\u200b\u4e3a\u200b\u53ef\u9006\u200b\u77e9\u9635\u200b\u3002\u200b\u82e5\u200b\u4e0d\u200b\u5b58\u5728\u200b\u8fd9\u6837\u200b\u7684\u200b\u77e9\u9635\u200b\uff0c\u200b\u5c06\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u7684\u200b\u5404\u5217\u200b\u8fdb\u884c\u200b\u4ea4\u6362\u200b\u5373\u53ef\u200b\u3002
\u200b\u57fa\u200b\u3001\u200b\u57fa\u200b\u5411\u91cf\u200b\u4e0e\u200b\u57fa\u200b\u53d8\u91cf\u200b
\u200b\u77e9\u9635\u200b\\(B\\)\u200b\u79f0\u4e3a\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b \u200b\u57fa\u200b \u3002 \u200b\u57fa\u200b \u200b\u4e2d\u200b\u7684\u200b\u5404\u4e2a\u200b\u5217\u200b\u5411\u91cf\u200b\\(P_j\\)\u200b\u4e3a\u200b \u200b\u57fa\u200b\u5411\u91cf\u200b \uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u79f0\u4e3a\u200b \u200b\u57fa\u200b\u53d8\u91cf\u200b \u3002\u200b\u5206\u5272\u200b\u540e\u975e\u200b\u9f50\u6b21\u200b\u7ebf\u6027\u65b9\u7a0b\u7ec4\u200b\\(Ax=b\\)\u200b\u8f6c\u5316\u200b\u4e3a\u200b\uff1a
\\[ \\begin{bmatrix} B & N \\end{bmatrix}\\begin{bmatrix} x_B \\\\ x_N \\end{bmatrix} = Bx_B + Nx_N = b \\] \u200b\u7531\u4e8e\u200b\u65b9\u9635\u200b\\(B\\)\u200b\u6ee1\u200b\u79e9\u200b\uff0c\u200b\u6709\u200b\\(x_B = B^{-1}(b - Nx_N)\\)\u3002\u200b\u5176\u4e2d\u200b\\(x_N\\)\u200b\u4e3a\u200b\u81ea\u7531\u200b\u53d8\u91cf\u200b\u3002\\(-B^{-1}N\\)\u200b\u4e2d\u200b\u7684\u200b\u5217\u200b\u5411\u91cf\u200b\u4e3a\u200b\u65b9\u7a0b\u200b\\(Ax=b\\)\u200b\u7684\u200b\u57fa\u7840\u200b\u89e3\u7cfb\u200b\u3002\u200b\u4e0d\u59a8\u200b\u8bbe\u200b\\(x_N = 0\\)\uff0c\u200b\u5219\u200b\\(x_B = B^{-1}b\\)\u200b\u4e3a\u200b\u7ebf\u6027\u65b9\u7a0b\u7ec4\u200b\u7684\u200b\u4e00\u4e2a\u200b\u89e3\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u57fa\u89e3\u200b\u3002
\u200b\u53ef\u884c\u200b\u89e3\u4e0e\u200b\u53ef\u884c\u200b\u57fa\u200b
\u200b\u82e5\u200b\\(x_B\\geq 0\\)\uff0c\u200b\u5219\u200b\u89e3\u200b\\(x = \\begin{bmatrix} x_B \\\\ x_N \\end{bmatrix}\\)\u200b\u6ee1\u8db3\u200b\u975e\u8d1f\u200b\u7ea6\u675f\u200b\uff0c\u200b\u4e3a\u200b \u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b \uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u57fa\u200b\u79f0\u4e3a\u200b \u200b\u53ef\u884c\u200b\u57fa\u200b \u3002
\u200b\u57fa\u89e3\u200b\u4e0e\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \u200b\u7531\u4e8e\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u5171\u200b\\(n\\)\u200b\u5217\u200b\uff0c\u200b\u4ece\u200b\u5176\u4e2d\u200b\u9009\u53d6\u200b\\(m\\)\u200b\u5217\u200b\uff0c\u200b\u6709\u200b\\(\\binom{n}{m}\\)\u200b\u79cd\u200b\u9009\u53d6\u200b\u65b9\u5f0f\u200b\uff0c\u200b\u800c\u200b\u53ea\u6709\u200b\u7ec4\u6210\u200b\u7ebf\u6027\u200b\u65e0\u5173\u200b\u7684\u200b\\(m\\)\u200b\u4e2a\u200b\u5411\u91cf\u200b\u624d\u80fd\u200b\u6784\u6210\u200b\u4e00\u7ec4\u200b\u57fa\u200b\uff0c\u200b\u56e0\u6b64\u200b\u57fa\u89e3\u200b\u7684\u200b\u6570\u76ee\u200b\u4e0d\u4f1a\u200b\u8d85\u8fc7\u200b\\(\\binom nm\\)\u3002
- \\(X\\)\u200b\u4e3a\u57fa\u200b\u53ef\u884c\u200b\u89e3\u5f53\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(X\\)\u200b\u7684\u200b\u975e\u200b\u96f6\u200b\u5206\u91cf\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5217\u200b\u5411\u91cf\u200b\u7ebf\u6027\u200b\u65e0\u5173\u200b\u3002\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u662f\u200b\u53ef\u884c\u200b\u57df\u200b\u7684\u200b\u9876\u70b9\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_5","title":"\u539f\u7406","text":"\u200b\u5982\u4e0b\u200b\u9488\u5bf9\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u6781\u5927\u200b\u5316\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u6781\u5c0f\u200b\u5316\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u53d6\u8d1f\u200b\uff0c\u200b\u5373\u200b\u5f97\u5230\u200b\u9700\u8981\u200b\u6781\u5927\u200b\u5316\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u3002
\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u7684\u200b\u601d\u8def\u200b\uff1a
- \u200b\u5148\u200b\u627e\u51fa\u200b\u4e00\u4e2a\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b
- \u200b\u5224\u65ad\u200b\u5f53\u524d\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\u662f\u5426\u200b\u6700\u4f18\u200b
- \u200b\u82e5\u200b\u6700\u4f18\u200b\uff0c\u200b\u7ed3\u675f\u200b
- \u200b\u82e5\u200b\u4e0d\u662f\u200b\u6700\u4f18\u200b\uff0c\u200b\u5219\u200b\u8f6c\u5411\u200b\u76f8\u90bb\u200b\u7684\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_6","title":"\u72b6\u6001\u200b\u8f6c\u79fb","text":"\u200b\u8bbe\u200b\u521d\u59cb\u200b\u57fa\u4e3a\u200b\\(B\\)\u3002\u200b\u5c06\u200b\u65b9\u7a0b\u200b\\(Ax=b\\)\u200b\u5de6\u53f3\u200b\u4e24\u8fb9\u200b\u540c\u65f6\u200b\u5de6\u4e58\u200b\\(B^{-1}\\)\uff0c\u200b\u6709\u200b\\((B^{-1}A)x = B^{-1}b\\)\uff0c\u200b\u5373\u200b\uff1a
\\[ \\begin{bmatrix} I & B^{-1}N \\end{bmatrix}\\begin{bmatrix} x_B \\\\ x_N \\end{bmatrix} = B^{-1}b \\] \u200b\u8bbe\u200b\\(B^{-1}N = \\{d_{ij}\\}_{m\\times(n-m)}\\)\u3002\u200b\u6839\u636e\u200b\\(x_B = B^{-1}b - B^{-1}Nx_N\\)\uff0c\u200b\u5bf9\u4e8e\u200b\u7b2c\u200b\\(i\\)\u200b\u4e2a\u200b\u5206\u91cf\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ x_i = b_i - \\sum_{j = 1}^{(n - m)}d_{ij}x_j, 1\\leq j\\leq (n-m) \\]"},{"location":"math/operating-research/chapter-1/#_7","title":"\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c","text":"\u200b\u5bf9\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u8fdb\u884c\u200b\u53ef\u9006\u200b\u7ebf\u6027\u53d8\u6362\u200b\uff08\u200b\u53f3\u4e58\u200b\u53ef\u9006\u200b\u77e9\u9635\u200b\uff09\u200b\u4e0d\u4f1a\u200b\u6539\u53d8\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u89e3\u200b\u3002\u200b\u4e3a\u200b\u7b80\u5316\u200b\u8ba1\u7b97\u200b\uff0c\u200b\u4e0d\u59a8\u200b\u5047\u8bbe\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u7684\u200b\u4e00\u4e2a\u200b\u57fa\u200b\u77e9\u9635\u200b\u4e3a\u200b\u5355\u4f4d\u77e9\u9635\u200b\uff0c\u200b\u5373\u200b\uff1a
\\[ A = \\begin{bmatrix} 1 & 0 & \\cdots & 0 & a_{1(m + 1)} & a_{1(m + 2)} & \\cdots & a_{1n} \\\\ 0 & 1 & \\cdots & 0 & a_{2(m + 1)} & a_{2(m + 2)} & \\cdots & a_{2n} \\\\ \\vdots & \\vdots & \\ddots & \\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\ 0 & 0 & \\cdots & 1 & a_{m(m + 1)} & a_{m(m + 2)} & \\cdots & a_{mn} \\\\ \\end{bmatrix} \\] \u200b\u663e\u7136\u200b\uff0c\u200b\u5355\u4f4d\u77e9\u9635\u200b\\(I\\)\u200b\u662f\u200b\\(A\\)\u200b\u7684\u200b\u57fa\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u57fa\u89e3\u200b\\(x_B=b - Nx_N\\)\u3002\u200b\u5c06\u200b\u5411\u91cf\u200b\\(c\\)\u200b\u5206\u4e3a\u200b\\(c_B\\)\u200b\u4e0e\u200b\\(c_N\\)\uff0c\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\\(x_B\\)\u200b\u4e0e\u200b\\(x_N\\)\uff0c\u200b\u6b64\u65f6\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u53ef\u4ee5\u200b\u8ba1\u7b97\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} z &= c^Tx \\\\ &= c_B^Tx_B + c_N^T x_N \\\\ &= c_B^Tb + c_N^Tx_N - c_B^TNx_N \\\\ &= c_B^Tb + (c_N - c_B^TN)x_N \\end{aligned} \\] \u200b\u8bbe\u200b\u5411\u91cf\u200b\\(\\lambda = c_N - c_B^TN\\)\uff0c\u200b\u5219\u200b\\(\\frac{\\partial z}{\\partial x_N} = \\lambda\\)\u3002
\u200b\u5b9a\u7406\u200b
- \u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u67d0\u4e2a\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\\(x\\)\uff0c\u200b\u6709\u200b\\(\\lambda < 0\\)\uff0c\u200b\u8bf4\u660e\u200b\\(x\\)\u200b\u4e3a\u200b\u6700\u4f18\u200b\u89e3\u200b
- \u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u67d0\u4e2a\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\\(x\\)\uff0c\u200b\u6709\u200b\\(\\lambda \\leq 0\\)\u200b\u4e14\u200b\\(\\lambda\\)\u200b\u5b58\u5728\u200b\u4e3a\u200b\u96f6\u200b\u7684\u200b\u5206\u91cf\u200b\uff0c\u200b\u8bf4\u660e\u200b\u539f\u200b\u95ee\u9898\u200b\u6709\u200b\u65e0\u6570\u4e2a\u200b\u6700\u4f18\u200b\u89e3\u200b
- \u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u67d0\u4e2a\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\\(x\\)\uff0c\u200b\u5411\u91cf\u200b\\(\\lambda\\)\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\\(\\lambda_{m + i} > 0\\)\uff0c\u200b\u4e14\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5217\u200b\u5411\u91cf\u200b\\(P_{m + i}\\leq 0\\)\uff0c\u200b\u5219\u200b\u539f\u200b\u95ee\u9898\u200b\u65e0\u200b\u754c\u200b
"},{"location":"math/operating-research/chapter-1/#_8","title":"\u57fa\u7684\u200b\u8fed\u4ee3","text":"\u200b\u5728\u200b\u8fed\u4ee3\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u9700\u8981\u200b\u51b3\u5b9a\u200b\u6362\u5165\u200b\u7684\u200b\u57fa\u200b\u4e0e\u200b\u6362\u200b\u51fa\u200b\u7684\u200b\u57fa\u200b\uff1a
- \u200b\u4f7f\u7528\u200b\u8d2a\u5fc3\u200b\u7b97\u6cd5\u200b\u9009\u62e9\u200b\u6362\u5165\u200b\u7684\u200b\u57fa\u200b\uff0c\u200b\u9009\u62e9\u200b\u68af\u5ea6\u200b\u6700\u5927\u200b\uff08\u200b\u4e0e\u200b\\(\\lambda\\)\u200b\u6700\u5927\u200b\u6b63\u200b\u5206\u91cf\u200b\u5bf9\u5e94\u200b\uff09\u200b\u7684\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u6362\u5165\u200b\uff0c\\(i = \\arg\\max \\lambda\\)
- \u200b\u5bf9\u4e8e\u200b\u6362\u5165\u200b\u53d8\u91cf\u200b\\(x_i\\)\uff0c\u200b\u6362\u51fa\u200b\u7684\u200b\u57fa\u200b\\(x_j\\)\u200b\u5e94\u5f53\u200b\u5c3d\u53ef\u80fd\u200b\u4fdd\u8bc1\u200b\u662f\u200b\u53ef\u884c\u200b\u89e3\u200b\u3002\u200b\u6839\u636e\u200b\\(x_B = b - Nx_N\\geq 0\\)\uff0c\u200b\u5f97\u200b\\(Nx_N \\leq b - x_B\\)\uff0c\u200b\u6709\u200b\\(j = \\arg\\min _{j} \\frac{b_j}{a_{ij}}\\)
\u200b\u4e3e\u4f8b\u200b
\u200b\u5bf9\u4e8e\u200b\u5982\u4e0b\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\uff1a
\\[ \\begin{aligned} & \\max z = 3x_1 - 3x_2 + 5x_4 - x_5 \\\\ &s.t. \\left\\{ \\begin{aligned} &x_1 & & -2x_3 & +2x_4 & &=12 \\\\ && x_2 &-2x_3 & & &=1 \\\\ &&& -4x_3 &+3x_4 &+x_5 &=27 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5217\u51fa\u200b\u5355\u7eaf\u5f62\u200b\u8868\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
\u200b\u5c06\u200b\u53d8\u91cf\u200b\\(x_4\\)\u200b\u8f6c\u5165\u200b\u57fa\u200b\u53d8\u91cf\u200b\uff0c\\(x_1\\)\u200b\u8f6c\u51fa\u200b\u57fa\u200b\u53d8\u91cf\u200b\uff0c\u200b\u5f97\u5230\u200b\u5982\u4e0b\u200b\u5355\u7eaf\u5f62\u200b\u8868\u200b\uff1a
"},{"location":"math/operating-research/chapter-1/#_9","title":"\u4e24\u200b\u9636\u6bb5\u200b\u6cd5","text":"\u200b\u5f53\u200b\\(A\\)\u200b\u4e0d\u200b\u4fbf\u4e8e\u200b\u8ba1\u7b97\u200b\u51fa\u57fa\u200b\\(B\\)\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5728\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4e2d\u200b\u5f15\u5165\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u3002\u200b\u7b2c\u4e00\u9636\u6bb5\u200b\u7684\u200b\u5f00\u59cb\u200b\u72b6\u6001\u200b\uff0c\u200b\u6240\u6709\u200b\u7684\u200b\u57fa\u200b\u53d8\u91cf\u200b\u90fd\u200b\u662f\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\uff0c\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e3a\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u4e4b\u200b\u548c\u200b\uff0c\u200b\u5411\u200b\u6700\u5c0f\u503c\u200b\u65b9\u5411\u200b\u4f18\u5316\u200b\u3002\u200b\u901a\u8fc7\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u9010\u6b65\u200b\u5c06\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u6362\u200b\u51fa\u57fa\u200b\u53d8\u91cf\u200b\u3002
\u200b\u6ce8\u610f\u200b
\u200b\u5982\u679c\u200b\u67d0\u4e2a\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u5728\u200b\u57fa\u200b\u53d8\u91cf\u200b\u4e2d\u200b\uff0c\u200b\u4f46\u200b\\(\\lambda \\leq 0\\)\uff0c\u200b\u5219\u200b\u7ebf\u6027\u89c4\u5212\u200b\u65e0\u200b\u53ef\u884c\u200b\u89e3\u200b\u3002
\u200b\u5c06\u200b\u6240\u6709\u200b\u7684\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u6362\u200b\u51fa\u57fa\u200b\u53d8\u91cf\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6240\u6709\u200b\u7684\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u53d6\u200b\\(0\\)\u3002\u200b\u5220\u53bb\u200b\u4eba\u5de5\u200b\u53d8\u91cf\u200b\u5e76\u200b\u5c06\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u66ff\u6362\u200b\u4e3a\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\uff0c\u200b\u5f97\u5230\u200b\u7b2c\u4e8c\u9636\u6bb5\u200b\u5f00\u59cb\u200b\u72b6\u6001\u200b\u7684\u200b\u5355\u7eaf\u5f62\u200b\u8868\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_10","title":"\u7ebf\u6027\u89c4\u5212\u200b\u89e3\u200b\u7684\u200b\u6027\u8d28","text":"\u200b\u6839\u636e\u200b\u56fe\u89e3\u6cd5\u200b\uff0c\u200b\u6709\u5982\u200b\u4e0b\u7ed3\u8bba\u200b\uff1a
- \u200b\u53ef\u884c\u200b\u57df\u200b\u662f\u200b\u4e00\u4e2a\u200b\u51f8\u96c6\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u53ef\u884c\u200b\u57df\u200b\\(X\\)\u200b\u4e2d\u200b\u7684\u200b\u4efb\u610f\u200b\u4e24\u70b9\u200b\\(x = (x_1, x_2, \\cdots, x_n)\\in S\\)\u200b\u4e0e\u200b\\(y = (y_1, y_2, \\cdots, y_n)\\in S\\)\uff0c\u200b\u6709\u200b\\(\\alpha x + (1 - \\alpha) y \\in S, 0\\leq \\alpha \\leq 1\\)
- \u200b\u51f8\u200b\u96c6\u4e2d\u200b\u7684\u200b\u4efb\u4f55\u200b\u4e00\u4e2a\u70b9\u200b\u90fd\u200b\u53ef\u4ee5\u200b\u8868\u793a\u200b\u4e3a\u200b\u51f8\u96c6\u200b\u5404\u4e2a\u200b\u9876\u70b9\u200b\u7684\u200b\u51f8\u200b\u7ec4\u5408\u200b
- \u200b\u6700\u4f18\u200b\u89e3\u200b\uff08\u200b\u5982\u679c\u200b\u5b58\u5728\u200b\uff09\u200b\u5728\u200b\u53ef\u884c\u200b\u57df\u200b\u7684\u200b\u8fb9\u754c\u200b\u4e0a\u200b\uff0c\u200b\u4e14\u200b\u53ef\u884c\u200b\u57df\u200b\u7684\u200b\u81f3\u5c11\u200b\u4e00\u4e2a\u200b\u9876\u70b9\u200b\u662f\u200b\u6700\u4f18\u200b\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_11","title":"\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u5bf9\u5076\u200b\u95ee\u9898","text":"\u200b\u6bcf\u4e2a\u200b\u539f\u200b\u95ee\u9898\u200b\u5bf9\u5e94\u200b\u4e14\u200b\u4ec5\u200b\u5bf9\u5e94\u200b\u4e00\u4e2a\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\uff0c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u539f\u200b\u95ee\u9898\u200b\uff1a
\\[ \\begin{aligned} & \\max z = c_1x_1 + c_2x_2 + c_3x_3 \\\\ & s.t. \\left\\{ \\begin{aligned} & a_{11}x_1 + a_{12}x_2 + a_{13}x_3 \\leq b_1 \\\\ & a_{21}x_1 + a_{22}x_2 + a_{23}x_3 = b_2 \\\\ & a_{31}x_1 + a_{32}x_2 + a_{33}x_3 \\geq b_3 \\\\ & x_1 \\leq 0 \\\\ & x_3 \\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5176\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} & \\min w = b_1y_1 + b_2y_2 + b_3y_3 \\\\ & s.t. \\left\\{ \\begin{aligned} & a_{11}y_1 + a_{21}y_2 + a_{31}y_3 \\leq c_1 \\\\ & a_{12}y_1 + a_{22}y_2 + a_{32}y_3 = c_2 \\\\ & a_{13}y_1 + a_{23}y_2 + a_{33}y_3 \\geq c_3 \\\\ & y_1 \\geq 0 \\\\ & y_3 \\leq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5047\u8bbe\u200b\u539f\u200b\u95ee\u9898\u200b\u5411\u200b\u6781\u5927\u503c\u200b\u4f18\u5316\u200b\uff0c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u6709\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u5411\u200b\u6781\u5c0f\u503c\u200b\u4f18\u5316\u200b
- \u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7684\u200b\u7cfb\u6570\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u7cfb\u6570\u200b
- \u200b\u7ea6\u675f\u6761\u4ef6\u200b\u7cfb\u6570\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7684\u200b\u7cfb\u6570\u200b
- \u200b\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\\(\\geq 0\\)\u3001\\(\\leq 0\\)\u200b\u7684\u200b\u53d8\u91cf\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e2d\u200b\\(\\geq\\)\u3001\\(\\leq\\)\u200b\u7c7b\u578b\u200b\u7684\u200b\u7ea6\u675f\u200b
- \u200b\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\\(\\geq\\)\u3001\\(\\leq\\)\u200b\u7c7b\u578b\u200b\u7684\u200b\u7ea6\u675f\u200b\u5206\u522b\u200b\u5bf9\u5e94\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e2d\u200b\\(\\leq 0\\)\u3001\\(\\geq 0\\)\u200b\u7684\u200b\u53d8\u91cf\u200b
- \u200b\u4efb\u4f55\u200b\\(=\\)\u200b\u7c7b\u578b\u200b\u7684\u200b\u7ea6\u675f\u200b\u5bf9\u5e94\u200b\u81ea\u7531\u200b\u53d8\u91cf\u200b\uff0c\u200b\u53cd\u4e4b\u4ea6\u7136\u200b\u3002
\u200b\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7b49\u4e8e\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u3002\u200b\u4e14\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u89e3\u4f1a\u200b\u4ee5\u200b\u8d1f\u503c\u200b\u7684\u200b\u5f62\u5f0f\u200b\u51fa\u73b0\u200b\u5728\u200b\u539f\u200b\u95ee\u9898\u200b\u6700\u4f18\u200b\u5355\u7eaf\u5f62\u200b\u8868\u200b\u7684\u200b\\(\\lambda\\)\u200b\u90e8\u5206\u200b\u3002\u200b\u5373\u200b\uff0c\\(\\lambda = -Y^*\\)
"},{"location":"math/operating-research/chapter-1/#_12","title":"\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u5bf9\u5076\u6027","text":"\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u539f\u200b\u95ee\u9898\u200b\\((P)\\)\u200b\u4e0e\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\\((D)\\)
\\[ \\begin{aligned} & (P) & \\begin{aligned} & \\max z=c^Tx \\\\ & s.t. \\left\\{ \\begin{aligned} & AX \\leq b \\\\ & X\\geq 0 \\end{aligned} \\right . \\end{aligned} \\\\ & (D) & \\begin{aligned} & \\min w=b^Ty \\\\ & s.t. \\left\\{ \\begin{aligned} & A^Ty \\geq c \\\\ & y\\geq 0 \\end{aligned} \\right . \\end{aligned} \\end{aligned} \\]"},{"location":"math/operating-research/chapter-1/#_13","title":"\u5bf9\u5076\u200b\u5b9a\u7406","text":""},{"location":"math/operating-research/chapter-1/#_14","title":"\u5f31\u200b\u5bf9\u5076\u200b\u5b9a\u7406","text":"\u200b\u8bbe\u200b\\((P), (D)\\)\u200b\u7684\u200b\u4e00\u7ec4\u200b\u53ef\u884c\u200b\u89e3\u200b\u5206\u522b\u200b\u4e3a\u200b\\(x, y\\)\uff0c\u200b\u5219\u200b\u6709\u200b\\(c^Tx \\leq b^Ty\\)
\u200b\u8bc1\u660e\u200b
\u200b\u8003\u8651\u200b\\(y^TAx\\)\uff0c\u200b\u6709\u200b\uff1a
- \\(y^TAx = (A^Ty)^TX \\geq c^TX\\)
- \\(y^TAx \\leq y^Tb = b^T y\\)
\u200b\u6839\u636e\u200b\u5f31\u200b\u5bf9\u5076\u200b\u5b9a\u7406\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5f97\u51fa\u200b\u5982\u4e0b\u200b\u7ed3\u8bba\u200b\uff1a
- \u200b\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u662f\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u4e0b\u754c\u200b\uff0c\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u662f\u200b\u539f\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u4e0a\u754c\u200b
- \u200b\u82e5\u539f\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u65e0\u200b\u4e0a\u754c\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u65e0\u200b\u89e3\u200b\uff0c\u200b\u82e5\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u65e0\u200b\u4e0b\u754c\u200b\u7b49\u4ef7\u200b\u4e8e\u539f\u200b\u95ee\u9898\u200b\u65e0\u200b\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_15","title":"\u6700\u4f18\u6027\u200b\u5b9a\u7406","text":"\u200b\u8bbe\u200b\\((P), (D)\\)\u200b\u7684\u200b\u4e00\u7ec4\u200b\u53ef\u884c\u200b\u89e3\u200b\u5206\u522b\u200b\u4e3a\u200b\\(x^*, y^*\\)\uff0c\u200b\u82e5\u200b\\(c^Tx^* = b^Ty^*\\)\uff0c\u200b\u5219\u200b\\(x^*, y^*\\)\u200b\u5206\u522b\u200b\u4e3a\u200b\u5404\u81ea\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
\u200b\u8bc1\u660e\u200b
\u200b\u6839\u636e\u200b\u5f31\u200b\u5bf9\u5076\u200b\u5b9a\u7406\u200b\uff0c\u200b\u6709\u200b\\(c^Tx\\leq b^Ty^* = c^Tx^*\\leq b^Ty\\)
"},{"location":"math/operating-research/chapter-1/#_16","title":"\u6700\u4f18\u200b\u89e3\u200b\u7684\u200b\u5bf9\u5076\u6027","text":"\u200b\u82e5\u200b\\(B\\)\u200b\u4e3a\u200b\\((P)\\)\u200b\u7684\u200b\u6700\u4f18\u200b\u57fa\u200b\uff0c\u200b\u5219\u200b\\((D)\\)\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u4e3a\u200b\\(y^* = c_BB^{-1}\\)\u3002\u200b\u82e5\u200b\\((P)\\)\u200b\u548c\u200b\\((D)\\)\u200b\u5747\u200b\u6709\u200b\u53ef\u884c\u200b\u89e3\u200b\uff0c\u200b\u5219\u200b\u4e24\u8005\u200b\u5747\u200b\u6709\u200b\u6709\u754c\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u5e76\u4e14\u200b\u4e24\u8005\u200b\u7684\u200b\u6700\u4f18\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u76f8\u7b49\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_17","title":"\u4e92\u8865\u200b\u677e\u5f1b\u200b\u5b9a\u7406","text":"\u200b\u5982\u679c\u200b\u539f\u200b\u95ee\u9898\u200b\\((P)\\)\u200b\u4e2d\u200b\u67d0\u200b\u4e00\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5bf9\u5076\u200b\u53d8\u91cf\u503c\u200b\u5927\u4e8e\u200b\\(0\\)\uff0c\u200b\u5219\u200b\u4e0e\u200b\u8be5\u200b\u5bf9\u5076\u200b\u53d8\u91cf\u200b\u5bf9\u5e94\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u53d6\u200b\u7b49\u5f0f\u200b\u3002\u200b\u76f8\u53cd\u200b\uff0c\u200b\u5982\u679c\u200b\u67d0\u4e00\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u53d6\u200b\u4e0d\u7b49\u5f0f\u200b\uff0c\u200b\u5219\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5bf9\u5076\u200b\u53d8\u91cf\u503c\u200b\u4e3a\u200b\\(0\\)\u3002
\u200b\u6ce8\u610f\u200b
\u200b\u8be5\u200b\u5b9a\u7406\u200b\u7684\u200b\u9006\u547d\u9898\u200b\u4e0d\u200b\u6210\u7acb\u200b\uff0c\u200b\u5373\u200b\u5f53\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\u67d0\u200b\u4e00\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u53d6\u200b\u7b49\u5f0f\u200b\u65f6\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5bf9\u5076\u200b\u53d8\u91cf\u503c\u200b\u65e0\u6cd5\u200b\u786e\u5b9a\u200b\u662f\u5426\u200b\u4e3a\u200b\\(0\\)
\u200b\u5229\u7528\u200b\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\u6c42\u89e3\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u4ece\u800c\u200b\u7b80\u5316\u200b\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u6c42\u89e3\u200b
"},{"location":"math/operating-research/chapter-1/#_18","title":"\u5f71\u5b50\u200b\u4ef7\u683c","text":"\u200b\u8003\u8651\u200b\u5f62\u200b\u5982\u200b\\((P)\\)\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\uff0c\u200b\u5f53\u200b\u67d0\u4e2a\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u7684\u200b\u6570\u503c\u200b\u53d8\u52a8\u200b\u4e00\u4e2a\u200b\u5355\u4f4d\u200b\u800c\u200b\u5176\u4ed6\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4fdd\u6301\u200b\u4e0d\u53d8\u200b\u65f6\u200b\uff0c\u200b\u8be5\u200b\u53d8\u52a8\u200b\u5bf9\u200b\u6700\u4f18\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u9020\u6210\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002\u200b\u5bf9\u5e94\u200b\u7ecf\u6d4e\u5b66\u200b\u4e2d\u200b\u8fb9\u9645\u200b\u6210\u672c\u200b\u7684\u200b\u6982\u5ff5\u200b\u3002
- \u200b\u6bcf\u4e2a\u200b\u7ea6\u675f\u200b\u5bf9\u5e94\u200b\u4e00\u4e2a\u200b\u5f71\u5b50\u200b\u4ef7\u683c\u200b
- \\(y = \\frac{\\partial z}{\\partial b}\\)
\u200b\u5f71\u5b50\u200b\u4ef7\u683c\u200b\u53cd\u6620\u200b\u8d44\u6e90\u200b\u5728\u200b\u7cfb\u7edf\u200b\u5185\u200b\u7684\u200b\u7a00\u7f3a\u200b\u7a0b\u5ea6\u200b\uff0c\u200b\u5f53\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u4e3a\u200b\u4e0d\u200b\u6ee1\u8db3\u200b\u65f6\u200b\uff0c\u200b\u8be5\u200b\u8d44\u6e90\u200b\u7684\u200b\u91cf\u200b\u5728\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u5b9e\u9645\u4e0a\u200b\u4e0d\u200b\u53d7\u7ea6\u675f\u200b\uff0c\u200b\u56e0\u6b64\u200b\u5f71\u5b50\u200b\u4ef7\u683c\u200b\u4e3a\u200b\\(0\\)\u3002
"},{"location":"math/operating-research/chapter-1/#_19","title":"\u5bf9\u5076\u200b\u5355\u7eaf\u5f62\u6cd5","text":"\u200b\u6c42\u89e3\u200b\u5f62\u200b\u5982\u200b\\((P)\\)\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\u7684\u200b\u601d\u8def\u200b\u4e3a\u200b\u63a7\u5236\u200b\\(B^{-1}b \\geq 0\\)\u200b\u5bfb\u627e\u200b\u4f7f\u5f97\u200b\\(C-C_{B}B^{-1}A\\leq 0\\)\u200b\u7684\u200b\u57fa\u200b\u3002\u200b\u5bf9\u5076\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u4e0e\u200b\u4e4b\u200b\u76f8\u53cd\u200b\uff0c\u200b\u4fdd\u6301\u200b\\(C-C_{B}B^{-1}A\\leq 0\\)\uff0c\u200b\u5bfb\u627e\u200b\u4f7f\u5f97\u200b\\(B^{-1}b \\geq 0\\)\u200b\u7684\u200b\u4e00\u7ec4\u200b\u57fa\u200b\u3002
\u200b\u6362\u5165\u200b\u53d8\u91cf\u200b\u7684\u200b\u786e\u5b9a\u200b\u4e0e\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u76f8\u540c\u200b
"},{"location":"math/operating-research/chapter-1/#_20","title":"\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u7075\u654f\u5ea6","text":"\u200b\u7075\u654f\u5ea6\u200b\u8ba8\u8bba\u200b\u7ebf\u6027\u89c4\u5212\u200b\u4e2d\u200b\u53c2\u6570\u200b\u53d8\u5316\u200b\u5bf9\u200b\u7ebf\u6027\u89c4\u5212\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u7684\u200b\u5f71\u54cd\u200b\uff0c\u200b\u5e94\u5f53\u200b\u6ce8\u610f\u200b\uff0c\u200b\u5982\u679c\u200b\u53c2\u6570\u200b\u53d8\u52a8\u200b\u8fc7\u5927\u200b\uff0c\u200b\u53ef\u80fd\u200b\u4f1a\u200b\u5bfc\u81f4\u200b\u7ebf\u6027\u89c4\u5212\u200b\u89e3\u200b\u53d1\u751f\u53d8\u5316\u200b\u3002
\u200b\u8003\u8651\u200b\u5f62\u200b\u5982\u4e0b\u200b\u5f0f\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\uff1a
\\[ \\begin{aligned} & \\max Z = 5x_1 + 8x_2 + 6x_3 \\\\ s.t. & \\left\\{ \\begin{aligned} x_1 & + & x_2 + & x_3 + & x_4 & &= & 12 \\\\ x_1 & + & 2x_2 + & 2x_3 + & & x_5 &= & 20 \\\\ x_i &\\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5176\u200b\u6700\u4f18\u200b\u5355\u7eaf\u5f62\u200b\u8868\u4e3a\u200b\uff1a
\u200b\u4efb\u4f55\u200b\u7cfb\u6570\u200b\u7684\u200b\u53d8\u5316\u200b\u90fd\u200b\u4f1a\u200b\u9020\u6210\u200b\u4e24\u79cd\u200b\u60c5\u51b5\u200b\uff1a
- \u200b\u6700\u4f18\u200b\u89e3\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b
- \u200b\u6700\u4f18\u200b\u89e3\u200b\u53d1\u751f\u53d8\u5316\u200b
"},{"location":"math/operating-research/chapter-1/#_21","title":"\u76ee\u6807\u200b\u51fd\u6570\u200b\u7cfb\u6570\u200b\u7684\u200b\u7075\u654f\u5ea6","text":"\u200b\u5f53\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7cfb\u6570\u200b\u53d1\u751f\u53d8\u5316\u200b\u65f6\u200b\uff0c\u200b\u5982\u679c\u200b\u6700\u4f18\u200b\u89e3\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u5219\u200b\\(\\frac{\\partial Z}{\\partial C} = X\\)\u3002
- \u200b\u4e00\u4e2a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7cfb\u6570\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\u7684\u200b\u5145\u8981\u6761\u4ef6\u200b\u662f\u200b\u53d8\u5316\u200b\u540e\u200b\u7684\u200b\u68c0\u9a8c\u200b\u6570\u200b\u4ecd\u200b\u4e0d\u200b\u8d85\u8fc7\u200b\\(0\\)\u3002
- \u200b\u591a\u4e2a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7cfb\u6570\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\u7684\u200b\u5145\u5206\u6761\u4ef6\u200b\u662f\u200b\u5404\u4e2a\u200b\u7cfb\u6570\u200b\u53d8\u5316\u200b\u7684\u200b\u5e45\u5ea6\u200b\u6ee1\u8db3\u200b\\(100\\%\\)\u200b\u6cd5\u5219\u200b\u3002
100%\u200b\u6cd5\u5219\u200b
\u200b\u5b9a\u4e49\u200b\\(r_i = |\\frac{\\Delta c_i}{u_i}|\\)\uff0c\u200b\u5176\u4e2d\u200b\\(u_i\\)\u200b\u4e3a\u200b\u7cfb\u6570\u200b\\(c_i\\)\u200b\u5141\u8bb8\u200b\u53d8\u5316\u200b\u7684\u200b\u6700\u200b\u5927\u5e45\u5ea6\u200b\u3002\u200b\u82e5\u200b\\(\\sum r_i < 1\\)\uff0c\u200b\u5219\u200b\u6700\u4f18\u200b\u89e3\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_22","title":"\u7ea6\u675f\u6761\u4ef6\u200b\u7684\u200b\u7075\u654f\u5ea6","text":"\u200b\u5f53\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u53d1\u751f\u53d8\u5316\u200b\u65f6\u200b\uff0c\u200b\u5982\u679c\u200b\u5355\u7eaf\u5f62\u200b\u8868\u4e2d\u200b\u7684\u200b\\(b' = B^{-1}b\\)\u200b\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u5219\u200b\u6700\u4f18\u200b\u57fa\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u5426\u5219\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5bf9\u5076\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u6c42\u200b\u51fa\u65b0\u200b\u7684\u200b\u6700\u4f18\u200b\u57fa\u200b\u3002
\u200b\u6ce8\u610f\u200b
\u200b\u5728\u200b\u67d0\u4e9b\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\u200b\u5373\u4f7f\u200b\u6700\u4f18\u200b\u57fa\u4e0d\u200b\u53d1\u751f\u53d8\u5316\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u200b\u4e5f\u200b\u4f1a\u200b\u53d1\u751f\u53d8\u5316\u200b\u3002
\u200b\u8bbe\u539f\u200b\u95ee\u9898\u200b\u4e2d\u200b\\(b_1\\)\u200b\u5141\u8bb8\u200b\u53d8\u5316\u200b\u7684\u200b\u8303\u56f4\u200b\u4e3a\u200b\\(\\lambda\\)\uff0c\u200b\u5219\u200b\uff1a
\\[ b' = B^{-1}b = \\begin{bmatrix} 1 & 1 \\\\ 1 & 2 \\end{bmatrix} ^{-1} \\begin{bmatrix} \\lambda \\\\ 0 \\end{bmatrix} = \\begin{bmatrix} 4 + 2\\lambda \\\\ 8 - \\lambda \\end{bmatrix} \\] \u200b\u5982\u679c\u200b\u6700\u4f18\u200b\u57fa\u200b\u4e0d\u53d8\u200b\uff0c\u200b\u5219\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u4e0d\u53d8\u200b\uff0c\u200b\u5373\u200b\u5f71\u5b50\u200b\u4ef7\u683c\u200b\u4e0d\u53d8\u200b\u3002\u200b\u5f71\u5b50\u200b\u4ef7\u683c\u200b\u7684\u200b\u53d8\u5316\u89c4\u5f8b\u200b\u4ecd\u200b\u6ee1\u8db3\u200b\\(100\\%\\)\u200b\u6cd5\u5219\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_23","title":"\u6dfb\u52a0\u200b\u65b0\u200b\u53d8\u91cf\u200b\u6216\u200b\u65b0\u200b\u7ea6\u675f\u200b\u7684\u200b\u7075\u654f\u5ea6","text":"\u200b\u6dfb\u52a0\u200b\u65b0\u200b\u53d8\u91cf\u200b\u65f6\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u65b0\u200b\u53d8\u91cf\u200b\u7684\u200b\u68c0\u9a8c\u200b\u6570\u200b\uff0c\u200b\u5982\u679c\u200b\u68c0\u9a8c\u200b\u6570\u200b\u5c0f\u4e8e\u200b\u7b49\u4e8e\u200b\\(0\\)\uff0c\u200b\u5219\u200b\u65b0\u200b\u52a0\u5165\u200b\u7684\u200b\u53d8\u91cf\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u4e3a\u200b\\(0\\)\uff0c\u200b\u4e0d\u4f1a\u200b\u5bf9\u539f\u200b\u6700\u4f18\u200b\u89e3\u200b\u4ea7\u751f\u200b\u5f71\u54cd\u200b\u3002
\u200b\u6dfb\u52a0\u200b\u65b0\u200b\u7ea6\u675f\u200b\u65f6\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u7ea6\u675f\u200b\u5728\u200b\u5f53\u524d\u200b\u7ed3\u679c\u200b\u4e0b\u200b\u662f\u5426\u200b\u6ee1\u8db3\u200b\uff0c\u200b\u5982\u679c\u200b\u7ea6\u675f\u200b\u6ee1\u8db3\u200b\u5219\u200b\u6700\u4f18\u200b\u89e3\u200b\u4e0d\u53d8\u200b\uff0c\u200b\u5426\u5219\u200b\u6700\u4f18\u200b\u89e3\u200b\u6539\u53d8\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u5bf9\u5076\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u8fdb\u884c\u200b\u6c42\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-1/#_24","title":"\u6539\u53d8\u200b\u7cfb\u6570\u200b\u77e9\u9635\u200b\u7684\u200b\u7075\u654f\u5ea6","text":"\u200b\u8ba1\u7b97\u200b\\(A' = B^{-1}A\\)\uff0c\u200b\u7136\u540e\u200b\u4f7f\u7528\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u6216\u200b\u5bf9\u5076\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u8fdb\u884c\u200b\u6c42\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-2/","title":"\u8fd0\u8f93\u200b\u95ee\u9898","text":"\u200b\u8fd0\u8f93\u200b\u95ee\u9898\u200b\u662f\u200b\u4e00\u79cd\u200b\u7279\u6b8a\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u95ee\u9898\u200b\uff0c\u200b\u5177\u6709\u200b\u5982\u4e0b\u200b\u7684\u200b\u6570\u5b66\u200b\u5f62\u5f0f\u200b\uff1a
- \u200b\u7269\u8d44\u200b\u7684\u200b\u4ea7\u5730\u200b\u4e3a\u200b\\(A_i,\\; i=1, 2, \\dots m\\)\uff0c\u200b\u4ea7\u91cf\u200b\u4e3a\u200b\\(a_i\\)
- \u200b\u7269\u8d44\u200b\u7684\u200b\u9500\u5730\u200b\u4e3a\u200b\\(B_j,\\; j=1, 2, \\dots n\\)\uff0c\u200b\u9500\u91cf\u200b\u4e3a\u200b\\(b_j\\)
- \u200b\u4ece\u200b\\(i\\)\u200b\u5230\u200b\\(j\\)\u200b\u7684\u200b\u5355\u4f4d\u200b\u8fd0\u4ef7\u200b\\(c_{ij}\\)
- \u200b\u4f18\u5316\u200b\u8fd0\u8f93\u200b\u5b89\u6392\u200b\u4f7f\u5f97\u200b\u603b\u200b\u8fd0\u4ef7\u200b\u6700\u5c0f\u200b
\u200b\u5176\u200b\u7ebf\u6027\u89c4\u5212\u200b\u5f62\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
\\[ \\begin{aligned} & \\min Z = \\sum_{i=1}^m \\sum_{i=1}^n c_{ij}x_{ij} \\\\ s.t. & \\left\\{ \\begin{aligned} & \\sum_{i = 1}^m x_{ij} = b_{j} \\\\ & \\sum_{j = 1}^n x_{ij} = a_{i} \\\\ & x_{ij} \\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} & \\max W = \\sum_{i=1}^m a_iu_i + \\sum_{j=1}^n b_jv_j \\\\ s.t. & \\left\\{ \\begin{aligned} & u_j + v_j \\leq c_{ij} \\\\ & u_i \\geq 0 \\\\ & v_j \\geq 0 \\\\ & i = 1, 2, \\dots m \\\\ & j = 1, 2, \\dots n \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5982\u679c\u200b\u8fd0\u8f93\u200b\u95ee\u9898\u200b\u7684\u200b\u4ea7\u9500\u200b\u5e73\u8861\u200b\uff0c\u200b\u5373\u200b\\(\\sum a_i = \\sum b_j\\)\uff0c\u200b\u5219\u200b\u8fd0\u8f93\u200b\u95ee\u9898\u200b\u5fc5\u6709\u200b\u6709\u9650\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u4e2d\u57fa\u200b\u53d8\u91cf\u200b\u7684\u200b\u4e2a\u6570\u200b\u4e3a\u200b\\(m + n - 1\\)
"},{"location":"math/operating-research/chapter-2/#_2","title":"\u8868\u4e0a\u200b\u4f5c\u4e1a\u200b\u6cd5","text":"\u200b\u8868\u683c\u200b\u7684\u200b\u901a\u5e38\u200b\u683c\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u8ba1\u7b97\u200b\u521d\u59cb\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\uff0c\u200b\u5373\u200b\u5728\u200b\u8868\u683c\u200b\u4e0a\u200b\u586b\u5165\u200b\\(m + n - 1\\)\u200b\u4e2a\u200b\u6570\u5b57\u200b
- \u200b\u8ba1\u7b97\u200b\u8868\u4e2d\u200b\u5404\u200b\u7a7a\u683c\u200b\uff08\u200b\u975e\u57fa\u200b\u53d8\u91cf\u200b\uff09\u200b\u7684\u200b\u68c0\u9a8c\u200b\u6570\u200b\uff0c\u200b\u5224\u65ad\u200b\u5f53\u524d\u200b\u89e3\u200b\u662f\u5426\u200b\u6700\u4f18\u200b\u89e3\u200b
- \u200b\u82e5\u200b\u5f53\u524d\u200b\u89e3\u200b\u4e0d\u662f\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u5219\u200b\u8fed\u4ee3\u200b\u5230\u200b\u4e0b\u200b\u4e00\u4e2a\u200b\u57fa\u200b
\u200b\u6ce8\u610f\u200b
\u200b\u57fa\u200b\u53d8\u91cf\u200b\u4e0d\u80fd\u200b\u6784\u6210\u200b\u95ed\u200b\u56de\u8def\u200b\uff0c\u200b\u6784\u6210\u200b\u4e00\u7ec4\u200b\u95ed\u200b\u56de\u8def\u200b\u7684\u200b\u53d8\u91cf\u200b\u4e2d\u200b\u5fc5\u7136\u200b\u5305\u542b\u200b\u81f3\u5c11\u200b\u4e00\u4e2a\u200b\u975e\u57fa\u200b\u53d8\u91cf\u200b\u3002
\u200b\u95ed\u200b\u56de\u8def\u200b\u793a\u610f\u56fe\u200b\u5982\u4e0b\u200b\uff1a
\u200b\u4e00\u4e2a\u200b\u95ed\u200b\u56de\u8def\u200b\u4e2d\u200b\u542b\u6709\u200b\u5076\u6570\u200b\u4e2a\u200b\u5355\u5143\u683c\u200b\u3002
\u200b\u5982\u4e0b\u200b\u4f7f\u7528\u200b \u200b\u7a7a\u683c\u200b \u200b\u8868\u793a\u200b\\(x_{ij} = 0\\)\u200b\u7684\u200b\u5355\u5143\u683c\u200b\uff0c\u200b\u4f7f\u7528\u200b \u200b\u6570\u5b57\u200b\u683c\u200b \u200b\u8868\u793a\u200b\\(x_{ij} > 0\\)\u200b\u7684\u200b\u5355\u5143\u683c\u200b
"},{"location":"math/operating-research/chapter-2/#_3","title":"\u786e\u5b9a\u200b\u521d\u59cb\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3","text":"\u200b\u6709\u200b\u4e09\u79cd\u200b\u65b9\u6cd5\u200b\u7528\u4e8e\u200b\u786e\u5b9a\u200b\u521d\u59cb\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\uff1a
- \u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b\u6cd5\u200b
- \u200b\u897f\u5317\u89d2\u200b\u6cd5\u200b
- Vogol\u200b\u6cd5\u200b
"},{"location":"math/operating-research/chapter-2/#_4","title":"\u6700\u5c0f\u200b\u5143\u7d20\u200b\u6cd5","text":"\u200b\u6700\u5c0f\u200b\u5143\u7d20\u200b\u6cd5\u200b\u4f18\u5148\u200b\u5bfb\u627e\u200b\u8fd0\u4ef7\u200b\u8f83\u200b\u4f4e\u200b\u7684\u200b\u53d8\u91cf\u200b\u4f5c\u4e3a\u200b\u57fa\u200b\u53d8\u91cf\u200b\u3002\u200b\u5982\u679c\u200b\u9009\u53d6\u200b\u51fa\u200b\u7684\u200b\\(x_{ij}\\)\u200b\u6b63\u200b\u5206\u91cf\u200b\u4e0d\u200b\u5305\u542b\u200b\u95ed\u200b\u56de\u8def\u200b\uff0c\u200b\u5219\u200b\\(\\{x_{ij}\\}\\)\u200b\u4e3a\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#_5","title":"\u897f\u5317\u89d2\u200b\u6cd5","text":"\u200b\u897f\u5317\u89d2\u200b\u6cd5\u4ece\u200b\u5de6\u4e0a\u200b\u5f00\u59cb\u200b\uff0c\u200b\u4f18\u5148\u200b\u6700\u5927\u5316\u200b\u6ee1\u8db3\u200b\u5de6\u4e0a\u89d2\u200b\u7684\u200b\u8fd0\u8f93\u200b\u9700\u6c42\u200b\u3002\u200b\u5982\u679c\u200b\u4f9b\u7ed9\u65b9\u200b\u9700\u6c42\u200b\u5df2\u7ecf\u200b\u6ee1\u8db3\u200b\uff0c\u200b\u5219\u200b\u5212\u53bb\u200b\u4f9b\u7ed9\u65b9\u200b\u6240\u5728\u200b\u7684\u200b\u884c\u200b\uff0c\u200b\u5426\u5219\u200b\u5212\u200b\u53bb\u200b\u9700\u6c42\u65b9\u200b\u6240\u5728\u200b\u7684\u200b\u5217\u200b\u3002\u200b\u91cd\u590d\u200b\u4ee5\u4e0a\u200b\u8fc7\u7a0b\u200b\u76f4\u5230\u200b\u53f3\u4e0b\u89d2\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#vogol","title":"Vogol\u200b\u6cd5","text":"Vogol\u200b\u6cd5\u200b\u8ba1\u7b97\u200b\u5404\u884c\u200b\u5404\u5217\u200b\u4e2d\u200b\u6700\u5c0f\u200b\\(c_{ij}\\)\u200b\u4e0e\u200b\u6b21\u200b\u5c0f\u200b\\(c_{ij}\\)\u200b\u7684\u200b\u5dee\u200b\u4f5c\u4e3a\u200b\u7f5a\u6570\u200b\uff0c\u200b\u4f18\u5148\u200b\u5b89\u6392\u200b\u7f5a\u6570\u200b\u6bd4\u8f83\u200b\u5927\u200b\u7684\u200b\u4ea7\u5730\u200b-\u200b\u9500\u5730\u200b\u3002\u200b\u9009\u53d6\u200b\u7f5a\u6570\u200b\u6700\u5927\u200b\u7684\u200b\u884c\u200b\u6216\u200b\u5217\u200b\uff0c\u200b\u5e76\u200b\u586b\u5165\u200b\u6700\u5c0f\u200b\u7684\u200b\\(c_{ij}\\)\uff0c\u200b\u7136\u540e\u200b\u5212\u200b\u53bb\u200b\u8be5\u884c\u200b\u6216\u5217\u200b\uff0c\u200b\u91cd\u65b0\u200b\u8ba1\u7b97\u200b\u7f5a\u6570\u200b\u3002
Vogol\u200b\u6cd5\u200b\u901a\u5e38\u200b\u80fd\u591f\u200b\u5f97\u5230\u200b\u66f4\u4f18\u200b\u7684\u200b\u521d\u59cb\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#_6","title":"\u6700\u4f18\u6027\u200b\u68c0\u9a8c","text":""},{"location":"math/operating-research/chapter-2/#_7","title":"\u95ed\u200b\u56de\u8def\u200b\u6cd5","text":"\u200b\u5b9a\u7406\u200b
\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u7a7a\u683c\u200b\uff0c\u200b\u90fd\u200b\u5b58\u5728\u200b\u4e00\u6761\u200b\u95ed\u200b\u56de\u8def\u200b\uff1a
- \u200b\u7a7a\u683c\u200b\u4f4d\u4e8e\u200b\u8be5\u95ed\u200b\u56de\u8def\u200b\u7684\u200b\u62d0\u70b9\u200b\u4e0a\u200b
- \u200b\u95ed\u200b\u56de\u8def\u200b\u7684\u200b\u5176\u4ed6\u200b\u62d0\u70b9\u200b\u662f\u200b\u6570\u5b57\u200b\u683c\u200b
\u200b\u5c06\u200b\u4ece\u200b\u7a7a\u683c\u200b\u51fa\u53d1\u200b\uff0c\u200b\u5076\u6570\u200b\u5355\u5143\u683c\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u548c\u200b\u4e0e\u200b\u5947\u6570\u200b\u5355\u5143\u683c\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u548c\u200b\u4e4b\u200b\u5dee\u200b\u8bb0\u4e3a\u200b\\(\\lambda_{ij}\\)\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u6240\u6709\u200b\u7a7a\u683c\u200b\uff0c\u200b\u90fd\u200b\u6709\u200b\\(\\lambda_{ij} \\leq 0\\)\uff0c\u200b\u5219\u200b\u5f53\u524d\u200b\u7684\u200b\\(\\{x_{ij}\\}\\)\u200b\u4e3a\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#_8","title":"\u4f4d\u52bf\u200b\u6cd5","text":"\u200b\u8bbe\u200b\\((u_{i}, v_{j})\\)\u200b\u4e3a\u200b\u5bf9\u5076\u200b\u95ee\u9898\u200b\u7684\u200b\u53ef\u884c\u200b\u89e3\u200b\uff0c\\(\\{x_{ij}\\}\\)\u200b\u4e3a\u539f\u200b\u95ee\u9898\u200b\u7684\u200b\u53ef\u884c\u200b\u89e3\u200b\u3002\u200b\u6839\u636e\u200b\u4e92\u8865\u200b\u677e\u5f1b\u200b\u6027\u200b\uff0c\u200b\u82e5\u200b\\(x_{ij}(c_{ij} - u_i - v_j) = 0\\)\uff0c\u200b\u5219\u200b\u4e24\u7ec4\u200b\u89e3\u200b\u5206\u522b\u200b\u4e3a\u200b\u5bf9\u5e94\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
\u200b\u5df2\u77e5\u200b\u5f53\u524d\u200b\u4e00\u7ec4\u200b\u57fa\u200b\u53ef\u884c\u200b\u89e3\u200b\\(\\{x_{ij}\\}\\)\uff1a
- \u200b\u5bf9\u4e8e\u200b\u57fa\u200b\u53d8\u91cf\u200b\\(\\{x_{ij}\\}\\)\uff0c\u200b\u5217\u51fa\u200b\u65b9\u7a0b\u200b\\(u_i + v_j = c_{ij}\\)\uff0c\u200b\u7ec4\u5408\u6210\u200b\u65b9\u7a0b\u7ec4\u200b
- \u200b\u8be5\u200b\u65b9\u7a0b\u7ec4\u200b\u6709\u200b\\(m+n\\)\u200b\u4e2a\u200b\u53d8\u91cf\u200b\u4f46\u200b\u53ea\u6709\u200b\\(m + n - 1\\)\u200b\u4e2a\u200b\u65b9\u7a0b\u200b\uff0c\u200b\u56e0\u6b64\u200b\u6709\u200b\u65e0\u6570\u200b\u89e3\u200b\uff0c\u200b\u4efb\u9009\u200b\u4e00\u7ec4\u200b\u89e3\u200b\u5373\u53ef\u200b
- \u200b\u5bf9\u4e8e\u200b\u975e\u57fa\u200b\u53d8\u91cf\u200b\\(x_{ij}\\)\uff0c\u200b\u8ba1\u7b97\u200b\\(\\lambda_{ij} = c_{ij} - u_i - v_j\\)
- \u200b\u82e5\u200b\\(\\lambda _{ij}\\)\u200b\u5168\u90e8\u200b\\(\\geq 0\\)\uff0c\u200b\u5219\u200b\u5f53\u524d\u200b\u89e3\u4e3a\u200b\u6700\u4f18\u200b\u89e3\u200b
- \u200b\u5426\u5219\u200b\u8f6c\u200b\u51fa\u200b\\((i, j) = \\arg\\max_{(i, j)} -\\lambda_{ij}\\)\uff0c\u200b\u8c03\u6574\u200b\u8be5\u200b\u7a7a\u683c\u200b\u6240\u5728\u200b\u7684\u200b\u95ed\u200b\u56de\u8def\u200b
"},{"location":"math/operating-research/chapter-2/#_9","title":"\u8fd0\u8f93\u200b\u95ee\u9898\u200b\u7684\u200b\u53d8\u79cd","text":""},{"location":"math/operating-research/chapter-2/#_10","title":"\u4e24\u5730\u200b\u65e0\u200b\u8fde\u63a5","text":"\u200b\u5982\u679c\u200b\u6a21\u578b\u200b\u4e2d\u200b\u5b58\u5728\u200b\u4e24\u4e2a\u200b\u5730\u70b9\u200b\u4e4b\u95f4\u200b\u4e0d\u80fd\u200b\u8fd0\u8f93\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u4e24\u5730\u200b\u95f4\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u8bbe\u200b\u4e3a\u200b\u8db3\u591f\u200b\u9ad8\u200b\u7684\u200b\u6b63\u6570\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#_11","title":"\u4ea7\u9500\u200b\u4e0d\u200b\u5e73\u8861","text":"\u200b\u5f53\u200b\u95ee\u9898\u200b\u4e2d\u200b\u4ea7\u91cf\u200b\u4e0e\u200b\u9500\u91cf\u200b\u4e0d\u200b\u76f8\u7b49\u200b\u65f6\u200b\uff1a
- \u200b\u5982\u679c\u200b\u4ea7\u91cf\u200b\u5927\u4e8e\u200b\u9500\u552e\u91cf\u200b\uff0c\u200b\u5219\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u865a\u62df\u200b\u4e70\u65b9\u200b\uff0c\u200b\u589e\u52a0\u200b\\(m\\)\u200b\u4e2a\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b
- \u200b\u5982\u679c\u200b\u9500\u552e\u91cf\u200b\u5927\u4e8e\u200b\u4ea7\u91cf\u200b\uff0c\u200b\u5219\u200b\u6dfb\u52a0\u200b\u4e00\u4e2a\u200b\u865a\u62df\u200b\u5356\u65b9\u200b\uff0c\u200b\u589e\u52a0\u200b\\(n\\)\u200b\u4e2a\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b
"},{"location":"math/operating-research/chapter-2/#_12","title":"\u9700\u6c42\u200b\u8303\u56f4","text":"\u200b\u5982\u679c\u200b\u4e70\u65b9\u200b\u7684\u200b\u9700\u6c42\u200b\u5728\u200b\u4e00\u4e2a\u200b\u8303\u56f4\u200b\u4e2d\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u5c06\u200b\u5b58\u5728\u200b\u8303\u56f4\u200b\u9700\u6c42\u200b\u7684\u200b\u4e70\u65b9\u200b\u62c6\u200b\u5206\u4e3a\u200b\u4e24\u4e2a\u200b\u90e8\u5206\u200b\uff0c\u200b\u5373\u200b\u5fc5\u987b\u200b\u6ee1\u8db3\u200b\u7684\u200b\u9700\u6c42\u200b\u90e8\u5206\u200b\u4e0e\u200b\u53ef\u9009\u200b\u6ee1\u8db3\u200b\u7684\u200b\u9700\u6c42\u200b\u90e8\u5206\u200b\uff0c\u200b\u4e24\u200b\u90e8\u5206\u200b\u5230\u200b\u5356\u65b9\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u76f8\u540c\u200b\u3002\u200b\u540c\u65f6\u200b\u52a0\u5165\u200b\u4e00\u4e2a\u200b\u865a\u62df\u200b\u5356\u65b9\u200b\uff0c\u200b\u865a\u62df\u200b\u5356\u65b9\u200b\u5230\u200b\u5fc5\u987b\u200b\u6ee1\u8db3\u200b\u7684\u200b\u865a\u62df\u200b\u4e70\u5bb6\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u4e3a\u200b\u8db3\u591f\u200b\u5927\u200b\u7684\u200b\u6b63\u6570\u200b\uff0c\u200b\u865a\u62df\u200b\u5356\u65b9\u200b\u5230\u200b\u53ef\u9009\u200b\u6ee1\u8db3\u200b\u7684\u200b\u865a\u62df\u200b\u4e70\u5bb6\u200b\u7684\u200b\u8fd0\u4ef7\u200b\u4e3a\u200b\\(0\\)\u3002
"},{"location":"math/operating-research/chapter-2/#_13","title":"\u4f9b\u5e94\u200b\u95ee\u9898","text":"\u200b\u8003\u8651\u200b\u6309\u200b\u6708\u200b\u751f\u4ea7\u200b\u7684\u200b\u5356\u65b9\u200b\u4e0e\u200b\u6309\u200b\u6708\u200b\u4ea7\u751f\u200b\u9700\u6c42\u200b\u7684\u200b\u4e70\u65b9\u200b\uff0c\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u5ef6\u671f\u200b\u4ea4\u8d27\u200b\u3002\u200b\u5356\u65b9\u200b\u751f\u4ea7\u200b\u7684\u200b\u4ea7\u54c1\u200b\u5f53\u6708\u200b\u53ef\u4ee5\u200b\u4e0d\u200b\u9500\u552e\u200b\u3002\u200b\u5219\u200b\u8be5\u200b\u95ee\u9898\u200b\u53ef\u4ee5\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u8fd0\u8f93\u200b\u95ee\u9898\u200b\u3002
"},{"location":"math/operating-research/chapter-2/#_14","title":"\u591a\u7ef4\u200b\u8fd0\u8f93\u200b\u95ee\u9898","text":"\u200b\u5047\u8bbe\u200b\u4e24\u5730\u200b\u4e4b\u95f4\u200b\u5b58\u5728\u200b\\(k\\)\u200b\u4e2a\u200b\u4e2d\u95f4\u200b\u8282\u70b9\u200b\\(c_k\\)\uff0c\u200b\u4ece\u200b\\(A\\)\u200b\u5230\u200b\\(B\\)\u200b\u7684\u200b\u6240\u6709\u200b\u8def\u5f84\u200b\u90fd\u200b\u5fc5\u987b\u200b\u7ecf\u8fc7\u200b\u8282\u70b9\u200b\\(C\\)\uff0c\u200b\u6c42\u200b\u6700\u4f18\u200b\u8fd0\u8f93\u200b\u65b9\u6848\u200b\u3002
"},{"location":"math/operating-research/chapter-3/","title":"\u76ee\u6807\u200b\u89c4\u5212","text":"\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u89e3\u51b3\u200b\u73b0\u5b9e\u751f\u6d3b\u200b\u4e2d\u200b\u7684\u200b\u591a\u200b\u76ee\u6807\u200b\u51b3\u7b56\u95ee\u9898\u200b\u3002
\u200b\u8bbe\u200b\u7ebf\u6027\u89c4\u5212\u200b\\((P)\\)\uff1a
\\[ \\begin{aligned} & \\max z=c^Tx \\\\ & s.t. \\left\\{ \\begin{aligned} & AX \\leq b \\\\ & X\\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5047\u8bbe\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u8c03\u6574\u200b\u4e3a\u200b\uff1a
\u200b\u5bfb\u627e\u200b\u4f7f\u5f97\u200b\\(z\\geq z_0\\)\u200b\u7684\u200b\\(X\\)\uff0c\u200b\u5176\u4e2d\u200b\\(z_0\\)\u200b\u4e3a\u200b\u6307\u5b9a\u200b\u7684\u200b\u76ee\u6807\u200b\u3002\u200b\u5141\u8bb8\u200b\\(z > z_0\\)\u200b\u4f46\u200b\u4e0d\u200b\u5141\u8bb8\u200b\\(z < z_0\\)
\u200b\u6b64\u65f6\u200b\u7684\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u5373\u200b\u4e3a\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\uff0c\u200b\u5f15\u5165\u200b\u4e24\u4e2a\u200b\u677e\u5f1b\u200b\u53d8\u91cf\u200b\\(d^+, d^-\\)\uff0c\u200b\u5206\u522b\u200b\u8868\u793a\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u8d85\u51fa\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u90e8\u5206\u200b\u4e0e\u200b\u4e0d\u8db3\u200b\u76ee\u6807\u503c\u200b\u7684\u200b\u90e8\u5206\u200b\uff0c\u200b\u4e3a\u200b\u4fdd\u8bc1\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u8d85\u8fc7\u200b\u76ee\u6807\u503c\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u65b9\u5f0f\u200b\u5efa\u6a21\u200b\uff1a
\\[ \\begin{aligned} & \\max w = d^- \\\\ & s.t. \\left\\{ \\begin{aligned} & c^Tx - d^+ + d^- = z_0 \\\\ & AX \\leq b \\\\ & X\\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u7531\u6b64\u53ef\u89c1\u200b\uff0c\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u76f8\u5f53\u4e8e\u200b\u5728\u200b\u7ebf\u6027\u89c4\u5212\u200b\u4e2d\u200b\u5f15\u5165\u200b\u4e00\u79cd\u200b\u65b0\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u5373\u200b\u76ee\u6807\u200b\u7ea6\u675f\u200b\u3002\u200b\u6bcf\u4e2a\u200b\u76ee\u6807\u200b\u7ea6\u675f\u200b\u90fd\u200b\u9700\u8981\u200b\u5f15\u5165\u200b\u4e00\u5bf9\u200b\u53d8\u91cf\u200b\\(d^+\\)\u200b\u4e0e\u200b\\(d^-\\)\u3002\u200b\u5982\u679c\u200b\u4f18\u5316\u200b\u95ee\u9898\u200b\u4e2d\u200b\u5b58\u5728\u200b\u591a\u4e2a\u200b\u76ee\u6807\u200b\u4e14\u200b\u4e4b\u95f4\u200b\u5b58\u5728\u200b\u4f18\u5148\u7ea7\u200b\u5173\u7cfb\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\\(P_i\\)\u200b\u4f5c\u4e3a\u200b\u9700\u8981\u200b\u4f18\u5316\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u7cfb\u6570\u200b\u3002\\(P_i\\)\u200b\u6ee1\u8db3\u200b\\(P_1 \\gg P_2 \\gg \\dots \\gg P_n\\)\u200b\u5e76\u4e14\u200b\u5404\u200b\\(P_i\\)\u200b\u4e3a\u200b\u8db3\u591f\u200b\u5927\u200b\u7684\u200b\u6b63\u6570\u200b\u3002
\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e2d\u200b\u53ea\u6709\u200b\u504f\u5dee\u200b\u53d8\u91cf\u200b\uff0c\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u7684\u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\u662f\u200b\u6700\u5c0f\u5316\u200b\u504f\u5dee\u200b\u53d8\u91cf\u200b\u3002\u200b\u5982\u679c\u200b\u6700\u4f18\u200b\u6761\u4ef6\u200b\u4e0b\u200b\\(Z=0\\)\uff0c\u200b\u8bf4\u660e\u200b\u6240\u6709\u200b\u76ee\u6807\u200b\u53ef\u4ee5\u200b\u540c\u65f6\u200b\u6ee1\u8db3\u200b\u3002
"},{"location":"math/operating-research/chapter-3/#_2","title":"\u76ee\u6807\u200b\u89c4\u5212\u200b\u7684\u200b\u6c42\u89e3\u200b\u65b9\u6cd5","text":"\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u56fe\u89e3\u6cd5\u200b\u6216\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u5bf9\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u8fdb\u884c\u200b\u6c42\u89e3\u200b
"},{"location":"math/operating-research/chapter-3/#_3","title":"\u56fe\u89e3\u6cd5","text":"\u200b\u4f7f\u7528\u200b\u56fe\u89e3\u6cd5\u200b\u6c42\u89e3\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u65f6\u200b\uff0c\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u753b\u51fa\u200b\u76ee\u6807\u200b\u7ea6\u675f\u200b\u4e2d\u200b\u7684\u200b\u786c\u200b\u7ea6\u675f\u200b\uff0c\u200b\u518d\u200b\u6309\u7167\u200b\u76ee\u6807\u200b\u7ea6\u675f\u200b\u7684\u200b\u4f18\u5148\u7ea7\u200b\u753b\u51fa\u200b\u8f6f\u200b\u7ea6\u675f\u200b\uff0c\u200b\u5e76\u200b\u6ce8\u660e\u200b\u7ea6\u675f\u200b\u504f\u5dee\u200b\u65b9\u5411\u200b\u3002\u200b\u6309\u7167\u200b\u7ea6\u675f\u200b\u7684\u200b\u4f18\u5148\u7ea7\u200b\u4f9d\u6b21\u200b\u5212\u5206\u200b\u80fd\u591f\u200b\u6ee1\u8db3\u200b\u7ea6\u675f\u200b\u7684\u200b\u53ef\u884c\u200b\u57df\u200b\u3002\u200b\u76f4\u5230\u200b\u53ef\u884c\u200b\u57df\u200b\u4e3a\u200b\u7a7a\u200b\u6216\u200b\u7ea6\u675f\u200b\u5168\u90e8\u200b\u6ee1\u8db3\u200b\u3002
"},{"location":"math/operating-research/chapter-3/#_4","title":"\u5355\u7eaf\u5f62\u6cd5","text":"\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u5c06\u200b\u5355\u7eaf\u5f62\u6cd5\u200b\u4e2d\u200b\u7684\u200b\u786c\u200b\u7ea6\u675f\u200b\u5316\u4e3a\u200b\u6807\u51c6\u578b\u200b\u3002\u200b\u5217\u51fa\u200b\u5355\u7eaf\u5f62\u200b\u8868\u540e\u200b\uff0c\u200b\u9010\u6b65\u200b\u5c06\u200b\u5305\u542b\u200b\u5728\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e2d\u200b\u7684\u200b\u504f\u5dee\u200b\u4ece\u200b\u57fa\u4e2d\u6362\u200b\u51fa\u200b\u3002\u200b\u5e76\u4e14\u200b\u5c3d\u53ef\u80fd\u200b\u4f7f\u5f97\u200b\u975e\u57fa\u200b\u53d8\u91cf\u200b\u7684\u200b\u68c0\u9a8c\u200b\u6570\u4e3a\u200b\u6b63\u200b\uff08\u200b\u56e0\u200b\u76ee\u6807\u200b\u89c4\u5212\u200b\u7684\u200b\u4f18\u5316\u200b\u65b9\u5411\u200b\u4e3a\u200b\u6700\u5c0f\u5316\u200b\uff09\u3002
"},{"location":"math/operating-research/chapter-4/","title":"\u6574\u6570\u200b\u89c4\u5212","text":"\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u662f\u200b\u90e8\u5206\u200b\uff08\u200b\u6216\u200b\u5168\u90e8\u200b\uff09\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u5747\u53d6\u200b\u6574\u6570\u200b\u7684\u200b\u7ebf\u6027\u89c4\u5212\u200b\u3002\u200b\u5168\u90e8\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u5747\u53d6\u200b\u6574\u6570\u200b\u7684\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u79f0\u4e3a\u200b\u7eaf\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u3002\u200b\u5982\u679c\u200b\u6574\u6570\u200b\u53d8\u91cf\u200b\u53ea\u80fd\u200b\u53d6\u200b0-1\u200b\u4e24\u4e2a\u200b\u503c\u200b\uff0c\u200b\u5219\u200b\u79f0\u4e3a\u200b0-1\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u3002
"},{"location":"math/operating-research/chapter-4/#_2","title":"\u6574\u6570\u200b\u89c4\u5212\u200b\u7684\u200b\u6c42\u89e3\u200b\u65b9\u6cd5","text":"\u200b\u6c42\u89e3\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u76ee\u524d\u200b\u6709\u200b\u5982\u4e0b\u200b\u7b97\u6cd5\u200b\uff1a
- \u200b\u5272\u200b\u5e73\u9762\u200b\u6cd5\u200b
- \u200b\u5206\u652f\u200b\u5b9a\u754c\u200b\u6cd5\u200b
- \u200b\u9690\u200b\u679a\u4e3e\u6cd5\u200b\uff08\u200b\u9002\u7528\u200b\u4e8e\u200b\u6c42\u89e3\u200b0-1\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\uff09
- \u200b\u542f\u53d1\u5f0f\u200b\u7b97\u6cd5\u200b
\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b\u7eaf\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\uff1a
\\[ \\begin{aligned} & \\max z=c^Tx \\\\ & s.t. \\left\\{ \\begin{aligned} & AX \\leq b \\\\ & X\\geq 0 \\end{aligned} \\right . \\end{aligned} \\] \u200b\u5176\u4e2d\u200b\\(A, b, x\\)\u200b\u5747\u200b\u4e3a\u200b\u6574\u6570\u200b\u3002
"},{"location":"math/operating-research/chapter-4/#_3","title":"\u5272\u200b\u5e73\u9762\u200b\u6cd5","text":"\u200b\u79f0\u200b\u6d88\u9664\u200b\u6574\u6570\u200b\u7ea6\u675f\u200b\u7684\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u4e3a\u200b\u677e\u5f1b\u200b\u95ee\u9898\u200b\uff0c\u200b\u5272\u200b\u5e73\u9762\u200b\u6cd5\u200b\u9996\u5148\u200b\u9700\u8981\u200b\u6c42\u89e3\u200b\u677e\u5f1b\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u8bbe\u200b\u4e3a\u200b\\(X^*\\)\u3002\u200b\u901a\u5e38\u200b\u60c5\u51b5\u200b\u4e0b\u200b\uff0c\\(X^*\\)\u200b\u4e0d\u662f\u200b\u6574\u6570\u200b\u6216\u200b\u4e0d\u5168\u662f\u200b\u6574\u6570\u200b\u3002\u200b\u5355\u7eaf\u5f62\u200b\u8868\u200b\u5982\u4e0b\u200b\u6240\u793a\u200b\uff1a
\u200b\u8bbe\u200b\u5355\u7eaf\u5f62\u200b\u8868\u4e2d\u200b\u7684\u200b\u7b2c\u200b\\(i\\)\u200b\u884c\u200b\u5bf9\u5e94\u200b\u7684\u200b\\(b'_i\\)\u200b\u4e0d\u200b\u4e3a\u200b\u6574\u6570\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u8fd9\u200b\u4e00\u884c\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ x_i + \\sum_{j=m+1}^n a'_{ij}x_j = b'_i \\] \u200b\u5c06\u200b\\(a'_{ij}, b'_i\\)\u200b\u5212\u5206\u200b\u4e3a\u200b\u6574\u6570\u200b\u90e8\u5206\u200b\u4e0e\u200b\u5c0f\u6570\u200b\u90e8\u5206\u200b\uff0c\u200b\u5373\u200b\uff1a
\\[ \\begin{aligned} a'_{ij} &= \\tilde a_{ij} + \\alpha_{ij}, \\; \\tilde a_{ij} = \\lfloor a'_{ij}\\rfloor \\\\ b'_{i} &= \\tilde b_{i} + \\beta_{i}, \\; \\tilde b_{ij} = \\lfloor b'_{i}\\rfloor \\end{aligned} \\] \u200b\u5c06\u200b\u8fd9\u200b\u4e00\u884c\u200b\u7b49\u5f0f\u200b\u53d8\u5f62\u200b\uff0c\u200b\u5f97\u5230\u200b\uff1a
\\[ \\beta_i - \\sum_{j=m+1}^n\\alpha_{ij}y_j = x_i - \\tilde b_i + \\sum_{j=m+1}^n \\tilde \\alpha_{ij}y_j \\] \u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u7684\u200b\u6761\u4ef6\u200b\u8981\u6c42\u200b\u7b49\u5f0f\u200b\u53f3\u4fa7\u200b\u4e3a\u200b\u6574\u6570\u200b\uff0c\u200b\u56e0\u6b64\u200b\u7b49\u5f0f\u200b\u5de6\u4fa7\u200b\u540c\u6837\u200b\u9700\u8981\u200b\u4e3a\u200b\u6574\u6570\u200b\uff0c\u200b\u5219\u200b\u6709\u200b\\(\\beta_i - \\sum_{j=m+1}^n\\alpha_{ij}y_j + s_i = 0\\)\uff0c\u200b\u5176\u4e2d\u200b\\(s_i\\)\u200b\u4e3a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b\u3002
\u200b\u79f0\u200b\u65b9\u7a0b\u200b
\\[ \\beta_i - \\sum_{j=m+1}^n\\alpha_{ij}y_j + s_i = 0 \\] \u200b\u4e3a\u200b\u5272\u200b\u5e73\u9762\u200b\u65b9\u7a0b\u200b\uff0c\u200b\u5272\u200b\u5e73\u9762\u200b\u65b9\u7a0b\u200b\u4f5c\u4e3a\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u6d88\u53bb\u200b\u4e86\u200b\u975e\u200b\u6574\u6570\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u7559\u4e0b\u200b\u6574\u6570\u200b\u89e3\u200b\u3002\u200b\u5411\u200b\u677e\u5f1b\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u5355\u7eaf\u5f62\u200b\u8868\u4e2d\u200b\u52a0\u5165\u200b\u5272\u200b\u5e73\u9762\u200b\u65b9\u7a0b\u200b\u4f5c\u4e3a\u200b\u65b0\u200b\u7684\u200b\u7ea6\u675f\u6761\u4ef6\u200b\uff0c\u200b\u7ee7\u7eed\u200b\u6c42\u89e3\u200b\u7ebf\u6027\u89c4\u5212\u200b\u5373\u53ef\u200b\u5f97\u5230\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\u3002
"},{"location":"math/operating-research/chapter-4/#_4","title":"\u5206\u652f\u200b\u5b9a\u754c\u200b\u6cd5","text":"\u200b\u5148\u200b\u6c42\u89e3\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u5bf9\u5e94\u200b\u7684\u200b\u677e\u5f1b\u200b\u95ee\u9898\u200b\uff0c\u200b\u5e76\u200b\u4f30\u8ba1\u200b\u4e00\u4e2a\u200b\u975e\u200b\u6700\u4f18\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u4f5c\u4e3a\u200b\u8bb0\u5f55\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u200b\u3002\u200b\u5bf9\u4e8e\u200b\u6700\u4f18\u200b\u89e3\u4e2d\u200b\u7684\u200b\u975e\u200b\u6574\u6570\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\uff0c\u200b\u9009\u62e9\u200b\u5176\u4e2d\u200b\u4e00\u4e2a\u200b\\(x_i\\)\u200b\u8fdb\u884c\u200b\u5206\u652f\u200b\uff1a
- \u200b\u6dfb\u52a0\u200b\u7ea6\u675f\u200b\\(x'_i \\leq \\lfloor x_i \\rfloor\\)
- \u200b\u6dfb\u52a0\u200b\u7ea6\u675f\u200b\\(x'_i \\geq \\lceil x_i \\rceil\\)
\u200b\u6dfb\u52a0\u200b\u7ea6\u675f\u200b\u540e\u200b\u91cd\u65b0\u200b\u6c42\u89e3\u200b\u7ebf\u6027\u89c4\u5212\u200b\uff0c\u200b\u5982\u679c\u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u89e3\u200b\u6ee1\u8db3\u200b\u6574\u6570\u200b\u7ea6\u675f\u200b\uff0c\u200b\u5219\u200b\u5c06\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u4e0e\u200b\u8bb0\u5f55\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u76f8\u200b\u6bd4\u8f83\u200b\u3002\u200b\u5982\u679c\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u66f4\u4f18\u200b\uff0c\u200b\u5219\u200b\u66f4\u65b0\u200b\u6700\u4f18\u200b\u503c\u200b\uff0c\u200b\u5426\u5219\u200b\u505c\u6b62\u200b\u5411\u4e0b\u200b\u63a2\u7d22\u200b\uff08\u200b\u526a\u679d\u200b\uff09\u3002
\u200b\u5206\u652f\u200b\u53ef\u4ee5\u200b\u91c7\u53d6\u200b\u6df1\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b\u6216\u200b\u5e7f\u5ea6\u200b\u4f18\u5148\u200b\u641c\u7d22\u200b\u3002
"},{"location":"math/operating-research/chapter-4/#_5","title":"\u9690\u200b\u679a\u4e3e\u6cd5","text":"\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u5f62\u5f0f\u200b\u7684\u200b0-1\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\uff1a
\\[ \\begin{aligned} & \\max z=c^Tx \\\\ & s.t. \\left\\{ \\begin{aligned} & AX \\leq b \\\\ & x_i \\in \\{0, 1\\} \\end{aligned} \\right . \\end{aligned} \\] \u200b\u9996\u5148\u200b\u8bd5\u63a2\u200b\u51fa\u200b\u4e00\u4e2a\u200b\u53ef\u884c\u200b\u89e3\u200b\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u4f5c\u4e3a\u200b\u8bb0\u5f55\u200b\u7684\u200b\u6700\u4f18\u200b\u503c\u200b\\(Z_0\\)\uff0c\u200b\u518d\u200b\u679a\u4e3e\u200b\u6240\u6709\u200b\u7684\u200b\u53ef\u884c\u200b\u89e3\u200b\uff0c\u200b\u82e5\u89e3\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u503c\u200b\u8d85\u8fc7\u200b\u6700\u4f18\u200b\u503c\u5219\u200b\u66f4\u65b0\u200b\u6700\u4f18\u200b\u503c\u200b\u3002
"},{"location":"math/operating-research/chapter-4/#_6","title":"\u6307\u6d3e\u200b\u95ee\u9898","text":"\u200b\u6307\u6d3e\u200b\u95ee\u9898\u200b\u662f\u200b\u7279\u6b8a\u200b\u7684\u200b0-1\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\uff0c\u200b\u5176\u200b\u76ee\u6807\u200b\u662f\u200b\u5c06\u200b\\(n\\)\u200b\u4e2a\u200b\u5de5\u4eba\u200b\u5728\u200b\\(n\\)\u200b\u4e2a\u200b\u5de5\u4f5c\u200b\u4e2d\u200b\u5206\u914d\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5de5\u4eba\u200b\\(i\\)\u200b\u5728\u200b\u8fdb\u884c\u200b\u5de5\u4f5c\u200b\\(j\\)\u200b\u65f6\u200b\uff0c\u200b\u90fd\u200b\u4f1a\u200b\u4ea7\u751f\u200b\u6210\u672c\u200b\\(c_{ij}\\)\uff0c\u200b\u51b3\u7b56\u95ee\u9898\u200b\u7684\u200b\u76ee\u6807\u200b\u662f\u200b\u6700\u5c0f\u5316\u200b\u603b\u6210\u672c\u200b\u3002\u200b\u8bb0\u200b\u6210\u672c\u200b\u77e9\u9635\u200b\u4e3a\u200b
\\[ A = \\begin{bmatrix} c_{11} & c_{12} & \\cdots & c_{1n} \\\\ c_{21} & c_{22} & \\cdots & c_{2n} \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ c_{n1} & c_{n2} & \\cdots & c_{nn} \\end{bmatrix} \\] \u200b\u6027\u8d28\u200b
\u200b\u82e5\u200b\u7cfb\u6570\u200b\u77e9\u9635\u200b\\(A\\)\u200b\u7684\u200b\u67d0\u200b\u4e00\u884c\u200b\u6216\u200b\u67d0\u200b\u4e00\u5217\u200b\u51cf\u53bb\u200b\u5206\u522b\u200b\u51cf\u53bb\u200b\u4e00\u4e2a\u200b\u5e38\u6570\u200b\\(k\\)\uff0c\u200b\u4e0d\u200b\u5f71\u54cd\u200b\u6307\u6d3e\u200b\u95ee\u9898\u200b\u7684\u200b\u89e3\u200b\u3002
\u200b\u4f7f\u7528\u200b\u5308\u7259\u5229\u200b\u7b97\u6cd5\u200b\u6c42\u89e3\u200b\u6574\u6570\u200b\u89c4\u5212\u200b\u95ee\u9898\u200b\u3002\u200b\u9996\u5148\u200b\u5bf9\u200b\u7cfb\u6570\u200b\u77e9\u9635\u200b\u5148\u200b\u51cf\u53bb\u200b\u6bcf\u884c\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\uff0c\u200b\u518d\u200b\u51cf\u53bb\u200b\u6bcf\u5217\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b\u3002\u200b\u4ece\u800c\u200b\u6bcf\u884c\u200b\u3001\u200b\u6bcf\u5217\u200b\u4e2d\u200b\u81f3\u5c11\u200b\u51fa\u73b0\u200b\u4e00\u4e2a\u96f6\u200b\u3002\u200b\u5b9a\u4e49\u200b\u201c\u200b\u72ec\u7acb\u200b\u96f6\u200b\u201d\u200b\u4e3a\u200b\u7cfb\u6570\u200b\u77e9\u9635\u200b\u4e2d\u200b\u65e2\u200b\u4e0d\u200b\u5904\u4e8e\u200b\u540c\u4e00\u200b\u884c\u200b\u3001\u200b\u4e5f\u200b\u4e0d\u200b\u5904\u4e8e\u200b\u540c\u4e00\u200b\u5217\u200b\u7684\u200b\\(0\\)\u200b\u7684\u200b\u6700\u5927\u200b\u4e2a\u6570\u200b\u3002
- \u200b\u82e5\u200b\u201c\u200b\u72ec\u7acb\u200b\u96f6\u200b\u201d\u200b\u7684\u200b\u4e2a\u6570\u200b\u7b49\u4e8e\u200b\u65b9\u9635\u200b\u7684\u200b\u7ef4\u5ea6\u200b\uff0c\u200b\u5219\u200b\u5f97\u5230\u200b\u6307\u6d3e\u200b\u95ee\u9898\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u200b\u7684\u200b\u6307\u6d3e\u200b\u65b9\u6848\u200b\u4e0e\u200b\u72ec\u7acb\u200b\u96f6\u200b\u7684\u200b\u4f4d\u7f6e\u200b\u5206\u5e03\u200b\u76f8\u540c\u200b\u3002
- \u200b\u82e5\u200b\u201c\u200b\u72ec\u7acb\u200b\u96f6\u200b\u201d\u200b\u7684\u200b\u4e2a\u6570\u200b\u5c0f\u4e8e\u200b\u65b9\u9635\u200b\u7684\u200b\u7ef4\u5ea6\u200b\u3002\u200b\u9996\u5148\u200b\u627e\u51fa\u200b\u65b9\u9635\u200b\u4e2d\u200b\u80fd\u591f\u200b\u8986\u76d6\u200b\u6240\u6709\u200b\u96f6\u200b\u5143\u7d20\u200b\u7684\u200b\u6700\u5c11\u200b\u76f4\u7ebf\u200b\u6570\u200b\u3002\u200b\u5728\u200b\u4e0d\u200b\u88ab\u200b\u76f4\u7ebf\u200b\u8986\u76d6\u200b\u7684\u200b\u5143\u7d20\u200b\u4e2d\u200b\u5bfb\u627e\u200b\u6700\u5c0f\u503c\u200b\uff0c\u200b\u5c06\u200b\u6240\u5728\u200b\u884c\u6216\u5217\u200b\u51cf\u53bb\u200b\u8fd9\u4e2a\u200b\u6700\u5c0f\u503c\u200b\u3002\u200b\u7136\u540e\u200b\u5bf9\u200b\u4ea7\u751f\u200b\u7684\u200b\u8d1f\u503c\u200b\u8fdb\u884c\u200b\u8c03\u6574\u200b\uff0c\u200b\u76f4\u5230\u200b\u77e9\u9635\u200b\u4e2d\u200b\u4e0d\u200b\u5b58\u5728\u200b\u8d1f\u503c\u200b\u3002\u200b\u7ed3\u675f\u200b\u540e\u200b\u7ee7\u7eed\u200b\u68c0\u67e5\u200b\u72ec\u7acb\u200b\u96f6\u200b\u7684\u200b\u4e2a\u6570\u200b\u3002
"},{"location":"math/operations-mamagement/","title":"\u9ad8\u7b49\u200b\u8fd0\u4f5c\u200b\u7ba1\u7406","text":" - \u200b\u9884\u6d4b\u200b\u6280\u672f\u200b
- \u200b\u9884\u6d4b\u200b\u4e0e\u200b\u9700\u6c42\u200b\u5efa\u6a21\u200b
- \u200b\u7efc\u5408\u200b\u751f\u4ea7\u200b\u8ba1\u5212\u200b
- \u200b\u786e\u5b9a\u200b\u9700\u6c42\u200b\u4e0b\u200b\u7684\u200b\u5e93\u5b58\u200b\u63a7\u5236\u200b
- \u200b\u968f\u673a\u200b\u9700\u6c42\u200b\u4e0b\u200b\u7684\u200b\u5e93\u5b58\u200b\u63a7\u5236\u200b
"},{"location":"math/operations-mamagement/#todo","title":"TODO","text":" - \u200b\u5468\u671f\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\u2014\u2014\\((s, S)\\)\u200b\u7b56\u7565\u200b
- \u200b\u591a\u7ea7\u200b\u7cfb\u7edf\u200b\u4e0e\u200b\u534f\u8c03\u200b\u8ba2\u8d27\u200b
"},{"location":"math/operations-mamagement/aggregrate-planning/","title":"\u7efc\u5408\u200b\u751f\u4ea7\u200b\u8ba1\u5212","text":""},{"location":"math/operations-mamagement/aggregrate-planning/#_2","title":"\u6a21\u578b\u200b\u8bbe\u5b9a","text":"\u200b\u6a21\u578b\u200b\u4e2d\u200b\u5305\u542b\u200b\u4e00\u4e2a\u200b\u4f01\u4e1a\u200b\uff0c\u200b\u4f01\u4e1a\u200b\u901a\u8fc7\u200b\u96c7\u4f63\u5de5\u4eba\u200b\u751f\u4ea7\u200b\u5e76\u200b\u9500\u552e\u200b\u4ea7\u54c1\u200b\u4f5c\u4e3a\u200b\u6536\u5165\u200b\u3002\u200b\u76f8\u5173\u200b\u7684\u200b\u53c2\u6570\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u6210\u672c\u200b\u53c2\u6570\u200b
- \u200b\u5e93\u5b58\u200b\u76f8\u5173\u200b\uff1a\u200b\u539f\u6750\u6599\u200b\u6210\u672c\u200b\u3001\u200b\u6301\u6709\u200b\u6210\u672c\u200b\u3001\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b
- \u200b\u4eba\u5458\u200b\u76f8\u5173\u200b\uff1a\u200b\u96c7\u4f63\u200b\u6210\u672c\u200b\u3001\u200b\u89e3\u96c7\u200b\u6210\u672c\u200b\u3001\u200b\u5de5\u65f6\u200b\u6210\u672c\u200b\u3001\u200b\u95f2\u7f6e\u200b\u6210\u672c\u200b\u4e0e\u200b\u52a0\u73ed\u200b\u6210\u672c\u200b
- \u200b\u751f\u4ea7\u529b\u200b\u76f8\u5173\u200b\uff1a\u200b\u8f6c\u5305\u200b\u6210\u672c\u200b
- \u200b\u6536\u76ca\u200b\u53c2\u6570\u200b\uff1a\u200b\u5355\u4f4d\u200b\u4ea7\u54c1\u200b\u552e\u4ef7\u200b
- \u200b\u751f\u4ea7\u200b\u53c2\u6570\u200b
- \u200b\u5355\u4f4d\u200b\u4ea7\u54c1\u200b\u751f\u4ea7\u200b\u5de5\u65f6\u200b
- \u200b\u65e5\u5e38\u200b\u5de5\u4f5c\u200b\u5de5\u65f6\u200b
- \u200b\u5e93\u5b58\u200b\u53c2\u6570\u200b
- \u200b\u671f\u521d\u200b\u5b58\u91cf\u200b\u4e0e\u200b\u671f\u672b\u200b\u5b58\u91cf\u200b
- \u200b\u9700\u6c42\u91cf\u200b
\u200b\u53d8\u91cf\u200b \u200b\u8bf4\u660e\u200b \u200b\u53d8\u91cf\u200b \u200b\u8bf4\u660e\u200b \\(c_F\\) \u200b\u89e3\u96c7\u200b\u6210\u672c\u200b \\(c_H\\) \u200b\u96c7\u4f63\u200b\u6210\u672c\u200b \\(c_I\\) \u200b\u6301\u6709\u200b\u6210\u672c\u200b \\(c_P\\) \u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b \\(c_R\\) \u200b\u65e5\u5e38\u200b\u751f\u4ea7\u6210\u672c\u200b \\(c_O\\) \u200b\u52a0\u73ed\u200b\u751f\u4ea7\u6210\u672c\u200b \\(c_S\\) \u200b\u8f6c\u5305\u200b\u6210\u672c\u200b \\(c_U\\) \u200b\u751f\u4ea7\u529b\u200b\u7684\u200b\u95f2\u7f6e\u200b\u6210\u672c\u200b \\(D_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u9700\u6c42\u200b \\(n_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u5de5\u200b\u65f6\u6570\u200b \\(F_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u89e3\u96c7\u200b\u4eba\u6570\u200b \\(H_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u96c7\u4f63\u200b\u4eba\u6570\u200b \\(K\\) \u200b\u5355\u4f4d\u200b\u5de5\u65f6\u200b\u4ea7\u91cf\u200b \\(W_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u5458\u5de5\u200b\u4eba\u6570\u200b \\(P_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u603b\u5de5\u200b\u65f6\u200b \\(O_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u603b\u200b\u52a0\u73ed\u200b\u5de5\u65f6\u200b \\(U_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u603b\u200b\u95f2\u7f6e\u200b\u5de5\u65f6\u200b \\(S_t\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u5916\u5305\u200b\u4ea7\u91cf\u200b \\(I_t^+\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u591a\u4f59\u200b\u5e93\u5b58\u200b \\(I_t^-\\) \\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u7f3a\u8d27\u200b\u6c34\u5e73\u200b \u200b\u4e0a\u8868\u200b\u4e2d\u200b\\(I_t^\\pm, W_t\\)\u200b\u5206\u522b\u200b\u6307\u7b2c\u200b\\(t\\)\u200b\u4e2a\u200b\u5468\u671f\u200b\u7ed3\u675f\u200b\u65f6\u200b\u7684\u200b\u6570\u503c\u200b\u3002\u200b\u7279\u522b\u200b\u5730\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u521d\u59cb\u72b6\u6001\u200b\uff0c\u200b\u6709\u200b
- \\(I_0\\)\u200b\u4e3a\u200b\u521d\u59cb\u200b\u5e93\u5b58\u200b
- \\(W_0\\)\u200b\u4e3a\u200b\u521d\u59cb\u200b\u5458\u5de5\u200b\u6570\u200b
"},{"location":"math/operations-mamagement/aggregrate-planning/#_3","title":"\u7b56\u7565\u200b\u5206\u7c7b","text":"\u200b\u6839\u636e\u200b\u4e0d\u540c\u200b\u7684\u200b\u6210\u672c\u200b\u7b56\u7565\u200b\u4e0e\u200b\u98ce\u9669\u200b\u504f\u597d\u200b\uff0c\u200b\u7efc\u5408\u200b\u8ba1\u5212\u200b\u7c7b\u578b\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u591a\u79cd\u4e0d\u540c\u200b\u7684\u200b\u8ba1\u5212\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5982\u200b\uff1a
- \u200b\u8ffd\u9010\u200b\u7b56\u7565\u200b\uff08\u200b\u6700\u5c0f\u5316\u200b\u5e93\u5b58\u200b\uff09
- \u200b\u5e73\u7a33\u200b\u7b56\u7565\u200b\uff08\u200b\u6700\u5c0f\u5316\u200b\u5458\u5de5\u200b\u7684\u200b\u53d8\u52a8\u200b\uff09
- \u200b\u5f39\u6027\u200b\u5de5\u4f5c\u200b\u65f6\u95f4\u200b\u7b56\u7565\u200b
- \u200b\u6df7\u5408\u7b56\u7565\u200b
"},{"location":"math/operations-mamagement/aggregrate-planning/#_4","title":"\u6c42\u89e3\u200b\uff1a\u200b\u7ebf\u6027\u89c4\u5212","text":"\u200b\u5bf9\u4e8e\u200b\u5e93\u5b58\u200b\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u7ea6\u675f\u200b\uff1a
\\[ \\begin{aligned} I_t &= I_t^+ - I_t^- \\\\ I_t &= I_{t-1} + P_t + S_t - D_t \\end{aligned} \\] \u200b\u5bf9\u4e8e\u200b\u5458\u5de5\u200b\u7684\u200b\u96c7\u4f63\u200b\u4e0e\u200b\u89e3\u96c7\u200b\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u7ea6\u675f\u200b\uff1a
\\[ \\begin{aligned} W_t &= W_{t-1} + H_t - F_t \\\\ 0 &= H_t\\cdot F_t \\end{aligned} \\] \u200b\u5bf9\u4e8e\u200b\u5458\u5de5\u200b\u7684\u200b\u751f\u4ea7\u200b\u5de5\u65f6\u200b\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u7ea6\u675f\u200b\uff1a
\\[ \\begin{aligned} P_t &= Kn_t W_t + O_t - U_t \\\\ 0 &= O_t \\cdot U_t \\end{aligned} \\] \u200b\u7ebf\u6027\u89c4\u5212\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\u4e3a\u200b\u6700\u5c0f\u5316\u200b\u5404\u9879\u200b\u6210\u672c\u200b\u3002
"},{"location":"math/operations-mamagement/fdm/","title":"\u9884\u6d4b\u200b\u4e0e\u200b\u9700\u6c42\u200b\u5efa\u6a21","text":"\u200b\u7ecf\u5178\u200b\u6a21\u578b\u200b\uff08\u200b\u5982\u200b\u6ed1\u52a8\u200b\u5e73\u5747\u200b\u3001\u200b\u6307\u6570\u200b\u5e73\u6ed1\u200b\u7b49\u200b\uff09\u200b\u7684\u200b\u7f3a\u9677\u200b\u5728\u4e8e\u200b\uff1a
- \u200b\u7ecf\u5178\u200b\u6a21\u578b\u200b\u6301\u7eed\u200b\u4f9d\u8d56\u4e8e\u200b\u5386\u53f2\u200b\u89c2\u6d4b\u200b\u6570\u636e\u200b
- \u200b\u90e8\u5206\u200b\u6a21\u578b\u200b\uff08\u200b\u5982\u200b\u6ed1\u52a8\u200b\u5e73\u5747\u200b\uff09\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b
- \u200b\u4ea7\u54c1\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u4e0d\u540c\u200b\uff0c\u200b\u5982\u679c\u200b\u4e00\u4e2a\u200b\u4ea7\u54c1\u200b\u7684\u200b\u751f\u547d\u5468\u671f\u200b\u660e\u663e\u200b\u8f83\u200b\u77ed\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u6ca1\u6709\u200b\u5145\u8db3\u200b\u7684\u200b\u5386\u53f2\u6570\u636e\u200b\u5bf9\u200b\u8be5\u200b\u4ea7\u54c1\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b\u3002
\u200b\u672c\u7ae0\u200b\u8ba8\u8bba\u200b\u5982\u4e0b\u200b\u6a21\u578b\u200b\uff0c\u200b\u8fd9\u4e9b\u200b\u6a21\u578b\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u9884\u6d4b\u200b\u751f\u547d\u5468\u671f\u200b\u8f83\u200b\u77ed\u200b\u7684\u200b\u4ea7\u54c1\u200b\u3002
- Bass\u200b\u6269\u6563\u200b\u6a21\u578b\u200b
- \u200b\u9886\u5148\u200b\u6307\u6807\u200b\u6a21\u578b\u200b
- \u200b\u9009\u62e9\u200b\u6a21\u578b\u200b
"},{"location":"math/operations-mamagement/fdm/#bass","title":"Bass\u200b\u6269\u6563\u200b\u6a21\u578b","text":"Bass\u200b\u6a21\u578b\u200b\u63d0\u51fa\u200b\u4e86\u200b\u6269\u6563\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u6982\u5ff5\u200b\u3002\uff08\u200b\u67d0\u200b\u4e00\u7c7b\u200b\uff09\u200b\u65b0\u200b\u4ea7\u54c1\u200b\u9996\u6b21\u200b\u4e0a\u5e02\u200b\u540e\u200b\uff0c\u200b\u8be5\u200b\u4ea7\u54c1\u200b\u7684\u200b\u8bbe\u8ba1\u200b\u7406\u5ff5\u200b\u7b49\u200b\u5185\u5bb9\u200b\u4f1a\u200b\u5728\u200b\u5e02\u573a\u200b\u4e0a\u200b\u6269\u6563\u200b\uff08\u200b\u88ab\u200b\u6a21\u4eff\u200b\uff09\uff0c\u200b\u9020\u6210\u200b\u540c\u7c7b\u4ea7\u54c1\u200b\u7684\u200b\u4ea7\u91cf\u200b\u4e0a\u5347\u200b\u3002
\u200b\u524d\u63d0\u200b\u5047\u8bbe\u200b\uff1a
- \u200b\u5e02\u573a\u200b\u4e0a\u200b\u7684\u200b\u7528\u6237\u6570\u91cf\u200b\u4e0d\u53d8\u200b
- \u200b\u7528\u6237\u200b\u53ef\u4ee5\u200b\u88ab\u200b\u7b80\u5355\u200b\u5206\u4e3a\u200b\u521b\u65b0\u8005\u200b\u4e0e\u200b\u6a21\u4eff\u8005\u200b
- \u200b\u521b\u65b0\u8005\u200b\u8d2d\u4e70\u200b\u4ea7\u54c1\u200b\u7684\u200b\u51b3\u7b56\u200b\u4e0d\u200b\u53d7\u5230\u200b\u5176\u4ed6\u200b\u4e2a\u4f53\u200b\u7684\u200b\u5f71\u54cd\u200b
- \u200b\u6a21\u4eff\u8005\u200b\u8d2d\u4e70\u200b\u4ea7\u54c1\u200b\u7684\u200b\u51b3\u7b56\u200b\u53d7\u5230\u200b\u5176\u4ed6\u200b\u4e2a\u4f53\u200b\u7684\u200b\u5f71\u54cd\u200b\uff0c\u200b\u8fd9\u79cd\u200b\u5f71\u54cd\u200b\u65b9\u5f0f\u200b\u901a\u8fc7\u200b\u4e2a\u4f53\u200b\u95f4\u200b\u7684\u200b\u4ea4\u6d41\u200b\u5b9e\u73b0\u200b
\u200b\u5b9a\u4e49\u200b\uff1a\\(P(t)\\)\u200b\u4e3a\u200b\u5e02\u573a\u200b\u4e2d\u200b\u7684\u200b\u4e00\u4e2a\u200b\u987e\u5ba2\u200b\u5728\u200b\\(t\\)\u200b\u65f6\u523b\u200b\u4f5c\u51fa\u200b\u8d2d\u4e70\u51b3\u7b56\u200b\u7684\u200b\u6982\u7387\u200b
\\[ P(t) = p + \\frac{q}{m} D(t) \\] - \\(p\\)\u200b\u4e3a\u200b\u521b\u65b0\u200b\u7cfb\u6570\u200b
- \\(q\\)\u200b\u4e3a\u200b\u6a21\u4eff\u200b\u7cfb\u6570\u200b\uff0c\\(p\\ll q\\)
- \\(m\\)\u200b\u4e3a\u200b\u6d88\u8d39\u8005\u200b\u7684\u200b\u603b\u91cf\u200b\uff0c\u200b\u4e5f\u200b\u5373\u200b\u5e02\u573a\u200b\u89c4\u6a21\u200b\uff0c\u200b\u5e38\u6570\u200b
- \\(D(t)\\)\u200b\u4e3a\u200b\u65f6\u95f4\u200b\u4ece\u200b\\(0\\)\u200b\u5230\u200b\\(t\\)\u200b\u7684\u200b\u7d2f\u79ef\u200b\u8d2d\u4e70\u91cf\u200b
\u200b\u5373\u200b\uff0c\u200b\u5e02\u573a\u200b\u4e0a\u200b\u7684\u200b\u7d2f\u8ba1\u200b\u9700\u6c42\u200b\\(D(t)\\)\u200b\u8d8a\u5927\u200b\uff0c\u200b\u6d88\u8d39\u8005\u200b\u8d8a\u200b\u5bb9\u6613\u200b\u4f5c\u51fa\u200b\u8d2d\u4e70\u51b3\u7b56\u200b\u3002
\u200b\u4e0d\u59a8\u200b\u8bbe\u200b\\(d(t) = \\frac{\\mathrm dD}{\\mathrm dt}\\)\uff0c\u200b\u5373\u200b\\(t\\)\u200b\u65f6\u523b\u200b\u5e02\u573a\u200b\u4e0a\u200b\u8d2d\u4e70\u200b\u4eba\u6570\u200b\uff0c\u200b\u6839\u636e\u200b\\(P(t)\\)\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u6709\u200b\uff1a
\\[ P(t) = \\frac{d(t)}{m - D(t)} \\] \u200b\u8054\u7acb\u200b\u4e8c\u200b\u5f0f\u200b\uff0c\u200b\u5f97\u5230\u200b\uff1a
\\[ \\begin{aligned} p + \\frac{q}{m} D(t) &= \\frac{d(t)}{m - D(t)} \\\\ d(t) &= (m-D(t))\\left(p + \\frac qmD(t)\\right) \\\\ d(t) &= -\\frac qmD^2(t) + (q-p)D(t) + pm \\end{aligned} \\] \u200b\u89e3\u200b\u5fae\u5206\u65b9\u7a0b\u200b\\(\\frac{\\mathrm dD}{\\mathrm dt} = -\\frac qmD^2 + (q-p)D + pm\\)\uff0c\u200b\u5f97\u200b\\(D(t)\\)\uff1a
\\[ \\boxed{\\begin{aligned}D(t) &= m\\frac{1-e^{-(p+q)t}}{1+\\frac qp e^{-(p+q)t}} \\\\ d(t) &= m\\frac{p(p+q)^2e^{-(p+q)t}}{\\left(p+qe^{-(p+q)t}\\right)^2}\\end{aligned}} \\] \u200b\u5bf9\u200b\\(d(t)\\)\u200b\u8fdb\u4e00\u6b65\u200b\u6c42\u5bfc\u200b\uff0c\u200b\u5f97\u5f53\u200b\u4e14\u200b\u4ec5\u200b\u5f53\u200b\\(t = \\frac{1}{p+q}\\log \\frac{q}{p}\\)\u200b\u65f6\u200b\uff0c\\(d(t)\\)\u200b\u53d6\u5f97\u200b\u6700\u5927\u503c\u200b\u3002
\u200b\u6b64\u65f6\u200b\uff1a
\\[ \\boxed{\\begin{aligned}d(t) &= \\frac{m(p+q)^2}{4q} \\\\ D(t) &= \\frac{m(q-p)}{2q}\\end{aligned}} \\] \u200b\u7ed3\u679c\u200b\u8bf4\u660e\u200b\uff1a
- \u200b\u5f53\u200b\\(p\\)\u200b\u5f88\u200b\u5c0f\u65f6\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u9500\u552e\u91cf\u200b\u7684\u200b\u589e\u957f\u200b\u7f13\u6162\u200b
- \u200b\u5f53\u200b\\(p, q\\)\u200b\u5f88\u5927\u200b\u65f6\u200b\uff0c\u200b\u610f\u5473\u7740\u200b\u9500\u552e\u91cf\u200b\u7684\u200b\u589e\u957f\u200b\u4e0e\u200b\u4e0b\u8dcc\u200b\u5747\u200b\u8fc5\u901f\u200b
- \u200b\u4ec5\u5f53\u200b\\(q>p\\)\u200b\u65f6\u200b\uff0c\u200b\u4e0a\u5f0f\u200b\u624d\u200b\u6709\u200b\u610f\u4e49\u200b\uff0c\u200b\u5426\u5219\u200b\u610f\u5473\u7740\u200b\u9500\u552e\u91cf\u200b\u6301\u7eed\u200b\u4e0b\u8dcc\u200b
"},{"location":"math/operations-mamagement/forecast/","title":"\u9884\u6d4b\u200b\u6280\u672f","text":"\u200b\u5e38\u89c1\u200b\u7684\u200b\u5ba2\u89c2\u200b\u9884\u6d4b\u200b\u65b9\u6cd5\u200b\u6709\u200b\u56e0\u679c\u200b\u6a21\u578b\u200b\u4e0e\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u65b9\u6cd5\u200b\u3002\u200b\u8fd9\u4e9b\u200b\u65b9\u6cd5\u200b\u7684\u200b\u524d\u63d0\u200b\u5047\u8bbe\u200b\u662f\u200b\u8fc7\u53bb\u200b\u7684\u200b\u53d8\u91cf\u200b\u53ca\u5176\u200b\u76f8\u4e92\u4f5c\u7528\u200b\u5173\u7cfb\u200b\u5728\u200b\u672a\u6765\u200b\u5c06\u200b\u7ee7\u7eed\u200b\u5b58\u5728\u200b\u5e76\u200b\u53d1\u6325\u4f5c\u7528\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_2","title":"\u56e0\u679c\u200b\u6a21\u578b","text":"\u200b\u56e0\u679c\u200b\u6a21\u578b\u200b\u5373\u200b\u627e\u5230\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\uff0c\u200b\u4f7f\u7528\u200b\u4e0e\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b\u76f8\u5173\u200b\u7684\u200b\u5176\u4ed6\u200b\u53d8\u91cf\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b\u3002
\\[ y = f(X_1, \\dots, X_n) \\] \u200b\u5176\u4e2d\u200b\\(X_1, \\dots, X_n\\)\u200b\u662f\u200b\u4e0e\u200b\\(y\\)\u200b\u76f8\u5173\u200b\u7684\u200b\u5176\u4ed6\u200b\u53d8\u91cf\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u7ebf\u6027\u200b\u56e0\u679c\u200b\u6a21\u578b\u200b\uff0c\u200b\u51fd\u6570\u200b\\(f\\)\u200b\u662f\u200b\u5173\u4e8e\u200b\\(X_1, \\dots, X_n\\)\u200b\u7684\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\uff0c\u200b\u5373\u200b\uff1a
\\(f(X_1, \\dots, X_n) = \\alpha_0 + \\alpha_1X_1 + \\dots + \\alpha_nX_n\\)
"},{"location":"math/operations-mamagement/forecast/#_3","title":"\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u65b9\u6cd5","text":"\u200b\u6b64\u5904\u200b\u7684\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u6307\u5f80\u671f\u200b\u5bf9\u200b\u67d0\u200b\u53d8\u91cf\u200b\u89c2\u6d4b\u200b\u503c\u200b\u7684\u200b\u96c6\u5408\u200b\u3002\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u65b9\u6cd5\u200b\u4ec5\u4ec5\u200b\u4f9d\u9760\u200b\u8fd9\u4e9b\u200b\u89c2\u6d4b\u200b\u503c\u200b\u5bf9\u200b\u8be5\u200b\u53d8\u91cf\u200b\u7684\u200b\u672a\u6765\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b\u3002
\u200b\u5728\u200b\u73b0\u5b9e\u200b\u7684\u200b\u751f\u4ea7\u200b\u8fd0\u4f5c\u200b\u4e2d\u200b\uff0c\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u901a\u5e38\u200b\u4f1a\u200b\u8868\u73b0\u200b\u51fa\u200b\u4ee5\u4e0b\u200b\u6a21\u5f0f\u200b\uff1a
- \u200b\u8d8b\u52bf\u200b\uff0c\u200b\u5373\u200b\u89c2\u6d4b\u200b\u503c\u200b\u5728\u200b\u6574\u4e2a\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u6240\u200b\u8868\u73b0\u200b\u51fa\u200b\u7684\u200b\u8d8b\u52bf\u200b
- \u200b\u5b63\u8282\u200b\uff0c\u200b\u5373\u200b\u89c2\u6d4b\u200b\u503c\u200b\u5728\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u7684\u200b\u4e00\u90e8\u5206\u200b\u6240\u200b\u8868\u73b0\u200b\u51fa\u200b\u7684\u200b\u8d8b\u52bf\u200b
- \u200b\u5468\u671f\u200b\uff0c\u200b\u5373\u200b\u89c2\u6d4b\u200b\u503c\u200b\u5728\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u4e2d\u200b\u91cd\u590d\u200b\u591a\u6b21\u200b\u51fa\u73b0\u200b\u7684\u200b\u8d8b\u52bf\u200b
- \u200b\u968f\u673a\u200b\uff0c\u200b\u6307\u200b\u89c2\u6d4b\u200b\u503c\u200b\u65e0\u89c4\u5219\u200b\u7684\u200b\u53d8\u52a8\u200b
\u200b\u5b9e\u9645\u200b\u7684\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u53ef\u80fd\u200b\u540c\u65f6\u200b\u5305\u542b\u200b\u4ee5\u4e0a\u200b\u6240\u6709\u200b\u7279\u5f81\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_4","title":"\u89c2\u6d4b\u200b\u4e0e\u200b\u9884\u6d4b","text":" - \\(\\{D_t\\}\\)\u200b\u4e3a\u200b\u89c2\u6d4b\u200b\u53d8\u91cf\u200b\u5728\u200b\\(1\\sim t\\)\u200b\u7684\u200b\u65f6\u95f4\u200b\u5185\u200b\u7684\u200b\u89c2\u6d4b\u200b\u503c\u200b\u7ec4\u6210\u200b\u7684\u200b\u5e8f\u5217\u200b\uff1b
- \\(F_{t-\\tau, t}\\)\u200b\u8868\u793a\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u5728\u200b\\(t-\\tau\\)\u200b\u5468\u671f\u200b\u5185\u200b\u5bf9\u200b\\(t\\)\u200b\u5468\u671f\u200b\u7684\u200b\u89c2\u6d4b\u200b\u503c\u200b\u4f5c\u51fa\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002\u200b\u7279\u6b8a\u200b\u5730\u200b\uff0c\\(F_t=F_{t-1, t}\\)\uff0c\u200b\u5373\u200b\u4e3a\u200b\u63d0\u524d\u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u7684\u200b\u9884\u6d4b\u200b\u3002
\u200b\u5982\u4e0b\u200b\u6307\u6807\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u8861\u91cf\u200b\u9884\u6d4b\u200b\u6548\u679c\u200b\uff0c\u200b\u5b9a\u4e49\u200b\u504f\u5dee\u200b\\(e_t = D_t - F_t\\)
- \u200b\u5e73\u5747\u200b\u7edd\u5bf9\u200b\u504f\u5dee\u200b\uff08MAD\uff09\uff1a\\(\\frac{1}{n}\\sum_{i=1}^n|e_i|\\)
- \u200b\u5747\u65b9\u200b\u8bef\u5dee\u200b\uff08MSE\uff09\uff1a\\(\\frac{1}{n}\\sum_{i=1}^ne_i^2\\)
- \u200b\u5e73\u5747\u200b\u7edd\u5bf9\u200b\u767e\u5206\u200b\u8bef\u5dee\u200b\uff08MAPE\uff09\uff1a\\(\\frac{1}{n}\\sum_{i=1}^n|e_i/D_i|\\times 100\\%\\)
"},{"location":"math/operations-mamagement/forecast/#_5","title":"\u5e73\u7a33\u200b\u5e8f\u5217\u200b\u7684\u200b\u9884\u6d4b","text":"\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\u662f\u200b\u8054\u5408\u200b\u6982\u7387\u5206\u5e03\u200b\u4e0d\u968f\u200b\u65f6\u95f4\u200b\u6539\u53d8\u200b\uff0c\u200b\u5f62\u200b\u5982\u200b\\(D_t=\\mu + \\epsilon_t\\)\u200b\u7684\u200b\u5e8f\u5217\u200b\u3002
\u200b\u5bf9\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5e38\u7528\u200b\u4e24\u79cd\u200b\u9884\u6d4b\u200b\u65b9\u6cd5\u200b\uff0c\u200b\u5373\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\u4e0e\u200b\u6307\u6570\u200b\u5e73\u6ed1\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_6","title":"\u79fb\u52a8\u200b\u5e73\u5747","text":"\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\uff0c\\(MA(N)\\)\uff1a
\\[ F_t = \\frac{1}{N}\\sum_{i=t-N}^{t-1}\\alpha_{i-t+N+1}D_i \\] \u200b\u5f53\u200b\\(\\alpha_i=1\\)\u200b\u65f6\u200b\uff0c\u200b\u79f0\u8be5\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\u4e3a\u200b\u7b80\u5355\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\uff0c\u200b\u5426\u5219\u200b\u4e3a\u200b\u52a0\u6743\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u7b80\u5355\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\uff0c\u200b\u6839\u636e\u200b\u524d\u200b\u4e00\u200b\u5468\u671f\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b\u548c\u200b\u65b0\u200b\u7684\u200b\u89c2\u6d4b\u200b\u503c\u200b\u53ef\u4ee5\u200b\u8ba1\u7b97\u200b\u4e0b\u200b\u4e00\u200b\u5468\u671f\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b\uff1a
\\[ \\begin{aligned} F_{t+1} &= \\frac{1}{N}\\sum_{i=t-N+1}^{t}D_i \\\\ &= \\frac{1}{N}\\sum_{i=t-N}^{t-1} - D_{t-N} + D_t \\\\ &= F_{t} + \\frac 1N \\left(D_t - D_{t-N}\\right) \\end{aligned} \\] \u200b\u5bf9\u4e8e\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\uff0c\u200b\u79fb\u52a8\u200b\u5e73\u5747\u200b\u7684\u200b\u9884\u6d4b\u200b\u901a\u5e38\u200b\u6ede\u540e\u200b\u4e8e\u200b\u8d8b\u52bf\u200b\u7684\u200b\u53d1\u5c55\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_7","title":"\u6307\u6570\u200b\u5e73\u6ed1","text":"\u200b\u5f53\u524d\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b\u7b49\u4e8e\u200b\u4e0a\u200b\u4e00\u6b21\u200b\u9884\u6d4b\u503c\u200b\u4e0e\u200b\u5f53\u524d\u200b\u9700\u6c42\u200b\u5b9e\u9645\u200b\u503c\u200b\u7684\u200b\u52a0\u6743\u200b\u5e73\u5747\u200b\uff0c\u200b\u5373\u200b\uff1a
\\[ \\begin{aligned} F_t &= \\alpha D_{t-1} + (1-\\alpha)F_{t-1} \\\\ &= F_{t-1} + \\alpha e_{t-1} \\end{aligned} \\] \u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u7406\u89e3\u200b\u4e3a\u200b\u5bf9\u200b\u4e0a\u200b\u4e00\u6b21\u200b\u9884\u6d4b\u200b\u7684\u200b\u504f\u5dee\u200b\u4f5c\u51fa\u200b\u7cfb\u6570\u200b\u4e3a\u200b\\(\\alpha\\)\u200b\u7684\u200b\u4fee\u6b63\u200b\u3002
\u200b\u5df2\u77e5\u200b\\(t=0\\)\u200b\u65f6\u200b\u5bf9\u200b\\(D_1\\)\u200b\u7684\u200b\u9884\u6d4b\u200b\u4e3a\u200b\\(F_1\\)\uff0c\u200b\u5219\u200b\uff1a
\\[ \\begin{aligned} F_2 &= \\alpha D_1 + (1-\\alpha) F_1 \\\\ F_3 &= \\alpha D_2 + (1-\\alpha) F_2 =\\alpha D_2 + (1-\\alpha)\\alpha D_1 + (1-\\alpha) ^ 2 F_1 \\\\ \\vdots \\\\ F_n &= \\sum_{i=1} ^{n-1} \\alpha(1-\\alpha)^{i-1}D_{n-i} + (1-\\alpha)^{n-1}F_1 \\end{aligned} \\]"},{"location":"math/operations-mamagement/forecast/#_8","title":"\u8d8b\u52bf\u200b\u5e8f\u5217","text":"\u200b\u5bf9\u200b\u8d8b\u52bf\u200b\u5e8f\u5217\u200b\u7684\u200b\u9884\u6d4b\u200b\u901a\u5e38\u200b\u4f7f\u7528\u200b\u56de\u5f52\u200b\u5206\u6790\u200b\uff0c\u200b\u5373\u200b\u5047\u8bbe\u200b\u89c2\u6d4b\u200b\u53d8\u91cf\u200b\u4e0e\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b\u95f4\u200b\u5b58\u5728\u200b\u51fd\u6570\u200b\u5173\u7cfb\u200b\uff0c\u200b\u5219\u200b\u53ef\u4ee5\u200b\u6839\u636e\u200b\u89c2\u6d4b\u200b\u53d8\u91cf\u200b\u548c\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b\u7684\u200b\u89c2\u6d4b\u200b\u503c\u200b\u5bf9\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_9","title":"\u7ebf\u6027\u200b\u56de\u5f52","text":"\u200b\u5f53\u200b\u56de\u5f52\u200b\u4f7f\u7528\u200b\u5f62\u200b\u5982\u200b\\(\\hat Y=a+bX\\)\u200b\u7684\u200b\u7ebf\u6027\u200b\u51fd\u6570\u200b\u65f6\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u7ebf\u6027\u200b\u56de\u5f52\u200b\u3002\u200b\u7531\u6b64\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6700\u5c0f\u200b\u4e8c\u200b\u4e58\u6cd5\u200b\u8fdb\u884c\u200b\u62df\u5408\u200b\u3002
\u200b\u6700\u5c0f\u200b\u4e8c\u200b\u4e58\u6cd5\u200b\u4f7f\u5f97\u200b\\(\\sum|Y-\\hat Y|^2\\)\u200b\u6700\u5c0f\u200b\uff0c\u200b\u5373\u200b\u9884\u6d4b\u200b\u70b9\u200b\u548c\u200b\u89c2\u6d4b\u70b9\u200b\u7684\u200b\u8ddd\u79bb\u200b\u5e73\u65b9\u548c\u200b\u6700\u5c0f\u200b\u3002\u200b\u5047\u8bbe\u200b\u89c2\u6d4b\u200b\u53d8\u91cf\u200b\u4e3a\u200b\\(X_1, \\dots, X_m\\)\uff0c\u200b\u9884\u6d4b\u200b\u53d8\u91cf\u200b\u4e3a\u200b\\(y\\)\uff0c\u200b\u5171\u200b\\(n\\)\u200b\u7ec4\u200b\u6570\u636e\u200b\u70b9\u200b\uff0c\u200b\u5219\u200b\u7ebf\u6027\u200b\u56de\u5f52\u200b\u6a21\u578b\u200b\u4e3a\u200b\uff1a
\\[ \\hat y = X\\vec a \\] \u200b\u5176\u4e2d\u200b\\(\\vec a, , \\hat y\\)\u200b\u4e3a\u200b\\(m\\)\u200b\u7ef4\u5217\u200b\u5411\u91cf\u200b\uff0c\\(X\\)\u200b\u4e3a\u200b\\(n\\times m\\)\u200b\u77e9\u9635\u200b\u3002
\u200b\u5219\u200b\u6b8b\u5dee\u200b\u5e73\u65b9\u548c\u200b\u5373\u200b\u4e3a\u200b\\(f(a; X, y) = (y - \\hat y)^T(y - \\hat y)=(y - Xa)^T(y - Xa)\\)\u3002
\u200b\u5bf9\u200b\\(\\vec a, \\vec b\\)\u200b\u6c42\u5bfc\u200b\uff0c\u200b\u5f97\u200b\uff1a
\\[ \\frac{\\partial f}{\\partial \\vec a} = 0 \\] \\(\\frac{\\partial f}{\\partial \\vec a} = 0\\)\u200b\u5373\u200b\uff1a
\\[ \\begin{aligned} \\frac{\\partial f}{\\partial \\vec a} &= 2X^T(X\\vec a - y) \\\\ &= 2X^TX\\vec a + 2X^Ty \\\\ &= \\vec 0 \\end{aligned} \\] \u200b\u5f97\u200b\\(\\vec a = (X^TX)^{-1}X^Ty\\)
"},{"location":"math/operations-mamagement/forecast/#_10","title":"\u53cc\u91cd\u200b\u6307\u6570\u200b\u5e73\u6ed1","text":"\u200b\u53cc\u91cd\u200b\u6307\u6570\u200b\u5e73\u6ed1\u200b\u53ef\u4ee5\u200b\u7528\u4e8e\u200b\u9884\u6d4b\u200b\u5177\u6709\u200b\u7ebf\u6027\u200b\u8d8b\u52bf\u200b\u7684\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5176\u4e2d\u200b\u4f7f\u7528\u200b\u4e24\u4e2a\u200b\u5e73\u6ed1\u200b\u53c2\u6570\u200b\u5206\u522b\u200b\u9884\u6d4b\u200b\u5e8f\u5217\u200b\u503c\u200b\\(S_t\\)\u200b\u548c\u200b\u8d8b\u52bf\u200b\u503c\u200b\\(G_t\\)
- \u200b\u5e8f\u5217\u200b\u503c\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u66f2\u7ebf\u200b\u7684\u200b\u622a\u8ddd\u200b $$ S_t = \\alpha D_t + (1 - \\alpha)(S_{t-1} + G_{t-1}) $$
- \u200b\u8d8b\u52bf\u200b\u503c\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\u66f2\u7ebf\u200b\u7684\u200b\u659c\u7387\u200b $$ G_t = \\beta(S_t - S_{t-1})+(1-\\beta)G_{t-1} $$
- \u200b\u5728\u200b\\(t\\)\u200b\u65f6\u523b\u200b\u63d0\u524d\u200b\\(\\tau\\)\u200b\u6b65\u200b\u4f5c\u51fa\u200b\u7684\u200b\u9884\u6d4b\u200b\\(F_{t, t+\\tau} = S_t+\\tau G_t\\)
"},{"location":"math/operations-mamagement/forecast/#_11","title":"\u5b63\u8282\u6027\u200b\u5e8f\u5217","text":"\u200b\u5b63\u8282\u6027\u200b\u5e8f\u5217\u200b\u662f\u200b\u6bcf\u200b\\(N\\)\u200b\u4e2a\u200b\u5468\u671f\u200b\u91cd\u590d\u200b\u4e00\u6b21\u200b\u7684\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5176\u4e2d\u200b\\(N\\)\u200b\u88ab\u200b\u79f0\u4e3a\u200b\u5b63\u200b\u7684\u200b\u957f\u5ea6\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u5b63\u8282\u200b\u4e2d\u200b\u7684\u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\uff0c\u200b\u90fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\\(c_t\\)\uff0c\u200b\u6307\u200b\u5e73\u5747\u200b\u610f\u4e49\u200b\u4e0b\u200b\u7b2c\u200b\\(t\\)\u200b\u4e2a\u200b\u5468\u671f\u200b\u7684\u200b\u9700\u6c42\u200b\u4e0e\u200b\u6574\u4f53\u200b\u5e73\u5747\u200b\u9700\u6c42\u200b\u7684\u200b\u6bd4\u503c\u200b\uff0c\u200b\u6709\u200b\\(\\sum c_t = N\\)
- \u200b\u8ba1\u7b97\u200b\u6240\u6709\u200b\u6570\u636e\u200b\u7684\u200b\u6837\u672c\u5747\u503c\u200b
- \u200b\u5c06\u200b\u6bcf\u4e2a\u200b\u89c2\u6d4b\u200b\u503c\u200b\u9664\u4ee5\u200b\u6837\u672c\u5747\u503c\u200b\uff0c\u200b\u5373\u200b\u4e3a\u200b\u6bcf\u4e2a\u200b\u89c2\u6d4b\u200b\u5468\u671f\u200b\u7684\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b
- \u200b\u5c06\u200b\u6bcf\u5b63\u200b\u4e2d\u200b\u76f8\u540c\u200b\u5468\u671f\u200b\u7684\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\u53d6\u200b\u5747\u503c\u200b\uff0c\u200b\u5f97\u5230\u200b\\(N\\)\u200b\u4e2a\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b
\u200b\u5bf9\u4e8e\u200b\u540c\u65f6\u200b\u5177\u6709\u200b\u5b63\u8282\u6027\u200b\u6ce2\u52a8\u200b\u548c\u200b\u8d8b\u52bf\u200b\u7684\u200b\u5b63\u8282\u6027\u200b\u5e8f\u5217\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b\uff1a
- \u200b\u8ba1\u7b97\u200b\u5e8f\u5217\u200b\u7684\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b
- \u200b\u5c06\u200b\u89c2\u6d4b\u200b\u503c\u200b\u9664\u4ee5\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\uff0c\u200b\u5f97\u5230\u200b\u6d88\u9664\u200b\u5b63\u8282\u6027\u200b\u6ce2\u52a8\u200b\u7684\u200b\u5e8f\u5217\u200b
- \u200b\u7528\u200b\u8d8b\u52bf\u200b\u5e8f\u5217\u200b\u7684\u200b\u9884\u6d4b\u200b\u65b9\u6cd5\u200b\u8fdb\u884c\u200b\u9884\u6d4b\u200b
- \u200b\u9884\u6d4b\u200b\u7ed3\u679c\u200b\u4e58\u4ee5\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\uff0c\u200b\u5f97\u5230\u200b\u6700\u7ec8\u200b\u7684\u200b\u9884\u6d4b\u503c\u200b
\u200b\u7f3a\u70b9\u200b\uff1a\u200b\u5728\u200b\u83b7\u5f97\u200b\u65b0\u200b\u7684\u200b\u89c2\u6d4b\u200b\u503c\u540e\u200b\uff0c\u200b\u9700\u8981\u200b\u91cd\u65b0\u200b\u8ba1\u7b97\u200b\u6240\u6709\u200b\u7684\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#_12","title":"\u4e09\u91cd\u200b\u6307\u6570\u200b\u5e73\u6ed1","text":"\u200b\u5047\u8bbe\u200b\u9700\u6c42\u200b\u4e3a\u200b\\(D_t = (\\mu +G_t)c_t + \\epsilon_t\\)\uff08\u200b\u4e58\u79ef\u200b\u578b\u200b\uff09\u3002\u200b\u8be5\u200b\u5f62\u5f0f\u200b\u4f7f\u7528\u200b\u4e09\u4e2a\u200b\u6307\u6570\u200b\u5e73\u6ed1\u200b\u5bf9\u200b\u5e8f\u5217\u200b\uff08\u200b\u622a\u8ddd\u200b\uff09\u3001\u200b\u8d8b\u52bf\u200b\uff08\u200b\u659c\u7387\u200b\uff09\u200b\u548c\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\uff08\u200b\u5468\u671f\u200b\uff09\u200b\u5206\u522b\u200b\u8fdb\u884c\u200b\u62df\u5408\u200b\u3002
- \u200b\u5e8f\u5217\u200b\uff1a\\(S_t = \\alpha \\frac{D_t}{c_{t-N}} + (1-\\alpha) (S_{t-1} + G_{t-1})\\)\uff0c\\(c_{t-N}\\)\u200b\u7528\u4e8e\u200b\u6d88\u9664\u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002
- \u200b\u8d8b\u52bf\u200b\uff1a\\(G_t = \\beta(S_t - S_{t-1}) + (1-\\beta) G_{t-1}\\)
- \u200b\u5b63\u8282\u200b\u56e0\u5b50\u200b\uff1a\\(c_t = \\gamma\\frac{D_t}{S_t} + (1-\\gamma) c_{t-N}\\)
"},{"location":"math/operations-mamagement/forecast/#box-jenkinsarima","title":"Box-Jenkins\u200b\u6a21\u578b\u200b\uff1aARIMA","text":"ARIMA\u200b\u6a21\u578b\u200b\u662f\u200b\u5229\u7528\u200b\u65f6\u95f4\u200b\u5e8f\u5217\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u200b\u7ed3\u6784\u200b\uff1a
Auto Regressive Integrated Moving Average
\u200b\u6784\u5efa\u200b\u6b65\u9aa4\u200b\uff1a
- \u200b\u6570\u636e\u200b\u8f6c\u6362\u200b
- \u200b\u6a21\u578b\u200b\u8bc6\u522b\u200b
- \u200b\u53c2\u6570\u4f30\u8ba1\u200b
- \u200b\u9884\u6d4b\u200b
- \u200b\u8bc4\u4ef7\u200b
"},{"location":"math/operations-mamagement/forecast/#arp","title":"\u81ea\u200b\u56de\u5f52\u200b\u8fc7\u7a0b\u200b\uff1aAR(p)","text":"\u200b\u5bf9\u4e8e\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\uff1a
- \u200b\u95f4\u9694\u200b\u76f8\u540c\u200b\u7684\u200b\u4efb\u610f\u200b\u4e00\u7ec4\u200b\u9700\u6c42\u200b\u7684\u200b\u8054\u5408\u200b\u8fb9\u9645\u200b\u5206\u5e03\u200b\u76f8\u540c\u200b->\u200b\u534f\u65b9\u5dee\u200b\u76f8\u540c\u200b
- \u200b\u4efb\u610f\u200b\u4e24\u4e2a\u200b\u89c2\u6d4b\u200b\u7684\u200b\u534f\u65b9\u5dee\u200b\u4ec5\u200b\u53d6\u51b3\u4e8e\u200b\u76f8\u9694\u200b\u7684\u200b\u5468\u671f\u200b\u6570\u200b
\\[ \\mathrm{Cov}(D_{t+m}, D_{t+m+k}) = E(D_{t+m}D_{t+m+k}) - E(D_{t+m})E(D_{t+m+k}) \\] \u200b\u76f8\u5173\u7cfb\u6570\u200b\uff1a\u200b\u6ede\u540e\u200b\\(k\\)\u200b\u671f\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u7cfb\u6570\u200b
\\[ \\rho_k = \\frac{\\mathrm {Cov}(D_{t+m}, D_{t+m+k})}{\\sqrt{\\mathrm {Var}(D_{t+m})}\\sqrt{\\mathrm {Var}(D_{t+m+k})}} \\] \u200b\u6837\u672c\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u200b\u51fd\u6570\u200b\uff1a
\\[ r_k = \\frac{\\sum_{t=k+1} ^ n(D_t - \\overline D)(D_{t-k} - \\overline D)}{\\sum_{t=1} ^ n(D_t - \\overline D)^2} \\] \\[ D_t = a_0 + a_1D_{t-1} + \\dots + a_pD_{t-p} + \\epsilon_t \\] \\(p\\)\u200b\u4e3a\u200b\u81ea\u200b\u56de\u5f52\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u9636\u6570\u200b\uff0c\u200b\u4e00\u9636\u81ea\u200b\u56de\u5f52\u200b\u6a21\u578b\u200b\\(AR(1)\\)\uff1a
\\[ D_t = a_0 + a_1 D_{t-1} + \\epsilon_t \\] \u200b\u81ea\u200b\u76f8\u5173\u200b\u51fd\u6570\u200b\u4e3a\u200b\uff1a\\(\\rho_j = a_1^j\\)
\u200b\u5c06\u200b\u6837\u672c\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u200b\u51fd\u6570\u200b\u4e0e\u200b\u7406\u8bba\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u200b\u51fd\u6570\u200b\u8fdb\u884c\u200b\u6bd4\u8f83\u200b\uff0c\u200b\u5224\u65ad\u200bARIMA\u200b\u7684\u200b\u62df\u5408\u200b\u6548\u679c\u200b\u3002
"},{"location":"math/operations-mamagement/forecast/#maq","title":"\u79fb\u52a8\u200b\u5e73\u5747\u200b\u8fc7\u7a0b\u200b\uff1aMA(q)","text":"\\[ D_t = b_0 - b_1\\epsilon_{t-1} -\\dots - b_q\\epsilon{t-q} +\\epsilon_t \\] \\(AR(1)\\)\u200b\u8fc7\u7a0b\u200b\u672c\u8d28\u200b\u4e0a\u200b\u662f\u200b\\(MA(\\infty)\\)\u200b\u8fc7\u7a0b\u200b\u3002
\\(MA(1)\\)\u200b\u8fc7\u7a0b\u200b\uff1a\\(D_t = b_0 - b_1\\epsilon_{t-1} + \\epsilon_t\\)
\u200b\u5bf9\u5e94\u200b\u4e8e\u200b\\(AR(1)\\)\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u81ea\u200b\u76f8\u5173\u200b\u51fd\u6570\u200b\uff1a
\\[ \\left\\{\\begin{aligned} \\rho_1 &= \\frac{-b_1}{1+b_1^2} \\\\ \\rho_2 &= \\rho_3 = \\dots = 0 \\end{aligned}\\right. \\]"},{"location":"math/operations-mamagement/forecast/#arma","title":"ARMA\u200b\u6a21\u578b","text":"\\(ARMA(p, q)\\)\u200b\u6a21\u578b\u200b\u662f\u200b\\(AR(p)\\)\u200b\u6a21\u578b\u200b\u4e0e\u200b\\(MA(q)\\)\u200b\u6a21\u578b\u200b\u7684\u200b\u7ed3\u5408\u200b\uff0c\u200b\u5982\u200b\\(ARMA(1, 1)\\)\uff1a
\\[ D_t = c+a_1D_{t-1} - b_1\\epsilon_{t-1} + \\epsilon_t \\] \u200b\u5982\u679c\u200b\u5e8f\u5217\u200b\u4e0d\u662f\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\uff0c\u200b\u800c\u200b\u5b58\u5728\u200b\u8d8b\u52bf\u6027\u200b\u548c\u200b/\u200b\u6216\u200b\u5b63\u8282\u6027\u200b\uff0c\u200b\u9700\u8981\u200b\u5c06\u200b\u975e\u200b\u5e73\u7a33\u200b\u8fc7\u7a0b\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u5e73\u7a33\u200b\u8fc7\u7a0b\u200b\u3002
- \u200b\u5f53\u200b\\(D_t\\)\u200b\u5b58\u5728\u200b\u7ebf\u6027\u200b\u8d8b\u52bf\u200b\u65f6\u200b\uff0c\u200b\u4f7f\u7528\u200b\u5dee\u5206\u200b\u65b9\u6cd5\u200b\u6d88\u9664\u200b\u8d8b\u52bf\u6027\u200b\uff1a\\(U_t = D_t - D_{t-1}\\)\uff0c\\(U_t\\)\u200b\u662f\u200b\u5e73\u7a33\u200b\u5e8f\u5217\u200b\u3002
- \u200b\u5f53\u200b\\(D_t\\)\u200b\u5b58\u5728\u200b\u5b63\u8282\u6027\u200b\u8d8b\u52bf\u200b\u65f6\u200b\uff0c\u200b\u4f7f\u7528\u200b\u5dee\u5206\u200b\u65b9\u6cd5\u200b\u6d88\u9664\u200b\u8d8b\u52bf\u6027\u200b\uff1a\\(U_t = D_t - D_{t-N}\\)
- \u200b\u5bf9\u200b\\(U_t\\)\u200b\u8fdb\u884c\u200b\u52a0\u200b\u548c\u200b\uff0c\u200b\u5f97\u5230\u200b\u521d\u59cb\u200b\u7684\u200b\\(D_t\\)
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/","title":"\u786e\u5b9a\u200b\u9700\u6c42\u200b\u4e0b\u200b\u7684\u200b\u5e93\u5b58\u200b\u63a7\u5236","text":"\u200b\u5728\u200b\u6301\u6709\u200b\u6210\u672c\u200b\u4e0e\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u4e4b\u95f4\u200b\u5e73\u8861\u200b\u2014\u2014\u200b\u5355\u6b21\u200b\u8ba2\u8d27\u91cf\u200b\\(\\bsQ\\)
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#eoq","title":"EOQ\u200b\u6a21\u578b","text":""},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_2","title":"\u8bb0\u53f7","text":" - \u200b\u9700\u6c42\u200b\u7387\u200b\\(\\lambda\\)\uff0c\u200b\u5468\u671f\u200b\u957f\u5ea6\u200b\\(T\\)
- \u200b\u6210\u672c\u200b\uff1a\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(K\\)\u3001\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(c\\)\u3001\u200b\u8fb9\u9645\u200b\u6301\u6709\u200b\u6210\u672c\u200b\\(h\\)
\u200b\u8fb9\u9645\u200b\u6301\u6709\u200b\u6210\u672c\u200b\\(h\\)\u200b\u901a\u5e38\u200b\u4ee5\u200b\u5229\u7387\u200b\\(I\\)\u200b\u7684\u200b\u5f62\u5f0f\u200b\u8868\u793a\u200b\uff0c\u200b\u6b64\u65f6\u200b\u6709\u200b\\(h = Ic\\)
- \u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u200b\\(\\tau = 0\\)
- \u200b\u4e0d\u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_3","title":"\u63a8\u5bfc","text":"\u200b\u8003\u8651\u200b\u4e00\u4e2a\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\uff0c\u200b\u7531\u4e8e\u200b\u4e0d\u200b\u8003\u8651\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u91cf\u200b\uff0c\u200b\u8ba2\u8d27\u200b\u540e\u200b\u4ea7\u54c1\u200b\u4f1a\u200b\u7acb\u5373\u200b\u5230\u8fbe\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e3a\u200b\u964d\u4f4e\u200b\u6301\u6709\u200b\u6210\u672c\u200b\uff0c\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u200b\u65b9\u5f0f\u200b\u4e3a\u200b\u5e93\u5b58\u200b\u4e3a\u200b\u96f6\u65f6\u200b\u91cd\u65b0\u200b\u8ba2\u8d27\u200b\u3002\u200b\u56e0\u6b64\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\u6ee1\u8db3\u200b\\(Q = \\lambda T\\)\u3002\u200b\u4e00\u4e2a\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\u4e2d\u200b\u7684\u200b\u6210\u672c\u200b\u4e3a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u548c\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u4e4b\u200b\u548c\u200b\uff0c\u200b\u5373\u200b\\(C = K + cQ + hQT/2\\)\u3002
\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u7684\u200b\u6210\u672c\u200b
\\[ C(Q) = \\frac{C}{T} = \\frac{K\\lambda}{Q} + \\lambda c + \\frac{hQ}{2} \\] \u200b\u5bf9\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u6210\u672c\u200b\u6c42\u5bfc\u200b\uff0c\u200b\u5f97\u5230\u200b
\\[ C'(Q) = \\frac{h}{2} - \\frac{K\\lambda}{Q^2} \\] \u200b\u5f53\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u6210\u672c\u200b\u6700\u200b\u5c0f\u65f6\u200b\uff0c\\(C'(Q^\\ast) = 0\\)\uff0c\u200b\u89e3\u5f97\u200b
\\[ Q^\\ast = \\sqrt{\\frac{2K\\lambda}{h}} \\] \u200b\u4e0e\u200b\u6b64\u5bf9\u5e94\u200b\u7684\u200b\u6700\u5c0f\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ C(Q^\\ast) = \\frac{K\\lambda}{Q^\\ast} + \\lambda c + \\frac{hQ^\\ast}{2} = \\lambda c + \\sqrt{2K\\lambda h} \\]"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_4","title":"\u6a21\u578b\u200b\u6269\u5145","text":""},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_5","title":"\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f","text":"\u200b\u8bbe\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u4e3a\u200b\\(\\tau > 0\\)\uff0c\u200b\u9996\u5148\u200b\u8003\u8651\u200b\\(\\tau \\leq T\\)\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u7531\u4e8e\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b\uff0c\u200b\u5728\u200b\u5e93\u5b58\u200b\u63d0\u524d\u200b\u671f\u5185\u200b\u7684\u200b\u6700\u4f4e\u200b\u5e93\u5b58\u200b\u5e94\u5f53\u200b\u4e3a\u200b\u96f6\u200b\uff0c\u200b\u5373\u200b\\(R = \\lambda\\tau\\)\u200b\u65f6\u200b\u5e94\u5f53\u200b\u91cd\u65b0\u200b\u8ba2\u8d27\u200b\uff0c\\(R\\)\u200b\u79f0\u4e3a\u200b\u91cd\u200b\u8ba2\u8d27\u200b\u70b9\u200b\u3002
\u200b\u5f53\u200b\\(\\tau > T\\)\u200b\u65f6\u200b\uff0c\u200b\u7531\u4e8e\u200b\u6a21\u578b\u200b\u9762\u5bf9\u200b\u5468\u671f\u6027\u200b\u7684\u200b\u9700\u6c42\u200b\uff0c\u200b\u53ea\u200b\u9700\u200b\u6839\u636e\u200b\u63d0\u524d\u200b\u671f\u200b\\(\\tau' = \\tau\\mod T\\)\u200b\u8ba1\u7b97\u200b\u91cd\u200b\u8ba2\u8d27\u200b\u70b9\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_6","title":"\u654f\u611f\u6027\u200b\u5206\u6790","text":"\u200b\u654f\u611f\u6027\u200b\u5206\u6790\u200b\u6307\u200b\\(Q^*\\)\u200b\u7684\u200b\u4f30\u8ba1\u200b\u504f\u5dee\u200b\u5bf9\u200b\u603b\u6210\u672c\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002\u200b\u504f\u5dee\u200b\u4ee5\u200b\\(C(Q) / C(Q^\\ast)\\)\u200b\u8861\u91cf\u200b\uff0c\u200b\u4e3a\u200b\u4fbf\u4e8e\u200b\u5206\u6790\u200b\uff0c\u200b\u8bbe\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(c = 0\\)\uff0c\u200b\u5219\u200b\u603b\u6210\u672c\u200b\u7684\u200b\u504f\u5dee\u200b\u91cf\u200b\\(C(Q) / C(Q^\\ast)\\)\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} \\frac{C(Q)}{C(Q^\\ast)} &= \\frac{\\frac{K\\lambda}{Q} + \\frac{hQ}{2}}{\\sqrt{2K\\lambda h}} \\\\ &= \\sqrt{\\frac{K\\lambda}{2h}}\\frac{1}{Q} + \\sqrt{\\frac{h}{2K\\lambda}}Q \\\\ &= \\frac{1}{2}\\left(\\frac{Q}{Q^\\ast} + \\frac{Q^\\ast}{Q}\\right) \\end{aligned} \\]"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_7","title":"\u5141\u8bb8\u200b\u7f3a\u8d27","text":"\u200b\u5f53\u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b\u65f6\u200b\uff0c\u200b\u8bbe\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\u4e3a\u200b\\(p\\)\uff0c\u200b\u6700\u5927\u200b\u7f3a\u8d27\u91cf\u200b\\(xQ\\)\uff0c\u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u5185\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u53d8\u5316\u200b\u5982\u4e0b\u200b\u56fe\u200b\u6240\u793a\u200b\uff1a
\u200b\u6210\u672c\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ C(Q, x) = \\frac{C}{T} = \\frac{(1-x)^2 Qh + x^2Qp}{2} + \\frac{K\\lambda}{Q} + \\lambda c \\] \u200b\u5206\u522b\u200b\u6c42\u200b\\(C\\)\u200b\u5173\u4e8e\u200b\\(Q, x\\)\u200b\u7684\u200b\u504f\u200b\u5bfc\u6570\u200b\uff0c\u200b\u6709\u200b
\\[ \\begin{aligned} \\frac{\\partial C}{\\partial Q} &= \\frac{(1-x)^2h + x^2p}{2} - \\frac{K\\lambda}{Q^2} \\\\ \\frac{\\partial C}{\\partial x} &= xpQ + (x-1)hQ \\end{aligned} \\] \u200b\u89e3\u65b9\u7a0b\u200b\\(\\partial C/\\partial x =0\\)\u200b\u5f97\u5230\u200b\\(x^* = h/(h+p)\\)\uff0c\u200b\u4ee3\u5165\u200b\u65b9\u7a0b\u200b\\(\\partial C/\\partial Q =0\\)\uff0c\u200b\u89e3\u5f97\u200b\uff1a
\\[ Q^* = \\sqrt{\\frac{2K\\lambda}{(1-x)^2h+x^2p}} = \\sqrt{\\frac{2K\\lambda(h+p)}{hp}} \\] \u200b\u82e5\u200b\u5b9a\u4e49\u200b\\(h' = hp/(h+p)\\)\u3002\u200b\u5219\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bEOQ\u200b\u7684\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u5373\u200b\\(\\sqrt{\\frac{2K\\lambda}{h'}}\\)
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_8","title":"\u6709\u9650\u200b\u751f\u4ea7\u7387\u200b\u6a21\u578b","text":"\u200b\u5728\u200b\u6709\u9650\u200b\u751f\u4ea7\u7387\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u4ea7\u54c1\u200b\u901a\u8fc7\u200b\u751f\u4ea7\u200b\u800c\u200b\u4e0d\u662f\u200b\u8ba2\u8d2d\u200b\u83b7\u5f97\u200b\u3002\u200b\u4ea7\u54c1\u200b\u7684\u200b\u751f\u4ea7\u7387\u200b\u4e3a\u200b\\(P > \\lambda\\)\uff0c\u200b\u751f\u4ea7\u7ebf\u200b\u7684\u200b\u542f\u52a8\u200b\u6210\u672c\u200b\u4e3a\u200b\\(K\\)\uff0c\u200b\u4ea7\u54c1\u200b\u7684\u200b\u5355\u4f4d\u200b\u751f\u4ea7\u6210\u672c\u200b\u4e3a\u200b\\(c\\)\u3002
\u200b\u751f\u4ea7\u6210\u672c\u200b\uff08\u200b\u539f\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\uff09\u200b\u90e8\u5206\u200b\u7684\u200b\u5904\u7406\u200b\u4e0e\u200bEOQ\u200b\u6a21\u578b\u200b\u76f8\u540c\u200b\u3002\u200b\u4f46\u200b\u6709\u9650\u200b\u751f\u4ea7\u7387\u200b\u6a21\u578b\u200b\u7684\u200b\u5e73\u5747\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u4e0e\u200bEOQ\u200b\u6a21\u578b\u200b\u4e0d\u540c\u200b\u3002
- \u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u4e2d\u200bEOQ\u200b\u6a21\u578b\u200b\u7684\u200b\u5e73\u5747\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\uff1a\\(Q/2\\)
- \u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u4e2d\u200b\u6709\u9650\u200b\u751f\u4ea7\u7387\u200b\u6a21\u578b\u200b\u7684\u200b\u5e73\u5747\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\uff1a\\(Q(P-\\lambda)/2P\\)
\u200b\u56e0\u6b64\u200b\u6709\u9650\u200b\u751f\u4ea7\u7387\u200b\u6a21\u578b\u200b\u7684\u200b\u6210\u672c\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ C(Q) = \\frac{C}{T} = \\frac{K\\lambda}{Q} + \\frac{hQ(P-\\lambda)}{2P} + \\lambda c \\] \u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\u4e3a\u200b
\\[ Q^\\ast = \\sqrt{\\frac{2PK\\lambda}{h(P-\\lambda)}} \\] \u200b\u82e5\u200b\u5b9a\u4e49\u200b\\(h' = (P-\\lambda) / P\\)\uff0c\u200b\u5219\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u7c7b\u4f3c\u200b\u4e8e\u200bEOQ\u200b\u7684\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u5373\u200b\\(\\sqrt{\\frac{2K\\lambda}{h'}}\\)
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_9","title":"\u6570\u91cf\u200b\u6298\u6263\u200b\u6a21\u578b","text":"\u200b\u5728\u200b\u6570\u91cf\u200b\u6298\u6263\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u5f53\u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\u7684\u200b\u8ba2\u8d27\u91cf\u200b\u8fbe\u5230\u200b\u4e00\u5b9a\u200b\u6c34\u5e73\u200b\u65f6\u200b\uff0c\u200b\u4f1a\u200b\u83b7\u5f97\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u7684\u200b\u6298\u6263\u200b\uff0c\u200b\u6298\u6263\u200b\u5206\u4e3a\u200b\u4e24\u79cd\u200b\u7c7b\u578b\u200b\uff0c\u200b\u5373\u200b\u5168\u91cf\u200b\u6298\u6263\u200b\u4e0e\u200b\u589e\u91cf\u200b\u6298\u6263\u200b\u3002
- \u200b\u5168\u91cf\u200b\u6298\u6263\u200b\u6307\u5f53\u200b\u8ba2\u8d2d\u200b\u91cf\u200b\u8d85\u8fc7\u200b\u4e34\u754c\u503c\u200b\u65f6\u200b\uff0c\u200b\u5c06\u200b\u6298\u6263\u200b\u5e94\u7528\u200b\u4e8e\u200b\u5168\u90e8\u200b\u7684\u200b\u8ba2\u8d2d\u200b\u6570\u91cf\u200b\u4e0a\u200b\u3002
- \u200b\u589e\u91cf\u200b\u6298\u6263\u200b\u6307\u5f53\u200b\u8ba2\u8d2d\u200b\u91cf\u200b\u8d85\u8fc7\u200b\u4e34\u754c\u503c\u200b\u65f6\u200b\uff0c\u200b\u5c06\u200b\u6298\u6263\u200b\u5e94\u7528\u200b\u4e8e\u200b\u8d85\u8fc7\u200b\u4e34\u754c\u503c\u200b\u7684\u200b\u90e8\u5206\u200b\u4e0a\u200b\u3002
\u200b\u6570\u91cf\u200b\u6298\u6263\u200b\u6a21\u578b\u200b\u9488\u5bf9\u200b\u7684\u200b\u662f\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u7684\u200b\u6539\u53d8\u200b\uff0c\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u7684\u200b\u6539\u53d8\u200b\u4e0d\u4f1a\u200b\u5f71\u54cd\u200bEOQ\u200b\u6a21\u578b\u200b\u7684\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\u3002
\u200b\u901a\u8fc7\u200b\u6570\u91cf\u200b\u6298\u6263\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u8bf1\u5bfc\u200b\u96f6\u552e\u5546\u200b\u63d0\u9ad8\u200b\u8ba2\u8d27\u200b\u6279\u91cf\u200b\uff0c\u200b\u4ece\u800c\u200b\u5b9e\u73b0\u200b\u8d85\u91cf\u200b\u5e93\u5b58\u200b\u7684\u200b\u8f6c\u79fb\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_10","title":"\u5168\u91cf\u200b\u6298\u6263\u200b\u7684\u200b\u6c42\u89e3\u200b\u8fc7\u7a0b","text":"\u200b\u6839\u636e\u200bEOQ\u200b\u6a21\u578b\u200b\u8ba1\u7b97\u200b\u51fa\u200b\u6bcf\u200b\u4e00\u4e2a\u200b\u6298\u6263\u200b\u4ef7\u683c\u200b\\(h_i\\)\u200b\u4e0b\u200b\u5bf9\u5e94\u200b\u7684\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\\(Q^*_i\\)\uff0c\u200b\u786e\u5b9a\u200b\u6700\u5927\u200b\u53ef\u884c\u200b\u7684\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\\(Q^\\ast = \\max Q^\\ast_i\\)\u3002\u200b\u53d6\u8be5\u200b\u6298\u6263\u200b\u70b9\u200b\u4ee5\u53ca\u200b\u9ad8\u4e8e\u200b\u8be5\u200b\u6298\u6263\u200b\u70b9\u200b\u7684\u200b\u6240\u6709\u200b\u6298\u6263\u200b\u70b9\u4e3a\u200b\u5019\u9009\u200b\uff0c\u200b\u5373\u200b\\(I = \\{i | i\\geq \\arg\\max_i Q^\\ast_i\\}\\)\u3002\u200b\u5206\u522b\u200b\u6bd4\u8f83\u200b\u6bcf\u4e2a\u200b\u6298\u6263\u200b\u70b9\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5e73\u5747\u200b\u6210\u672c\u200b\uff0c\u200b\u6210\u672c\u200b\u6700\u4f4e\u200b\u7684\u200b\\(Q\\)\u200b\u5373\u200b\u4e3a\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u200b\u6279\u91cf\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_11","title":"\u589e\u91cf\u200b\u6298\u6263\u200b\u7684\u200b\u6c42\u89e3\u200b\u8fc7\u7a0b","text":"\u200b\u6839\u636e\u200bEOQ\u200b\u6a21\u578b\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u51fa\u200b\u6240\u6709\u200b\u6210\u672c\u200b\u66f2\u7ebf\u200b\u6700\u4f4e\u70b9\u200b\u5bf9\u5e94\u200b\u7684\u200b\\(Q\\)\u200b\u503c\u200b\uff0c\u200b\u5e76\u200b\u7b5b\u9009\u200b\u51fa\u200b\u6ee1\u8db3\u200b\u589e\u91cf\u200b\u6298\u6263\u200b\u7ea6\u675f\u200b\u7684\u200b\u8ba2\u8d27\u91cf\u200b\uff0c\u200b\u5e73\u5747\u200b\u6210\u672c\u200b\u6700\u4f4e\u200b\u7684\u200b\\(Q\\)\u200b\u5373\u200b\u4e3a\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u200b\u6279\u91cf\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_12","title":"\u77ed\u671f\u200b\u6298\u6263","text":"\u200b\u77ed\u671f\u200b\u6298\u6263\u200b\u5373\u200b\u751f\u4ea7\u5546\u200b\u53ea\u200b\u5728\u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u4e2d\u200b\u63d0\u4f9b\u200b\u6298\u6263\u200b\u3002\u200b\u4e3a\u200b\u7b80\u5316\u200b\u5904\u7406\u200b\uff0c\u200b\u6298\u6263\u200b\u65f6\u200b\u96f6\u552e\u5546\u200b\u7684\u200b\u8d2d\u4e70\u91cf\u200b\\(Q_d\\)\u200b\u4e3a\u200bEOQ\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\\(Q^*\\)\u200b\u7684\u200b\u6574\u6570\u200b\\(k\\)\u200b\u500d\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#eoq_1","title":"\u8d44\u6e90\u200b\u7ea6\u675f\u200b\u4e0b\u200b\u7684\u200bEOQ\u200b\u6a21\u578b","text":"EOQ\u200b\u6a21\u578b\u200b\u4ec5\u200b\u9002\u7528\u200b\u4e8e\u200b\u4e00\u79cd\u200b\u4ea7\u54c1\u200b\u7684\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u200b\u60c5\u5f62\u200b\uff0c\u200b\u65e0\u6cd5\u200b\u5904\u7406\u200b\u591a\u79cd\u4ea7\u54c1\u200b\u9700\u8981\u200b\u534f\u8c03\u200b\u8ba2\u8d2d\u200b\u7684\u200b\u95ee\u9898\u200b\u3002\u200b\u5728\u200b\u591a\u79cd\u4ea7\u54c1\u200b\u7684\u200b\u8ba2\u8d2d\u200b\u573a\u666f\u200b\u4e0b\u200b\uff0c\u200b\u4e0d\u540c\u200b\u7684\u200b\u4ea7\u54c1\u200b\u6709\u200b\u4e0d\u540c\u200b\u7684\u200b\u9700\u6c42\u200b\u7387\u200b\uff0c\u200b\u9700\u8981\u200b\u5728\u200b\u4e0d\u540c\u200b\u4ea7\u54c1\u200b\u7684\u200bEOQ\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u91cf\u200b\u8fdb\u884c\u200b\u5e73\u8861\u200b\u3002
\u200b\u6a21\u578b\u200b\u5047\u8bbe\u200b\uff1a\u200b\u90e8\u5206\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u4e0e\u200b\u4ea7\u54c1\u79cd\u7c7b\u200b\u6709\u5173\u200b\u2014\u2014\\(K_i\\)\uff0c\u200b\u90e8\u5206\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u4e0e\u200b\u4ea7\u54c1\u79cd\u7c7b\u200b\u65e0\u5173\u200b\u2014\u2014\\(K\\)\u3002
\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u5206\u4e3a\u200b\u8d44\u91d1\u200b\u7ea6\u675f\u200b\u4e0e\u200b\u5e93\u5b58\u200b\u7a7a\u95f4\u200b\u7ea6\u675f\u200b\u3002\u200b\u5982\u200b
\\[ \\left\\{ \\begin{aligned} C&\\geq \\sum_{i=1}^n c_iQ_i \\\\ Q_i^{\\mathrm{EOQ}} &= \\sqrt{\\frac{2K_i\\lambda_i}{h_i}} \\end{aligned} \\right. \\] \u200b\u5bf9\u4e8e\u200b\u7d27\u200b\u7ea6\u675f\u200b\u7684\u200b\u60c5\u51b5\u200b\uff0c\u200b\u5c06\u200b\u7ea6\u675f\u200b\u5199\u4f5c\u200b\\(\\sum_{i=1}^n c_iQ_i = C\\)\uff0c\u200b\u5f15\u5165\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u7b97\u5b50\u200b\\(\\theta\\)\uff0c\u200b\u5c06\u200b\u6b8b\u5dee\u200b\u9879\u200b\u4e0e\u200b\u4e58\u200b\u5b50\u9879\u200b\u76f8\u52a0\u200b\uff0c\u200b\u5f97\u5230\u200b\u62c9\u683c\u6717\u200b\u65e5\u200b\u4f18\u5316\u200b\u7684\u200b\u76ee\u6807\u200b\u51fd\u6570\u200b\\(C(Q_1, \\cdots, Q_n, \\theta)\\)
\\[ \\min C(Q_1, \\cdots, Q_n, \\theta) = \\sum_{i=1}^n \\left(\\frac{h_iQ_i}{2} + \\frac{K_i\\lambda_i}{Q_i}\\right) + \\theta\\left(\\sum_{i=1}^n c_iQ_i - C\\right) \\] \u200b\u6700\u4f18\u200b\u6761\u4ef6\u200b\u4e0b\u200b\uff0c\u200b\u6709\u200b\\(\\partial C/\\partial \\theta = \\partial C/\\partial Q_i = 0\\)\uff0c\u200b\u5373\u200b
\\[ \\begin{aligned} \\sum_{i=1}^n c_iQ_i^* - C &= 0 \\\\ \\frac{h_i}{2} - \\frac{K_i\\lambda_i}{ {Q_i^*}^2} + \\theta c_i &= 0 \\end{aligned} \\] \u200b\u89e3\u5f97\u200b\\(Q_i^*\\)\uff0c\u200b\u4ee3\u5165\u200b\u7ea6\u675f\u6761\u4ef6\u200b\u5373\u53ef\u200b\u89e3\u5f97\u200b\u6700\u4f18\u200b\u7684\u200b\\(\\theta\\)
\\[ \\sum_{i=q}^n c_i\\sqrt{\\frac{2K_i\\lambda_i}{h_i + 2\\theta c_i}} = C \\] \u200b\u4e0d\u59a8\u200b\u8bbe\u200b\\(h_i / c_i = I, \\forall i=1, \\cdots, n\\)\u3002\u200b\u5219\u200b\\(Q_i^* = \\sqrt{\\frac{2K_i\\lambda_i}{h_i}}\\sqrt{\\frac{1}{1 + 2\\theta / I}}\\)\uff0c\u200b\u6ce8\u610f\u200b\u5230\u200b\\(Q_{i}^{\\mathrm{EOQ}} = \\sqrt{\\frac{2K_i\\lambda_i}{h_i}}\\)\uff0c\u200b\u5219\u200b
\\[ \\left\\{ \\begin{aligned} Q_i^* &= \\sqrt{\\frac{1}{1 + 2\\theta / I}}Q_{i}^{\\mathrm{EOQ}} \\\\ C &= \\sum_{i=1}^n c_iQ_i^* \\end{aligned} \\right. \\] \u200b\u89e3\u5f97\u200b
\\[ \\theta = \\frac{\\sum_{i=1}^n \\left(c_iQ_i^{\\mathrm{EOQ}}\\right) - c}{2c / I} \\]"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#eoq_2","title":"\u591a\u200b\u4ea7\u54c1\u200bEOQ\u200b\u6a21\u578b","text":"\u200b\u5728\u200b\u591a\u200b\u4ea7\u54c1\u200bEOQ\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u9700\u8981\u200b\u9762\u5bf9\u200b\\(U = \\{1, \\cdots, n\\}\\)\u200b\u4e2a\u200b\u4ea7\u54c1\u200b\u7684\u200b\u9700\u6c42\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u4ea7\u54c1\u200b\\(i\\)\u200b\u6709\u200b\u5982\u4e0b\u200b\u7684\u200b\u53c2\u6570\u200b\uff1a
- \u200b\u9644\u52a0\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(K_i\\)\u3001\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(c_i\\)
- \u200b\u4ee5\u200b\u5229\u7387\u200b\u5f62\u5f0f\u200b\u8868\u793a\u200b\u7684\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\\(h_i = I_ic_i\\)
- \u200b\u9700\u6c42\u200b\u7387\u200b\\(\\lambda_i\\)
- \u200b\u4e0d\u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b
\u200b\u5411\u200b\u91cf\u5316\u200b\u8868\u793a\u200b\u7684\u200b\u5404\u4e2a\u200b\u53c2\u6570\u200b\u5206\u522b\u200b\u4e3a\u200b\\(\\boldsymbol{K}, \\boldsymbol{c}, \\boldsymbol{h}, \\boldsymbol{I}, \\boldsymbol{\\lambda}\\)\u3002\u200b\u53e6\u5916\u200b\uff0c\u200b\u6709\u200b\u5168\u5c40\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(K\\)\u3002\u200b\u5728\u200b\u591a\u200b\u4ea7\u54c1\u200bEOQ\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u5047\u8bbe\u200b\u67d0\u6b21\u200b\u7684\u200b\u8ba2\u8d27\u91cf\u200b\u4e3a\u200b\\(\\boldsymbol Q = (Q_i)_{n}\\)\uff0c\u200b\u5219\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ \\begin{aligned} G(\\boldsymbol Q) =& K + \\sum_{i=1}^n K_i\\boldsymbol{1}_{\\{Q_i > 0\\}} & \\text{Setup cost} \\\\ &+\\sum_{i=1}^n c_iQ_i & \\text{Marginal cost} \\end{aligned} \\] \u200b\u73b0\u6709\u200b\u4e09\u79cd\u200b\u8ba2\u8d27\u200b\u65b9\u6cd5\u200b
- \u200b\u72ec\u7acb\u200b\u8ba2\u8d27\u200b\u2014\u2014\u200b\u6bcf\u6b21\u200b\u8ba2\u8d2d\u200b\u90fd\u200b\u9700\u8981\u200b\u591a\u200b\u82b1\u8d39\u200b\\(K\\)\u200b\u7684\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b
- \u200b\u5b8c\u6574\u200b\u8ba2\u8d27\u200b\u2014\u2014\u200b\u5bf9\u4e8e\u200b\u9700\u6c42\u200b\u7387\u4e0d\u9ad8\u200b\u7684\u200b\u4ea7\u54c1\u200b\uff0c\u200b\u8ba2\u8d27\u200b\u8fc7\u4e8e\u200b\u9891\u7e41\u200b\u5bfc\u81f4\u200b\u989d\u5916\u200b\u82b1\u8d39\u200b\u4e86\u200b\\(K_i\\)\u200b\u7684\u200b\u9644\u52a0\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b
- \u200b\u8054\u5408\u200b\u8ba2\u8d27\u200b\uff1a\u200b\u4e0d\u200b\u9700\u8981\u200b\u8ba2\u8d2d\u200b\u6240\u6709\u200b\u7c7b\u578b\u200b\u7684\u200b\u4ea7\u54c1\u200b
\u200b\u4ee5\u4e0b\u200b\u5bf9\u200b\u4e09\u79cd\u200b\u8ba2\u8d27\u200b\u65b9\u6cd5\u200b\u8fdb\u884c\u200b\u8ba8\u8bba\u200b
"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_13","title":"\u72ec\u7acb\u200b\u8ba2\u8d27","text":"\u200b\u72ec\u7acb\u200b\u8ba2\u8d27\u200b\u4e0b\u200b\uff0c\u200b\u6bcf\u79cd\u200b\u4ea7\u54c1\u200b\u6309\u200b\u5176\u200b\u5bf9\u5e94\u200b\u7684\u200bEOQ\u200b\u8ba2\u8d27\u91cf\u200b\u8fdb\u884c\u200b\u8ba2\u8d27\u200b\uff0c\u200b\u5219\u200b\u5e73\u5747\u200b\u6210\u672c\u200b
\\[ G^* = \\sum_{i=1}^nG_i^* = \\sum_{i=1}^n\\sqrt{2{K + K_i}\\lambda_i h_i} \\]"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_14","title":"\u5b8c\u6574\u200b\u8ba2\u8d27","text":"\u200b\u5b8c\u6574\u200b\u8ba2\u8d27\u200b\u4e0b\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\u5185\u200b\u90fd\u200b\u9700\u8981\u200b\u8ba2\u8d2d\u200b\u6240\u6709\u200b\u4ea7\u54c1\u200b\uff0c\u200b\u8bbe\u200b\u8ba2\u8d27\u91cf\u200b\u4e3a\u200b\\(\\boldsymbol{Q} = T\\boldsymbol\\lambda\\)\uff0c\u200b\u7c7b\u6bd4\u200b\u4e8e\u200bEOQ\u200b\u6a21\u578b\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5f97\u5230\u200b\u603b\u6210\u672c\u200b\u4e3a\u200b
\\[ G(Q) = \\frac{K + \\sum_{i} K_i}{T} + \\boldsymbol{c}^\\top\\boldsymbol{\\lambda} + \\frac{T\\boldsymbol{h}^\\top\\boldsymbol \\lambda}{2} \\] \u200b\u8f6c\u5316\u200b\u4e3a\u5355\u200b\u4ea7\u54c1\u200bEOQ\u200b\u95ee\u9898\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u4e3a\u200b
\\[ \\begin{aligned} T^* &= \\sqrt{\\frac{2\\left(K + \\sum_{i} K_i\\right)}{\\boldsymbol{h}^\\top \\boldsymbol{\\lambda}}} \\\\ G^* &= \\sqrt{2\\left(K + \\sum_{i} K_i\\right)\\boldsymbol{h}^\\top \\boldsymbol{\\lambda}} \\\\ \\end{aligned} \\]"},{"location":"math/operations-mamagement/inventory-control-deterministic-demand/#_15","title":"\u8054\u5408\u200b\u8ba2\u8d27","text":"\u200b\u8054\u5408\u200b\u8ba2\u8d27\u200b\u6761\u4ef6\u200b\u4e0b\u200b\uff0c\u200b\u6bcf\u6b21\u200b\u8ba2\u8d27\u200b\u4e0d\u9700\u200b\u5305\u542b\u200b\u6240\u6709\u200b\u7c7b\u578b\u200b\u7684\u200b\u4ea7\u54c1\u200b\uff0c\u200b\u4f46\u200b\u9700\u6c42\u91cf\u200b\u6700\u9ad8\u200b\u7684\u200b\u4ea7\u54c1\u200b\u5fc5\u7136\u200b\u5728\u200b\u6bcf\u4e2a\u200b\u8ba2\u5355\u200b\u4e2d\u200b\u90fd\u200b\u51fa\u73b0\u200b\uff0c\u200b\u56e0\u6b64\u200b\uff0c\u200b\u9996\u5148\u200b\u8003\u8651\u200bEOQ\u200b\u6a21\u578b\u200b\u4e0b\u200b\u4ea7\u54c1\u200b\u7684\u200b\u8ba2\u8d27\u200b\u9891\u7387\u200b\uff1a
\\[ n_i = \\frac{1}{T_i} = \\sqrt{\\frac{h_i\\lambda_i}{(K + K_i)}} \\] \u200b\u4ee5\u200b\u8ba2\u8d27\u200b\u6700\u200b\u9891\u7e41\u200b\u7684\u200b\u4ea7\u54c1\u200b\\(i^\\ast = \\arg\\max\\limits_{i} n_i\\)\u200b\u5bf9\u5e94\u200b\u7684\u200b\u8ba2\u8d27\u200b\u9891\u7387\u200b\\(\\bar n = n_{i^\\ast}\\)\u3001\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\\(\\bar T = T_{i^\\ast}\\)\u200b\u4e3a\u200b\u57fa\u51c6\u200b\uff0c\u200b\u8003\u8651\u200b\u5176\u4ed6\u200b\u7c7b\u578b\u200b\u4ea7\u54c1\u200b\u7684\u200b\u8ba2\u8d27\u200b\u9891\u7387\u200b\uff1a
\\[ m_i = \\left\\lceil\\frac{\\bar n}{n_i}\\right\\rceil \\] \\(m_i\\)\u200b\u8868\u793a\u200b\u4ea7\u54c1\u200b\\(i\\)\u200b\u7684\u200b\u8ba2\u8d2d\u200b\u5468\u671f\u200b\u4e3a\u200b\\(m_i\\bar T_i\\)\uff0c\u200b\u5373\u200b\u6700\u200b\u9891\u7e41\u200b\u8ba2\u5355\u200b\u5468\u671f\u200b\u7684\u200b\\(m_i\\)\u200b\u500d\u200b\uff0c\u200b\u5219\u200b\u4e00\u4e2a\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\u5185\u200b\u7684\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ \\begin{aligned} G(\\boldsymbol Q) =& \\frac{1}{T}\\left(K + \\sum_i\\frac{K_i}{m_i}\\right) & \\text{Setup cost} \\\\ &+\\frac{h}{2}\\sum_{i}\\lambda_i m_i & \\text{Marginal cost} \\end{aligned} \\] \u200b\u56e0\u6b64\u200b\uff0c\u200b\u6700\u4f18\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\u4e0e\u200b\u6700\u4f18\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ \\begin{aligned} T^* &= \\sqrt{\\frac{\\sum_{i} \\lambda_i m_i h}{2\\left(K + \\sum_i\\frac{K_i}{m_i}\\right)}} \\\\ G^* &= \\sqrt{2\\left(\\sum_{i} \\lambda_i m_i h\\right)\\left(K + \\sum_i\\frac{K_i}{m_i}\\right)} \\end{aligned} \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/","title":"\u968f\u673a\u200b\u9700\u6c42\u200b\u4e0b\u200b\u7684\u200b\u5e93\u5b58\u200b\u63a7\u5236","text":"\u200b\u4f18\u5316\u200b\u76ee\u6807\u200b\uff1a\u200b\u6700\u5c0f\u5316\u200b\u6210\u672c\u200b\u7684\u200b\u6570\u5b66\u200b\u671f\u671b\u200b
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_2","title":"\u5355\u200b\u5468\u671f\u200b\u5355\u7ea7\u200b\u2014\u2014\u200b\u62a5\u7ae5\u200b\u6a21\u578b","text":"\u200b\u62a5\u7ae5\u200b\u6a21\u578b\u200b\u662f\u200b\u5355\u200b\u5468\u671f\u200b\u4e0b\u200b\u7684\u200b\u5e93\u5b58\u200b\u63a7\u5236\u200b\u95ee\u9898\u200b
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_3","title":"\u8bb0\u53f7","text":" - \\(c_o\\)\u200b\u8868\u793a\u200b\u8d85\u989d\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\uff0c\\(c_u\\)\u200b\u8868\u793a\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b
- \\(f(\\cdot), F(\\cdot)\\)\u200b\u5206\u522b\u200b\u4e3a\u200b\u9700\u6c42\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u4e0e\u200b\u6982\u7387\u5206\u5e03\u200b\u51fd\u6570\u200b
- \\(Q\\)\u200b\u4e3a\u200b\u8ba2\u8d27\u91cf\u200b
- \\(x^+ = \\max\\{x, 0\\}\\)
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_4","title":"\u63a8\u5bfc","text":"\u200b\u62a5\u7ae5\u200b\u6a21\u578b\u200b\u7684\u200b\u6210\u672c\u200b\u51fd\u6570\u200b\u4e3a\u200b
\\[ G(Q, D) = c_o\\max\\{0, Q-D\\} + c_u\\max\\{0, D-Q\\} \\] \\(G(Q, D)\\)\u200b\u662f\u200b\u968f\u673a\u53d8\u91cf\u200b\\(D\\)\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u56e0\u6b64\u200b\u4e5f\u200b\u662f\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u5bf9\u200b\\(D\\)\u200b\u53d6\u200b\u671f\u671b\u200b\uff0c\u200b\u6709\u200b
\\[ \\begin{aligned} C(Q) &= E(G(Q, D) | Q) \\\\ &= \\int_{0}^\\infty G(Q, D)f(x)\\mathrm dx \\\\ &= \\int_{0}^Q c_o(Q-x)f(x)\\mathrm dx + \\int_Q^\\infty c_u(x-Q)f(x)\\mathrm dx \\\\ \\end{aligned} \\] \u200b\u5f53\u200b\\(C(Q)\\)\u200b\u53d6\u200b\u6781\u5c0f\u503c\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(\\frac{\\mathrm dC}{\\mathrm dD} = 0\\)\uff0c\u200b\u5373\u200b
\\[ \\begin{aligned} \\frac{\\mathrm dC}{\\mathrm dQ} &= c_o\\int_0^Q f(x)\\mathrm dx + c_u\\int_Q^\\infty -f(x)\\mathrm dx \\\\ &= c_oF(Q) - c_u(1-F(Q)) \\\\ &= 0 \\end{aligned} \\] \u200b\u9a8c\u8bc1\u200b\uff1a\\(\\frac{\\mathrm d^2 C}{\\mathrm dQ^2} = (c_o + c_u)f(Q) > 0\\)\uff0c\u200b\u56e0\u6b64\u200b\u4e3a\u200b\u6781\u5c0f\u503c\u200b\u70b9\u200b\u3002\u200b\u6b64\u65f6\u200b\\(F(Q^*) = c_u / (c_o + c_u)\\)\u3002
\u200b\u79f0\u200b\\(c_u / (c_o + c_u)\\)\u200b\u4e3a\u200b\u5173\u952e\u200b\u6bd4\u4f8b\u200b\uff08crucial ratio\uff09
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_5","title":"\u5355\u200b\u5468\u671f\u200b\u6a21\u578b\u200b\u6269\u5c55","text":""},{"location":"math/operations-mamagement/inventory-control-random-demand/#_6","title":"\u79bb\u6563\u200b\u9700\u6c42\u200b\u7684\u200b\u6700\u4f18\u200b\u7b56\u7565","text":"\u200b\u786e\u5b9a\u200b\\(\\max_{Q_0}, \\min_{Q_1}\\)\u200b\u6ee1\u8db3\u200b\\(Q_1 > Q_0\\)\u200b\u4e14\u200b\\(F(Q_0) < c_u / (c_u + c_o) < F(Q_1)\\)\uff0c\u200b\u6b64\u65f6\u200b\\(Q_1\\)\u200b\u5373\u200b\u4e3a\u200b\u6700\u4f18\u200b\u7684\u200b\\(Q^*\\)\u3002\u200b\u5373\u200b\u9ad8\u4e8e\u200b\u6700\u4f18\u200b\u5173\u952e\u200b\u6bd4\u4f8b\u200b\u7684\u200b\u6700\u5c0f\u200b\u5173\u952e\u200b\u6bd4\u4f8b\u200b\u5bf9\u5e94\u200b\u7684\u200b\\(Q\\)
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#u","title":"\u5b58\u5728\u200b\u521d\u59cb\u200b\u5e93\u5b58\u200b\\(u\\)","text":"\\(u\\)\u200b\u7684\u200b\u5b58\u5728\u200b\u4e0d\u200b\u5f71\u54cd\u200b\\(Q^*\\)\uff0c\u200b\u56e0\u6b64\u200b\uff0c\u200b\u8ba2\u8d27\u91cf\u200b\\(Q'\\)\u200b\u6ee1\u8db3\u200b
\\[ Q^{*\\prime} = \\max\\{Q^*-u, 0\\} \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_7","title":"\u591a\u7ea7\u200b\u7cfb\u7edf","text":"\u200b\u591a\u7ea7\u200b\u5e93\u5b58\u200b\u7cfb\u7edf\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u4e32\u884c\u200b\u7cfb\u7edf\u200b\u3001\u200b\u88c5\u914d\u200b\u7cfb\u7edf\u200b\u548c\u200b\u914d\u9001\u200b\u7cfb\u7edf\u200b\u3002
\u200b\u8003\u8651\u200b\u4e00\u4e2a\u200b\u4e32\u884c\u200b\u7684\u200b\u4f9b\u5e94\u94fe\u200b\uff0c\u200b\u4f9b\u5e94\u94fe\u200b\u4e0b\u6e38\u200b\u5411\u200b\u4f9b\u5e94\u94fe\u200b\u4e0a\u6e38\u200b\u91c7\u8d2d\u200b\u4ea7\u54c1\u200b\u3002\u200b\u901a\u5e38\u200b\u91c7\u7528\u200b\u5d4c\u5957\u200b\u7b56\u7565\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u8ba2\u8d27\u200b\uff0c\u200b\u5373\u5f53\u200b\u4e0b\u6e38\u200b\u8ba2\u8d27\u200b\u65f6\u200b\uff0c\u200b\u4e0a\u6e38\u200b\u624d\u200b\u53ef\u80fd\u200b\u8fdb\u884c\u200b\u8ba2\u8d27\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_8","title":"\u5468\u671f\u200b\u68c0\u67e5\u200b\u6a21\u578b","text":"\u200b\u5728\u200b\u5468\u671f\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u9996\u5148\u200b\u4e0d\u200b\u8003\u8651\u200b\u56fa\u5b9a\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\\(K\\)\u200b\u7684\u200b\u5f71\u54cd\u200b\u3002\u200b\u9700\u6c42\u200b\u5206\u4e3a\u200b\u591a\u4e2a\u200b\u5468\u671f\u200b\uff0c\u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\u7684\u200b\u9700\u6c42\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_9","title":"\u8bb0\u53f7","text":" - \u200b\u5269\u4f59\u200b\u5468\u671f\u200b\u6570\u4e3a\u200b\\(n\\)
- \u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\u7684\u200b\u9700\u6c42\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u9700\u6c42\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u4e3a\u200b\\(f(\\cdot)\\)\uff0c\u200b\u6982\u7387\u5206\u5e03\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(F(\\cdot)\\)\u3002
- \u200b\u5468\u671f\u200b\u4e4b\u95f4\u200b\u7684\u200b\u8d34\u73b0\u7387\u200b\\(\\alpha\\)\u200b\u8868\u793a\u200b
- \u200b\u4e0d\u200b\u8003\u8651\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u200b\uff0c\\(L=0\\)
- \\(y_i\\)\u200b\u8868\u793a\u200b\u7b2c\u200b\\(i\\)\u200b\u671f\u200b\u7ed3\u675f\u200b\u65f6\u200b\u7684\u200b\u5e93\u5b58\u200b\uff0c\\(y_0\\)\u200b\u8868\u793a\u200b\u671f\u521d\u200b\u5e93\u5b58\u200b
- \\(C_n(y_0)\\)\u200b\u8868\u793a\u200b\u7b2c\u200b\\(n\\)\u200b\u671f\u200b\u603b\u200b\u671f\u671b\u200b\u8d34\u73b0\u200b\u6210\u672c\u200b\u7684\u200b\u6700\u5c0f\u503c\u200b
\\[ C_n(y_0) = \\min_{y\\geq y_0}\\left\\{L(y) - cy_0 + \\alpha\\int_{0}^\\infty C_{n-1}[t(y, x)]f(x)\\mathrm dx\\right\\} \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/#q-r","title":"\u8fde\u7eed\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\uff1a(Q, R)\u200b\u6a21\u578b","text":"\u200b\u5728\u200b\u8fde\u7eed\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\u4e2d\u200b\uff0c\u200b\u9700\u8981\u200b\u533a\u5206\u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\u4e0e\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u7684\u200b\u6982\u5ff5\u200b
- \u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\uff08Inventory Position\uff09\uff0c\u200b\u6307\u200b\u76ee\u524d\u200b\u6301\u6709\u200b\u7684\u200b\u5e93\u5b58\u200b\u603b\u91cf\u200b\u52a0\u4e0a\u200b\u5904\u4e8e\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u200b\u7684\u200b\u5e93\u5b58\u91cf\u200b
- \u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\uff08Inventory Level\uff09\uff0c\u200b\u6307\u200b\u76ee\u524d\u200b\u6301\u6709\u200b\u7684\u200b\u5e93\u5b58\u200b\u603b\u91cf\u200b
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_10","title":"\u6a21\u578b\u200b\u8bbe\u5b9a\u200b\u53ca\u200b\u63a8\u5bfc","text":"\\((Q, R)\\)\u200b\u6a21\u578b\u200b\u6709\u200b\u5982\u4e0b\u200b\u8bbe\u5b9a\u200b
- \u200b\u6bcf\u6b21\u200b\u8ba2\u8d27\u200b\u7684\u200b\u56fa\u5b9a\u6210\u672c\u200b\u4e3a\u200b\\(K\\)\uff0c\u200b\u8fb9\u9645\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\u4e3a\u200b\\(c\\)\uff0c\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u4e3a\u200b\\(\\tau\\)\uff1b
- \u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u5185\u200b\u7684\u200b\u9700\u6c42\u200b\\(D\\)\u200b\u5728\u200b\u65f6\u95f4\u200b\u4e0a\u200b\u8fde\u7eed\u200b\uff0c\u200b\u5728\u200b\u6570\u91cf\u200b\u4e0a\u200b\u670d\u4ece\u200b\u5747\u503c\u200b\u4e3a\u200b\\(\\mu\\)\u3001\u200b\u6807\u51c6\u5dee\u200b\u4e3a\u200b\\(\\sigma\\)\u200b\u7684\u200b\u67d0\u4e2a\u200b\u6982\u7387\u5206\u5e03\u200b\\(f(\\cdot), F(\\cdot)\\)\uff1b\\(\\lambda\\)\u200b\u4e3a\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u7684\u200b\u671f\u671b\u200b\u9700\u6c42\u200b\u7387\u200b\uff1b
- \u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u7684\u200b\u8fb9\u9645\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u4e3a\u200b\\(h = Ic\\)\uff08\u200b\u5f0f\u200b\u4e2d\u200b\\(I\\)\u200b\u4e3a\u200b\u5229\u7387\u200b\uff09
- \u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b\uff0c\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\\(p\\)\uff08backorder\uff09\uff1b
- \u200b\u6a21\u578b\u200b\u7684\u200b\u51b3\u7b56\u200b\u53d8\u91cf\u200b\u4e3a\u91cd\u200b\u8ba2\u8d27\u200b\u70b9\u200b\\(R\\)\u3001\u200b\u4e0e\u200b\u8ba2\u8d27\u91cf\u200b\\(Q\\)\uff1a\u200b\u5f53\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u964d\u4f4e\u200b\u81f3\u200b\\(R\\)\u200b\u65f6\u200b\uff0c\u200b\u8ba2\u8d2d\u200b\\(Q\\)\u200b\u5355\u4f4d\u200b\u7684\u200b\u5e93\u5b58\u200b\u3002\u200b\u53d7\u200b\u8ba2\u8d27\u91cf\u200b\\(Q\\)\u200b\u7684\u200b\u5f71\u54cd\u200b\uff0c\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\\(T\\)\u200b\u6ee1\u8db3\u200b\\(Q = \\lambda T\\)
-
\u200b\u6a21\u578b\u200b\u4e2d\u200b\u4f7f\u7528\u200b\u7684\u200b\u5176\u4ed6\u200b\u8bb0\u53f7\u200b\u6709\u200b\uff1a
- \\(\\mathrm{IP}\\)\uff1a\u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b
- \\(\\mathrm{IL}\\)\uff1a\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b
- \\(\\mathrm{SS} = R - \\mu\\)\uff1a\u200b\u5b89\u5168\u200b\u5e93\u5b58\u200b
\\((Q, R)\\)\u200b\u6a21\u578b\u200b\u8003\u8651\u200b\u5982\u4e0b\u200b\u6765\u6e90\u200b\u7684\u200b\u6210\u672c\u200b\uff1a
-
\u200b\u8ba2\u8d27\u200b\u6210\u672c\u200b\uff1a\u200b\u6bcf\u6b21\u200b\u8ba2\u8d2d\u200b\\(Q\\)\u200b\u5355\u4f4d\u200b\u7684\u200b\u5e93\u5b58\u200b\uff0c\u200b\u603b\u6210\u672c\u200b\u4e3a\u200b\\(K + cQ\\)\uff1b
\\[ \\frac{K + cQ}{T} = \\frac{K\\lambda}{Q} + c\\lambda \\] -
\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\uff1a\u200b\u9996\u5148\u200b\u8ba1\u7b97\u200b\u6bcf\u4e2a\u200b\u5468\u671f\u200b\u5185\u200b\u7684\u200b\u671f\u671b\u200b\u7f3a\u8d27\u91cf\u200b\\(n(R)\\)\uff0c\u200b\u6709\u200b
\\[ n(R) = E(\\max(D - R, 0)) = \\int_R^\\infty (x-R)f(x)\\mathrm dx \\] \u200b\u6839\u636e\u200b\\(n(R)\\)\uff0c\u200b\u5373\u53ef\u200b\u5f97\u5230\u200b\u4e00\u4e2a\u200b\u8ba2\u8d27\u200b\u5468\u671f\u200b\\(T\\)\u200b\u65f6\u95f4\u200b\u7684\u200b\u5e73\u5747\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\\(\\lambda n(R)p/Q\\)
-
\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\uff1a\u200b\u4e00\u4e2a\u200b\u5468\u671f\u200b\u5185\u200b\u671f\u671b\u200b\u7684\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u53d8\u5316\u200b\u4e3a\u200b\u7ebf\u6027\u200b\uff0c\u200b\u5f53\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u964d\u200b\u81f3\u200b\\(R\\)\u200b\u540e\u200b\u91cd\u65b0\u200b\u8ba2\u8d27\u200b\uff0c\u200b\u671f\u671b\u200b\u5e93\u5b58\u200b\u7ee7\u7eed\u200b\u4e0b\u964d\u200b\uff0c\u200b\u76f4\u81f3\u200b\u964d\u4f4e\u200b\u81f3\u200b\\(R - \\lambda\\tau\\)\u200b\u65f6\u200b\u8ba2\u5355\u200b\u5230\u8fbe\u200b\uff0c\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u5185\u200b\u7684\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ h\\left(\\frac{Q}{2} + R - \\lambda\\tau\\right) \\]
\u200b\u6839\u636e\u200b\u5982\u200b\u4e0a\u200b\u5206\u6790\u200b\uff0c\u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u5185\u200b\u7684\u200b\u671f\u671b\u200b\u6210\u672c\u200b\u4e3a\u200b
\\[ \\begin{aligned} G(Q, R) &= h\\left(\\frac{Q}{2} + R - \\lambda\\tau\\right) + \\frac{K\\lambda}{Q} + \\frac{p\\lambda n(R)}{Q} \\\\ &= \\frac{hQ}{2} + \\lambda(K + pn(R))\\frac{1}{Q} + hR - h\\lambda\\tau \\end{aligned} \\] \\((Q, R)\\)\u200b\u6a21\u578b\u200b\u7684\u200b\u76ee\u6807\u200b\u5373\u200b\u4e3a\u200b\u6c42\u89e3\u200b\u51fa\u200b\u4f7f\u5f97\u200b\\(G(Q, R)\\)\u200b\u6700\u5c0f\u200b\u7684\u200b\\(Q, R\\)\u3002\u200b\u82e5\u200b\u8868\u793a\u200b\u4e3a\u200b\\((s, S)\\)\u200b\u7b56\u7565\u200b\u7684\u200b\u5f62\u5f0f\u200b\uff0c\u200b\u5373\u200b\u6709\u200b\\(s = R, S = Q + R\\)
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_11","title":"\u6c42\u89e3","text":"\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u8fed\u4ee3\u200b\u7684\u200b\u65b9\u5f0f\u200b\u903c\u8fd1\u200b\\((Q, R)\\)\u200b\u6a21\u578b\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\uff0c\u200b\u5206\u522b\u200b\u5bf9\u200b\\(G\\)\u200b\u6c42\u200b\\(Q, R\\)\u200b\u7684\u200b\u504f\u200b\u5bfc\u6570\u200b\uff0c\u200b\u6709\u200b
\\[ \\begin{aligned} \\frac{\\partial G}{\\partial Q} &= \\frac{h}{2} - \\lambda (K + pn(R))\\frac{1}{Q^2} \\\\ \\frac{\\partial G}{\\partial R} &= h + \\frac{\\lambda p n'(R)}{Q} \\\\ &= h - \\frac{\\lambda p(1-F(R))}{Q} \\end{aligned} \\] \u200b\u8fed\u4ee3\u200b\u8fc7\u7a0b\u200b\u4ece\u200bEOQ\u200b\u6a21\u578b\u200b\u7684\u200b\u6700\u4f18\u200b\u89e3\u200b\\(Q_{\\mathrm{EOQ}}^* = \\sqrt{\\frac{2K\\lambda}{h}}\\)\u200b\u5f00\u59cb\u200b\uff0c\u200b\u6c42\u200b\u51fa\u200b\u4f7f\u5f97\u200b\\(G\\)\u200b\u6700\u4f18\u200b\u7684\u200b\\(R\\)\u200b\u503c\u200b\uff0c\u200b\u518d\u200b\u5c06\u200b\\(R\\)\u200b\u4ee3\u5165\u200b\u6c42\u200b\u51fa\u200b\u6700\u4f18\u200b\u7684\u200b\\(Q\\)\u200b\u503c\u200b\uff0c\u200b\u5982\u6b64\u200b\u5faa\u73af\u200b\uff0c\\(Q, R\\)\u200b\u5373\u200b\u903c\u8fd1\u200b\u6700\u4f18\u200b\u7684\u200b\\(Q^*, R^*\\)\u200b\u53d6\u503c\u200b\uff0c\u200b\u6700\u4f18\u200b\u89e3\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u65b9\u7a0b\u200b\uff1a
\\[ \\begin{aligned} Q &= \\sqrt{\\frac{2\\lambda (K + pn(R))}{h}} \\\\ F(R) &= 1 - \\frac{hQ}{\\lambda p} \\end{aligned} \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_12","title":"\u670d\u52a1\u6c34\u5e73","text":"\u200b\u7c7b\u4f3c\u200b\u4e8e\u200b\u5468\u671f\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\uff0c\u200b\u5728\u200b\u8fde\u7eed\u200b\u68c0\u67e5\u200b\u6a21\u578b\u200b\u4e2d\u200b\u4e5f\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u7b2c\u4e00\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\u4e0e\u200b\u7b2c\u4e8c\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\u7b49\u200b\u6307\u6807\u200b\u3002\u200b\u82e5\u200b\u5047\u8bbe\u200b\u6bcf\u4e2a\u200b\u63d0\u524d\u200b\u671f\u5185\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u5728\u200b\u9014\u200b\u8ba2\u5355\u200b\uff1a
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_13","title":"\u7b2c\u4e00\u7c7b\u200b\u670d\u52a1\u6c34\u5e73","text":"\u200b\u7b2c\u4e00\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\u6307\u5728\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u4e2d\u200b\u4e0d\u200b\u53d1\u751f\u200b\u7f3a\u8d27\u200b\u7684\u200b\u6982\u7387\u200b\uff0c\u200b\u7528\u200b\\(\\alpha\\)\u200b\u8868\u793a\u200b\u3002\u200b\u5219\u200b\u6709\u200b\\(\\alpha = F(R)\\)\u3002\u200b\u6c42\u89e3\u200b\u6ee1\u8db3\u200b\u7b2c\u4e00\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\u6761\u4ef6\u200b\u7684\u200b\\((Q, R)\\)\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u6b65\u9aa4\u200b\u8fdb\u884c\u200b
- \u200b\u6c42\u89e3\u200b\u6ee1\u8db3\u200b\\(F(R) = \\alpha\\)\u200b\u7684\u200b\\(R\\)\u200b\u503c\u200b
- \\(Q\\)\u200b\u503c\u53d6\u200bEOQ\u200b\u6700\u4f18\u200b\u503c\u200b\\(\\sqrt{\\frac{2K\\lambda}{h}}\\)\u200b\u5373\u53ef\u200b
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#fill-rate","title":"\u7b2c\u4e8c\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\uff1aFill rate","text":"\u200b\u7b2c\u4e8c\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\u6307\u200b\u6ee1\u8db3\u200b\u7684\u200b\u9700\u6c42\u200b\u5360\u200b\u603b\u9700\u6c42\u200b\u7684\u200b\u6bd4\u4f8b\u200b\u6bd4\u4f8b\u200b\uff0c\u200b\u7528\u200b\\(\\beta\\)\u200b\u8868\u793a\u200b\uff0c\u200b\u7531\u4e8e\u200b\\(n(R)\\)\u200b\u4e3a\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u4e2d\u200b\u7684\u200b\u671f\u671b\u200b\u7f3a\u8d27\u91cf\u200b\uff0c\u200b\u5219\u200b\u6709\u200b\\(n(R)/Q = 1 - \\beta\\)\u3002\u200b\u6839\u636e\u200b\\(F(R) = 1 - \\frac{hQ}{\\lambda p}\\)\uff0c\u200b\u53ef\u200b\u5f97\u200b
\\[ p = \\frac{Qh}{\\lambda(1 - F(R))} \\] \u200b\u5c06\u200b\u5176\u200b\u4ee3\u5165\u200b\\(Q = \\sqrt{\\frac{2\\lambda (K + pn(R))}{h}}\\)\uff0c\u200b\u6574\u7406\u200b\u5f97\u5230\u200b
\\[ hQ^2 - \\frac{2hn(R)}{1-F(R)}Q - 2K\\lambda = 0 \\] \u200b\u89e3\u5f97\u200b
\\[ Q = \\frac{n(R)}{1 - F(R)} + \\sqrt{\\frac{2K\\lambda}{h} + \\left(\\frac{n(R)}{1-F(R)}\\right)^2} \\] \u200b\u53c8\u200b\u6839\u636e\u200b\u7b2c\u4e8c\u7c7b\u200b\u670d\u52a1\u6c34\u5e73\u200b\uff0c\u200b\u6709\u200b
\\[n(R) = (1-\\beta)Q\\] \u200b\u8054\u200b\u7acb\u5373\u200b\u5f97\u200b\uff0c\u200b\u4e5f\u200b\u53ef\u200b\u4f7f\u7528\u200b\u8fed\u4ee3\u200b\u65b9\u5f0f\u200b\u6c42\u89e3\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_14","title":"\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\u4e0e\u200b\u5e93\u5b58\u200b\u6c34\u5e73","text":"\u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\u4e0e\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u7684\u200b\u5173\u7cfb\u200b\uff1a
\\[ \\mathrm{IL}(t+L) = \\mathrm{IP}(t) - D(t, t+L) \\] \u200b\u5f0f\u200b\u4e2d\u200b\\(D(t, t+L)\\)\u200b\u4e3a\u200b\\([t, t+L]\\)\u200b\u65f6\u95f4\u200b\u5185\u200b\u7684\u200b\u9700\u6c42\u200b\u3002\u200b\u56e0\u6b64\u200b\uff0c\u200b\u82e5\u200b\u5df2\u77e5\u200b\\(\\mathrm{IP}(t), D(t, t+L)\\)\u200b\u7684\u200b\u5206\u5e03\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u636e\u6b64\u200b\u8ba1\u7b97\u200b\\(\\mathrm{IL}(t+L)\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\u7a33\u6001\u200b\uff0c\u200b\u5728\u200b\u4efb\u610f\u200b\u65f6\u523b\u200b\\(t\\)\uff0c\u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\\(\\mathrm{IP}(t), \\mathrm{IL}(t+L), D(t, t+L)\\)\u200b\u5206\u522b\u200b\u5bf9\u200b\u4e0d\u540c\u200b\u7684\u200b\\(t\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\u3002\u200b\u7531\u6b64\u200b\uff0c\u200b\u8f6c\u5316\u200b\u4e3a\u200b\u968f\u673a\u53d8\u91cf\u200b\\(\\mathrm{IP}, \\mathrm{IL}, D(L)\\)\u200b\u4e4b\u95f4\u200b\u7684\u200b\u5206\u5e03\u200b\u5173\u7cfb\u200b\u3002\u200b\u5df2\u77e5\u200b\\(\\mathrm{IP}\\)\u200b\u4e3a\u200b\u5747\u5300\u5206\u5e03\u200b\uff0c\u200b\u8bbe\u200b\\(D(L)\\)\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u4e3a\u200b\\(f(x;L)\\)\uff0c\u200b\u5219\u200b
\\[ \\begin{aligned} F_{\\mathrm{IL}}(x) &= P(\\mathrm{IL}\\leq x) \\\\ &= \\int_{R}^{R+Q}P(\\mathrm{IP} = u)P(\\mathrm{IP} - \\mathrm{IL} \\geq u-x) \\mathrm du \\\\ &= \\frac{1}{Q}\\int_{R}^{R+Q} P(D \\geq u-x) \\mathrm du \\\\ &= \\frac{1}{Q}\\int_{R}^{R+Q} (1 - F(u-x;L)) \\mathrm du \\end{aligned} \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_15","title":"\u6a21\u578b\u200b\u6269\u5c55","text":""},{"location":"math/operations-mamagement/inventory-control-random-demand/#_16","title":"\u6b63\u6001\u5206\u5e03\u200b\u9700\u6c42","text":"\u200b\u5f53\u200b\u63d0\u524d\u200b\u671f\u5185\u200b\u9700\u6c42\u200b\\(D\\)\u200b\u670d\u4ece\u200b\u6b63\u6001\u5206\u5e03\u200b\\(N(\\mu, \\sigma)\\)\u200b\u65f6\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b\u6b63\u6001\u5206\u5e03\u200b\u7684\u200b\u6807\u51c6\u200b\u635f\u5931\u200b\u51fd\u6570\u200b\\(L(z)\\)\u200b\u7b80\u5316\u200b\\(n(R)\\)\u200b\u7684\u200b\u8ba1\u7b97\u200b
\\[ n(R) = \\sigma L\\left(\\frac{R-\\mu}{\\sigma}\\right) = \\sigma L(z) \\] \\(L(z)\\)\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\\(\\phi(z), \\varPhi(z)\\)\u200b\u8ba1\u7b97\u200b\u5f97\u5230\u200b\uff1a
\\[ L(z) = \\phi(z) - z + z\\varPhi(z) \\] \u200b\u5c06\u200b\\(D(L) \\sim N(\\mu, \\sigma)\\)\u200b\u4ee3\u5165\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u7684\u200b\u5206\u5e03\u200b\uff0c\u200b\u5f97\u5230\u200b
\\[ F_{\\mathrm{IL}}(x) = \\frac{1}{Q}\\int_{R}^{R+Q} \\left[1 - \\varPhi\\left(\\frac{u-x-\\mu}{\\sigma}\\right)\\right] \\mathrm du \\] \u200b\u7531\u6b64\u200b\u53ef\u200b\u5f97\u200b\uff0c\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u7684\u200b\u6982\u7387\u5206\u5e03\u200b\\(f_{\\mathrm{IL}}(x)\\)\u200b\u4e3a\u200b
\\[ f_{\\mathrm{IL}}(x) = \\frac{1}{Q}\\left[\\varPhi\\left(\\frac{R+Q-x-\\mu}{\\sigma}\\right) - \\varPhi\\left(\\frac{R-x-\\mu}{\\sigma}\\right)\\right] \\]"},{"location":"math/operations-mamagement/inventory-control-random-demand/#lost-sales","title":"Lost-sales","text":"\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u7f3a\u8d27\u200b\uff0c\u200b\u5219\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u4e0d\u200b\u4f4e\u4e8e\u200b0\uff0c\u200b\u6b64\u65f6\u200b\u5e73\u5747\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u53d8\u4e3a\u200b
\\[ \\frac{Q}{2} + \\max(R-\\mu, 0) \\] \u200b\u5176\u4f59\u200b\u6210\u672c\u200b\u4e0d\u53d8\u200b\u3002
"},{"location":"math/operations-mamagement/inventory-control-random-demand/#_17","title":"\u968f\u673a\u200b\u63d0\u524d\u200b\u671f","text":""},{"location":"math/operations-mamagement/inventory-control-random-demand/#one-for-one-policy","title":"One-for-one policy","text":"\u200b\u5f53\u200b\u8ba2\u8d27\u200b\u6279\u91cf\u200b\\(Q = 1\\)\u200b\u65f6\u200b\uff0c\u200b\u79f0\u4e3a\u200bOne-for-one policy\uff0c\u200b\u901a\u5e38\u200b\u9002\u7528\u200b\u4e8e\u200b\u987e\u5ba2\u200b\u9700\u6c42\u200b\u7387\u200b\u8f83\u200b\u4f4e\u200b\u800c\u200b\u4ea7\u54c1\u200b\u4ef7\u503c\u200b\u8f83\u200b\u9ad8\u200b\uff0c\u200b\u5982\u200b\u6c7d\u8f66\u200b\u7b49\u200b\u5927\u5b97\u200b\u5546\u54c1\u200b\u3002\u200b\u8be5\u200b\u7b56\u7565\u200b\u4e00\u200b\u51fa\u73b0\u200b\u9700\u6c42\u200b\u5c31\u200b\u8ba2\u8d27\u200b\uff0c\u200b\u4ece\u800c\u200b\u4f7f\u5f97\u200b\u5e93\u5b58\u200b\u4f4d\u7f6e\u200b\u59cb\u7ec8\u200b\u5904\u4e8e\u200b\\(S = Q + R\\)\u3002\u200b\u4ee5\u4e0b\u200b\u8003\u8651\u200b\u9700\u6c42\u200b\u79bb\u6563\u200b\u7684\u200b\u60c5\u51b5\u200b\uff1a
- \u200b\u9700\u6c42\u200b\u670d\u4ece\u200b\u53c2\u6570\u200b\u4e3a\u200b\\(\\lambda\\)\u200b\u7684\u200b\u6cca\u677e\u200b\u5206\u5e03\u200b
- \u200b\u5141\u8bb8\u200b\u5ef6\u671f\u200b\u4ea4\u8d27\u200b
- \u200b\u5355\u4f4d\u200b\u65f6\u95f4\u200b\u7684\u200b\u5355\u4f4d\u200b\u6301\u6709\u200b\u6210\u672c\u200b\u4e0e\u200b\u5355\u4f4d\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\u4e3a\u200b\\(h, p\\)
\u200b\u5f53\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u4e3a\u200b\u5e38\u6570\u200b\\(\\tau\\)\u200b\u65f6\u200b\uff0c\u200b\u5206\u6790\u200b\u6301\u6709\u200b\u6210\u672c\u200b\u4e0e\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\u3002\u200b\u9996\u5148\u200b\u8003\u8651\u200b\u5e93\u5b58\u200b\u6c34\u5e73\u200b\u5904\u4e8e\u200b\u4e0d\u540c\u200b\u72b6\u6001\u200b\u7684\u200b\u6982\u7387\u200b\uff1a
\\[ P(\\mathrm{IL} = i) = P(D = S - i) = \\frac{e^{-\\lambda t}(\\lambda t)^{S-i}}{(S-i)!} \\] \u200b\u5df2\u77e5\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u4e3a\u200b\\(i\\)\uff0c\u200b\u5bf9\u5e94\u200b\u7684\u200b\u5b58\u8d27\u91cf\u200b\u4e3a\u200b\\(\\max\\{S - D, 0\\}\\)\uff0c\u200b\u7f3a\u8d27\u91cf\u200b\u4e3a\u200b\\(\\max\\{D-S, 0\\}\\)\uff0c\u200b\u56e0\u6b64\u200b\u5e93\u5b58\u200b\u6210\u672c\u200b\u4e0e\u200b\u7f3a\u8d27\u200b\u6210\u672c\u200b\u5206\u522b\u200b\u4e3a\u200b
\\[ \\begin{aligned} c_h &= h\\sum_{D=0}^S (S-D)\\frac{e^{-\\lambda t}(\\lambda t)^{D}}{D!} \\\\ c_u &= p\\sum_{D=S}^\\infty (D-S)\\frac{e^{-\\lambda t}(\\lambda t)^{D}}{D!} \\end{aligned} \\] \u200b\u5f53\u200b\u8ba2\u8d27\u200b\u63d0\u524d\u200b\u671f\u200b\u968f\u673a\u200b\uff0c\u200b\u4e0d\u540c\u200b\u8ba2\u5355\u200b\u7684\u200b\u63d0\u524d\u200b\u671f\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\u65f6\u200b\uff0c\u200b\u4e3a\u200b\u7b80\u5316\u200b\u5904\u7406\u200b\uff0c\u200b\u8bbe\u200b\u63d0\u524d\u200b\u671f\u200b\u670d\u4ece\u200b\u5747\u503c\u200b\u4e3a\u200b\\(\\tau\\)\u200b\u7684\u200b\u6307\u6570\u5206\u5e03\u200b\uff0c\u200b\u5219\u200b\u7cfb\u7edf\u200b\u7684\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u56fe\u4e3a\u200b
\u200b\u8be5\u200b\u7cfb\u7edf\u200b\u4e3a\u751f\u200b\u706d\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u5bf9\u4e8e\u200b\u6bcf\u4e2a\u200b\u72b6\u6001\u200b\\(i < S\\)\uff0c\u200b\u6709\u200b
\\[ \\left(\\lambda + \\frac{S-i}{\\tau}\\right)P(\\mathrm{IL} = i) = \\lambda P(\\mathrm{IL} = i+1) + \\frac{S-i+1}{\\tau} P(\\mathrm{IL} = i-1) \\] \u200b\u5f53\u200b\\(i = S\\)\u200b\u65f6\u200b\uff0c\\(\\lambda P(\\mathrm{IL} = S) = \\frac{1}{\\tau}P(\\mathrm{IL} = S-1)\\)\u3002\u200b\u7531\u6b64\u200b\u53ef\u4ee5\u200b\u63a5\u200b\u7684\u200b
\\[ \\begin{aligned} P(\\mathrm{IL} = S) &= e^{-\\lambda\\tau} \\\\ P(\\mathrm{IL} = i) &= \\frac{(\\lambda\\tau)^{S-i}}{(S-i)!}P(\\mathrm{IL} = S) \\\\ &= \\frac{(\\lambda\\tau)^{S-i}e^{-\\lambda\\tau}}{(S-i)!} \\end{aligned} \\] \u200b\u5f53\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u5ef6\u671f\u200b\u4ea4\u8d27\u200b\u65f6\u200b\uff0c\\(\\mathrm{IL}\\geq 0\\)\uff0c\u200b\u60c5\u51b5\u200b\u4e0e\u200b\u5141\u8bb8\u200b\u5ef6\u671f\u200b\u4ea4\u8d27\u200b\u65f6\u200b\u53c8\u200b\u6709\u200b\u4e0d\u540c\u200b\uff0c\u200b\u4ece\u200b\u65e0\u9650\u200b\u72b6\u6001\u200b\u9a6c\u6c0f\u94fe\u200b\u8f6c\u6362\u200b\u4e3a\u200b\u6709\u9650\u200b\u72b6\u6001\u200b\u9a6c\u6c0f\u94fe\u200b\u3002
"},{"location":"math/queue-theory/","title":"\u5bf9\u7b56\u200b\u3001\u200b\u51b3\u7b56\u200b\u4e0e\u200b\u6392\u961f\u200b\u8bba","text":"\u200b\u8bfe\u7a0b\u200b\u76ee\u5f55\u200b\uff1a
- Chapter 1\uff0c
- Chapter 2\uff0c
- Chapter 3\uff0c
- Chapter 4\uff0c
- Chapter 5\uff0c
- Chapter 6\uff0c
- Chapter 7\uff0c
- Chapter 8\uff0c
- Chapter 9\uff0c
- Chapter 10\uff0c
- Chapter 11\uff0c
- Chapter 12\uff0c\u200b\u5e38\u89c1\u200b\u7684\u200b\u6392\u961f\u6a21\u578b\u200b
"},{"location":"math/queue-theory/chapter-12/","title":"\u5e38\u89c1\u200b\u6392\u961f\u6a21\u578b","text":"\u200b\u4e00\u4e2a\u200b\u6392\u961f\u6a21\u578b\u200b\u4e3b\u8981\u200b\u7531\u200b\u4ee5\u4e0b\u200b\u90e8\u5206\u200b\u7ec4\u6210\u200b
- \u200b\u987e\u5ba2\u200b\uff08\u200b\u5b9e\u4f53\u200b\uff09\u200b\u5904\u7406\u200b
- \u200b\u5b9e\u4f53\u200b\u6392\u961f\u200b\u7b49\u5f85\u200b\u5904\u7406\u200b\uff08\u200b\u7cfb\u7edf\u200b\u7684\u200b\u6392\u961f\u200b\u7b56\u7565\u200b\u53ef\u80fd\u200b\u4e0d\u540c\u200b\uff0c\u200b\u635f\u5931\u200b\u5236\u200b\u4e0d\u200b\u5141\u8bb8\u200b\u6392\u961f\u200b\u3001\u200b\u6df7\u5408\u5236\u200b\u5141\u8bb8\u200b\u6392\u200b\u6709\u9650\u200b\u957f\u5ea6\u200b\u7684\u200b\u961f\u5217\u200b\uff09
- \u200b\u5b9e\u4f53\u200b\u5904\u7406\u5b8c\u6bd5\u200b\uff0c\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b
"},{"location":"math/queue-theory/chapter-12/#_2","title":"\u6392\u961f\u6a21\u578b\u200b\u7684\u200b\u63cf\u8ff0","text":""},{"location":"math/queue-theory/chapter-12/#_3","title":"\u8fdb\u5165\u200b\u7cfb\u7edf","text":"\u200b\u5047\u8bbe\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u5b9e\u4f53\u200b\u6570\u91cf\u200b\u65e0\u9650\u200b\u3002\u200b\u8003\u5bdf\u200b\u76f8\u90bb\u200b\u4e24\u4e2a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u65f6\u95f4\u5dee\u200b\uff1a
- \u200b\u5bf9\u4e8e\u200b\u5b9a\u200b\u957f\u200b\u5206\u5e03\u200b\uff0c\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u65f6\u95f4\u5dee\u200b\u4e3a\u200b\u5e38\u91cf\u200b\\(t\\)\uff0c\\(t\\)\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u4e3a\u200b\uff1a
\\[ f(t; \\alpha)=\\left\\{ \\begin{aligned} & 1 & t=\\alpha \\\\ & 0 & t\\not =\\alpha \\end{aligned} \\right . \\] - Poisson \u200b\u6d41\u200b\uff0c\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u65f6\u95f4\u5dee\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u670d\u4ece\u200b\u53c2\u6570\u200b\u4e3a\u200b\\(\\lambda\\)\u200b\u7684\u200b\u6307\u6570\u5206\u5e03\u200b
\\[ f_{\\xi_i}(t; \\lambda)=\\left\\{ \\begin{aligned} & \\lambda e^{-\\lambda t} & t\\geq 0 \\\\ & 0 & t < 0 \\end{aligned} \\right . \\] - Erlang \u200b\u5206\u5e03\u200b\uff0c\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u65f6\u95f4\u5dee\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u670d\u4ece\u200b\u5982\u4e0b\u200b\u516c\u5f0f\u200b\u6240\u793a\u200b\u7684\u200b\u5206\u5e03\u200b\u3002\u200b\u82e5\u200b\u67d0\u4e2a\u200b\u7cfb\u7edf\u200b\u4e2d\u6709\u200b\\(K\\)\u200b\u4e2a\u200b\u5e76\u8054\u200b\u7684\u200b\u670d\u52a1\u53f0\u200b\uff0c\u200b\u8f93\u5165\u200b\u5b9e\u4f53\u200b\u4e3a\u200b Poisson \u200b\u6d41\u200b\uff0c\u200b\u5219\u200b\u7b2c\u200b\\(K\\)\u200b\u4e2a\u200b\u670d\u52a1\u53f0\u200b\u7684\u200b\u987e\u5ba2\u200b\u6d41\u4e3a\u200b Erlang \u200b\u6d41\u200b\uff0c\u200b\u524d\u9762\u200b\u6240\u6709\u200b\\(K - 1\\)\u200b\u4e2a\u200b\u670d\u52a1\u53f0\u200b\u5728\u200b\u7b2c\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u5230\u8fbe\u200b\u4ee5\u540e\u200b\u7684\u200b\u8f93\u5165\u200b\u6d41\u200b\u540c\u6837\u200b\u4e3a\u200b Erlang \u200b\u6d41\u200b\u3002
\\[ f(t; \\lambda, K)=\\left\\{ \\begin{aligned} & \\frac{\\lambda(\\lambda t)^{K-1}}{(K-1)!} & t\\geq 0 \\\\ & 0 & t < 0 \\end{aligned} \\right . \\]"},{"location":"math/queue-theory/chapter-12/#_4","title":"\u5b9e\u4f53\u200b\u6392\u961f\u200b\u4e0e\u200b\u5904\u7406","text":"\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u53ef\u80fd\u200b\u6709\u200b\u4e00\u4e2a\u200b\u6216\u200b\u591a\u4e2a\u200b\u670d\u52a1\u53f0\u200b\u3002\u200b\u5728\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u6240\u6709\u200b\u670d\u52a1\u53f0\u200b\u90fd\u200b\u5904\u4e8e\u200b\u8fd0\u884c\u200b\u72b6\u6001\u200b\u65f6\u200b\uff0c\u200b\u65b0\u200b\u8fdb\u5165\u200b\u7684\u200b\u5b9e\u4f53\u200b\u65e0\u6cd5\u200b\u7acb\u5373\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b\uff0c\u200b\u800c\u662f\u200b\u8fdb\u5165\u200b\u961f\u5217\u200b\u6216\u200b\u76f4\u63a5\u200b\u79bb\u5f00\u200b\uff0c\u200b\u53d6\u51b3\u4e8e\u200b\u7cfb\u7edf\u200b\u7684\u200b\u6392\u961f\u200b\u7b56\u7565\u200b\u3002\u200b\u6392\u961f\u200b\u7b56\u7565\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u635f\u5931\u200b\u5236\u200b\u3001\u200b\u7b49\u5f85\u200b\u5236\u200b\u4e0e\u200b\u6df7\u5408\u5236\u200b\u3002
\u200b\u5728\u200b\u635f\u5931\u200b\u5236\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\uff0c\u200b\u5982\u679c\u200b\u65b0\u200b\u8fdb\u5165\u200b\u7684\u200b\u5b9e\u4f53\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u7acb\u5373\u200b\u5904\u7406\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\u3002 \u200b\u5728\u200b\u7b49\u5f85\u200b\u5236\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\uff0c\u200b\u5982\u679c\u200b\u65b0\u200b\u8fdb\u5165\u200b\u7684\u200b\u5b9e\u4f53\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u7acb\u5373\u200b\u5904\u7406\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u5728\u200b\u961f\u5217\u200b\u4e2d\u200b\u7b49\u5f85\u200b\uff0c\u200b\u76f4\u5230\u200b\u88ab\u200b\u5904\u7406\u200b\u3002 \u200b\u5728\u200b\u6df7\u5408\u5236\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\uff0c\u200b\u5982\u679c\u200b\u65b0\u200b\u8fdb\u5165\u200b\u7684\u200b\u5b9e\u4f53\u200b\u4e0d\u80fd\u200b\u88ab\u200b\u7acb\u5373\u200b\u5904\u7406\u200b\u4e14\u200b\u6b64\u65f6\u200b\u7684\u200b\u961f\u5217\u200b\u957f\u5ea6\u200b\u5927\u4e8e\u200b\u67d0\u4e00\u5e38\u200b\u6570\u503c\u200b\uff0c\u200b\u5219\u200b\u4f1a\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u5426\u5219\u200b\u4f1a\u200b\u8fdb\u5165\u200b\u961f\u5217\u200b\u7b49\u5f85\u200b\u3002
\u200b\u5b9e\u4f53\u200b\u5728\u200b\u6392\u961f\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u7684\u200b\u884c\u4e3a\u200b\u53ef\u4ee5\u200b\u5206\u4e3a\u200b\u5982\u4e0b\u200b\u7c7b\u578b\u200b\uff1a
- \u200b\u79bb\u5f00\u200b\uff1a\u200b\u5f53\u200b\u5b9e\u4f53\u200b\u5f97\u77e5\u200b\u9700\u8981\u200b\u7b49\u5f85\u200b\u6216\u200b\u6ca1\u6709\u200b\u8010\u5fc3\u200b\u7ee7\u7eed\u200b\u7b49\u5f85\u200b\u65f6\u200b\uff0c\u200b\u5b9e\u4f53\u200b\u53ef\u80fd\u200b\u9000\u51fa\u200b\u961f\u5217\u200b
- \u200b\u53d8\u6362\u200b\uff1a\u200b\u5373\u200b\u5b9e\u4f53\u200b\u4e3a\u200b\u51cf\u5c11\u200b\u6392\u961f\u200b\u65f6\u95f4\u200b\u800c\u200b\u5728\u200b\u4e0d\u540c\u200b\u670d\u52a1\u53f0\u200b\u7684\u200b\u961f\u5217\u200b\u4e4b\u95f4\u200b\u79fb\u52a8\u200b
\u200b\u670d\u52a1\u53f0\u200b\u4f1a\u200b\u6309\u7167\u200b\u5982\u4e0b\u200b\u53ef\u80fd\u200b\u7684\u200b\u65b9\u5f0f\u200b\u8fdb\u884c\u200b\u670d\u52a1\u200b\uff1a
- FCFS\uff1a\u200b\u5148\u200b\u8fdb\u5165\u200b\u961f\u5217\u200b\u7684\u200b\u5148\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b
- LCFS\uff1a\u200b\u540e\u200b\u8fdb\u5165\u200b\u961f\u5217\u200b\u7684\u200b\u5148\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b
- \u200b\u968f\u673a\u200b\u5904\u7406\u200b
- PS\uff1a\u200b\u4f18\u5148\u7ea7\u200b\u9ad8\u200b\u7684\u200b\u5b9e\u4f53\u200b\u5148\u200b\u8fdb\u884c\u200b\u5904\u7406\u200b
- \u200b\u65ad\u7eed\u200b\u5904\u7406\u200b\uff1a\u200b\u5728\u200b\u5904\u7406\u200b\u67d0\u4e2a\u200b\u5b9e\u4f53\u200b\u4e00\u6bb5\u65f6\u95f4\u200b\u540e\u200b\uff0c\u200b\u8f6c\u800c\u200b\u5904\u7406\u200b\u53e6\u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\uff0c\u200b\u4e0d\u65ad\u200b\u5faa\u73af\u200b\u76f4\u5230\u200b\u5b9e\u4f53\u200b\u5904\u7406\u200b\u5b8c\u6210\u200b
\u200b\u5728\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u670d\u52a1\u53f0\u200b\u7684\u200b\u670d\u52a1\u200b\u65f6\u95f4\u200b\u662f\u200b\u4e00\u4e2a\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u6982\u7387\u5206\u5e03\u200b\u4e3a\u200b\u5e38\u6570\u200b\u3001\u200b\u6307\u6570\u5206\u5e03\u200b\u3001K\u200b\u7ea7\u200b Erlang \u200b\u5206\u5e03\u200b\u3001\u200b\u4e00\u822c\u200b\u5206\u5e03\u200b\u7b49\u200b\u3002
"},{"location":"math/queue-theory/chapter-12/#_5","title":"\u7cfb\u7edf\u200b\u7684\u200b\u7b26\u53f7\u200b\u8868\u793a","text":"Kendall\u200b\u8bb0\u53f7\u200b\uff0c\u200b\u683c\u5f0f\u200b\u4e3a\u200b\\(X/Y/Z/A/B/C\\)
- \\(X\\)\u200b\u8868\u793a\u200b\u5b9e\u4f53\u200b\u5230\u8fbe\u200b\u95f4\u9694\u65f6\u95f4\u200b\u7684\u200b\u5206\u5e03\u200b
- \\(M\\)\u200b\u8868\u793a\u200b\u5230\u8fbe\u200b\u8fc7\u7a0b\u200b\u4e3a\u200b Poisson \u200b\u8fc7\u7a0b\u200b\uff08\u200b\u95f4\u9694\u65f6\u95f4\u200b\u670d\u4ece\u200b\u6307\u6570\u5206\u5e03\u200b\uff09\u200b\u6216\u8d1f\u200b\u6307\u6570\u5206\u5e03\u200b
- \\(D\\)\u200b\u8868\u793a\u200b\u95f4\u9694\u65f6\u95f4\u200b\u4e3a\u200b\u5e38\u6570\u200b
- \\(E_k\\)\u200b\u8868\u793a\u200b\u95f4\u9694\u65f6\u95f4\u200b\u670d\u4ece\u200b\\(k\\)\u200b\u9636\u200b Erlang \u200b\u5206\u5e03\u200b
- \\(G\\)\u200b\u8868\u793a\u200b\u95f4\u9694\u65f6\u95f4\u200b\u670d\u4ece\u200b\u4e00\u822c\u200b\u3001\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u7684\u200b\u968f\u673a\u200b\u5206\u5e03\u200b
- \\(Y\\)\u200b\u8868\u793a\u200b\u670d\u52a1\u53f0\u200b\u5355\u6b21\u200b\u670d\u52a1\u200b\u65f6\u95f4\u200b\u7684\u200b\u5206\u5e03\u200b\uff0c\u200b\u8bb0\u53f7\u200b\u4e0e\u200b\\(X\\)\u200b\u7684\u200b\u542b\u4e49\u200b\u76f8\u540c\u200b
- \\(Z\\)\u200b\u8868\u793a\u200b\u670d\u52a1\u53f0\u200b\u4e2a\u6570\u200b
- \\(A\\)\u200b\u8868\u793a\u200b\u7cfb\u7edf\u200b\u7684\u200b\u7b49\u5f85\u200b\u7a7a\u95f4\u200b\u5bb9\u91cf\u200b\uff0c\\(0\\)\u200b\u4e3a\u200b\u635f\u5931\u200b\u5236\u200b\u7cfb\u7edf\u200b\uff0c\\(\\infty\\)\u200b\u4e3a\u200b\u7b49\u5f85\u200b\u5236\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u5426\u5219\u200b\u4e3a\u200b\u6df7\u5408\u5236\u200b\u7cfb\u7edf\u200b\u3002
- \\(B\\)\u200b\u8868\u793a\u200b\u5b9e\u4f53\u200b\u7684\u200b\u603b\u200b\u6570\u91cf\u200b\uff0c\\(\\infty\\)\u200b\u8868\u793a\u200b\u5b9e\u4f53\u200b\u6e90\u200b\u65e0\u9650\u200b
- \\(C\\)\u200b\u8868\u793a\u200b\u670d\u52a1\u200b\u89c4\u5219\u200b
\\(A, B, C\\)\u200b\u53c2\u6570\u200b\u53ef\u4ee5\u200b\u7701\u7565\u200b\u3002\u200b\u5206\u522b\u200b\u7b49\u4ef7\u200b\u4e8e\u200b\\(\\infty, \\infty, \\mathit{FCFS}\\)
"},{"location":"math/queue-theory/chapter-12/#_6","title":"\u7cfb\u7edf\u200b\u7684\u200b\u89c2\u6d4b\u200b\u6307\u6807","text":"\u200b\u8861\u91cf\u200b\u7cfb\u7edf\u200b\u6027\u80fd\u200b\u7684\u200b\u5e38\u7528\u200b\u89c2\u6d4b\u200b\u6307\u6807\u200b\u4e3a\u200b\uff1a
- \\(N(L)\\)\uff1a\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u7684\u200b\u961f\u957f\u200b\uff08\u200b\u6307\u200b\u7cfb\u7edf\u200b\u5185\u200b\u6240\u6709\u200b\u7684\u200b\u5b9e\u4f53\u200b\u6570\u91cf\u200b\uff09
- \\(N_q(L_q)\\)\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u7684\u200b\u6392\u961f\u200b\u957f\u200b
- \\(T(W)\\)\uff1a\u200b\u987e\u5ba2\u200b\u5728\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u505c\u7559\u65f6\u95f4\u200b\uff08\u200b\u5904\u7406\u200b+\u200b\u7b49\u5f85\u200b\uff09
- \\(T_q(W_q)\\)\uff1a\u200b\u987e\u5ba2\u200b\u5728\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u7b49\u5f85\u65f6\u95f4\u200b
- \\(p_n\\)\uff1a\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u4efb\u610f\u200b\u65f6\u523b\u200b\u72b6\u6001\u200b\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u6982\u7387\u200b\uff0c\\(p_n=P(N=n)=\\lim_{t\\rightarrow \\infty}P(N(t) = n)\\)
- \\(\\rho\\)\uff1a\u200b\u5229\u7528\u7387\u200b
- \\(p_D\\)\uff1a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u65f6\u200b\u9700\u8981\u200b\u7b49\u5f85\u200b\u7684\u200b\u6982\u7387\u200b
\u200b\u82e5\u200b\u5c06\u200b\u7cfb\u7edf\u200b\u89c6\u4e3a\u200b\u7ba1\u9053\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u5b9e\u4f53\u200b\u7684\u200b\u6570\u91cf\u200b\u7b49\u4e8e\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u901f\u5ea6\u200b\u4e0e\u200b\u7cfb\u7edf\u200b\u5e73\u5747\u200b\u54cd\u5e94\u200b\uff08\u200b\u5904\u7406\u200b\uff09\u200b\u65f6\u95f4\u200b\u4e4b\u79ef\u200b\u3002
\u200b\u5bf9\u4e8e\u200b\\(M/M/s\\)\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u4ee4\u200b\\(\\lambda\\)\u200b\u4e3a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\u7684\u200b\u901f\u5ea6\u200b\uff0c\\(\\mu\\)\u200b\u4e3a\u200b\u670d\u52a1\u53f0\u200b\u5904\u7406\u200b\u5b9e\u4f53\u200b\u7684\u200b\u901f\u5ea6\u200b\uff0c\\(s\\)\u200b\u4e3a\u200b\u670d\u52a1\u53f0\u200b\u7684\u200b\u6570\u91cf\u200b\uff0c\u200b\u5219\u200b\uff1a
\\[ \\begin{aligned} L &= \\lambda_e W \\\\ L_q &= \\lambda_e W_q \\end{aligned} \\]"},{"location":"math/queue-theory/chapter-12/#_7","title":"\u968f\u673a\u200b\u8fc7\u7a0b","text":"\u200b\u5e38\u89c1\u200b\u7684\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\u6709\u200b Markov \u200b\u8fc7\u7a0b\u200b\u3001\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b\u3001 Poisson \u200b\u8fc7\u7a0b\u200b\u7b49\u200b\u3002\u200b\u6240\u6709\u200b\u7684\u200b Poisson \u200b\u8fc7\u7a0b\u200b\u90fd\u200b\u662f\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u6240\u6709\u200b\u7684\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b\u90fd\u200b\u662f\u200b Markov \u200b\u8fc7\u7a0b\u200b\u3002
"},{"location":"math/queue-theory/chapter-12/#markov","title":"Markov \u200b\u8fc7\u7a0b","text":"\u200b\u7279\u70b9\u200b\uff1a\\(t_0\\)\u200b\u65f6\u523b\u200b\u7684\u200b\u72b6\u6001\u200b\u4e0e\u200b\u4efb\u610f\u200b\\(t<t_0\\)\u200b\u65f6\u200b\u7684\u200b\u72b6\u6001\u200b\u65e0\u5173\u200b
Markov \u200b\u94fe\u200b\u7531\u200b\u9a6c\u5c14\u53ef\u592b\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u7684\u200b\u79bb\u6563\u200b\u72b6\u6001\u200b\u7ec4\u5408\u200b\u3002\u200b\u5bf9\u4e8e\u200b Markov \u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u65e0\u200b\u8bb0\u5fc6\u6027\u200b\uff0c\u200b\u5f53\u524d\u200b\u7684\u200b\u72b6\u6001\u200b\u4e0d\u4f1a\u200b\u5bf9\u200b\u540e\u9762\u200b\u7684\u200b\u72b6\u6001\u200b\u4ea7\u751f\u200b\u5f71\u54cd\u200b\u3002
\\(M/M/s\\)\u200b\u7cfb\u7edf\u200b\u53ef\u4ee5\u200b\u4f7f\u7528\u200b Markov \u200b\u8fc7\u7a0b\u200b\u5efa\u6a21\u200b\u3002\u200b\u961f\u5217\u200b\u4e2d\u200b\u5b9e\u4f53\u200b\u7684\u200b\u6570\u91cf\u200b\u662f\u200b\u4e00\u4e2a\u200b Markov \u200b\u94fe\u200b\u3002
"},{"location":"math/queue-theory/chapter-12/#_8","title":"\u751f\u706d\u200b\u8fc7\u7a0b","text":"\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b\u6309\u200b\u5982\u4e0b\u200b\u56fe\u200b\u8fdb\u884c\u200b\u63cf\u8ff0\u200b\uff08\u200b\u72b6\u6001\u200b\u8f6c\u79fb\u200b\u56fe\u200b\uff09\uff1a
\u200b\u5047\u8bbe\u200b\u5b9e\u4f53\u200b\u79bb\u6563\u200b\u8fdb\u5165\u200b\u7684\u200b\\(M/M/s\\)\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u961f\u5217\u200b\u4e2d\u200b\u7684\u200b\u5b9e\u4f53\u200b\u6570\u91cf\u200b\u670d\u4ece\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b
"},{"location":"math/queue-theory/chapter-12/#poisson","title":"Poisson \u200b\u8fc7\u7a0b","text":"\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7684\u200b\u65f6\u95f4\u5dee\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u4e14\u200b\u670d\u4ece\u200b\u540c\u4e00\u200b\u6307\u6570\u5206\u5e03\u200b\u7684\u200b\u8fc7\u7a0b\u200b
"},{"location":"math/queue-theory/chapter-12/#_9","title":"\u751f\u706d\u200b\u8fc7\u7a0b","text":"\u200b\u5bf9\u4e8e\u200b\u751f\u706d\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u6709\u200b\u5982\u4e0b\u200b\u5047\u8bbe\u200b
- \u200b\u6bcf\u4e2a\u200b\u65f6\u523b\u200b\u53ea\u6709\u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b
- \u200b\u5b9a\u4e49\u200b\u7cfb\u7edf\u200b\u7684\u200b\u72b6\u6001\u200b\u4e3a\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u7684\u200b\u5b9e\u4f53\u200b\u6570\u91cf\u200b\\(n\\)
- \u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u7684\u200b\u72b6\u6001\u200b\u7531\u200b\\(n-1\\)\u200b\u8f6c\u53d8\u200b\u4e3a\u200b\\(n\\)
- \u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u7684\u200b\u72b6\u6001\u200b\u7531\u200b\\(n\\)\u200b\u8f6c\u53d8\u200b\u4e3a\u200b\\(n+1\\)
- \u200b\u7cfb\u7edf\u200b\u5904\u4e8e\u200b\u72b6\u6001\u200b\\(n\\)\u200b\u65f6\u200b\uff0c\u200b\u5b9a\u4e49\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7684\u200b\u901f\u5ea6\u200b\u4e3a\u200b\\(\\lambda _n\\)\uff0c\u200b\u7cfb\u7edf\u200b\u7684\u200b\u5904\u7406\u901f\u5ea6\u200b\u4e3a\u200b\\(\\mu_n\\)\u3002\u200b\u5bf9\u4e8e\u200b\\(\\lambda_n\\)\uff0c\\(n\\geq 0\\)\uff1b\u200b\u5bf9\u4e8e\u200b\\(\\mu_n\\)\uff0c\\(n>0\\)
\u200b\u95ee\u9898\u200b\uff1a\u200b\u7cfb\u7edf\u200b\u5904\u4e8e\u200b\u7a33\u5b9a\u200b\u72b6\u6001\u200b\u65f6\u200b\uff0c\u200b\u751f\u706d\u200b\u7cfb\u7edf\u200b\u5904\u4e8e\u200b\u72b6\u6001\u200b\\(n\\)\u200b\u7684\u200b\u6982\u7387\u200b\\(p_n\\)\uff1f
\u200b\u5bf9\u4e8e\u200b\u5904\u4e8e\u200b\u72b6\u6001\u200b\\(j\\)\u200b\u7684\u200b\u7cfb\u7edf\u200b\uff0c\u200b\u8003\u5bdf\u200b\u4e00\u4e2a\u200b\u6781\u77ed\u200b\u7684\u200b\u65f6\u95f4\u200b\u95f4\u9694\u200b\\(\\Delta t\\)\uff0c\u200b\u7531\u4e8e\u200b\\(\\Delta t\\)\u200b\u6781\u77ed\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5ffd\u7565\u200b\\(\\Delta t\\)\u200b\u65f6\u95f4\u200b\u5185\u200b\u4e24\u4e2a\u200b\u5b9e\u4f53\u200b\u540c\u65f6\u200b\u8fdb\u5165\u200b/\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\u6216\u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u3001\u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\\(\\Delta t\\)\u200b\u65f6\u95f4\u200b\u5185\u200b\u7cfb\u7edf\u200b\u53d1\u751f\u53d8\u5316\u200b\u7684\u200b\u6982\u7387\u200b\u5982\u4e0b\u200b\uff1a
- \u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u8fdb\u5165\u200b\u7cfb\u7edf\u200b\uff1a\\(P(n(t+\\Delta t)=j+1 | n(t) = j)=\\lambda_j\\Delta t\\)
- \u200b\u4e00\u4e2a\u200b\u5b9e\u4f53\u200b\u79bb\u5f00\u200b\u7cfb\u7edf\u200b\uff1a\\(P(n(t+\\Delta t)=j-1| n(t) = j) = \\mu_j\\Delta t\\)
- \u200b\u7cfb\u7edf\u200b\u5728\u200b\\(\\Delta t\\)\u200b\u65f6\u95f4\u200b\u5185\u200b\u6ca1\u6709\u200b\u53d1\u751f\u200b\u72b6\u6001\u200b\u6539\u53d8\u200b\uff1a\\(P(n(t+\\Delta t) = j | n(t)=j) = 1 - (\\lambda_j+\\mu_j)\\Delta t\\)
\u200b\u6839\u636e\u200b\u5047\u8bbe\u200b\uff0c\u200b\u5904\u4e8e\u200b\u72b6\u6001\u200b\\(i\\)\u200b\u7684\u200b\u7cfb\u7edf\u200b\u5728\u200b\\(t+\\Delta t\\)\u200b\u65f6\u200b\u53ea\u200b\u53ef\u80fd\u200b\u5904\u4e8e\u200b\\(i-1, i, i+1\\)\u200b\u4e09\u79cd\u200b\u72b6\u6001\u200b\u4e2d\u200b\u7684\u200b\u4e00\u79cd\u200b\u3002\u200b\u4e5f\u200b\u5373\u200b\uff0c\u200b\u5904\u4e8e\u200b\u72b6\u6001\u200b\\(i\\)\u200b\u7684\u200b\u7cfb\u7edf\u200b\u5728\u200b\\(t-\\Delta t\\)\u200b\u65f6\u200b\u53ea\u200b\u53ef\u80fd\u200b\u5904\u4e8e\u200b\\(i-1, i, i+1\\)\u200b\u4e09\u79cd\u200b\u72b6\u6001\u200b\u4e2d\u200b\u7684\u200b\u4e00\u79cd\u200b\u3002\u200b\u7531\u6b64\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u5217\u5f0f\u200b\u5982\u4e0b\u200b\uff1a
\\[ \\begin{aligned} p_0(t+\\Delta t) &= (1-\\lambda_0\\Delta t)p_0(t) + \\mu_1\\Delta tp_1(t) \\\\ p_j(t+\\Delta t) &= \\lambda_{j-1}\\Delta tp_{j-1}(t)+(1-\\mu_j\\Delta t-\\lambda_j\\Delta t)p_j(t)+\\mu_{j+1}\\Delta tp_{j+1}(t) \\end{aligned} \\] \u200b\u6574\u7406\u200b\u540e\u53d6\u200b\u6781\u9650\u200b\\(\\Delta t\\rightarrow 0\\)\uff0c\u200b\u4e0a\u200b\u5f0f\u200b\u53d8\u4e3a\u200b\u5bfc\u6570\u200b\u5f62\u5f0f\u200b\uff1a
\\[ \\begin{aligned} &\\lim_{\\Delta t\\rightarrow 0} \\frac{p_j(t+\\Delta t)-p_j(t)}{\\Delta t}=\\lambda_{j-1}p_{j-1}(t)+\\mu_{j+1}p_{j+1}(t) - (\\mu_j+\\lambda_j)p_j(t) \\\\ \\Rightarrow &\\frac{\\mathrm dp_j(t)}{\\mathrm dt}=\\lambda_{j-1}p_{j-1}(t)+\\mu_{j+1}p_{j+1}(t) - (\\mu_j+\\lambda_j)p_j(t) \\end{aligned} \\] \u200b\u5f53\u200b\\(t\\rightarrow \\infty\\)\u200b\u65f6\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u8d8b\u4e8e\u200b\u7a33\u6001\u200b\uff0c\u200b\u5219\u200b\u6709\u200b\\(\\lim_{t\\rightarrow \\infty}p_j(t) = p_j\\)\uff0c\u200b\u6536\u655b\u200b\u7684\u200b\u5145\u5206\u200b\u5fc5\u8981\u6761\u4ef6\u200b\u4e3a\u200b\\(\\lim_{t\\rightarrow\\infty} \\frac{\\mathrm dp_j(t)}{\\mathrm dt}=0\\)\u3002\u200b\u5373\u200b\\(\\lambda_{j-1}p_{j-1}(t)+\\mu_{j+1}p_{j+1}(t) - (\\mu_j+\\lambda_j)p_j(t)=0\\)\u3002
\u200b\u89e3\u200b\\(p_{j+1}\\)\uff0c\u200b\u89e3\u5f97\u200b\uff1a
\\[ p_{j+1} = \\left(\\frac{\\mu_j+\\lambda_j}{\\mu_{j+1}}\\right)p_j-\\frac{\\lambda_{j-1}}{\\mu_{j+1}}p_{j-1} \\] \u200b\u5bf9\u4e8e\u200b\\(p_1\\)\uff0c\u200b\u6709\u200b\\(p_1=\\frac{\\lambda_0}{\\mu_1}p_0\\)\u3002
\u200b\u6839\u636e\u200b\u9012\u63a8\u200b\u516c\u5f0f\u200b\uff0c\u200b\u53ef\u4ee5\u200b\u7528\u200b\\(p_0\\)\u200b\u8868\u793a\u200b\u51fa\u200b\\(p_j\\)\uff1a
\\[ \\begin{aligned} p_2&=\\left(\\frac{\\mu_1+\\lambda_1}{\\mu_2}\\right)p_1-\\frac{\\lambda _0}{\\mu_2}p_0 = \\frac{\\lambda_0(\\mu_1+\\lambda_1)}{\\mu_1\\mu_2}p_0-\\frac{\\lambda_0}{\\mu_2}p_0=\\frac{\\lambda_0\\lambda_1}{\\mu_1\\mu_2}p_0 \\\\ p_3&=\\left(\\frac{\\mu_2+\\lambda_2}{\\mu_3}\\right)p_2-\\frac{\\lambda_1}{\\mu_3}p_1=\\frac{\\lambda_0\\lambda_1(\\mu_2+\\lambda_2)}{\\mu_1\\mu_2\\mu_3}p_0-\\frac{\\lambda_0\\lambda_1}{\\mu_1\\mu_3}p_0=\\frac{\\lambda_0\\lambda_1\\lambda_2}{\\mu_1\\mu_2\\mu_3}p_0 \\\\ &\\vdots \\\\ &p_j = \\frac{\\lambda_0\\lambda_1\\cdots\\lambda_{j-1}}{\\mu_1\\mu_2\\cdots\\mu_j}p_0=p_0\\prod_{i = 1}^{j}\\frac{\\lambda_{i-1}}{\\mu_i} \\end{aligned} \\] \u200b\u7531\u4e8e\u200b\u7cfb\u7edf\u200b\u7684\u200b\u72b6\u6001\u200b\u53ea\u200b\u53ef\u80fd\u200b\u53d6\u200b\\(0\\sim\\infty\\)\u200b\u4e4b\u95f4\u200b\u7684\u200b\u6574\u6570\u200b\u503c\u200b\uff0c\u200b\u6982\u7387\u200b\u4e4b\u200b\u548c\u200b\u4e3a\u200b\\(1\\)\uff0c\u200b\u53ef\u4ee5\u200b\u8ba1\u7b97\u200b\u51fa\u200b\\(p_0\\)\uff1a
\\[ p_0=\\frac{1}{1+\\sum_{n=1}^\\infty \\prod_{i=0}^{n}\\frac{\\lambda_{i-1}}{\\mu_i}} \\]"},{"location":"math/queue-theory/chapter-12/#mm1","title":"M/M/1\u200b\u961f\u5217","text":"\u200b\u5bf9\u4e8e\u200b\\(M/M/1\\)\u200b\u7cfb\u7edf\u200b\uff0c\\(\\lambda_0=\\lambda_1=\\cdots=\\lambda_n=\\lambda, \\mu_1=\\cdots=\\mu_n=\\mu\\)\u3002
\u200b\u7531\u6b64\u200b\uff0c\u200b\u8ba1\u7b97\u200b\u51fa\u200b\\(M/M/1\\)\u200b\u7cfb\u7edf\u200b\u5728\u200b\u7a33\u6001\u200b\u65f6\u200b\u5904\u4e8e\u200b\\(p_0\\)\u200b\u7684\u200b\u6982\u7387\u200b\uff1a
\\[ p_0=\\frac{1}{1+\\sum_{n=1}^\\infty \\prod_{i=0}^{n}\\frac{\\lambda}{\\mu}} = \\frac{1}{1+\\sum_{n=1}^\\infty \\rho^n}=\\frac{1}{\\sum_{n=0}^\\infty \\rho^n}=1-\\rho \\] \u200b\u6982\u7387\u5206\u5e03\u200b\u4e3a\u200b\uff1a\\(P(N=n)=\\rho^n(1-\\rho)\\)
"},{"location":"math/queue-theory/chapter-12/#mms","title":"M/M/s\u200b\u961f\u5217","text":"\u200b\u5bf9\u4e8e\u200b\\(M/M/s\\)\u200b\u7cfb\u7edf\u200b\uff0c\\(\\lambda_i, \\mu_i\\)\u200b\u670d\u4ece\u200b\u5982\u4e0b\u200b\u89c4\u5f8b\u200b\uff1a
- \\(\\lambda_i = \\lambda \\qquad i=0, 1\\cdots, \\infty\\)
- \\(\\mu_i = \\max\\{i, s\\}\\mu \\qquad i=1, 2, \\cdots, \\infty\\)
\u200b\u8ba1\u7b97\u200b\u51fa\u200b\\(M/M/s\\)\u200b\u7cfb\u7edf\u200b\u5728\u200b\u7a33\u6001\u200b\u65f6\u200b\u5904\u4e8e\u200b\\(p_0\\)\u200b\u7684\u200b\u6982\u7387\u200b\uff0c\u200b\u4ee4\u200b\\(\\rho_0=\\frac{\\lambda}{\\mu}\\)\uff1a
\\[ \\begin{aligned} p_0&=\\frac{1}{1+\\sum_{n=1}^\\infty \\prod_{i=0}^{n}\\frac{\\lambda}{\\max\\{i, s\\}\\mu}} \\\\ &= \\frac{1}{\\sum_{i=0}^{s-1}\\frac{\\rho_0^i}{i!}+\\sum_{i=s}^\\infty \\frac{\\rho_0^i}{s!s^{i-s}}} \\\\ &=\\frac{1}{\\sum_{i=0}^{s-1}\\frac{\\rho_0^i}{i!}+\\frac{\\rho_0^s}{s!}\\sum_{i=0}^\\infty \\frac{\\rho_0^i}{s^i}} \\\\ &=\\frac{1}{\\sum_{i=0}^{s-1}\\frac{\\rho_0^i}{i!}+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}} \\end{aligned} \\] \u200b\u8bbe\u200b\\(\\sum_{i=0}^{s-1}\\frac{\\rho_0^i}{i!}=T\\)\uff0c\\(p_i\\)\u200b\u53ef\u4ee5\u200b\u901a\u8fc7\u200b\\(p_0\\)\u200b\u63a8\u5bfc\u200b\u5f97\u200b\uff1a
\\[ p_i=\\frac{\\lambda_0\\lambda_1\\cdots\\lambda_{i-1}}{\\mu_1\\mu_2\\cdots\\mu_i}p_0=\\left\\{ \\begin{aligned} & \\frac{\\rho_0^i}{i!}p_0=\\frac{\\rho_0^i}{i!\\left(T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}\\right)} & i\\leq s \\\\ & \\frac{\\rho_0^i}{s!s^{i-s}}p_0=\\frac{\\rho_0^i}{s!s^{i-s}\\left(T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}\\right)} & i > s \\end{aligned} \\right. \\] \u200b\u5f53\u200b\\(n \\geq s\\)\u200b\u65f6\u200b\uff0c\u200b\u987e\u5ba2\u200b\u5230\u8fbe\u200b\u7cfb\u7edf\u200b\u65f6\u200b\u9700\u8981\u200b\u7b49\u5f85\u200b\uff0c\u200b\u5219\u200b\u6709\u200b\uff1a
\\[ p_D=\\sum_{i=s}^\\infty p_i= \\sum_{i=s}^\\infty \\frac{\\rho^i_0}{s!s^{i-s}}p_0 = \\frac{\\rho^s_0p_0}{(s-1)!(s-\\rho_0)}=\\frac{\\rho^s_0}{(s-1)!(s-\\rho_0)T+\\rho_0^s} \\] \u200b\u5f53\u200b\\(N\\leq s\\)\u200b\u65f6\u200b\uff0c\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u6ca1\u6709\u200b\u961f\u5217\u200b\uff0c\\(L_q=0\\)\uff0c\u200b\u5f53\u200b\\(N>s\\)\u200b\u65f6\u200b\uff0c\u200b\u961f\u5217\u200b\u957f\u5ea6\u200b\u4e3a\u200b\\(N-s\\)\uff0c\u200b\u56e0\u6b64\u200b\u7a33\u6001\u200b\u65f6\u200b\u7684\u200b\u5e73\u5747\u200b\u6392\u961f\u200b\u957f\u4e3a\u200b\uff1a
\\[ \\begin{aligned} L_q&=\\sum_{i=s + 1}^\\infty (i - s)p_i \\\\ &=\\sum_{i=s}^\\infty (i-s)\\frac{\\rho^i_0}{s!s^{i-s}}p_0 \\\\ &= \\frac{\\rho^s_0p_0}{s!}\\sum_{i=0}^\\infty \\frac{i\\rho_0^i}{s^i} \\\\ &= \\frac{\\rho^s_0p_0}{s!}\\sum_{i=1}^\\infty \\left(\\frac{\\rho_0}{s}\\right)^i\\frac{s}{s-\\rho_0} \\\\ &= \\frac{\\rho^s_0p_0}{(s-1)!(s-\\rho)}\\frac{\\rho_0/s}{1-\\rho_0/s} \\\\ &= \\frac{\\rho^{s+1}_0p_0}{(s-1)!(s-\\rho_0)^2} \\end{aligned} \\] \u200b\u72b6\u6001\u200b\u4e3a\u200b\\(n\\)\u200b\u7684\u200b\u7a33\u6001\u200b\u65f6\u200b\u7cfb\u7edf\u200b\u63a5\u53d7\u200b\u670d\u52a1\u200b\u7684\u200b\u5b9e\u4f53\u200b\u6570\u91cf\u200b\u4e3a\u200b\uff1a
\\[ \\left\\{ \\begin{aligned} &n & n\\leq s \\\\ &s & n> s \\end{aligned} \\right . \\] \u200b\u56e0\u6b64\u200b\uff0c\u200b\u7a33\u6001\u200b\u7cfb\u7edf\u200b\u4e2d\u200b\u63a5\u53d7\u200b\u670d\u52a1\u200b\u7684\u200b\u5b9e\u4f53\u200b\u5e73\u5747\u200b\u6570\u91cf\u200b\u4e3a\u200b\uff1a
\\[ \\begin{aligned} L-L_q&=\\sum_{i=0}^s ip_i+\\sum_{i=s+1}^\\infty sp_i \\\\ &=\\sum_{i=0}^s \\frac{\\rho_0^i}{(i-1)!}p_0+s\\sum_{i=s+1}^\\infty \\frac{\\rho_0^i}{s!s^{i-s}}p_0 \\\\ &= \\sum_{i=0}^s \\frac{\\rho_0^i}{(i-1)!}p_0 + \\frac{\\rho_0^sp_0}{(s-1)!}\\sum_{i=1}^\\infty \\frac{\\rho_0^i}{s^i} \\\\ &= \\sum_{i=0}^s \\frac{\\rho_0^i}{(i-1)!}p_0 + \\frac{\\rho_0^{s+1}p_0}{(s-1)!(s-\\rho_0)} \\\\ &= \\frac{\\sum_{i=0}^s \\frac{\\rho_0^i}{(i-1)!}}{\\left(T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}\\right)} + \\frac{\\rho_0^{s+1}p_0}{(s-1)!(s-\\rho_0)} \\\\ &= \\frac{\\rho_0 T+1}{T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}} + \\frac{\\rho_0^{s+1}}{(s-1)!(s-\\rho_0)T+\\rho_0^s} \\\\ &= \\frac{(\\rho_0 T+1)(s-1)!(s-\\rho_0) + \\rho_0^{s+1}}{(s-1)!(s-\\rho_0)T+\\rho_0^s}\\\\ &= \\rho_0 + \\frac{(s-1)!(s-\\rho_0)}{(s-1)!(s-\\rho_0)T+\\rho_0^s} \\end{aligned} \\] \u200b\u987e\u5ba2\u200b\u7684\u200b\u5e73\u5747\u200b\u9017\u7559\u200b\u65f6\u95f4\u200b\\(W=\\frac{L}{\\lambda}\\)\uff1a
\\[ \\begin{aligned} W&=\\frac{L}{\\lambda} \\\\ &= \\frac{\\sum_{i=0}^\\infty ip_i}{\\lambda} \\\\ &= \\frac{\\sum_{i=1}^s \\left(\\frac{\\rho_0^i}{(i-1)!\\left(T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}\\right)}\\right) + \\sum_{i=s+1}^\\infty \\left(i\\frac{\\rho_0^i}{s!s^{i-s}\\left(T+\\frac{\\rho_0^s}{(s-1)!(s-\\rho_0)}\\right)}\\right) }{\\lambda} \\\\ &= \\frac{\\frac{T(s-1)!(s-\\rho_0)}{T(s-1)!(s-\\rho_0) + \\rho_0^s} + \\frac{\\rho_0^{s+1}(s-\\rho_0+1)/(s-\\rho_0)}{T(s-1)!(s-\\rho_0) + \\rho_0^s}}{\\lambda} \\\\ &= \\frac{T(s-1)!(s-\\rho_0) + \\rho_0^{s+1}(s-\\rho_0+1)/(s-\\rho_0)}{\\lambda(T(s-1)!(s-\\rho_0) + \\rho_0^s)} \\end{aligned} \\]"},{"location":"math/random-process/","title":"\u968f\u673a\u200b\u8fc7\u7a0b","text":" - \u200b\u9884\u5907\u200b\u77e5\u8bc6\u200b
- \u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b
- \u200b\u8bb0\u53f7\u200b
"},{"location":"math/random-process/basics/","title":"\u9884\u5907\u200b\u77e5\u8bc6","text":""},{"location":"math/random-process/basics/#_2","title":"\u53ef\u6d4b\u200b\u7a7a\u95f4\u200b\u3001\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b\u4e0e\u200b\u6982\u7387\u200b\u6d4b\u5ea6","text":"\\(\\renewcommand{\\geq}{\\geqslant}\\renewcommand{\\leq}{\\leqslant}\\) \u200b\u5f53\u200b\u4e00\u4e2a\u200b\u8bd5\u9a8c\u200b\u7684\u200b\u7ed3\u679c\u200b\u65e0\u6cd5\u200b\u9884\u5148\u786e\u5b9a\u200b\u65f6\u200b\uff0c\u200b\u79f0\u8be5\u200b\u5b9e\u9a8c\u200b\u4e3a\u200b\u968f\u673a\u200b\u8bd5\u9a8c\u200b\u3002\u200b\u968f\u673a\u200b\u8bd5\u9a8c\u200b\u53ef\u80fd\u200b\u51fa\u73b0\u200b\u7684\u200b\u6240\u6709\u200b\u7ed3\u679c\u200b\u96c6\u5408\u200b\u6784\u6210\u200b\u6837\u672c\u7a7a\u95f4\u200b\\(\\Omega\\)\uff0c\u200b\u6bcf\u4e2a\u200b\u53ef\u80fd\u200b\u7684\u200b\u7ed3\u679c\u200b\u79f0\u4e3a\u200b\u6837\u672c\u200b\u70b9\u200b\\(\\omega\\)\u3002\\(\\Omega\\)\u200b\u7684\u200b\u5b50\u96c6\u200b\u6784\u6210\u200b\u7684\u200b\u96c6\u5408\u200b\u79f0\u4e3a\u200b\u96c6\u7c7b\u200b\\(\\mathcal F\\)\u3002
\u200b\u53ef\u6d4b\u200b\u7a7a\u95f4\u200b
\u200b\u8bbe\u200b\\(\\mathcal F\\)\u200b\u4e3a\u200b\u7531\u200b\\(\\Omega\\)\u200b\u7684\u200b\u67d0\u4e9b\u200b\u5b50\u96c6\u200b\u6784\u6210\u200b\u7684\u200b\u975e\u200b\u7a7a\u96c6\u200b\u7c7b\u200b\uff0c\u200b\u82e5\u200b\u6ee1\u8db3\u200b\u4ee5\u4e0b\u200b\u6761\u4ef6\u200b\uff1a
- \u200b\u82e5\u200b\\(A\\in \\mathcal F\\)\uff0c\u200b\u5219\u200b\\(A^C = \\Omega - A\\in \\mathcal F\\)\u3002
- \u200b\u82e5\u200b\\(A_n\\in \\mathcal F\\)\uff0c\u200b\u5219\u200b\\(\\bigcup\\limits_{n=1}^\\infty A_n \\in \\mathcal F\\)
\u200b\u79f0\u200b\\(\\mathcal F\\)\u200b\u4e3a\u200b\\(\\sigma\\)\u200b\u57df\u200b\uff0c\\((\\Omega, \\mathcal F)\\)\u200b\u4e3a\u200b\u53ef\u6d4b\u200b\u7a7a\u95f4\u200b\u3002
\\(\\sigma\\)\u200b\u57df\u200b\\(\\mathcal F\\)\u200b\u5bf9\u200b\\(\\cap, \\cup, -\\)\u200b\u8fd0\u7b97\u200b\u5c01\u95ed\u200b\uff0c\u200b\u4efb\u4f55\u200b\u5143\u7d20\u200b\u7ecf\u8fc7\u200b\u53ef\u5217\u6b21\u200b\u8fd0\u7b97\u200b\u540e\u200b\u4ecd\u200b\u5c5e\u4e8e\u200b\\(\\mathcal F\\)\u3002
\u200b\u5bf9\u4e8e\u200b\u96c6\u7c7b\u200b\\(\\mathcal A\\)\uff0c\u200b\u5305\u542b\u200b\\(\\mathcal A\\)\u200b\u7684\u200b\\(\\sigma\\)\u200b\u57df\u200b\u7684\u200b\u4ea4\u200b\u79f0\u4e3a\u200b\\(\\mathcal A\\)\u200b\u751f\u6210\u200b\u7684\u200b\\(\\sigma\\)\u200b\u57df\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(\\sigma(\\mathcal A)\\)\u3002\u200b\u5982\u200b\uff1a\\(\\sigma(\\{\\varnothing, A, \\Omega\\}) = \\{\\varnothing, A, A^C, \\Omega\\}\\)\u3002\u200b\u7279\u6b8a\u200b\u5730\u200b\uff0c\u200b\u8bb0\u200b\\(\\mathcal B = \\sigma(\\{(-\\infty, \\alpha], \\forall \\alpha \\in \\mathbb R\\})\\)\u200b\u4e3a\u200bBorel\u200b\u57df\u200b\u3002Borel\u200b\u57df\u200b\u89e3\u51b3\u200b\u4e86\u200b\u6837\u672c\u7a7a\u95f4\u200b\u5728\u200b\\(\\mathbb R\\)\u200b\u4e0a\u200b\u8fde\u7eed\u200b\u7684\u200b\u95ee\u9898\u200b\u3002\u200b\u53ef\u4ee5\u200b\u8bc1\u660e\u200b\uff0c\\(\\forall a < b, [a, b]\\in \\mathcal B, (a, b]\\in \\mathcal B, [a, b)\\in \\mathcal B, (a, b)\\in \\mathcal B\\)\u3002\u200b\u5b9a\u4e49\u200b\\(\\mathcal B[a, b]\\)\u200b\u4e3a\u200b\u9650\u5236\u200b\u5728\u200b\\([a, b]\\)\u200b\u4e0a\u200b\u7684\u200bBorel\u200b\u57df\u200b\u3002
\u200b\u6982\u7387\u200b\u6d4b\u5ea6\u200b\u4e0e\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b
\u200b\u8bbe\u200b\\((\\Omega, \\mathcal F)\\)\u200b\u4e3a\u200b\u53ef\u6d4b\u200b\u7a7a\u95f4\u200b\uff0c\\(P: \\mathcal F\\rightarrow [0, 1]\\)\u200b\u4e3a\u200b\u5b9a\u4e49\u200b\u5728\u200b\\(\\mathcal F\\)\u200b\u4e0a\u200b\u7684\u200b\u96c6\u200b\u51fd\u6570\u200b\u3002\u200b\u4e14\u200b\\(P\\)\u200b\u6ee1\u8db3\u200b
- \u200b\u975e\u200b\u8d1f\u6027\u200b\uff1a\\(\\forall A\\in \\mathcal F, P(A)\\geq 0\\)
- \u200b\u89c4\u4e00\u6027\u200b\uff1a\\(P(\\Omega) = 1\\)
-
\u200b\u53ef\u5217\u200b\u53ef\u52a0\u6027\u200b\uff1a\u200b\u82e5\u200b\\(\\forall i\\in \\mathbb N, A_i\\in \\mathcal F\\)\uff0c\u200b\u4e14\u200b\\(\\forall i\\not = j, A_i\\cap A_j=\\varnothing\\)\uff0c\u200b\u5219\u200b
\\[ P\\left(\\bigcup_{n=0}^\\infty A_n\\right) = \\sum_{n=0}^\\infty P(A_n) \\]
\u200b\u79f0\u200b\\(P\\)\u200b\u4e3a\u200b\u53ef\u6d4b\u200b\u7a7a\u95f4\u200b\\((\\Omega, \\mathcal F)\\)\u200b\u4e0a\u200b\u7684\u200b\u6982\u7387\u200b\u6d4b\u5ea6\u200b\uff0c\\((\\Omega, \\mathcal F, P)\\)\u200b\u4e3a\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b\u3002\\(\\mathcal F\\)\u200b\u4e3a\u200b\u4e8b\u4ef6\u200b\u57df\u200b\uff0c\\(A\\in \\mathcal F\\)\u200b\u4e3a\u200b\uff08\u200b\u968f\u673a\u200b\uff09\u200b\u4e8b\u4ef6\u200b
\u200b\u6982\u7387\u200b\u6d4b\u5ea6\u200b\\(P\\)\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \u200b\u6709\u9650\u200b\u53ef\u52a0\u6027\u200b\uff1a\u200b\u53ef\u4ee5\u200b\u4ee4\u200b\\(A_{n+1} = A_{n+2} = \\cdots = \\varnothing\\)\uff0c\u200b\u7ed3\u5408\u200b\u53ef\u5217\u200b\u53ef\u52a0\u6027\u200b\u63a8\u51fa\u200b
- \\(P(A^C) = 1 - P(A)\\)
- \\(P(\\varnothing) = 0\\)
- \u200b\u96c6\u5408\u200b\u7684\u200b\u5305\u542b\u200b\u5173\u7cfb\u200b\uff1a\\(A\\subset B\\Rightarrow P(A)\\leq P(B)\\)
-
\u200b\u5bb9\u65a5\u200b\u539f\u7406\u200b\uff1a
\\[ P\\left(\\bigcup_{i=1}^n A_i\\right) = \\sum_{i=1}^n P(A_i) - \\sum_{1\\leq i < j\\leq n}P(A_i\\cap A_j) + \\cdots + (-1)^{n+1}P(A_1\\cap \\cdots \\cap A_n) \\] - \\(P(A\\cup B) = P(A) + P(B) - P(A\\cap B)\\)
- \\(P(A - B) = P(A\\cup B) - P(B) = P(A) - P(A\\cap B)\\)
- \\(P\\left(\\bigcup_{i=1}^n A_i\\right)\\leq \\sum_{i=1}^n P(A_i)\\)
\u200b\u6ee1\u8db3\u200b\\(A_n\\subset A_{n+1}\\)\u200b\u7684\u200b\u4e8b\u4ef6\u200b\u5217\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u79f0\u4e3a\u200b\u5355\u8c03\u200b\u589e\u200b\u5e8f\u5217\u200b\uff0c\u200b\u6ee1\u8db3\u200b\\(A_n\\supset A_{n+1}\\)\u200b\u7684\u200b\u4e8b\u4ef6\u200b\u5217\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u79f0\u4e3a\u200b\u5355\u8c03\u200b\u51cf\u200b\u5e8f\u5217\u200b\u3002\u200b\u7531\u6b64\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u4e8b\u4ef6\u200b\u5217\u200b\u7684\u200b\u6781\u9650\u200b\uff1a
- \u200b\u82e5\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u4e3a\u200b\u5355\u8c03\u200b\u589e\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5219\u200b\\(\\lim\\limits_{n\\rightarrow \\infty}A_n = \\bigcup_{i=1}^\\infty A_i\\)
- \u200b\u82e5\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u4e3a\u200b\u5355\u8c03\u200b\u51cf\u200b\u5e8f\u5217\u200b\uff0c\u200b\u5219\u200b\\(\\lim\\limits_{n\\rightarrow \\infty}A_n = \\bigcap_{i=1}^\\infty A_i\\)
\u200b\u4e8b\u4ef6\u200b\u5217\u200b\u7684\u200b\u6781\u9650\u200b\u6ee1\u8db3\u200b
\\[ \\lim_{n\\rightarrow\\infty}P(A_n) = P\\left(\\lim_{n\\rightarrow\\infty} A_n\\right) \\] \u200b\u53ef\u4ee5\u200b\u8bc1\u660e\u200b\uff0c\u200b\u5355\u70b9\u200b\u96c6\u200b\\(\\{a\\}\\)\u200b\u4e3a\u200b\u4e8b\u4ef6\u200b\u5217\u200b\\(\\{[a, a+1/n], n > 0\\}\\)\u200b\u7684\u200b\u6781\u9650\u200b\u3002
Borel-Cantelli\u200b\u5f15\u7406\u200b
\u200b\u8bbe\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u4e3a\u200b\u4e8b\u4ef6\u200b\u5e8f\u5217\u200b\uff0c\u200b\u6ee1\u8db3\u200b\\(\\sum_{i=1}^\\infty P(A_i) < \\infty\\)\uff0c\u200b\u5219\u200b
\\[ P\\left(\\lim_{i\\rightarrow\\infty}\\sup A_i\\right) \\triangleq P\\left(\\bigcap_{n=1}^\\infty \\bigcup_{i=n}^\\infty A_i\\right) = 0 \\] \u200b\u5b9a\u4e49\u200b\u6761\u4ef6\u200b\u6982\u7387\u200b
\\[ P(A|B) = \\frac{P(A\\cap B)}{P(B)} \\] \u200b\u82e5\u200b\u4e8b\u4ef6\u200b\\(A, B\\)\u200b\u6ee1\u8db3\u200b\\(P(A\\cap B) = P(A)P(B)\\)\uff0c\u200b\u5219\u200b\u79f0\u200b\u4e8b\u4ef6\u200b\\(A, B\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\uff0c\u200b\u4e14\u200b\\(P(A|B) = P(A)\\)\u3002\u200b\u540c\u7406\u200b\u53ef\u4ee5\u200b\u63a8\u5e7f\u200b\u81f3\u200b\\(n\\)\u200b\u4e2a\u200b\u4e8b\u4ef6\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u7684\u200b\u60c5\u51b5\u200b\u3002\u200b\u8bbe\u200b\\(A_1, \\cdots, A_n\\in \\mathcal F\\)\uff0c\u200b\u82e5\u200b\u5bf9\u4e8e\u200b\u5176\u4e2d\u200b\u4efb\u610f\u200b\\(k\\)\u200b\u4e2a\u200b\u4e8b\u4ef6\u200b\uff0c\u200b\u90fd\u200b\u6709\u200b
\\[ P(A_{i_1}\\cap\\cdots\\cap A_{i_k}) = P(A_{i_1})\\cdots P(A_{i_k}) \\] \u200b\u79f0\u200b\\(A_1, \\cdots, A_n\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u3002
\u200b\u82e5\u200b\\(\\{A_n, n\\geq 1\\}\\)\u200b\u4e3a\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u7684\u200b\u4e8b\u4ef6\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4e14\u200b\\(\\sum_{n=1}^\\infty P(A_n) = \\infty\\)\uff0c\u200b\u5219\u200b
\\[ P\\left(\\lim_{i\\rightarrow\\infty}\\sup A_i\\right) \\triangleq P\\left(\\bigcap_{n=1}^\\infty \\bigcup_{i=n}^\\infty A_i\\right) = 1 \\]"},{"location":"math/random-process/basics/#_3","title":"\u968f\u673a\u53d8\u91cf\u200b\u4e0e\u200b\u5206\u5e03\u200b\u51fd\u6570","text":"\u200b\u8bbe\u200b\u6837\u672c\u7a7a\u95f4\u200b\u4e3a\u200b\\(\\Omega\\)\u3002
"},{"location":"math/random-process/basics/#_4","title":"\u968f\u673a\u53d8\u91cf","text":"\u200b\u8bbe\u200b\\((\\Omega, \\mathcal F, P)\\)\u200b\u4e3a\u200b\u6982\u7387\u200b\u7a7a\u95f4\u200b\uff0c\\(X(\\omega)\\)\u200b\u4e3a\u200b\u5b9a\u4e49\u200b\u5728\u200b\\(\\Omega\\)\u200b\u4e0a\u200b\u7684\u200b\u5355\u503c\u200b\u5b9e\u200b\u51fd\u6570\u200b\uff0c\u200b\u5373\u200b\\(X: \\Omega\\rightarrow \\mathbb R\\)\uff0c\u200b\u82e5\u200b\\(\\forall a\\in \\mathbb R\\)\uff0c\u200b\u6709\u200b\\(\\{\\omega: X(\\omega) \\leq a\\}\\in \\mathcal F\\)\uff0c\u200b\u79f0\u200b\\(X(\\omega)\\)\u200b\u4e3a\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u7b80\u8bb0\u200b\u4e3a\u200b\\(X\\)\u3002\u200b\u5b9a\u4e49\u200b\\(F(x) = P(X\\leq x) = P(X\\in (-\\infty, X])\\)\u200b\u4e3a\u200b\\(X\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b\u3002
- \u200b\u79bb\u6563\u200b\u578b\u200b\u968f\u673a\u53d8\u91cf\u200b\uff1a\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X\\)\u200b\u7684\u200b\u53ef\u80fd\u200b\u53d6\u503c\u200b\u7684\u200b\u5168\u4f53\u200b\u662f\u200b\u53ef\u5217\u96c6\u200b\u6216\u8005\u200b\u6709\u9650\u200b\u96c6\u200b\u3002
-
\u200b\u8fde\u7eed\u578b\u200b\u968f\u673a\u53d8\u91cf\u200b\uff1a\u200b\u82e5\u200b\\(\\forall B\\in \\mathcal F\\)\uff0c\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\u51fd\u6570\u200b\\(f(x)\\)\u200b\u6ee1\u8db3\u200b
\\[ P(X\\in B) = \\int_B f(x)\\mathrm dx \\] \u200b\u79f0\u200b\\(X\\)\u200b\u4e3a\u200b\u8fde\u7eed\u578b\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\\(f(x)\\)\u200b\u4e3a\u200b\\(X\\)\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u3002
\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\u4e0e\u200b\u6982\u7387\u5206\u5e03\u200b\u51fd\u6570\u200b
\u200b\u6839\u636e\u200b\u6982\u7387\u5206\u5e03\u200b\u51fd\u6570\u200b\u7684\u200b\u5b9a\u4e49\u200b\uff0c\u200b\u6709\u200b
\\[ P(x < X\\leq x + h) = F(x + h) - F(x) = \\int_{x}^{x + h} f(x)\\mathrm dx = f(x)h + o(h) \\] \u200b\u4ee4\u200b\\(h\\rightarrow 0\\)\u200b\u5e76\u53d6\u200b\u6781\u9650\u200b\uff0c\u200b\u5f97\u5230\u200b
\\[ \\frac{\\mathrm dF(x)}{\\mathrm dx} = \\lim_{h\\rightarrow 0} \\frac{F(x + h) - F(x)}{h} = f(x) \\] \u200b\u5bf9\u4e8e\u200b\u4e8c\u7ef4\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X, Y\\)\uff0c\u200b\u5b9a\u4e49\u200b\u8054\u5408\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(F(x, y) = P(X\\leq x, Y\\leq y)\\)\uff0c\u200b\u8fb9\u7f18\u200b\u5206\u5e03\u200b\u4e3a\u200b\\(F_X(x) = P(X\\leq x), F_Y = P(Y\\leq y)\\)\u3002\u200b\u540c\u7406\u200b\u53ef\u4ee5\u200b\u5b9a\u4e49\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\\(f(x, y)\\)\uff1a
\\[ F(x, y) = \\int_{-\\infty}^x\\int_{-\\infty}^y f(v, u)\\mathrm du\\mathrm dv \\] \u200b\u82e5\u200b\\(F(x, y) = F_X(x)F_Y(y)\\)\uff0c\u200b\u79f0\u200b\\(X\\)\u200b\u4e0e\u200b\\(Y\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\u3002
"},{"location":"math/random-process/basics/#_5","title":"\u6570\u5b57\u200b\u7279\u5f81","text":"\u200b\u8bbe\u200b\\(X\\)\u200b\u4e3a\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(F(x)\\)\uff0c\u200b\u82e5\u200b\\(\\int_{-\\infty}^\\infty |x|\\mathrm dF(x)\\)\u200b\u5b58\u5728\u200b\uff0c\u200b\u5219\u200b\u5b9a\u4e49\u200b\\(X\\)\u200b\u7684\u200b\u671f\u671b\u200b\\(E(X)\\)\u200b\u4e3a\u200b
\\[ E(X) = \\int_{-\\infty}^\\infty x\\mathrm dF(x) \\] \u200b\u6570\u5b66\u200b\u671f\u671b\u200b\\(E(X)\\)\u200b\u6ee1\u8db3\u200b
\u200b\u5bf9\u4e8e\u200b\u79bb\u6563\u200b\u578b\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u6709\u200b
\\[ E(X) = \\sum_{i=1}^\\infty x_nP(X = x_n) \\] \u200b\u5bf9\u4e8e\u200b\u8fde\u7eed\u578b\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u6709\u200b
\\[ E(X) = \\int_{-\\infty}^\\infty xf(x)\\mathrm dx \\] \u200b\u82e5\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X, Y\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\uff0c\u200b\u5219\u200b\u6709\u200b
\\[ \\begin{aligned} E(XY) &= \\int_{-\\infty}^\\infty \\int_{-\\infty}^\\infty xyf(x, y)\\mathrm dx\\mathrm dy \\\\ &= \\int_{-\\infty}^\\infty \\int_{-\\infty}^\\infty xyf_X(x)f_Y(y)\\mathrm dx\\mathrm dy \\\\ &= \\int_{-\\infty}^\\infty xf_X(x)\\mathrm dx\\int_{-\\infty}^\\infty yf_Y(y)\\mathrm dy \\\\ &= E(X)E(Y) \\end{aligned} \\] \u200b\u5b9a\u4e49\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X\\)\u200b\u7684\u200b\u65b9\u5dee\u200b\u4e3a\u200b\\(\\sigma_X^2 = D(X) = E(X - E(X)) = E(X^2) - E^2(X)\\)\uff0c\u200b\u5b9a\u4e49\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X, Y\\)\u200b\u7684\u200b\u534f\u65b9\u5dee\u200b\u4e3a\u200b\\(\\mathrm{cov}(X, Y) = E(XY) - E(X)E(Y)\\)\uff0c\u200b\u76f8\u5173\u7cfb\u6570\u200b\u4e3a\u200b\\(\\rho = \\mathrm{cov}(X, Y) / (\\sigma_X\\sigma_Y)\\)\uff0c\\(k\\)\u200b\u9636\u77e9\u200b\u4e3a\u200b\\(E(X^k)\\)
\u200b\u5b9a\u4e49\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X\\)\u200b\u7684\u200b\u77e9\u6bcd\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(\\psi(t) = E\\left(e^{tX}\\right)\\)\uff0c\u200b\u7279\u5f81\u51fd\u6570\u200b\u4e3a\u200b\\(\\phi(t) = E\\left(e^{\\mathbf itX}\\right)\\)
\u200b\u77e9\u6bcd\u200b\u51fd\u6570\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \\(E\\left(X^k\\right) = \\psi^{(k)}(0)\\)
- \u200b\u8bbe\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X, Y\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(F_X(t), F_Y(t)\\)\uff0c\u200b\u77e9\u6bcd\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(\\psi_X(t), \\psi_Y(t)\\)\uff0c\u200b\u5219\u200b\\(\\psi_X(t) = \\psi_Y(t) \\Leftrightarrow F_X(t) = F_Y(t)\\)
\u200b\u7279\u5f81\u51fd\u6570\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b
- \u200b\u8bbe\u200b\u968f\u673a\u53d8\u91cf\u200b\\(X, Y\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b\u4e3a\u200b\\(F_X(t), F_Y(t)\\)\uff0c\u200b\u7279\u5f81\u51fd\u6570\u200b\u4e3a\u200b\\(\\phi_X(t), \\phi_Y(t)\\)\uff0c\u200b\u5219\u200b\\(\\phi_X(t) = \\phi_Y(t) \\Leftrightarrow F_X(t) = F_Y(t)\\)
- \\(i^kE(X^k) = \\phi^{(k)}(0)\\)
- \u200b\u82e5\u200b\\(X, Y\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\uff0c\u200b\u6709\u200b\\(\\phi_{X+Y}(t) = \\phi_{X}(t) + \\phi_{Y}(t)\\)
"},{"location":"math/random-process/basics/#_6","title":"\u5e38\u89c1\u200b\u968f\u673a\u53d8\u91cf\u200b\u7684\u200b\u5206\u5e03","text":" -
\u200b\u4e8c\u9879\u5206\u5e03\u200b\uff1a\\(X\\sim B(n, p)\\)
\\[ P(X = k) = \\binom{n}{k} p^k(1 - p)^{n - k} \\] -
\u200b\u6cca\u677e\u200b\u5206\u5e03\u200b\uff1a\\(X\\sim P(\\lambda)\\)
\\[ P(X = k) = \\frac{\\lambda^k}{k!}e^{-\\lambda} \\] -
\u200b\u51e0\u4f55\u200b\u5206\u5e03\u200b\uff1a\\(X\\sim G(p)\\)
\\[ P(X = k) = (1 - p)^{k - 1}p \\] -
\u200b\u5747\u5300\u5206\u5e03\u200b\uff1a\\(X\\sim U(a, b)\\)
\\[ f(x) = \\left\\{\\begin{aligned} & \\frac{1}{b-a} & a < x < b \\\\ & 0 & \\text{otherwise} \\end{aligned}\\right. \\] -
\u200b\u6b63\u6001\u5206\u5e03\u200b\uff1a\\(X\\sim N(\\mu, \\sigma^2)\\)
\\[ f(x) = \\frac{1}{\\sqrt{2\\pi}\\sigma} e^{-\\frac{(x-\\mu)^2}{2\\sigma^2}} \\] -
\u200b\u6307\u6570\u5206\u5e03\u200b\uff1a\\(X\\sim E(\\lambda)\\)
\\[ f(x) = \\left\\{\\begin{aligned} & \\lambda e^{-\\lambda x} & x\\geq 0 \\\\ & 0 & x < 0 \\end{aligned}\\right. \\]
"},{"location":"math/random-process/basics/#_7","title":"\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b","text":"\u200b\u5bf9\u4e8e\u200b\u8fde\u7eed\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b\u200b\\(E(X|Y = y)\\)\u200b\u7684\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
\\[ E(X|Y = y) = \\int_{-\\infty}^\\infty x\\frac{f(x, y)}{f_Y(y)}\\mathrm dx \\] \u200b\u5b9a\u4e49\u200b\\(E(X|Y)\\)\u200b\u4e3a\u200b\\(X\\)\u200b\u5173\u4e8e\u200b\\(Y\\)\u200b\u7684\u200b\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b\u200b
\\[ E(X|Y) = \\sum_j \\boldsymbol 1_{\\{Y = y_j\\}}(\\omega)E(X|Y=y_j) \\] \u200b\u5bf9\u4e8e\u200b\u79bb\u6563\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b\u200b\\(E(X|Y = y)\\)\u200b\u7684\u200b\u5b9a\u4e49\u200b\u5982\u4e0b\u200b\uff1a
\\[ E(X|Y = y) = \\sum_i x_iP(X=x_i | Y=y) \\] \u200b\u663e\u7136\u200b\uff0c\\(E(X|Y = y)\\)\u200b\u662f\u200b\\(y\\)\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5b9a\u4e49\u200b\u968f\u673a\u53d8\u91cf\u200b\\(E(X|Y)\\)\u200b\u4e3a\u200b\\(X\\)\u200b\u5173\u4e8e\u200b\\(Y\\)\u200b\u7684\u200b\u6761\u4ef6\u671f\u671b\u200b\uff0c\u200b\u82e5\u200b\\(E(X|Y)\\)\u200b\u6ee1\u8db3\u200b
- \\(E(X|Y)\\)\u200b\u662f\u200b\\(Y\\)\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u5f53\u200b\\(Y = y\\)\u200b\u65f6\u200b\uff0c\\(E(X|Y) = E(X|Y = y)\\)
-
\\(\\forall D\\in \\mathcal B\\)\uff0c\u200b\u6709\u200b
\\[ E[E(X|Y)|Y\\in D] = E(X|Y\\in D) \\]
\u200b\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b\u200b\u7684\u200b\u6027\u8d28\u200b
\u200b\u6761\u4ef6\u200b\u6570\u5b66\u200b\u671f\u671b\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6027\u8d28\u200b\uff1a
- \\(E(E(X|Y)) = EX\\)
- \u200b\u82e5\u200b\\(X, Y\\)\u200b\u76f8\u4e92\u200b\u72ec\u7acb\u200b\uff0c\u200b\u5219\u200b\\(E(X|Y) = EX\\)
- \\(E[g(X)h(Y)|Y] = h(Y)E(g(X)|Y)\\quad \\text{a.s.}\\)
"},{"location":"math/random-process/basics/#_8","title":"\u968f\u673a\u200b\u8fc7\u7a0b","text":"\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\u662f\u200b\u4e00\u65cf\u200b\u65e0\u7a77\u200b\u591a\u4e2a\u200b\uff0c\u200b\u76f8\u4e92\u200b\u6709\u5173\u200b\u7684\u200b\u968f\u673a\u53d8\u91cf\u200b\u3002\u200b\u8bbe\u200b\\(X(t, \\omega)\\)\u200b\u4e3a\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u5176\u4e2d\u200b\\(t\\in T\\subset \\mathbb R\\)\u200b\u4e3a\u200b\u53c2\u6570\u200b\u3002\u200b\u79f0\u200b\\(X_T = \\{X(t, \\omega), t\\in T\\}\\)\u200b\u4e3a\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\u3002
- \\(X(t, \\omega)\\)\u200b\u53ef\u4ee5\u200b\u7b80\u8bb0\u200b\u4e3a\u200b\\(X(t)\\)\uff1b
- \u200b\u5f53\u200b\\(T\\)\u200b\u4e3a\u200b\u53ef\u5217\u200b\u96c6\u65f6\u200b\uff0c\u200b\u79f0\u200b\\(X_T\\)\u200b\u4e3a\u200b\u968f\u673a\u200b\u5e8f\u5217\u200b\uff1b
- \\(X_T\\)\u200b\u7684\u200b\u53d6\u503c\u200b\u8303\u56f4\u200b\u79f0\u4e3a\u200b\u72b6\u6001\u200b\u7a7a\u95f4\u200b\\(S\\)\uff1b
- \\(X(\\cdot, \\omega), \\omega\\in \\Omega\\)\u200b\u662f\u200b\u5173\u4e8e\u200b\\(t\\)\u200b\u7684\u200b\u51fd\u6570\u200b\uff0c\u200b\u79f0\u4e3a\u200b\u8f68\u9053\u200b\u3002
"},{"location":"math/random-process/notations/","title":"\u8bb0\u53f7","text":"\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\u4e2d\u200b\u5e38\u7528\u200b\u7684\u200b\u8bb0\u53f7\u200b\u8868\u793a\u200b
"},{"location":"math/random-process/notations/#_2","title":"\u9884\u5907\u200b\u77e5\u8bc6","text":"\u200b\u53ef\u5217\u96c6\u200b
\u200b\u82e5\u200b\u4e00\u4e2a\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u4e2d\u200b\u7684\u200b\u5143\u7d20\u200b\u53ef\u4ee5\u200b\u4ee5\u200b\u5e8f\u5217\u200b\\(\\{a_n\\}\\)\u200b\u7684\u200b\u5f62\u5f0f\u200b\u8868\u793a\u200b\uff0c\u200b\u5373\u200b\u5b58\u5728\u200b\u4e00\u4e2a\u200b\\(\\mathbb N_+\\rightarrow A\\)\u200b\u7684\u200b\u53cc\u5c04\u200b\uff0c\u200b\u79f0\u200b\u96c6\u5408\u200b\\(A\\)\u200b\u4e3a\u200b\u53ef\u5217\u96c6\u200b\u3002
\u200b\u51e0\u4e4e\u200b\u5904\u5904\u200b
\u200b\u8bbe\u200b\\(Z_1, Z_2\\)\u200b\u4e3a\u200b\u968f\u673a\u53d8\u91cf\u200b\uff0c\u200b\u4e14\u200b\\(P(Z_1 = Z_2) = 1\\)\uff0c\u200b\u79f0\u200b\\(Z_1, Z_2\\)\u200b\u51e0\u4e4e\u200b\u5904\u5904\u200b\u76f8\u7b49\u200b\uff0c\u200b\u8bb0\u200b\u4f5c\u200b\\(Z_1 = Z_2\\quad \\text{a.s.}\\)
"},{"location":"math/random-process/notations/#_3","title":"\u6cca\u677e\u200b\u8fc7\u7a0b","text":"\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b
\u200b\u82e5\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\\(\\{N(t), t\\geq 0\\}\\)\u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\uff0c\u200b\u79f0\u200b\\(N(t)\\)\u200b\u4e3a\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b\u3002
- \\(N(t)\\in \\mathbb N\\)\uff0c\u200b\u5373\u200b\\(N(t)\\)\u200b\u53d6\u503c\u200b\u4e3a\u200b\u975e\u8d1f\u200b\u6574\u6570\u200b
- \\(\\forall t > s, N(t)\\geq N(s)\\)
"},{"location":"math/random-process/poisson/","title":"\u6cca\u677e\u200b\u8fc7\u7a0b","text":"\\(\\renewcommand{\\geq}{\\geqslant}\\renewcommand{\\leq}{\\leqslant}\\) \u200b\u6ee1\u8db3\u200b\u5982\u4e0b\u200b\u6761\u4ef6\u200b\u7684\u200b\u968f\u673a\u200b\u8fc7\u7a0b\u200b\\(\\{N(t), t\\geq 0\\}\\)\u200b\u4e3a\u200b\u65f6\u200b\u9f50\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u3002
- \\(\\{N(t), t\\geq 0\\}\\)\u200b\u4e3a\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u4e14\u200b\\(N(0) = 0\\)\uff1b
- \\(\\{N(t), t\\geq 0\\}\\)\u200b\u4e3a\u200b\u72ec\u7acb\u200b\u589e\u91cf\u200b\u8fc7\u7a0b\u200b\uff1b
- \\(\\{N(t), t\\geq 0\\}\\)\u200b\u5177\u5907\u200b\u589e\u91cf\u200b\u5e73\u7a33\u6027\u200b\uff0c\u200b\u5373\u200b\\(N(t) - N(s)\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u4ec5\u200b\u4e0e\u200b\\(t - s\\)\u200b\u6709\u5173\u200b
-
\u200b\u5bf9\u4e8e\u200b\u5145\u5206\u200b\u5c0f\u200b\u7684\u200b\\(\\Delta t > 0\\)\uff0c\u200b\u6709\u200b
\\[ \\left\\{ \\begin{aligned} P(N(t + \\Delta t) - N(t) = 1) &= \\lambda \\Delta t + o(\\Delta t) \\\\ P(N(t + \\Delta t) - N(t) \\geq 2) &= o(\\Delta t) \\end{aligned} \\right. \\]
"},{"location":"math/random-process/poisson/#_2","title":"\u589e\u91cf\u200b\u7684\u200b\u6982\u7387\u5206\u5e03","text":"\u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u589e\u91cf\u200b\\(N(t + s) - N(s)\\)\u200b\u670d\u4ece\u200b\u53c2\u6570\u200b\u4e3a\u200b\\(\\lambda t\\)\u200b\u7684\u200b\u6cca\u677e\u200b\u5206\u5e03\u200b\uff0c\u200b\u5373\u200b
\\[ P[N(t + s) - N(s) = k] = \\frac{(\\lambda t)^k}{k!}e^{-\\lambda t} \\] \u200b\u8bc1\u660e\u200b \u200b\u6839\u636e\u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u589e\u91cf\u200b\u5e73\u7a33\u6027\u200b\uff0c\u200b\u6709\u200b
\\[ P(N(s + t) - N(s) = n) = P(N(t) = n) \\] -
\\(n = 0\\)\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(\\{N(h + t) = 0, h > 0\\} = \\{N(h+ t) - N(t) = 0, N(t) = 0, h > 0\\}\\)\uff0c\u200b\u6839\u636e\u200b\u589e\u91cf\u200b\u72ec\u7acb\u6027\u200b\uff0c\u200b\u6709\u200b
\\[ \\begin{aligned} P(N(h + t) = 0) &= P(N(h + t) - N(t) = 0) P(N(t) = 0) \\\\ &= P(N(h) = 0) P(N(t) = 0) \\end{aligned} \\] \u200b\u6839\u636e\u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u6027\u8d28\u200b\\(P(N(t + \\Delta t) - N(t) = 1) = \\lambda \\Delta t + o(\\Delta t)\\)\uff0c\u200b\u6709\u200b\uff1a
\\[ \\begin{aligned} \\lim_{h\\rightarrow 0} \\frac{P(t + h) - P(t)}{h} &= \\lim_{h\\rightarrow 0} \\frac{P(t)(1 - \\lambda h - o(h)) - P(t)}{h} \\\\ &= -\\lambda P(t) - \\lim_{h\\rightarrow 0} \\frac{o(h)}{h} \\\\ &= -\\lambda P(t) \\end{aligned} \\] \u200b\u89e3\u200b\u5fae\u5206\u65b9\u7a0b\u200b\\(P_0'(t) = -\\lambda P_0(t)\\)\uff0c\u200b\u89e3\u5f97\u200b\\(P_0(t) = e^{-\\lambda t + C}\\)\uff0c\u200b\u53c8\u200b\u56e0\u4e3a\u200b\\(N(0) = 0, P_0(N(0) = 0) = 1\\)\uff0c\u200b\u5f97\u200b\\(C = 0\\)\uff0c\u200b\u4ece\u800c\u200b\u6709\u200b
\\[ P_0(t) = e^{-\\lambda t} \\] -
\\(n > 0\\)\u200b\u65f6\u200b\uff0c\\(\\{N(t + h) = n\\} = \\bigcup_{k = 0} ^ n \\{N(t) = k, N(t + h) - N(t) = (n - k)\\}\\)\uff0c\u200b\u800c\u200b\\(n - k \\geq 2\\)\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(P(N(t + h) - N(t) = n - k) = o(h)\\)\uff0c\u200b\u7531\u200b\u589e\u91cf\u200b\u72ec\u7acb\u6027\u200b
\\[ \\begin{aligned} P(N(t + h) = n) &= \\sum_{k = 0} ^ n P(N(t) = k) P(N(t + h) - N(t) = n - k) \\\\ &= P(N(t) = n)(1 - \\lambda t - o(h)) + P(N(t) = n - 1)(\\lambda t + o(h)) \\\\ &+ \\sum_{k = 2}^n P(N(t) = n - k)o(h) \\end{aligned} \\] \u200b\u7531\u6b64\u200b
\\[ \\begin{aligned} &\\lim_{h\\rightarrow 0} \\frac{P(N(t + h) = n) - P(N(t) = n)}{h} \\\\ =& \\lim_{h\\rightarrow 0}\\frac{P(N(t) = n)(\\sum_{k = 2}^n P(N(t) = n - k)o(h) - P(N(t) = n)}{h} \\\\ +& \\lim_{h\\rightarrow 0}\\frac{\\sum_{k = 2}^n P(N(t) = n - k)o(h) - P(N(t) = n)}{h} \\\\ =& \\lim_{h\\rightarrow 0}\\frac{P(N(t) = n)(- \\lambda t) + P(N(t) = n - 1)(\\lambda t)}{h} \\\\ \\end{aligned} \\] \u200b\u5f97\u5230\u200b
\\[ P_n'(t) = -\\lambda P_n(t) + \\lambda P_{n-1}(t) \\] \u200b\u8003\u8651\u200b\u7ea6\u675f\u6761\u4ef6\u200b\\(P_n(0) = 0\\)\uff0c\u200b\u89e3\u5f97\u200b
\\[ \\frac{\\mathrm d}{\\mathrm dt}[e^{\\lambda t} P_n(t)] = \\lambda e^{\\lambda t}P_{n - 1}(t) \\] - \\(n = 0\\)\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(P_n(t) = e^{-\\lambda t} = \\frac{(\\lambda t)^0}{0!}e^{-\\lambda t}\\)
-
\u200b\u8bbe\u200b\u5bf9\u4e8e\u200b\\(n < k\\)\u200b\u65f6\u200b\u547d\u9898\u200b\u6210\u7acb\u200b\uff0c\u200b\u53ea\u200b\u9700\u200b\u8bc1\u660e\u200b\\(n = k\\)\u200b\u65f6\u200b\u547d\u9898\u200b\u6210\u7acb\u200b\u5373\u53ef\u200b\uff0c\u200b\u6709\u200b
\\[ \\begin{aligned} P_k(t) &= e^{-\\lambda t}\\int \\frac{\\mathrm d}{\\mathrm dt}[e^{\\lambda t} P_k(t)] \\mathrm dt \\\\ &= e^{-\\lambda t}\\int \\lambda e^{\\lambda t}P_{k - 1}(t) \\mathrm dt \\\\ &= e^{-\\lambda t}\\int \\lambda \\frac{(\\lambda t)^{k-1}}{(k-1)!} \\mathrm dt \\\\ &= \\frac{(\\lambda t)^k}{k!}e^{-\\lambda t} \\end{aligned} \\]
"},{"location":"math/random-process/poisson/#_3","title":"\u76f8\u90bb\u200b\u4e8b\u4ef6\u200b\u65f6\u95f4\u200b\u95f4\u9694\u200b\u7684\u200b\u6982\u7387\u5206\u5e03","text":"\u200b\u8bbe\u200b\\(\\{N(t), t \\geq 0\\}\\)\u200b\u4e3a\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b\uff0c\u200b\u8bbe\u200b\\(S_n\\)\u200b\u8868\u793a\u200b\u7b2c\u200b\\(n\\)\u200b\u4e2a\u200b\u65f6\u95f4\u200b\u53d1\u751f\u200b\u7684\u200b\u65f6\u523b\u200b\uff0c\u200b\u5373\u200b\\(S_n = \\inf\\{t, t > S_{n - 1}, N(t) = n\\}\\)\uff0c\u200b\u7279\u522b\u200b\u5730\u200b\uff0c\u200b\u4ee4\u200b\\(S_0 = 0\\)\u3002\\(S_n, N(t)\\)\u200b\u7684\u200b\u4e8b\u4ef6\u200b\u6ee1\u8db3\u200b
\\[ \\begin{aligned} \\{S_n \\leq t\\} &\\equiv \\{N(t) \\geq n\\} \\\\ \\{N(t) = n\\} &\\equiv \\{S_n\\leq t < S_{n + 1}\\} \\equiv \\{S_n\\leq t\\} - \\{S_{n+1}\\leq t\\} \\end{aligned} \\] \u200b\u7531\u4e8e\u200b\\(\\{S_n \\leq t\\} \\equiv \\{N(t) \\geq n\\}\\)\uff0c\u200b\u53ef\u4ee5\u200b\u8ba1\u7b97\u200b\\(S_n\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u51fd\u6570\u200b
\\[ P(S_n\\leq t) = P(N(t)\\geq n) = 1 - e^{-\\lambda t}\\sum_{k=0}^{n-1} \\frac{(\\lambda t)^{k}}{k!} \\] \u200b\u7279\u522b\u200b\u5730\u200b\uff0c\u200b\u5f53\u200b\\(n = 1\\)\u200b\u65f6\u200b\uff0c\u200b\u6709\u200b\\(P(X_1\\leq t) = P(S_1\\leq t) = (1 - e^{-\\lambda t}) I_{\\{t\\geq 0\\}}\\)
\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b\\(\\{N(t), t\\geq 0\\}\\)\u200b\u662f\u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u5145\u8981\u6761\u4ef6\u200b\u662f\u200b\\(\\{X_n = S_{n} - S_{n-1}, n\\geq 1\\}\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u5206\u5e03\u200b\uff0c\u200b\u670d\u4ece\u200b\u7684\u200b\u5206\u5e03\u200b\u4e3a\u200b\u53c2\u6570\u200b\\(\\lambda\\)\u200b\u7684\u200b\u6307\u6570\u5206\u5e03\u200b\u3002
\u200b\u8bc1\u660e\u200b -
\\(\\Leftarrow\\)\uff1a\u200b\u5fc5\u8981\u6027\u200b\u8bc1\u660e\u200b\uff0c\u200b\u5148\u6c42\u200b\\(S_1, \\cdots, S_n\\)\u200b\u7684\u200b\u8054\u5408\u200b\u6982\u7387\u5bc6\u5ea6\u51fd\u6570\u200b\uff0c\u200b\u8bbe\u200b\\(t_1 < t_2 < \\cdots < t_n\\)\uff0c\u200b\u8bbe\u200b\\(h\\)\u200b\u4e3a\u200b\u5145\u5206\u200b\u5c0f\u200b\u7684\u200b\u6b63\u6570\u200b\uff0c\u200b\u6ee1\u8db3\u200b
\\[ t_1 + \\frac h2 < t_2 - \\frac h2 < t_2 + \\frac h2 < \\cdots < t_n - \\frac h2 \\] \u200b\u8003\u8651\u200b\u4e8b\u4ef6\u200b\\(A\\)
\\[ \\begin{aligned} A& \\\\ &\\equiv \\left\\{t_1 - \\frac h2 < S_1 \\leq t_1 + \\frac h2, t_2 - \\frac h2 < S_2 \\leq t_2 + \\frac h2, \\cdots, t_n - \\frac h2 < S_n \\leq t_n + \\frac h2\\right\\} \\\\ \\equiv & \\left\\{N\\left(t_1 - \\frac h2\\right) = 0, N\\left(t_{i+1} - \\frac h2\\right) - N\\left(t_i + \\frac h2\\right) = 0, N\\left(t_{i} + \\frac h2\\right) - N\\left(t_{i} - \\frac h2\\right) = 1\\right\\} \\\\ & 0\\leq i\\leq n - 1 \\end{aligned} \\] \u200b\u800c\u200b\u6839\u636e\u200b\u6cca\u677e\u200b\u8fc7\u7a0b\u200b\u7684\u200b\u6027\u8d28\u200b
\\[ \\begin{aligned} P\\left(N\\left(t_n + \\frac h2\\right) - N\\left(t_n - \\frac h2\\right)= 1\\right) &= \\lambda h + o(h) \\\\ P\\left(N\\left(t_n + \\frac h2\\right) - N\\left(t_n - \\frac h2\\right)\\geq 2\\right) &= o(h) \\\\ \\end{aligned} \\] \u200b\u6709\u200b
\\[ P(A) = (\\lambda h)^ne^{-\\lambda (t_n + h/2)} + o\\left(h^n\\right) = \\lambda ^nh^ne^{-\\lambda t_n} + o\\left(h^n\\right) \\] \u200b\u56e0\u6b64\u200b\uff0c\\(\\left(S_1, \\cdots, S_n\\right)\\)\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u200b\u4e3a\u200b
\\[ f(t_1, \\cdots, t_n) = \\left\\{ \\begin{aligned} & \\lambda^n e^{-\\lambda t_n} & 0 < t_1 < \\cdots < t_n \\\\ & 0 & \\mathrm{otherwise} \\end{aligned} \\right. \\] \u200b\u800c\u200b\\(X_n = S_n - S_{n-1}\\)\uff0c\u200b\u8bbe\u200b\\(x_n = t_n - t_{n - 1}\\)\uff0c\u200b\u5219\u200b\\(t_n = \\sum_{i=1}^n x_n\\)\uff0c\u200b\u4ece\u800c\u200b\u53d8\u6362\u200b\u7684\u200bJacob\u200b\u77e9\u9635\u200b\u4e3a\u200b
\\[ J = \\frac{\\partial (t_1, \\cdots, t_n)}{\\partial (x_1, \\cdots, x_n)} = \\begin{vmatrix} 1 & 0 & \\cdots & 0 \\\\ 1 & 1 & \\cdots & 0 \\\\ \\vdots & \\vdots & \\ddots & \\vdots \\\\ 1 & 1 & \\cdots & 1 \\end{vmatrix} \\] \u200b\u56e0\u6b64\u200b\\(X_1, \\cdots, X_n\\)\u200b\u7684\u200b\u6982\u7387\u5bc6\u5ea6\u200b\u4e3a\u200b
\\[ g(x_1, \\cdots, x_n) = \\lambda^n e^{-\\lambda (x_1 + \\cdots + x_n)} = \\prod_{i=1}^n \\left(\\lambda e^{-\\lambda x_i}\\right), x_i \\geq 0 \\] \u200b\u56e0\u6b64\u200b\\(X_1, \\cdots, X_n\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u6307\u6570\u5206\u5e03\u200b\u3002
-
\\(\\Rightarrow\\)\uff1a\u200b\u5145\u5206\u6027\u200b\u8bc1\u660e\u200b\uff0c\u200b\u8bbe\u200b\\(\\{X_k, k\\geq 1\\}\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u6307\u6570\u5206\u5e03\u200b\uff0c\u200b\u8bbe\u200b\\(S_0 = 0, S_n = S_0 + \\sum_{i = 1}^n X_i\\)\u3002\u200b\u5b9a\u4e49\u200b
\\[ N(t) = \\sum_{n=1}^\\infty I_{\\{S_n\\leq t\\}} \\] - \u200b\u7531\u4e8e\u200b\\(I_{\\{S_n\\leq t\\}}\\in \\mathbb N\\)\uff0c\u200b\u5219\u200b\\(N(t)\\in \\mathbb N\\)\u3002
-
\u200b\u5bf9\u4e8e\u200b\\(t > s\\)\uff0c\u200b\u6709\u200b
\\[ N(t) - N(s) = \\sum_{n = 1}^\\infty I_{\\{S_n\\leq t\\}}- I_{\\{S_n\\leq s\\}} \\] \u200b\u800c\u200b\\(S_n - S_{n-1} = X_n > 0\\)\uff0c\u200b\u56e0\u6b64\u200b\\(S_n\\)\u200b\u4e3a\u200b\u5355\u8c03\u200b\u589e\u200b\u5e8f\u5217\u200b\uff0c\u200b\u4ece\u800c\u200b\\(\\{S_n\\leq s\\}\\subset \\{S_n\\leq t\\}\\)\uff0c\u200b\u5373\u200b\\(I_{\\{S_n\\leq t\\}}- I_{\\{S_n\\leq s\\}} \\geq 0\\)\uff0c\u200b\u56e0\u6b64\u200b\\(N(t) - N(s)\\)
\u200b\u53ef\u200b\u5f97\u200b\\(N(t)\\)\u200b\u4e3a\u200b\u8ba1\u6570\u200b\u8fc7\u7a0b\u200b\u3002\u200b\u4ee5\u4e0b\u200b\u8ba1\u7b97\u200b\\(S_n\\)\u200b\u7684\u200b\u5206\u5e03\u200b\u3002\u200b\u5df2\u77e5\u200b\\(X_1, \\cdots, X_n\\)\u200b\u72ec\u7acb\u200b\u540c\u200b\u6307\u6570\u5206\u5e03\u200b\uff0c\u200b\u8bbe\u200b\\(t_n = \\sum_{i=1}^n x_i\\)\uff0c\u200b\u5219\u200b\\(x_n = t_n - t_{n-1}\\)\uff0c\u200b\u4ece\u800c\u200bJacob\u200b\u77e9\u9635\u200b\u4e3a\u200b
\\[ J = \\frac{\\partial (x_1, \\cdots, x_n)}{\\partial (t_1, \\cdots, t_n)} = \\begin{vmatrix} 1 & 0 & 0 & \\cdots & 0 \\\\ -1 & 1 & 0 & \\cdots & 0 \\\\ 0 & -1 & 1 & \\cdots & 0 \\\\ \\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\ 0 & 0 & 0 & \\cdots & 1 \\end{vmatrix} \\] \u200b\u800c\u200b\\(X_1, \\cdots, X_n\\)\u200b\u7684\u200b\u8054\u5408\u200b\u6982\u7387\u5bc6\u5ea6\u200b\u4e3a\u200b
\\[ g(x_1, \\cdots, x_n) = \\lambda^n e^{-\\lambda (x_1 + \\cdots + x_n)} = \\prod_{i=1}^n \\left(\\lambda e^{-\\lambda x_i}\\right), x_i \\geq 0 \\] \u200b\u56e0\u6b64\u200b\\(S_1, \\cdots, S_n\\)\u200b\u7684\u200b\u8054\u5408\u200b\u6982\u7387\u5bc6\u5ea6\u200b\u4e3a\u200b
\\[ f(t_1, \\cdots, t_n) = \\left\\{ \\begin{aligned} & \\lambda^n e^{-\\lambda t_n} & 0 < t_1 < \\cdots < t_n \\\\ & 0 & \\mathrm{otherwise} \\end{aligned} \\right. \\]
"},{"location":"notes/2020/","title":"\u4e00\u4e9b\u200b\u5f88\u200b\u559c\u6b22\u200b\u7684\u200b\u63a8\u9001","text":"\u300a\u200b\u6628\u665a\u200b\u300b by \u200b\u8001\u9f20\u200b\u4ec0\u4e48\u200b\u90fd\u200b\u77e5\u9053\u200b
\u300a\u200b\u6740\u6b7b\u200b\u65e0\u804a\u200b\u7684\u200b\u540c\u65f6\u200b\uff0c\u200b\u4f60\u200b\u4e5f\u200b\u5728\u200b\u6740\u6b7b\u200b\u81ea\u5df1\u200b\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u75db\u82e6\u200b\u7684\u200b\u4e00\u767e\u5f20\u200b\u5e95\u7247\u200b\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u603b\u200b\u4e0d\u80fd\u200b\u4e27\u6c14\u200b\u592a\u4e45\u200b\u5427\u200b\u3002\u300b by \u200b\u6982\u7387\u8bba\u200b
\u300a\u200b\u6211\u4eec\u200b\u628a\u200b\u8fd9\u573a\u200b\u521d\u96ea\u200b\u505a\u6210\u200b\u4e86\u200b\u7535\u5f71\u6d77\u62a5\u200b\u300b by \u200b\u6e05\u534e\u5927\u5b66\u200b\u6e05\u65b0\u200b\u65f6\u62a5\u200b
\u300a\u200b\u56f0\u4e8e\u200b\u4eba\u8138\u8bc6\u522b\u200b\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u65b0\u200b\u7684\u200b\u5341\u5e74\u200b\uff0c\u200b\u4eba\u751f\u200b\u7684\u200b\u5947\u5e7b\u200b\u6f02\u6d41\u200b\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u6587\u827a\u200b\u662f\u200b\u4e00\u573a\u200b\u9a97\u5c40\u200b\u5417\u200b\uff1f\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u4e00\u7897\u200b\u7c73\u200b\u8c46\u8150\u200b\uff0c\u200b\u7a7f\u8d8a\u200b\u5c71\u6d77\u200b\u300b by \u200b\u4eba\u7269\u200b
\u300a\u200b\u4fdd\u7814\u200b\u5931\u8d25\u200b\u4ee5\u540e\u200b\uff0c\u200b\u6211\u200b\u53c8\u200b\u8003\u200b\u4e86\u200b\u6b21\u200b\u6e05\u534e\u200b\u300b by \u200b\u6e05\u534e\u200b\u7814\u8bfb\u200b\u95f4\u200b
\u300a\u200b\u4eca\u5929\u200b\u662f\u200b2020\u200b\u5e74\u200b\u4f60\u200b\u5728\u200b\u6e05\u534e\u200b\u7206\u809d\u200b\u7684\u200b\u7b2c\u200b366\u200b\u5929\u200b\u300b by \u200b\u6e05\u534e\u5927\u5b66\u200b\u6e05\u65b0\u200b\u65f6\u62a5\u200b
"},{"location":"notes/2021/","title":"\u4e00\u4e9b\u200b\u5f88\u200b\u559c\u6b22\u200b\u7684\u200b\u63a8\u9001","text":"\u300a2020 \u200b\u6700\u200b\u820d\u4e0d\u5f97\u200b\u5220\u200b\u7684\u200b\u7167\u7247\u200b\u300b by \u200b\u6e05\u534e\u5927\u5b66\u200b
\u200b\u665a\u5b89\u200b\u6d77\u62a5\u200b by \u200b\u90d1\u5dde\u200b\u53d1\u5e03\u200b
\u200b\u77e5\u4e4e\u200b\u5b87\u5b99\u200b\u91cc\u200b\u7684\u200b\u90a3\u4e9b\u200b\u8d22\u5bcc\u200b\u5bc6\u7801\u200b by \u200b\u4e3a\u200b\u4f60\u200b\u5199\u200b\u4e00\u4e2a\u200b\u6545\u4e8b\u200b
\u200b\u540c\u5b66\u200b\uff0c\u200b\u8fd8\u200b\u8bb0\u5f97\u200b\u5f53\u5e74\u200b\u90a3\u9053\u200b\u9ad8\u8003\u9898\u200b\u5417\u200b\uff1f by \u200b\u6e05\u534e\u5927\u5b66\u200b
\u200b\u7ea2\u200b\u4e86\u200b\u7ea2\u200b\u4e86\u200b\uff0c\u200b\u8fd9\u6b21\u200b\u771f\u7684\u200b\u7ea2\u200b\u4e86\u200b by GQ\u200b\u5b9e\u9a8c\u5ba4\u200b
\u200b\u751f\u6d3b\u200b\u5c0f\u7a8d\u95e8\u200b \u200b\u4e4b\u200b \u200b\u5982\u4f55\u200b\u6577\u884d\u200b\u5973\u751f\u8282\u200b by \u200b\u55e8\u200b\u76ae\u200b\u8fd0\u8425\u90e8\u200b
\u200b\u6c99\u5c18\u66b4\u200b\u5bf9\u200b\u6e05\u534e\u56ed\u200b\u8bf4\u200b\uff0c\u200b\u4eca\u5929\u200b\u7ed9\u200b\u4f60\u200b\u70b9\u200b\u989c\u8272\u200b\u770b\u770b\u200b by \u200b\u5bf9\u200b\u725b\u200b\u8c08\u6e05\u200b
"},{"location":"notes/2022/","title":"\u4e00\u4e9b\u200b\u5f88\u200b\u559c\u6b22\u200b\u7684\u200b\u63a8\u9001","text":"\u200b\u665a\u5b89\u200b\u6d77\u62a5\u200b by \u200b\u90d1\u5dde\u200b\u53d1\u5e03\u200b
\u200b\u6e05\u534e\u200b\u5bf9\u200b\u4f60\u200b\u8bf4\u200b\u665a\u5b89\u200b\uff01 by \u200b\u6e05\u534e\u5927\u5b66\u200b
\u200b\u5c0f\u533a\u200b\u88ab\u200b\u5c01\u200b\u4e94\u5929\u200b\u540e\u200b\uff0c\u200b\u6211\u200b\u6e10\u6e10\u200b\u61c2\u200b\u4e86\u200b by \u200b\u96f7\u53d4\u200b\u5199\u200b\u6545\u4e8b\u200b
\u201c\u200b\u6211\u4eec\u200b\u7ec8\u200b\u4f1a\u200b\u627e\u5230\u200b\u610f\u4e49\u200b\u3002\u201d by \u200b\u6e05\u534e\u5927\u5b66\u200b
40\u200b\u4e2a\u200b\u975e\u5fc5\u8981\u200b\u751f\u6d3b\u200b\u4e0b\u200b\u7684\u200b\u5e78\u798f\u200b\u77ac\u95f4\u200b by \u200b\u5168\u5143\u200b\u5149\u6ed1\u200b
\u200b\u7ba1\u200b\u4ed6\u200b\u51e0\u5c81\u200b\uff0c\u200b\u9752\u6625\u200b\u4e07\u5c81\u200b by \u200b\u5c0f\u6797\u200b
\u300c\u200b\u65f6\u4ee3\u200b\u4e4b\u97f3\u200b\u300d\u200b\u53bb\u200b\u54ea\u513f\u200b\u4e86\u200b\uff1f by \u200b\u4eba\u7269\u200b
\u200b\u5e94\u200b \u200b\u6da6\u200b \u200b\u5c3d\u200b \u200b\u6da6\u200b by \u200b\u5168\u5143\u200b\u5149\u6ed1\u200b
\u200b\u6bd5\u4e1a\u200b\u7279\u520a\u200b | \u200b\u634c\u200b\u6765\u200b\u65e0\u6059\u200b\uff0c\u200b\u540e\u4f1a\u6709\u671f\u200b by \u200b\u6e05\u534e\u5927\u5b66\u200b\u6e05\u65b0\u200b\u65f6\u62a5\u200b
\u200b\u6bd5\u4e1a\u200b\u65f6\u200b\uff0c\u200b\u4f60\u200b\u6700\u200b\u60f3\u200b\u5e26\u8d70\u200b\u7684\u200b\u4e00\u4ef6\u200b\u4e1c\u897f\u200b\u662f\u200b\uff1f by \u200b\u6e05\u534e\u5927\u5b66\u200b
\u200b\u6bd5\u4e1a\u200b\u5feb\u4e50\u200b | \u200b\u7247\u523b\u200b\u6210\u4e3a\u200b\u6c38\u6052\u200b by \u200b\u957f\u6b4c\u200b\u695a\u5929\u200b\u78a7\u200b
\u200b\u4fdd\u7814\u200b\u5931\u8d25\u200b\u4e86\u200b\uff0c\u200b\u82df\u4f4f\u200b\u5c31\u200b\u597d\u200b by\u200b\u4e28\u200bJust Lose It\u200b\u4e28\u200b
10\u200b\u6708\u200b\uff0c\u200b\u5728\u200b\u51ac\u5929\u200b\u5230\u6765\u200b\u4e4b\u524d\u200b\uff0c\u200b\u7559\u4e0b\u200b\u70b9\u200b\u4ec0\u4e48\u200b by \u200b\u4eba\u7269\u200b
"}]}
\ No newline at end of file