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
@@ -29,12 +29,12 @@
我们建立了一个物品类 `Item` ,以便将物品按照单位价值进行排序。循环进行贪心选择,当背包已满时跳出并返回解。
=== "Java"
=== "Python"
```java title="fractional_knapsack.java"
```python title="fractional_knapsack.py"
[class]{Item}-[func]{}
[class]{fractional_knapsack}-[func]{fractionalKnapsack}
[class]{}-[func]{fractional_knapsack}
```
=== "C++"
@@ -45,12 +45,20 @@
[class]{}-[func]{fractionalKnapsack}
```
=== "Python"
=== "Java"
```python title="fractional_knapsack.py"
```java title="fractional_knapsack.java"
[class]{Item}-[func]{}
[class]{}-[func]{fractional_knapsack}
[class]{fractional_knapsack}-[func]{fractionalKnapsack}
```
=== "C#"
```csharp title="fractional_knapsack.cs"
[class]{Item}-[func]{}
[class]{fractional_knapsack}-[func]{fractionalKnapsack}
```
=== "Go"
@@ -61,6 +69,14 @@
[class]{}-[func]{fractionalKnapsack}
```
=== "Swift"
```swift title="fractional_knapsack.swift"
[class]{Item}-[func]{}
[class]{}-[func]{fractionalKnapsack}
```
=== "JS"
```javascript title="fractional_knapsack.js"
@@ -77,38 +93,6 @@
[class]{}-[func]{fractionalKnapsack}
```
=== "C"
```c title="fractional_knapsack.c"
[class]{Item}-[func]{}
[class]{}-[func]{fractionalKnapsack}
```
=== "C#"
```csharp title="fractional_knapsack.cs"
[class]{Item}-[func]{}
[class]{fractional_knapsack}-[func]{fractionalKnapsack}
```
=== "Swift"
```swift title="fractional_knapsack.swift"
[class]{Item}-[func]{}
[class]{}-[func]{fractionalKnapsack}
```
=== "Zig"
```zig title="fractional_knapsack.zig"
[class]{Item}-[func]{}
[class]{}-[func]{fractionalKnapsack}
```
=== "Dart"
```dart title="fractional_knapsack.dart"
@@ -125,6 +109,22 @@
[class]{}-[func]{fractional_knapsack}
```
=== "C"
```c title="fractional_knapsack.c"
[class]{Item}-[func]{}
[class]{}-[func]{fractionalKnapsack}
```
=== "Zig"
```zig title="fractional_knapsack.zig"
[class]{Item}-[func]{}
[class]{}-[func]{fractionalKnapsack}
```
最差情况下,需要遍历整个物品列表,**因此时间复杂度为 $O(n)$** ,其中 $n$ 为物品数量。
由于初始化了一个 `Item` 对象列表,**因此空间复杂度为 $O(n)$** 。
+30 -30
View File
@@ -19,10 +19,10 @@
实现代码如下所示。你可能会不由地发出感叹:So Clean !贪心算法仅用十行代码就解决了零钱兑换问题。
=== "Java"
=== "Python"
```java title="coin_change_greedy.java"
[class]{coin_change_greedy}-[func]{coinChangeGreedy}
```python title="coin_change_greedy.py"
[class]{}-[func]{coin_change_greedy}
```
=== "C++"
@@ -31,10 +31,16 @@
[class]{}-[func]{coinChangeGreedy}
```
=== "Python"
=== "Java"
```python title="coin_change_greedy.py"
[class]{}-[func]{coin_change_greedy}
```java title="coin_change_greedy.java"
[class]{coin_change_greedy}-[func]{coinChangeGreedy}
```
=== "C#"
```csharp title="coin_change_greedy.cs"
[class]{coin_change_greedy}-[func]{coinChangeGreedy}
```
=== "Go"
@@ -43,6 +49,12 @@
[class]{}-[func]{coinChangeGreedy}
```
=== "Swift"
```swift title="coin_change_greedy.swift"
[class]{}-[func]{coinChangeGreedy}
```
=== "JS"
```javascript title="coin_change_greedy.js"
@@ -55,30 +67,6 @@
[class]{}-[func]{coinChangeGreedy}
```
=== "C"
```c title="coin_change_greedy.c"
[class]{}-[func]{coinChangeGreedy}
```
=== "C#"
```csharp title="coin_change_greedy.cs"
[class]{coin_change_greedy}-[func]{coinChangeGreedy}
```
=== "Swift"
```swift title="coin_change_greedy.swift"
[class]{}-[func]{coinChangeGreedy}
```
=== "Zig"
```zig title="coin_change_greedy.zig"
[class]{}-[func]{coinChangeGreedy}
```
=== "Dart"
```dart title="coin_change_greedy.dart"
@@ -91,6 +79,18 @@
[class]{}-[func]{coin_change_greedy}
```
=== "C"
```c title="coin_change_greedy.c"
[class]{}-[func]{coinChangeGreedy}
```
=== "Zig"
```zig title="coin_change_greedy.zig"
[class]{}-[func]{coinChangeGreedy}
```
## 贪心优点与局限性
**贪心算法不仅操作直接、实现简单,而且通常效率也很高**。在以上代码中,记硬币最小面值为 $\min(coins)$ ,则贪心选择最多循环 $amt / \min(coins)$ 次,时间复杂度为 $O(amt / \min(coins))$ 。这比动态规划解法的时间复杂度 $O(n \times amt)$ 提升了一个数量级。
+30 -30
View File
@@ -78,10 +78,10 @@ $$
变量 $i$、$j$、$res$ 使用常数大小额外空间,**因此空间复杂度为 $O(1)$** 。
=== "Java"
=== "Python"
```java title="max_capacity.java"
[class]{max_capacity}-[func]{maxCapacity}
```python title="max_capacity.py"
[class]{}-[func]{max_capacity}
```
=== "C++"
@@ -90,10 +90,16 @@ $$
[class]{}-[func]{maxCapacity}
```
=== "Python"
=== "Java"
```python title="max_capacity.py"
[class]{}-[func]{max_capacity}
```java title="max_capacity.java"
[class]{max_capacity}-[func]{maxCapacity}
```
=== "C#"
```csharp title="max_capacity.cs"
[class]{max_capacity}-[func]{maxCapacity}
```
=== "Go"
@@ -102,6 +108,12 @@ $$
[class]{}-[func]{maxCapacity}
```
=== "Swift"
```swift title="max_capacity.swift"
[class]{}-[func]{maxCapacity}
```
=== "JS"
```javascript title="max_capacity.js"
@@ -114,30 +126,6 @@ $$
[class]{}-[func]{maxCapacity}
```
=== "C"
```c title="max_capacity.c"
[class]{}-[func]{maxCapacity}
```
=== "C#"
```csharp title="max_capacity.cs"
[class]{max_capacity}-[func]{maxCapacity}
```
=== "Swift"
```swift title="max_capacity.swift"
[class]{}-[func]{maxCapacity}
```
=== "Zig"
```zig title="max_capacity.zig"
[class]{}-[func]{maxCapacity}
```
=== "Dart"
```dart title="max_capacity.dart"
@@ -150,6 +138,18 @@ $$
[class]{}-[func]{max_capacity}
```
=== "C"
```c title="max_capacity.c"
[class]{}-[func]{maxCapacity}
```
=== "Zig"
```zig title="max_capacity.zig"
[class]{}-[func]{maxCapacity}
```
### 正确性证明
之所以贪心比穷举更快,是因为每轮的贪心选择都会“跳过”一些状态。
@@ -63,10 +63,10 @@ $$
请注意,对于 $n \leq 3$ 的边界情况,必须拆分出一个 $1$ ,乘积为 $1 \times (n - 1)$ 。
=== "Java"
=== "Python"
```java title="max_product_cutting.java"
[class]{max_product_cutting}-[func]{maxProductCutting}
```python title="max_product_cutting.py"
[class]{}-[func]{max_product_cutting}
```
=== "C++"
@@ -75,10 +75,16 @@ $$
[class]{}-[func]{maxProductCutting}
```
=== "Python"
=== "Java"
```python title="max_product_cutting.py"
[class]{}-[func]{max_product_cutting}
```java title="max_product_cutting.java"
[class]{max_product_cutting}-[func]{maxProductCutting}
```
=== "C#"
```csharp title="max_product_cutting.cs"
[class]{max_product_cutting}-[func]{maxProductCutting}
```
=== "Go"
@@ -87,6 +93,12 @@ $$
[class]{}-[func]{maxProductCutting}
```
=== "Swift"
```swift title="max_product_cutting.swift"
[class]{}-[func]{maxProductCutting}
```
=== "JS"
```javascript title="max_product_cutting.js"
@@ -99,30 +111,6 @@ $$
[class]{}-[func]{maxProductCutting}
```
=== "C"
```c title="max_product_cutting.c"
[class]{}-[func]{maxProductCutting}
```
=== "C#"
```csharp title="max_product_cutting.cs"
[class]{max_product_cutting}-[func]{maxProductCutting}
```
=== "Swift"
```swift title="max_product_cutting.swift"
[class]{}-[func]{maxProductCutting}
```
=== "Zig"
```zig title="max_product_cutting.zig"
[class]{}-[func]{maxProductCutting}
```
=== "Dart"
```dart title="max_product_cutting.dart"
@@ -135,6 +123,18 @@ $$
[class]{}-[func]{max_product_cutting}
```
=== "C"
```c title="max_product_cutting.c"
[class]{}-[func]{maxProductCutting}
```
=== "Zig"
```zig title="max_product_cutting.zig"
[class]{}-[func]{maxProductCutting}
```
![最大切分乘积的计算方法](max_product_cutting_problem.assets/max_product_cutting_greedy_calculation.png)
**时间复杂度取决于编程语言的幂运算的实现方法**。以 Python 为例,常用的幂计算函数有三种。