Sort the coding languages by applications. (#721)

This commit is contained in:
Yudong Jin
2023-09-04 03:19:08 +08:00
committed by GitHub
parent 8d5e84f70a
commit 9c3b7b6422
55 changed files with 6826 additions and 6826 deletions

View File

@@ -56,10 +56,10 @@ $$
- **终止条件**:当物品编号越界 $i = 0$ 或背包剩余容量为 $0$ 时,终止递归并返回价值 $0$ 。
- **剪枝**:若当前物品重量超出背包剩余容量,则只能不放入背包。
=== "Java"
=== "Python"
```java title="knapsack.java"
[class]{knapsack}-[func]{knapsackDFS}
```python title="knapsack.py"
[class]{}-[func]{knapsack_dfs}
```
=== "C++"
@@ -68,10 +68,16 @@ $$
[class]{}-[func]{knapsackDFS}
```
=== "Python"
=== "Java"
```python title="knapsack.py"
[class]{}-[func]{knapsack_dfs}
```java title="knapsack.java"
[class]{knapsack}-[func]{knapsackDFS}
```
=== "C#"
```csharp title="knapsack.cs"
[class]{knapsack}-[func]{knapsackDFS}
```
=== "Go"
@@ -80,6 +86,12 @@ $$
[class]{}-[func]{knapsackDFS}
```
=== "Swift"
```swift title="knapsack.swift"
[class]{}-[func]{knapsackDFS}
```
=== "JS"
```javascript title="knapsack.js"
@@ -92,30 +104,6 @@ $$
[class]{}-[func]{knapsackDFS}
```
=== "C"
```c title="knapsack.c"
[class]{}-[func]{knapsackDFS}
```
=== "C#"
```csharp title="knapsack.cs"
[class]{knapsack}-[func]{knapsackDFS}
```
=== "Swift"
```swift title="knapsack.swift"
[class]{}-[func]{knapsackDFS}
```
=== "Zig"
```zig title="knapsack.zig"
[class]{}-[func]{knapsackDFS}
```
=== "Dart"
```dart title="knapsack.dart"
@@ -128,6 +116,18 @@ $$
[class]{}-[func]{knapsack_dfs}
```
=== "C"
```c title="knapsack.c"
[class]{}-[func]{knapsackDFS}
```
=== "Zig"
```zig title="knapsack.zig"
[class]{}-[func]{knapsackDFS}
```
如下图所示,由于每个物品都会产生不选和选两条搜索分支,因此时间复杂度为 $O(2^n)$ 。
观察递归树,容易发现其中存在重叠子问题,例如 $dp[1, 10]$ 等。而当物品较多、背包容量较大,尤其是相同重量的物品较多时,重叠子问题的数量将会大幅增多。
@@ -140,10 +140,10 @@ $$
引入记忆化之后,**时间复杂度取决于子问题数量**,也就是 $O(n \times cap)$ 。
=== "Java"
=== "Python"
```java title="knapsack.java"
[class]{knapsack}-[func]{knapsackDFSMem}
```python title="knapsack.py"
[class]{}-[func]{knapsack_dfs_mem}
```
=== "C++"
@@ -152,10 +152,16 @@ $$
[class]{}-[func]{knapsackDFSMem}
```
=== "Python"
=== "Java"
```python title="knapsack.py"
[class]{}-[func]{knapsack_dfs_mem}
```java title="knapsack.java"
[class]{knapsack}-[func]{knapsackDFSMem}
```
=== "C#"
```csharp title="knapsack.cs"
[class]{knapsack}-[func]{knapsackDFSMem}
```
=== "Go"
@@ -164,6 +170,12 @@ $$
[class]{}-[func]{knapsackDFSMem}
```
=== "Swift"
```swift title="knapsack.swift"
[class]{}-[func]{knapsackDFSMem}
```
=== "JS"
```javascript title="knapsack.js"
@@ -176,30 +188,6 @@ $$
[class]{}-[func]{knapsackDFSMem}
```
=== "C"
```c title="knapsack.c"
[class]{}-[func]{knapsackDFSMem}
```
=== "C#"
```csharp title="knapsack.cs"
[class]{knapsack}-[func]{knapsackDFSMem}
```
=== "Swift"
```swift title="knapsack.swift"
[class]{}-[func]{knapsackDFSMem}
```
=== "Zig"
```zig title="knapsack.zig"
[class]{}-[func]{knapsackDFSMem}
```
=== "Dart"
```dart title="knapsack.dart"
@@ -212,6 +200,18 @@ $$
[class]{}-[func]{knapsack_dfs_mem}
```
=== "C"
```c title="knapsack.c"
[class]{}-[func]{knapsackDFSMem}
```
=== "Zig"
```zig title="knapsack.zig"
[class]{}-[func]{knapsackDFSMem}
```
下图展示了在记忆化递归中被剪掉的搜索分支。
![0-1 背包的记忆化搜索递归树](knapsack_problem.assets/knapsack_dfs_mem.png)
@@ -220,10 +220,10 @@ $$
动态规划实质上就是在状态转移中填充 $dp$ 表的过程,代码如下所示。
=== "Java"
=== "Python"
```java title="knapsack.java"
[class]{knapsack}-[func]{knapsackDP}
```python title="knapsack.py"
[class]{}-[func]{knapsack_dp}
```
=== "C++"
@@ -232,10 +232,16 @@ $$
[class]{}-[func]{knapsackDP}
```
=== "Python"
=== "Java"
```python title="knapsack.py"
[class]{}-[func]{knapsack_dp}
```java title="knapsack.java"
[class]{knapsack}-[func]{knapsackDP}
```
=== "C#"
```csharp title="knapsack.cs"
[class]{knapsack}-[func]{knapsackDP}
```
=== "Go"
@@ -244,6 +250,12 @@ $$
[class]{}-[func]{knapsackDP}
```
=== "Swift"
```swift title="knapsack.swift"
[class]{}-[func]{knapsackDP}
```
=== "JS"
```javascript title="knapsack.js"
@@ -256,30 +268,6 @@ $$
[class]{}-[func]{knapsackDP}
```
=== "C"
```c title="knapsack.c"
[class]{}-[func]{knapsackDP}
```
=== "C#"
```csharp title="knapsack.cs"
[class]{knapsack}-[func]{knapsackDP}
```
=== "Swift"
```swift title="knapsack.swift"
[class]{}-[func]{knapsackDP}
```
=== "Zig"
```zig title="knapsack.zig"
[class]{}-[func]{knapsackDP}
```
=== "Dart"
```dart title="knapsack.dart"
@@ -292,6 +280,18 @@ $$
[class]{}-[func]{knapsack_dp}
```
=== "C"
```c title="knapsack.c"
[class]{}-[func]{knapsackDP}
```
=== "Zig"
```zig title="knapsack.zig"
[class]{}-[func]{knapsackDP}
```
如下图所示,时间复杂度和空间复杂度都由数组 `dp` 大小决定,即 $O(n \times cap)$ 。
=== "<1>"
@@ -367,10 +367,10 @@ $$
在代码实现中,我们仅需将数组 `dp` 的第一维 $i$ 直接删除,并且把内循环更改为倒序遍历即可。
=== "Java"
=== "Python"
```java title="knapsack.java"
[class]{knapsack}-[func]{knapsackDPComp}
```python title="knapsack.py"
[class]{}-[func]{knapsack_dp_comp}
```
=== "C++"
@@ -379,10 +379,16 @@ $$
[class]{}-[func]{knapsackDPComp}
```
=== "Python"
=== "Java"
```python title="knapsack.py"
[class]{}-[func]{knapsack_dp_comp}
```java title="knapsack.java"
[class]{knapsack}-[func]{knapsackDPComp}
```
=== "C#"
```csharp title="knapsack.cs"
[class]{knapsack}-[func]{knapsackDPComp}
```
=== "Go"
@@ -391,6 +397,12 @@ $$
[class]{}-[func]{knapsackDPComp}
```
=== "Swift"
```swift title="knapsack.swift"
[class]{}-[func]{knapsackDPComp}
```
=== "JS"
```javascript title="knapsack.js"
@@ -403,30 +415,6 @@ $$
[class]{}-[func]{knapsackDPComp}
```
=== "C"
```c title="knapsack.c"
[class]{}-[func]{knapsackDPComp}
```
=== "C#"
```csharp title="knapsack.cs"
[class]{knapsack}-[func]{knapsackDPComp}
```
=== "Swift"
```swift title="knapsack.swift"
[class]{}-[func]{knapsackDPComp}
```
=== "Zig"
```zig title="knapsack.zig"
[class]{}-[func]{knapsackDPComp}
```
=== "Dart"
```dart title="knapsack.dart"
@@ -438,3 +426,15 @@ $$
```rust title="knapsack.rs"
[class]{}-[func]{knapsack_dp_comp}
```
=== "C"
```c title="knapsack.c"
[class]{}-[func]{knapsackDPComp}
```
=== "Zig"
```zig title="knapsack.zig"
[class]{}-[func]{knapsackDPComp}
```