房产中介网站seo推广公司网站模板

bicheng/2026/1/15 19:28:34/文章来源:
房产中介网站,seo推广公司网站模板,动力网站建设,专业网站设计哪家好附录 A、算法分析 原文#xff1a;Appendix A Analysis of algorithms 译者#xff1a;飞龙 协议#xff1a;CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《Think Python 2e 中译本 第二十一章#xff1a;算法分析》 算法分析 (Analysis of algorithms) 是计算机科学的一… 附录 A、算法分析 原文Appendix A Analysis of algorithms 译者飞龙 协议CC BY-NC-SA 4.0 自豪地采用谷歌翻译 部分参考了《Think Python 2e 中译本 第二十一章算法分析》 算法分析 (Analysis of algorithms) 是计算机科学的一个分支 着重研究算法的性能 特别是它们的运行时间和资源开销。见 http://en.wikipedia.org/wiki/Analysis_ofalgorithms 。 算法分析的实际目的是预测不同算法的性能用于指导设计决策。 2008年美国总统大选期间当候选人奥巴马(Barack Obama)访问Google时 他被要求进行即时分析。首席执行官 Eric Schmidt 开玩笑地问他“对一百万个32位整数排序的最有效的方法”。 显然有人暗中通知了奥巴马因为他很快回答“我认为不应该采用冒泡排序法”。 详见 http://www.youtube.com/watch?vk4RRi_ntQc8 。 是真的冒泡排序概念上很简单但是对于大数据集来说速度非常慢。Schmidt所提问题的答案可能是 “基数排序 (http://en.wikipedia.org/wiki/Radix_sort)” [1]。 [1] 但是如果你面试中被问到这个问题我认为更好的答案是“对上百万个整数进行最快排序的方法就是用你所使用的语言的内建排序函数。它的性能对于大多数应用而言已优化的足够好。但如果最终我的应用运行太慢我会用性能分析器找出大量的运算时间被用在了哪儿。如果采用一个更快的算法会对性能产生显著的提升我会试着找一个基数排序的优质实现。” 算法分析的目的是在不同算法间进行有意义的比较 但是有一些问题 算法的相对性能依赖于硬件的特性因此一个算法可能在机器A上比较快 另一个算法则在机器B上比较快。 对此问题一般的解决办法是指定一个 机器模型 (machine model) 并且分析一个算法在一个给定模型下所需的步骤或运算的数目。相对性能可能依赖于数据集的细节。 例如 如果数据已经部分排好序 一些排序算法可能更快 此时其它算法运行的比较慢。 避免该问题的一般方法是分析 最坏情况。 有时分析平均情况性能也可 但那通常更难而且可能不容易弄清该对哪些数据集合进行平均。相对性能也依赖于问题的规模。一个对于小列表很快的排序算法可能对于长列表很慢。 此问题通常的解决方法是将运行时间或者运算的次数表示成问题规模的函数 并且根据各自随着问题规模的增长而增加的速度将函数分成不同的类别。此类比较的好处是有助于对算法进行简单的分类。 例如如果我知道算法A的运行时间与输入的规模 n 成正比 算法 B 与 n^2 成正比那么我可以认为 A 比 B 快至少对于很大的 n 值来说。 这类分析也有一些问题我们后面会提到。 A.1 增长级别 假设你已经分析了两个算法并能用输入计算量的规模表示它们的运行时间 若算法 A 用 100n1 步解决一个规模为 n 的问题而算法 B 用 n^2 n 1 步。 下表列出了这些算法对于不同问题规模的运行时间 输入大小算法 A 的运行时间算法 B 的运行时101,00111110010,00110,1011,000100,0011,001,00110,0001,000,001 10^10当 n10 时算法 A 看上去很糟糕它用了 10 倍于算法 B 所需的时间。 但当 n100 时 它们性能几乎相同 而 n 取更大值时算法 A 要好得多。 根本原因是对于较大的 n 值任何包含 n^2 项的函数都比首项为 n 的函数增长要快。 首项 (leading term) 是指具有最高指数的项。 对于算法A首项有一个较大的系数 100这是为什么对于小 n B比A好。但是不考虑该系数总有一些 n 值使得 a n^2 b na 和 b 可取任意值。 同样推论也适用于非首项。 即使算法 A 的运行时间为 n1000000 对于足够大的 n 它仍然比算法 B 好。 一般来讲我们认为具备较小首项的算法对于规模大的问题是一个好算法但是对于规模小的问题可能存在有一个 交叉点 (crossover point)在此规模以下另一个算法更好。 交叉点的位置取决于算法的细节、输入以及硬件因此在进行算法分析时它通常被忽略。 但是这不意味着你可以忘记它。 如果两个算法有相同的首项很难说哪个更好答案还是取决于细节。 所以对于算法分析来说具有相同首项的函数被认为是相当的即使它们具有不同的系数。 增长级别(order of growth)是一个函数集合集合中函数的增长行为被认为是相当的。 例如2n、100n和n1属于相同的增长级别可用 大O符号(Big-Oh notation) 写成O(n) 而且常被称作 线性级 (linear)因为集合中的每个函数随着n线性增长。 首项为 n^2 的函数属于 O(n^2)它们被称为 二次方级 (quadratic)。 下表列出了算法分析中最通常的一些增长级别按照运行效率从高到低排列。 增长级别名称O(1)常数O(logn)对数O(n)线性O(n logn)线性对数O(n^2)二次O(n^3)三次O(c^n)指数对于对数级对数的基数并不影响增长级别。 改变基数等价于乘以一个常数其不改变增长级别。相应的所有的指数级数都属于相同的增长级别而无需考虑指数的基数大小。指数函数增长级别增长的非常快因此指数级算法只用于小规模问题。 练习 1 访问 http://en.wikipedia.org/wiki/Big_O_notation 阅读维基百科关于大O符号的介绍并回答以下问题 n^3 n^2的增长级别是多少1000000 n^3 n^2 和 n^3 1000000 n^2 的增长级别又是多少 (n^2 n) * (n 1)的增长级别是多少在开始计算之前记住你只需要考虑首项即可。如果 f 的增长级别为 O(g) 那么对于未指定的函数 g 我们可以如何描述 afb 如果 f1 和 f2 的增长级别为 O(g)那么 f1 f2 的增长级别又是多少如果 f1 的增长级别为 O(g) f2 的增长级别为 O(h)那么 f1 f2 的增长级别是多少如果 f1 的增长级别为 O(g) f2 的增长级别为 O(h)那么 f1 * f2 的增长级别是多少关注性能的程序员经常发现这种分析很难忍受。他们的观点有一定道理有时系数和非首项会产生巨大的影响。 有时硬件的细节、编程语言以及输入的特性会造成很大的影响。对于小问题渐近的行为没有什么影响。 但是如果你牢记这些注意事项算法分析就是一个有用的工具。 至少对于大问题“更好的” 算法通常更好并且有时要好的多。 相同增长级别的两个算法之间的不同通常是一个常数因子但是一个好算法和一个坏算法之间的不同是无限的 A.2 Python基本运算操作分析 在 Python 中大部分算术运算的开销是常数级的乘法会比加减法用更长的时间除法更长 但是这些运算时间不依赖被运算数的数量级。非常大的整数却是个例外在这种情况下运行时间随着位数的增加而增加。 索引操作 — 在序列或字典中读写元素 — 的增长级别也是常数级的和数据结构的大小无关。 一个遍历序列或字典的 for 循环通常是线性的只要循环体内的运算是常数时间。 例如累加一个列表的元素是线性的 total 0 for x in t:total x内建函数 sum 也是线性的因为它做的是相同的事情但是它要更快一些因为它是一个更有效的实现从算法分析角度讲它具有更小的首项系数。 根据经验如果循环体内的增长级别是 O(n^a)则整个循环的增长级别是O(n^(a1))。如果这个循环在执行一定数目循环后退出则是例外。 无论 n 取值多少如果循环仅执行 k 次 整个循环的增长级别是O(n^a)即便 k 值比较大。 乘上 k 并不会改变增长级别除法也是。 因此如果循环体的增长级别是 O(n^a)而且循环执行 n/k 次那么整个循环的增长级别就是 O(n^(a1)) , 即使 k 值很大。 大部分字符串和元组运算是线性的除了索引和 len 它们是常数时间。 内建函数 min 和 max 是线性的。切片运算与输出的长度成正比但是和输入的大小无关。 字符串拼接是线性的它的运算时间取决于运算对象的总长度。 所有字符串方法都是线性的但是如果字符串的长度受限于一个常数 — 例如在单个字符上的运算 — 它们被认为是常数时间。字符串方法 join 也是线性的它的运算时间取决于字符串的总长度。 大部分的列表方法是线性的但是有一些例外 平均来讲在列表结尾增加一个元素是常数时间。 当它超出了所占用空间时它偶尔被拷贝到一个更大的地方但是对于 n 个运算的整体时间仍为 O(n) 所以我每个运算的平均时间是 O(1) 。从一个列表结尾删除一个元素是常数时间。排序是 O(n logn) 。大部分的字典运算和方法是常数时间但有些例外 update 的运行时间与作为形参被传递的字典不是被更新的字典的大小成正比。 keys、values 和 items 是常数时间因为它们返回迭代器。 但是如果你对迭代器进行循环循环将是线性的。字典的性能是计算机科学的一个小奇迹之一。在哈希表一节中我们将介绍它们是如何工作的。 练习 2 访问 http://en.wikipedia.org/wiki/Sorting_algorithm 阅读维基百科上对排序算法的介绍并回答下面的问题 什么是“比较排序”比较排序在最差情况下的最好增长级别是多少别的排序算法在最差情况下的最优增长级别又是多少冒泡排序法的增长级别是多少为什么奥巴马认为是“不应采用的方法”基数排序(radix sort)的增长级别是多少我们使用它之前需要具备的前提条件有哪些排序算法的稳定性是指什么为什么它在实际操作中很重要最差的排序算法是哪一个有名称的C 语言使用哪种排序算法Python使用哪种排序算法这些算法稳定吗你可能需要谷歌一下才能找到这些答案。大多数非比较算法是线性的因此为什 Python 使用一个 增长级别为 O(n logn) 的比较排序A.3 搜索算法分析 搜索 (search)算法接受一个集合以及一个目标项并判断该目标项是否在集合中通常返回目标的索引值。 最简单的搜素算法是“线性搜索”其按顺序遍历集合中的项如果找到目标则停止。 最坏的情况下 它不得不遍历全部集合所以运行时间是线性的。 序列的 in 操作符使用线性搜索字符串方法 find 和 count 也使用线性搜索。 如果元素在序列中是排序好的你可以用 二分搜素 (bisection search) 它的增长级别是 O(logn) 。 二分搜索和你在字典中查找一个单词的算法类似这里是指真正的字典不是数据结构。 你不会从头开始并按顺序检查每个项而是从中间的项开始并检查你要查找的单词在前面还是后面。 如果它出现在前面那么你搜索序列的前半部分。否则你搜索后一半。如论如何你将剩余的项数分为一半。 练习 3 编写一个叫做bisection的函数它接受有序列表和目标值并返回列表中值的索引如果存在的话如果不存在则返回None。 或者你可以阅读对分模块的文档并使用它 如果序列有 1,000,000 项它将花 20 步找到该单词或判断出其不在序列中。因此它比线性搜索快大概 50,000 倍。 二分搜索比线性搜索快很多但是它要求已排序的序列因此使用时需要做额外的工作。 另一个检索速度更快的数据结构被称为 哈希表 (hashtable) — 它可以在常数时间内检索出结果 — 并且不依赖于序列是否已排序。 Python 中的字典就通过哈希表技术实现的因此大多数的字典操作包括 in 操作符只花费常数时间就可完成。 A.4 哈希表 为了解释哈希表是如何工作以及为什么它的性能如此优秀 我们从实现一个简单的映射(map)开始并逐步改进它直到其成为一个哈希表。 我们使用 Python 来演示这些实现但在现实生活中你用不着用 Python 写这样的代码你只需用内建的字典对象就可以了因此在接下来的内容中你就当字典对象并不存在你希望自己实现一个将键映射到值的数据结构。你必须实现的操作包括 add(k, v) 增加一个新的项其从键 k 映射到值 v 。 如果使用 Python 的字典d该运算被写作 d[k] v。 get(k) 查找并返回相应键的值。 如果使用 Python 的字典d该运算被写作 d[k] 或 d.get(k) 。 现在假设每个键只出现一次。该接口最简单的实现是使用一个元组列表其中每个元组是一个键-值对。 class LinearMap:def __init__(self):self.items []def add(self, k, v):self.items.append((k, v))def get(self, k):for key, val in self.items:if key k:return valraise KeyErroradd 向项列表追加一个键—值元组其增长级别为常数时间。 get 使用 for 循环搜索该列表如果它找到目标键则返回相应的值否则触发一个 KeyError。因此 get 是线性的。 另一个方案是保持列表按键排序。那么get 可以使用二分搜索其增长级别为 O(logn) 。 但是在列表中间插入一个新的项是线性的因此这可能不是最好的选择。 有其它的数据结构能在对数级时间内实现 add 和 get 但是这仍然不如常数时间好那么我们继续。 另一种改良 LinearMap 的方法是将键-值对列表分成小列表。 下面是一个被称作 BetterMap 的实现它是 100 个 LinearMap 组成的列表。 正如一会儿我们将看到的get 的增长级别仍然是线性的 但是 BetterMap 是迈向哈希表的一步。 class BetterMap:def __init__(self, n100):self.maps []for i in range(n):self.maps.append(LinearMap())def find_map(self, k):index hash(k) % len(self.maps)return self.maps[index]def add(self, k, v):m self.find_map(k)m.add(k, v)def get(self, k):m self.find_map(k)return m.get(k)__init__会生成一个由 n 个 LinearMap 组成的列表。 add和 get 使用 find_map 查找往哪一个列表中添加新项或者对哪个列表进行检索。 find_map 使用了内建函数 hash其接受几乎任何 Python 对象并返回一个整数。 这一实现的一个限制是它仅适用于可哈希的键。像列表和字典等可变类型是不能哈希的。 被认为是相等的可哈希对象返回相同的哈希值但是反之不是必然成立两个具备不同值的对象能够返回相同的哈希值。 find_map使用求余运算符将哈希值包在 0 到 len(self.maps) 之间 因此结果是该列表的合法索引值。当然这意味着许多不同的哈希值将被包成相同的索引值。 但是如果哈希函数散布相当均匀这是哈希函数被设计的初衷 那么我们预计每个 LinearMap 会有 n/100 项。 由于 LinearMap.get 的运行时间与项数成正比那么我们预计 BetterMap 比 LinearMap 快100倍。 增长级别仍然是线性的但是首项系数变小了。这样很好但是仍然不如哈希表好。 下面是使哈希表变快的关键如果你能保证 LinearMap 的最大长度是有上限的则 LinearMap.get 的增长级别是常数时间。你只需要跟踪项数并且当每个 LinearMap 的项数超过阈值时通过增加更多的 LinearMap 调整哈希表的大小。 以下是哈希表的一个实现 class HashMap:def __init__(self):self.maps BetterMap(2)self.num 0def get(self, k):return self.maps.get(k)def add(self, k, v):if self.num len(self.maps.maps):self.resize()self.maps.add(k, v)self.num 1def resize(self):new_maps BetterMap(self.num * 2)for m in self.maps.maps:for k, v in m.items:new_maps.add(k, v)self.maps new_maps每个 HashMap 包含一个 BetterMap。__init__ 开始仅有两个 LinearMap 并且初始化 num用于跟踪项的数量。 get仅仅用来调度 BetterMap。真正的操作发生于 add 内其检查项的数量以及 BetterMap 的大小 如果它们相同每个 LinearMap 的平均项数为 1因此它调用 resize。 resize 生成一个新的 BetterMap是之前那个的两倍大然后将像从旧表“重新哈希”至到新的表。 重新哈希是必要的因为改变 LinearMap 的数目也改变了 find_map 中求余运算的分母。 这意味着一些被包进相同的 LinearMap 的对象将被分离这正是我们希望的对吧。 重新哈希是线性的因此 resize 是线性的这可能看起来很糟糕因为我保证 add 会是常数时间。 但是记住我们不必每次都调整因此 add 通常是常数时间只是偶尔是线性的。 运行 add n 次的整体操作量与 n 成正比因此 add 的平均运行时间是常数时间 为了弄清这是如何工作的考虑以一个空的 HashTable 开始并增加一系列项。 我们以两个 LinearMap 开始因此前两个 add 操作很快不需要调整大小。 我们假设它们每个操作花费一个工作单元。下一个 add 需要进行一次大小调整 因此我们必须重新哈希前两项我们将其算成两个额外的工作单元然后增加第3项又一个工作单元。 增加下一项的花费一个单元所以目前为止添加四个项共需要 6 个单元。 下一个 add 花费 5 个单元但是之后的3个操作每个只花费 1 个单元所以前八个 add 总共需要 14 个单元。 下一个 add 花费 9 个单元但是之后在下一次调整大小之前可以再增加七个 所以前 16 个 add 总共需要 30 个单元。 进行 32 次 add 之后总共花费了 62 个单元我希望你开始看到规律。 n次 add 后其中 n 是 2 的倍数总花费是 2n-2 个单元 所以平均每个 add 操作只花费了少于 2 个单元。当 n 是 2 的倍数时那是最好的情况。 对于其它的 n 值平均花费稍高一点但是那并不重要。重要的是其增长级别为 O(1) 。 下图形象地说明了其工作原理。每个区块代表一个工作单元。 每列显示每个 add 所需的单元按从左到右的顺序排列前两个 add 花费 1 个单元第三个花费 3 个单元等等。 图 A.1哈希表中 add 操作的成本 重新哈希的额外工作表现为一系列不断增高的高塔各自之间的距离越来越大。 现在如果你打翻这些塔将大小调整的代价均摊到所有的 add 上你会从图上看到 n 次 add 的整个花费是 2n - 2 。 该算法一个重要的特征是当我们调整 HashTable 的大小时它呈几何级增长也就是说我们用常数乘以表的大小。 如果你按算术级增加大小 —— 每次增加固定的数目 —— 每个 add 的平均时间是线性的。 你可以从 http://thinkpython2.com/code/Map.py 下载到 HashMap 的实现代码你不必使用它如果你想要一个映射数据结构只要使用 Python 中的字典即可。 练习 4 我的HashMap实现直接访问BetterMap的属性这表现了糟糕的面向对象设计。 特殊方法__len__由内置函数len调用。 为BetterMap编写一个__len__方法并在add中使用它。使用生成器来编写BetterMap.iteritems并在resize中使用它。练习 5 散列表的一个缺点是元素必须是可散列的这通常意味着它们必须是不可变的。 这就是为什么在 Python 中可以将元组而不是列表用作字典中的键。 另一种方法是使用基于树的映射。 编写一个名为TreeMap的映射接口的实现它使用红黑树以对数时间执行add和log。 A.5 列表的求和 假设你有一堆列表并且你想把它们合并成一个列表。 有三种方法可以在 Python 中执行此操作 你可以使用运算符 total [] for x in t:total x 或者extend方法 total [] for x in t:total.extend(x) 或者内建的sum函数 total sum(t, []) sum的第二个参数是总数的初始值。 在不知道如何实现和extend和sum的情况下很难分析它们的性能。 例如如果total x每次创建一个新列表则循环是二次的但如果它修改了总数它是线性的。 为了找到答案我们可以阅读源代码但作为练习让我们看看我们是否可以通过测量运行时间来弄清楚它。 测量程序运行时间的简单方法是使用os模块中的time函数该函数返回浮点数的元组表示进程已经过的时间详细信息请参阅文档。 我使用了函数etime它返回“用户时间”和“系统时间”的总和这通常是我们关心的性能度量 import osdef etime():See how much user and system time this process has usedso far and return the sum.user, sys, chuser, chsys, real os.times()return usersys 为了衡量一个函数的运行时间你可以调用etime两次并计算差异 start etime()# put the code you want to measure hereend etime() elapsed end - start 或者如果你使用 IPython则可以使用timeit命令。 请参阅ipython.scipy.org。 如果算法是二次的我们期望运行时间t与输入大小n的函数是这样的 t a * n^2 b * n c 其中ab和c是未知系数。 如果你对两边取对数你会得到 logt ~ loga 2logn 对于n的较大值非主要项是微不足道的并且这个近似值非常好。 所以如果我们在双对数刻度上绘制t对n我们期待斜率为 2 的直线。 类似地如果算法是线性的我们期望斜率为 1 的直线。 我写了三个连接列表的函数sum_plus使用sum_extend使用list.extendsum_sum使用sum。 我在n的范围内对它们计时并将结果绘制在双对数刻度上。 下图展示了结果。 图 a.2运行时间和n虚线斜率为 1 图 a.3运行时间和n虚线斜率为 2 在图 a.2 中我用斜率为 1 的直线拟合了曲线。 这条线很好地拟合了数据所以我们得出结论这些实现是线性的。 实现的速度比较快因为每次循环中查找extend方法需要一些时间。 在图 a.3 中斜率 2 的线拟合了数据所以sum实现是二次的。 A.6 pyplot 为了制作本节中的图片我使用了pyplot它是matplotlib的一部分。 如果你的 Python 安装没有带着matplotlib你可能需要安装它或者你可以使用另一个库进行绘图。 下面是一个简单的例子 import matplotlib.pyplot as pyplotpyplot.plot(xs, ys) scale log pyplot.xscale(scale) pyplot.yscale(scale) pyplot.title() pyplot.xlabel(n) pyplot.ylabel(run time (s)) pyplot.show() 导入语句使matplotlib.pyplot可以使用较短的名称pyplot访问。 plot接受x值列表和一个y值列表并绘制它们。 列表的长度必须相同。 xscale和yscale设置线性或对数轴。 titlexlabel和ylabel是不言自明的。 最后show在屏幕上显示该图。 你也可以使用savefig将绘图保存在文件中。 pyplot的文档位于 http://matplotlib.sourceforge.net/。 练习 6 测试LinearMapBetterMap和HashMap的性能看看你能否描述它们的增长级别。 你可以从thinkcomplex.com/Map.py下载我的映射实现以及从thinkcomplex.com/listsum.py下载我在本节中使用的代码。 你必须找到一个n的范围它大到足以显示渐近行为但小到足以快速运行。

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

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

相关文章

WordPress网站接入公众号哈尔滨设计优化公司

文章目录 过程对比1.通过构造参数向vector中插入对象(emplace_back更高效)2.通过插入实例对象(调用copy函数)3.通过插入临时对象(调用move函数) 效率对比emplace_back 的缺点 我们以STL中的vector容器为例。…

cms网站开发php海阳市最新新闻热点

1 例子 假设:原始数据为8位,纠错码为6位,原始信息由原始数据纠错码。 在传输过程中,由于信息干扰等原因,导致原始信息被污染,被污染后有两位数据被修改。 说明编码原始信息001010011011100被污染后的信息…

自己做的网站怎么传到服务器wordpress内容分享微信

文章目录 1. 前言2. 工作原理和主要作用3. 基础控件3.1 重要参数及文本和按钮3.1.1 GUI 共同点3.1.2 文本控件3.1.3 按钮控件 3.2 多选框和单选框3.2.1 多选框3.2.2 单选框3.2.3 输入框3.2.4 拖动条 3.3 图片绘制和框3.3.1 图片3.3.2 框绘制 4 工具栏和选择网格4.1 工具栏4.2 选…

网站上线 文案互联网平台怎么建立

简介:本系列博客为C深度解剖系列内容,以某个点为中心进行相关详细拓展 适宜人群:已大体了解C语法同学 作者留言:本博客相关内容如需转载请注明出处,本人学疏才浅,难免存在些许错误,望留言指正 作…

设计服务网站wordpress 如何安装教程

208. 实现 Trie (前缀树) - 力扣(LeetCode) 总结: Trie,又称前缀树或字典树,是一棵有根树,其每个节点包含以下字段: 指向子节点的指针数组 children。对于本题而言,数组长度为 26…

儋州市住房和城乡建设局官方网站免费行情软件app网站mnu

2014年微软组织并成立.NET基金会,微软在成为主要的开源参与者的道路上又前进了一步。2014年以来已经有众多知名公司加入.NET基金会,Google,微软,AWS三大云厂商已经齐聚.NET基金会,在平台项目中,.NET平台上有…

广州网站营销python适合网站开发吗

文 | 大东出品 | OSC开源社区(ID:oschina2013)2002 年,莫斯科当地时间 4 月 25 日 9 时 26 分,满载着补给和 3 名宇航员的“联盟-TM 号”航天飞船在“联盟 U”火箭的推进下飞往国际空间站。同行的三人中,年…

兰州哪里做网站wordpress网页教程

7.1 视图容器组件 7.1.2 scroll-view组件 scroll-view组件时是滚动的视图容器,可在竖直方向或水平方向上滚动,展示超出屏幕高度或宽度的内容。 使用竖直方向滚动时,需要通过wxss的height样式给scroll-view设置一个固定高度,超出…

wordpress 获取首页地址百度快照优化推广

不知不觉服务器存储空间被Docker掏空了… 查看Docker空间占用情况 使用docker system df命令,可以加 -v 查看详情 清理Docker不需要的内容 使用docker system prune -a命令清理Docker 所有停止的容器所有没有被使用的networks所有没容器的镜像所有build cache …

免费 网站模板杭州市城乡规划局建设局官方网站

一、设计模式概念及设计原则 记得刚开始学编程的时候就看过设计模式相关的书籍,虽然当时有很多地方都不理解,但是建立了早期对架构设计的意识,让后面的学习和工作中受益匪浅,最近两年也一直在做架构设计方面的工作,解开…

百度移动端网站网站 head关键字 密度 多少字

进行现货黄金理财,除了需要投资者对黄金投资有热情之外,有方法也是很重要的,光有热情而没有技术,我们的资金很可能会成为其他人的囊中之物。但如果有了现货黄金理财的技术,情况就可能扭转过来。下面我们就从买入的角度…

微信小程序制作网站wordpress域名修改数据库

一、无人机模型介绍 单个无人机三维路径规划问题及其建模_无人机路径规划场景建模-CSDN博客 参考文献: [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、人工原生动物优化算法APO求解无人机路径规…

用自己的电脑做网站空间息壤网站模板

解决鸡兔同笼问题:使用Python进行编程 在古代中国的数学书《孙子算经》中,有一个著名的问题称为“鸡兔同笼”问题。这个问题描述了一种情况,在一个笼子里有鸡和兔子,我们知道笼子里头和脚的总数,但不知道具体有多少只…

设计非常漂亮的网站关键词分析

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

各种类型网站建设口碑好wordpress安装后优化

#define SIZE 250 #if SIZE<1 || SIZE>200 #error "SIZE must be between 1 and 200" #endif转载于:https://www.cnblogs.com/guxuanqing/p/4892802.html

58网站怎么做优化做动漫的游戏 迅雷下载网站

1.ROS操作系统介绍 在学习ROS 系统前&#xff0c;我们需要先了解操作系统的定义。操作系统&#xff0c;顾名思义&#xff0c;即提供部分软件和硬件的接口&#xff0c;以供用户直接使用。因此&#xff0c;针对不同的平台、不同的功能&#xff0c;需要采用不同的操作系统来完成底…

网站防御怎么做如何建设大型电子商务网站

一、安装第三方库PyMySQL 1、在PyCharm中通过 【File】-【setting】-【Python Interpreter】搜索 PyMySQL进行安装 2、通过PyCharm中的 Terminal 命令行 输入: pip install PyMySQL 注&#xff1a;通过pip安装&#xff0c;可能会提示需要更新pip&#xff0c;这时可执行&#…

如何网站做百度推广南通制作公司网站

图形验证码在我们的日常生活中时经常用到的&#xff0c;一般用于用户的登录、注册等。 图形验证码在互联网应用中的作用是提高安全性、防止滥用和保护用户隐私。它是一种简单而有效的人机验证技术&#xff0c;帮助保护系统和用户免受自动化攻击的影响。 本次我们通过spring b…

类似稿定设计的网站网站跳出

环境说明:oracle实例1的SID为orcl(为默认启动的实例),第二个实例的SID为orcl2 启动步骤&#xff1a; 1&#xff09;启动数据库实例完成后&#xff0c;启动数据库监听服务 #lsnrctl start 2&#xff09;切换到需要启动的数据库实例下&#xff0c;如下表示启动的是orcl数据库…

做ppt图片用的网站嘉定网络公司

一、引言 在数据库中&#xff0c;锁是一种非常重要的机制&#xff0c;用于管理并发操作&#xff0c;确保数据的一致性和完整性。MySQL支持多种类型的锁&#xff0c;其中临键锁&#xff08;Next-Key Locking&#xff09;是一种非常重要的锁策略&#xff0c;它结合了行锁和间隙锁…