【ShuQiHere】 如何理解渐进符号及其应用:大 O、大 Ω 和大 Θ

  • List item

📘 【ShuQiHere】 🚀

在算法复杂度分析中,渐进符号(Asymptotic Notation)是必不可少的工具,帮助我们估计算法的时间和空间需求,特别是当输入规模非常大时。这篇文章将为大家详细介绍大 O、大 Ω 和大 Θ 的定义、用法,以及如何解决涉及这些符号的典型问题。通过丰富的例题和实用的小贴士,帮助你更好地掌握这些数学工具,优化算法设计。让我们一起来探索这些符号的奥秘吧!🌟


📑 目录

  1. 渐进符号简介
  2. 渐进符号的定义
    • 大 O 表示法
    • 大 Ω 表示法
    • 大 Θ 表示法
    • 渐进符号的图形化理解
  3. 常见问题解决步骤
  4. 例题讲解:求解渐进关系
    • 问题 (a)
    • 问题 (b)
    • 问题 ©
  5. 实际应用与案例分析
    • 排序算法复杂度比较
    • 数据结构操作效率
    • 动态规划与递归算法
  6. 总结与进一步学习

1. 渐进符号简介 📈

在分析算法的时间复杂度或空间复杂度时,我们关注的是算法在输入规模趋向无穷大的情况下的增长趋势。随着输入规模的增加,算法的性能表现会有不同的变化,理解这些变化对于优化和选择合适的算法至关重要。渐进符号的核心就在于忽略低阶项和常数系数,专注于主导项的增长速度。大 O、大 Ω 和大 Θ 是三种常用的符号,用于表示不同的增长界限,分别对应算法的最坏情况、最好情况以及紧密界限。🔍


2. 渐进符号的定义 📚

2.1 大 O 表示法 O ( g ( n ) ) O(g(n)) O(g(n)) 🅾️

大 O 表示法用于描述一个函数的上界,即在最坏情况下,函数的增长不会超过某一速度。

  • 定义:如果存在正的常数 C C C n 0 n_0 n0,使得对于所有 n ≥ n 0 n \geq n_0 nn0,都满足
    f ( n ) ≤ C ⋅ g ( n ) , f(n) \leq C \cdot g(n), f(n)Cg(n),
    则我们说 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n))
  • 解释:大 O 主要用于衡量最坏情况,表示函数的最大增长速度。

示例

  • f ( n ) = 3 n 2 + 2 n + 1 f(n) = 3n^2 + 2n + 1 f(n)=3n2+2n+1,则 f ( n ) = O ( n 2 ) f(n) = O(n^2) f(n)=O(n2)
  • f ( n ) = 5 n log ⁡ n f(n) = 5n \log n f(n)=5nlogn,则 f ( n ) = O ( n log ⁡ n ) f(n) = O(n \log n) f(n)=O(nlogn)
2.2 大 Ω 表示法 Ω ( g ( n ) ) \Omega(g(n)) Ω(g(n)) 🔱

大 Ω 表示法用于描述一个函数的下界,即在最好情况下,函数的增长至少会达到某一速度。

  • 定义:如果存在正的常数 C C C n 0 n_0 n0,使得对于所有 n ≥ n 0 n \geq n_0 nn0,都满足
    f ( n ) ≥ C ⋅ g ( n ) , f(n) \geq C \cdot g(n), f(n)Cg(n),
    则我们说 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n))
  • 解释:大 Ω 用于衡量最好情况,表示函数的最小增长速度。

示例

  • f ( n ) = 3 n 2 + 2 n + 1 f(n) = 3n^2 + 2n + 1 f(n)=3n2+2n+1,则 f ( n ) = Ω ( n 2 ) f(n) = \Omega(n^2) f(n)=Ω(n2)
  • f ( n ) = 5 n log ⁡ n f(n) = 5n \log n f(n)=5nlogn,则 f ( n ) = Ω ( n log ⁡ n ) f(n) = \Omega(n \log n) f(n)=Ω(nlogn)
2.3 大 Θ 表示法 Θ ( g ( n ) ) \Theta(g(n)) Θ(g(n)) 🔄

大 Θ 表示法描述了一个函数的紧界,即函数的增长速度既不会超过也不会低于某一速度,是上界和下界的结合。

  • 定义:如果存在正的常数 C 1 C_1 C1 C 2 C_2 C2 n 0 n_0 n0,使得对于所有 n ≥ n 0 n \geq n_0 nn0,都满足
    C 1 ⋅ g ( n ) ≤ f ( n ) ≤ C 2 ⋅ g ( n ) , C_1 \cdot g(n) \leq f(n) \leq C_2 \cdot g(n), C1g(n)f(n)C2g(n),
    则我们说 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))
  • 解释:大 Θ 表示函数的真实增长速度,既表示上界也表示下界。

示例

  • f ( n ) = 3 n 2 + 2 n + 1 f(n) = 3n^2 + 2n + 1 f(n)=3n2+2n+1,则 f ( n ) = Θ ( n 2 ) f(n) = \Theta(n^2) f(n)=Θ(n2)
  • f ( n ) = 5 n log ⁡ n f(n) = 5n \log n f(n)=5nlogn,则 f ( n ) = Θ ( n log ⁡ n ) f(n) = \Theta(n \log n) f(n)=Θ(nlogn)
2.4 渐进符号的图形化理解 📊

为了更直观地理解大 O、大 Ω 和大 Θ 的关系,可以通过图形化的方式展示它们在函数增长中的定位。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图1:大 O、大 Ω 和大 Θ 的关系图示

  • 大 O 位于函数的上方,表示函数不会超过某个增长速度。
  • 大 Ω 位于函数的下方,表示函数的增长至少达到某个速度。
  • 大 Θ 精确地包围函数,表示函数的增长速度与某个函数紧密相关。

3. 常见问题解决步骤 🛠️

处理涉及渐进符号的问题时,我们可以遵循以下系统化的步骤:

  1. 识别主导项

    • 写出给定的 f ( n ) f(n) f(n) g ( n ) g(n) g(n),识别出在 n n n 趋近于无穷时的主导项。
    • 忽略低阶项和常数系数,因为它们对函数的增长速度影响较小。
  2. 计算极限

    • 计算
      lim ⁡ n → ∞ f ( n ) g ( n ) \lim_{n \to \infty} \frac{f(n)}{g(n)} nlimg(n)f(n)
      以确定 f ( n ) f(n) f(n) 相对于 g ( n ) g(n) g(n) 的增长关系。
      • 若极限为一个正的常数,则 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))
      • 若极限为 0 0 0,则 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)) 但不满足 Ω ( g ( n ) ) \Omega(g(n)) Ω(g(n))
      • 若极限为无穷大,则 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n)) 但不满足 O ( g ( n ) ) O(g(n)) O(g(n))
  3. 验证定义

    • 使用大 O、大 Ω 和大 Θ 的定义,通过选取合适的常数 C C C n 0 n_0 n0 来验证关系是否成立。
    • 确保对于所有 n ≥ n 0 n \geq n_0 nn0,不等式条件满足。
  4. 总结关系

    • 根据极限和验证结果,确定 f ( n ) f(n) f(n) g ( n ) g(n) g(n) 之间的确切渐进关系。

4. 例题讲解:求解渐进关系 📝

通过具体例题,我们可以更好地理解和应用渐进符号。以下是几个典型问题的详细解答。

问题 (a): 📐

给定函数 f ( n ) = n f(n) = n f(n)=n g ( n ) = 2 n + log ⁡ 2 n g(n) = 2n + \log_2 n g(n)=2n+log2n,确定 f ( n ) f(n) f(n) g ( n ) g(n) g(n) 之间的渐进关系。

解决方案:
  1. 识别主导项

    • f ( n ) = n f(n) = n f(n)=n
    • g ( n ) = 2 n + log ⁡ 2 n g(n) = 2n + \log_2 n g(n)=2n+log2n
    • 主导项均为线性项 n n n,因为 log ⁡ n \log n logn 的增长速度远低于 n n n
  2. 计算极限
    lim ⁡ n → ∞ f ( n ) g ( n ) = lim ⁡ n → ∞ n 2 n + log ⁡ 2 n = 1 2 \lim_{n \to \infty} \frac{f(n)}{g(n)} = \lim_{n \to \infty} \frac{n}{2n + \log_2 n} = \frac{1}{2} nlimg(n)f(n)=nlim2n+log2nn=21
    结果是一个正的常数,因此 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))

  3. 验证大 O

    • 设定 C = 1 C = 1 C=1 n 0 = 1 n_0 = 1 n0=1
      f ( n ) = n ≤ 1 ⋅ ( 2 n + log ⁡ 2 n ) ∀ n ≥ 1 f(n) = n \leq 1 \cdot (2n + \log_2 n) \quad \forall n \geq 1 f(n)=n1(2n+log2n)n1
    • 因此, f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)) 成立。
  4. 验证大 Ω

    • 设定 C = 1 3 C = \frac{1}{3} C=31 n 0 = 2 n_0 = 2 n0=2
      f ( n ) = n ≥ 1 3 ⋅ ( 2 n + log ⁡ 2 n ) ∀ n ≥ 2 f(n) = n \geq \frac{1}{3} \cdot (2n + \log_2 n) \quad \forall n \geq 2 f(n)=n31(2n+log2n)n2
    • 因此, f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n)) 成立。

结论 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))


问题 (b): 📐

给定函数 f ( n ) = 3 n 3 + 2 n 2 + n f(n) = 3n^3 + 2n^2 + n f(n)=3n3+2n2+n g ( n ) = n 2 g(n) = n^2 g(n)=n2,确定 f ( n ) f(n) f(n) g ( n ) g(n) g(n) 之间的渐进关系。

解决方案:
  1. 识别主导项

    • f ( n ) = 3 n 3 + 2 n 2 + n f(n) = 3n^3 + 2n^2 + n f(n)=3n3+2n2+n 的主导项为 3 n 3 3n^3 3n3
    • g ( n ) = n 2 g(n) = n^2 g(n)=n2 的主导项为 n 2 n^2 n2
  2. 计算极限
    lim ⁡ n → ∞ f ( n ) g ( n ) = lim ⁡ n → ∞ 3 n 3 + 2 n 2 + n n 2 = lim ⁡ n → ∞ 3 n + 2 + 1 n = ∞ \lim_{n \to \infty} \frac{f(n)}{g(n)} = \lim_{n \to \infty} \frac{3n^3 + 2n^2 + n}{n^2} = \lim_{n \to \infty} 3n + 2 + \frac{1}{n} = \infty nlimg(n)f(n)=nlimn23n3+2n2+n=nlim3n+2+n1=
    结果为无穷大,因此 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n))

  3. 验证大 O

    • 由于极限为无穷大, f ( n ) f(n) f(n) 的增长速度超过 g ( n ) g(n) g(n),因此 f ( n ) f(n) f(n) 不满足 O ( g ( n ) ) O(g(n)) O(g(n))

结论 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n))


问题 ©: 📐

给定函数 f ( n ) = 5 log ⁡ n + 3 f(n) = 5 \log n + 3 f(n)=5logn+3 g ( n ) = log ⁡ n g(n) = \log n g(n)=logn,确定 f ( n ) f(n) f(n) g ( n ) g(n) g(n) 之间的渐进关系。

解决方案:
  1. 识别主导项

    • f ( n ) = 5 log ⁡ n + 3 f(n) = 5 \log n + 3 f(n)=5logn+3 的主导项为 5 log ⁡ n 5 \log n 5logn
    • g ( n ) = log ⁡ n g(n) = \log n g(n)=logn 的主导项为 log ⁡ n \log n logn
  2. 计算极限
    lim ⁡ n → ∞ f ( n ) g ( n ) = lim ⁡ n → ∞ 5 log ⁡ n + 3 log ⁡ n = 5 + 3 log ⁡ n = 5 \lim_{n \to \infty} \frac{f(n)}{g(n)} = \lim_{n \to \infty} \frac{5 \log n + 3}{\log n} = 5 + \frac{3}{\log n} = 5 nlimg(n)f(n)=nlimlogn5logn+3=5+logn3=5
    结果为一个正的常数,因此 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))

  3. 验证大 O

    • 设定 C = 6 C = 6 C=6 n 0 = 2 n_0 = 2 n0=2
      f ( n ) = 5 log ⁡ n + 3 ≤ 6 log ⁡ n ∀ n ≥ 2 f(n) = 5 \log n + 3 \leq 6 \log n \quad \forall n \geq 2 f(n)=5logn+36lognn2
    • 因此, f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)) 成立。
  4. 验证大 Ω

    • 设定 C = 5 C = 5 C=5 n 0 = 2 n_0 = 2 n0=2
      f ( n ) = 5 log ⁡ n + 3 ≥ 5 log ⁡ n ∀ n ≥ 2 f(n) = 5 \log n + 3 \geq 5 \log n \quad \forall n \geq 2 f(n)=5logn+35lognn2
    • 因此, f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n)) 成立。

结论 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))


5. 实际应用与案例分析 💻

理解渐进符号不仅在理论上重要,在实际编程和算法设计中也扮演着关键角色。以下是一些实际应用场景和案例分析。

5.1 排序算法复杂度比较 📊

不同排序算法在处理大规模数据时表现各异,通过渐进符号可以直观地比较它们的时间复杂度。

  • 快速排序:平均时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn),最坏情况为 O ( n 2 ) O(n^2) O(n2)
  • 归并排序:时间复杂度为 Θ ( n log ⁡ n ) \Theta(n \log n) Θ(nlogn)
  • 冒泡排序:时间复杂度为 Θ ( n 2 ) \Theta(n^2) Θ(n2)

通过这些比较,我们可以选择在大数据集上表现更优的排序算法,如归并排序或快速排序(在平均情况下)。✨

5.2 数据结构操作效率 🗃️

不同数据结构的操作效率也可以通过渐进符号来描述。

  • 数组

    • 访问元素: O ( 1 ) O(1) O(1)
    • 插入/删除元素: O ( n ) O(n) O(n)(需要移动元素)。
  • 链表

    • 访问元素: O ( n ) O(n) O(n)
    • 插入/删除元素: O ( 1 ) O(1) O(1)(在已知位置的情况下)。
  • 哈希表

    • 查找、插入、删除:平均 O ( 1 ) O(1) O(1),最坏 O ( n ) O(n) O(n)

通过理解这些复杂度,可以根据具体需求选择合适的数据结构,提高程序的整体效率。🔧

5.3 动态规划与递归算法 🔄

在动态规划和递归算法中,渐进符号帮助我们分析算法的时间和空间复杂度,从而优化递归深度或状态存储方式。

示例:斐波那契数列的递归算法具有指数级别的时间复杂度 O ( 2 n ) O(2^n) O(2n),而通过动态规划优化后,时间复杂度降低为 O ( n ) O(n) O(n)。这样的大幅优化不仅提升了算法效率,也减少了计算资源的消耗。📉


6. 总结与进一步学习 📖

在算法复杂度分析中,大 O、大 Ω 和大 Θ 是非常重要的工具。通过这些符号,我们可以描述算法在不同输入规模下的表现,帮助我们评估和优化算法的效率。以下是一些关键点和小贴士,帮助你更好地掌握渐进符号的应用。

🌟 小贴士
  • 识别主导项:在处理复杂函数时,首先识别出主导项,忽略低阶项和常数系数,这有助于简化分析过程。
  • 使用极限判断:通过计算
    lim ⁡ n → ∞ f ( n ) g ( n ) \lim_{n \to \infty} \frac{f(n)}{g(n)} nlimg(n)f(n)
    快速判断 f ( n ) f(n) f(n) g ( n ) g(n) g(n) 的关系。
  • 定义验证:在得出初步结论后,通过选择合适的常数 C C C n 0 n_0 n0 来验证结果的准确性,确保推导过程的严谨性。
  • 实际应用:将渐进符号应用于实际的算法和数据结构选择中,提高程序的性能和效率。🚀
进一步学习 📚
  • 高级算法分析:深入学习渐进符号在更复杂算法中的应用,如图算法、动态规划和分治策略。
  • 渐进符号的其他形式:了解小 o、小 ω 等其他渐进符号及其应用场景。
  • 实战编程:通过编写和优化实际程序,实践渐进符号的理论知识,加深理解。💡

📄 解决类似问题的总结

在处理涉及大 O、大 Ω 和大 Θ 的问题时,以下是一个系统化的解决步骤总结:

  1. 识别主导项

    • 分析函数 f ( n ) f(n) f(n) g ( n ) g(n) g(n),找出在 n n n 趋近于无穷时的主导项。
    • 忽略低阶项和常数系数,因为它们对增长速度的影响较小。
  2. 计算极限

    • 计算
      lim ⁡ n → ∞ f ( n ) g ( n ) \lim_{n \to \infty} \frac{f(n)}{g(n)} nlimg(n)f(n)
      来确定 f ( n ) f(n) f(n) 相对于 g ( n ) g(n) g(n) 的增长关系。
      • 若极限为一个正的常数,则 f ( n ) = Θ ( g ( n ) ) f(n) = \Theta(g(n)) f(n)=Θ(g(n))
      • 若极限为 0 0 0,则 f ( n ) = O ( g ( n ) ) f(n) = O(g(n)) f(n)=O(g(n)) 但不满足 Ω ( g ( n ) ) \Omega(g(n)) Ω(g(n))
      • 若极限为无穷大,则 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n)) f(n)=Ω(g(n)) 但不满足 O ( g ( n ) ) O(g(n)) O(g(n))
  3. 验证定义

    • 根据大 O、大 Ω 和大 Θ 的定义,选择适当的常数 C C C n 0 n_0 n0,验证对于所有 n ≥ n 0 n \geq n_0 nn0,不等式条件是否满足。
    • 这一步确保了理论推导的准确性。
  4. 总结关系

    • 根据极限计算和定义验证的结果,确定 f ( n ) f(n) f(n) g ( n ) g(n) g(n) 之间的确切渐进关系,如 O O O Ω \Omega Ω Θ \Theta Θ
  5. 应用与扩展

    • 将所学知识应用于实际算法和数据结构的分析中,进一步巩固理解。
    • 探索更多复杂场景下的渐进符号应用,如递归关系、动态规划等。

通过以上步骤,可以系统、准确地解决涉及渐进符号的复杂问题,提升算法分析和设计的能力。🔝


希望这篇文章能帮助你更好地理解渐进符号及其应用。如果你有任何疑问,欢迎在评论区讨论!😊


🔗 相关资源

  • 算法导论
  • 数据结构与算法
  • 在线编程练习

感谢阅读!期待与你在下篇文章中再见!👋

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/462158.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker篇(安装容器)

目录 一、安装mysql容器 1. 拉取mysql镜像 2. 创建并运行容器 二、安装Tomcat容器 1. 拉取镜像 2. 创建并运行容器 三、安装Nginx容器 1. 拉取镜像 2. 创建并运行容器 四、安装Redis容器 1. 拉取镜像 2. 创建并运行容器 五、安装RabbitMQ 1. 拉取镜像 2. 创建并运…

Python酷库之旅-第三方库Pandas(187)

目录 一、用法精讲 866、pandas.Index.T属性 866-1、语法 866-2、参数 866-3、功能 866-4、返回值 866-5、说明 866-6、用法 866-6-1、数据准备 866-6-2、代码示例 866-6-3、结果输出 867、pandas.Index.memory_usage方法 867-1、语法 867-2、参数 867-3、功能 …

PostgreSQL 到 PostgreSQL 数据迁移同步

简述 PostgreSQL 是一个历史悠久且广泛使用的数据库,不仅具备标准的关系型数据库能力,还具有相当不错的复杂 SQL 执行能力。用户常常会将 PostgreSQL 应用于在线事务型业务,以及部分数据分析工作,所以 PostgreSQL 到 PostgreSQL …

JDK的下载

目录 JDK官网 Windows Ubantu 1.安装JDK 2.确定JDK版本 卸载OpenJDK Centos 1.下载JDK 2.安装JDK 3.验证JDK JDK官网 官网网址:Java Downloads | Oracle Windows 双击运⾏exe⽂件, 选择安装⽬录, 直⾄安装完成 Ubuntu 1.安装JDK 更新软件包 sudo apt u…

(56)MATLAB分析码间串扰信道的传递函数与频率响应

文章目录 前言一、3个存在码间串扰的信道二、信道特性仿真三、仿真结果四、迫零均衡器与MMSE均衡器仿真总结 前言 线性均衡器的性能完全取决于通信信道的特性。本文设计了三个不同传输特性的信道,给出了其传递函数系数,然后计算并绘制了各自的频率响应。…

etcd多实例配置

多实例进行配置,分别在多个不同端口进行监听,避免开启单机部署监听端口冲突; 查看go版本: go version 若没有go环境,则进行下载,解压至/usr/local后进行环境配置,编辑vim ~./bashrc vim ~./b…

029_Common_Plots_Matlab常见二维绘图

常用的二维绘图 常用绘图包括下面的种类: 线图, plot柱图, bar梯步图,stairstep误差棒图,errorbar极坐标图,polarplot跟图,stem散点图,scatter 这些命令都可以通过help xxx来查看…

NuGet Next发布,全新版私有化NuGet管理

NuGet Next发布,全新版私有化NuGet管理 NuGet Next是一款基于BaGet的一款私有化NuGet管理平台,我们对BaGet进行了扩展,并且提供了更多的功能。 NuGet 最新版开源私有化包管理,我们基于BaGet的基础之上增加了更多的功能&#xff…

STM32 从0开始系统学习5

目录 STM32 GPIO输入的四种模式 Practice And Usage 练习与封装 Detailed And Reference 更加具体的说明 输入浮空模式 输入上拉模式 输入下拉模式 模拟功能 我们下面聊一聊输入的事情,输入指的是我们的处理器从外部端口接受外设发过来的信号。在我们没有接…

PHP反序列化原生类字符串逃逸框架反序列化利用

PHP反序列化 概念 序列化的原因:为了解决开发中数据传输和数据解析的一个情况(类似于要发送一个椅子快递,不可能整个椅子打包发送,这是非常不方便的,所以就要对椅子进行序列化处理,让椅子分成很多部分在一起打包发送…

WonderWorld: Interactive 3D Scene Generation from a Single Image 论文解读

目录 一、概述 二、相关工作 1、新视图生成 2、单视图3D场景生成 3、视频生成 4、快速的3D场景表示 三、WonderWorld 1、FLAGS表示 2、引导深度扩散模块 3、单视角层次生成 4、基于几何的初始化 surfel表示 5、阶段一——生成3D场景部分 6、阶段二——用户交互控…

网络:IP分片和组装

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言16位标识,3位标志,13位片偏移分片组装总结 前言 对于IP分片和组装的总结 当一个IP数据报的大小超过网络的MTU(最…

从0到1搭建flink程序-WordCount(图文/详细/mac)

目录 一、目标以及前置资料 1.1 目标 1.2 前置资料 二、实现 2.1 搭建流程 2.2 调试 参考 一、目标以及前置资料 1.1 目标 初步感受flink任务,从0到1快速搭建一个flink程序 1.2 前置资料 1、下载jdk:Mac 安装jdk_mac 安装jdk 1.8-CSDN博客 2、…

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…

FineReport 倒计时特效

1、代码准备 将下面的代码生成对应文件 1.1、zzsc.js 这段代码是一个JavaScript计时器脚本,用于计算从当前时间到第二天午夜(即0点)之间的时间差,并将这个时间差显示在网页上的特定元素中。具体来说,它会实时更新页…

【Linux】编辑器vim 与 编译器gcc/g++

目录 一、编辑器vim: 1、对vim初步理解: 2、vim的模式: 3、进入与退出: 4、vim命令模式下的指令集: 移动光标: 删除: cv: 撤销: 其他: 5、vim底行模…

虚拟机 Ubuntu 扩容

文章目录 一、Vmware 重新分配 Ubuntu 空间二、Ubuntu 扩容分区 一、Vmware 重新分配 Ubuntu 空间 先打开 Vmware ,选择要重新分配空间的虚拟机 点击 编辑虚拟机设置 ,再点击 硬盘 ,再点击 扩展 选择预计扩展的空间,然后点击 扩展…

【搜索引擎】俄罗斯搜索引擎yandex

俄罗斯搜索引擎yandex 1997年,俄罗斯搜索引擎Yandex(俄语意为:语言目录)首次上线,已发展成为全球第四大搜索引擎和第二大非英语搜索引擎 https://yandex.com/

【深度学习】CrossEntropyLoss需要手动softmax吗?

【深度学习】CrossEntropyLoss需要手动softmax吗? 问题:CrossEntropyLoss需要手动softmax吗?答案:不需要官方文档代码解释 问题:CrossEntropyLoss需要手动softmax吗? 之前用 pytorch 实现自己的网络时&…

Uniapp的H5以及App不支持后端传FormData类型参数的解决方案

在uniapp中不支持FormData的传参,这就很恶心;如果强行传的话会提示,请求失败的报错信息。 因为后端必须要FormData类型的传参,所以在查阅一系列方案后,有一种解决办法可以完美解决。 代码: init() {const…