注册

提升编程思想,这才是少走十年弯路的学习方式

练习算法和数据结构



熟悉算法和数据结构可以帮助你更好地理解和解决问题,优化你的代码并提高你的代码质量



推荐学习流程



  1. 了解算法和数据结构的基础概念和术语。在学习任何新的主题之前,首先需要了解其基本概念和术语。对于算法和数据结构,您需要了解什么是算法,什么是数据结构,它们有什么不同,以及它们的主要特征和优缺点。
  2. 了解常见的数据结构和算法。学习数据结构和算法的最好方法之一是了解它们的常见类型和应用。您可以使用在线资源和参考书籍来了解这些内容。
  3. 练习编写和实现算法和数据结构。通过编写和实现算法和数据结构来练习可以帮助您更好地理解它们的工作原理和应用。您可以使用在线代码编辑器和调试工具来练习这些技能。
  4. 解决实际问题和挑战。尝试解决实际问题和挑战可以帮助您将所学的算法和数据结构应用到实践中,并帮助您进一步掌握它们。

纸上得来终觉浅,我们学习之后肯定要进行使用,现在算法学习的网站已经完全为我们考虑了,关于上述的很多步骤天然支持。


那我们在解决算法和数据结构问题时,可以遵循以下步骤:



  1. 理解问题。阅读问题并确保您完全理解其要求和限制。这可以帮助您确定应该使用的数据结构和算法类型。
  2. 设计解决方案。根据您对问题的理解,设计一个解决方案。这可以包括确定应该使用的数据结构和算法、解决问题的步骤以及如何处理可能出现的异常情况。
  3. 实现方案。使用您选择的编程语言和编辑器实现您的解决方案。确保您按照您设计的步骤执行。
  4. 测试和调试。测试您的实现,并在需要时进行调试。这可以帮助您确定是否存在错误并确保您的代码在各种情况下都能正常工作。

当今时代,忙碌是我们整个社会的代名词,也是我们程序员的天生标签,真的,我从大专毕业到现在,每天早上上班每天下班都在不断的学习,但是结果都是在工作中有机会实战的,一清二楚,不能使用的,真的转眼就忘。
所以我们在学习的过程中要善于总结,总结可以缩小我们记忆搜索的范围,即使忘记了,我们也可以通过最小的代价找回来。


学会总结,学习算法是可以通过以下步骤总结



  1. 算法和数据结构的定义和区别。了解算法和数据结构的定义和区别可以帮助您更好地理解它们的工作原理和应用。
  2. 常见的数据结构和算法。了解常见的数据结构和算法可以帮助您更好地应用它们解决实际问题。
  3. 复杂度分析。了解算法和数据结构的时间和空间复杂度可以帮助您确定其效率和应用场景。
  4. 优化算法和数据结构。了解如何优化算法和数据结构可以帮助您更好地解决实际问题,并提高效率。

俗话说,专业的都是无味的,此时,我们可以转换思想去记忆


总有一种方法让你记住,因为谁都有故事



  1. 创造有趣的比喻或类比。将算法或数据结构与某些日常生活中的东西联系起来,可以帮助您更容易地记住它们。例如,您可以将树形数据结构比喻为现实世界中的树木。
  2. 使用记忆术。使用记忆术,例如联想和图像化,可以帮助您更好地记住算法和数据结构。例如,您可以将联想关键字与算法和数据结构名称相匹配。
  3. 创建抽象图形和示例。通过使用抽象图形和示例,可以更好地理解和记住算法和数据结构的工作原理和应用。
  4. 练习并实践。最好的方式是通过不断练习和实践来记住算法和数据结构。通过实际运用它们来解决实际问题,您将更好地理解它们的工作原理和应用,并在大脑中更深刻地记住它们。

学习算法和数据结构需要耐心、练习和实践,使用记忆术、抽象图形和示例来帮助记住算法和数据结构。


来,看个例子


以经常使用的快速排序为例


学习过程



了解快速排序算法的工作原理并熟悉其实现方法是学习快速排序算法的第一步。


快速排序算法是一种分治算法,其基本思想是将一个大问题分解成多个子问题,然后递归地解决这些子问题,最后将它们组合成一个完整的解决方案。


具体来说,快速排序算法将待排序数组分成两部分,其中一部分小于某个基准值,另一部分大于等于基准值。然后,对两部分分别递归地进行快速排序,最终得到一个有序数组。



以下是快速排序算法的核心实现代码:


function quickSort(arr, left, right) {
if (left < right) {
const pivotIndex = partition(arr, left, right);
quickSort(arr, left, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, right);
}
}

function partition(arr, left, right) {
const pivot = arr[right];
let i = left - 1;

for (let j = left; j < right; j++) {
if (arr[j] < pivot) {
i++;
[arr[i], arr[j]] = [arr[j], arr[i]];
}
}

[arr[i + 1], arr[right]] = [arr[right], arr[i + 1]];
return i + 1;
}

解决过程



为了更好地理解快速排序算法的实现和工作原理,可以按照以下步骤解决一个简单的示例问题:



问题:给定一个未排序的整数数组 [8, 4, 2, 6, 7, 1, 3, 5],按升序排列。


解决步骤:


Step 1:选择一个基准元素(pivot)。为了简单起见,我们选择数组的最后一个元素 5 作为基准。


Step 2:将数组中小于基准的元素移到基准左侧,大于等于基准的元素移到基准右侧。这可以通过从数组的左侧开始扫描并与基准比较,如果小于基准,则将元素交换到基准左侧。


[4, 2, 3, 5, 7, 1, 8, 6]
^ ^
i j

在这个例子中,我们选择数组的第一个元素作为左指针 i,并从第二个元素开始扫描数组。当扫描到元素 4 时,发现其小于基准 5,因此将其交换到 i 处,并将 i 加 1。扫描到元素 2 时,同样将其交换到 i处。继续扫描,直到 j 扫描到基准 5 为止。


Step 3:将基准元素放回正确的位置。由于基准元素是最后一个元素,因此可以将 i+1 位置的元素与基准元素交换。


[4, 2, 3, 5, 7, 1, 6, 8]
^ ^
i+1 right

现在,数组被分成了两个部分:左侧部分 [4, 2, 3, 1] 小于基准值 5,右侧部分 [7, 6, 8] 大于等于基准值 5。


Step 4:对左右两部分分别进行快速排序。这是一个递归过程,直到左右部分的长度都为 1 时停止。


继续对左侧部分进行快速排序,以数组 [4, 2, 3, 1] 为例。


Step 1:选择基准元素。选择数组的最后一个元素 1 作为基准。


Step 2:将小于基准的元素移到基准左侧。在这个例子中,可以看到数组已经有序,因此不需要进行任何交换操作。


Step 3:将基准元素放回正确的位置。将 i+1 位置的元素 1 与基准元素 1 交换。注意,这里 i+1 等于左侧数组的左端点,因为左侧数组中只有一个元素。


Step 4:对左右两部分分别进行快速排序。由于左侧数组只有一个元素,无需进行任何操作。


继续对右侧部分进行快速排序,以数组 [7, 6, 8] 为例。


Step 1:选择基准元素。选择数组的最后一个元素 8 作为基准。


Step 2:将小于基准的元素移到基准左侧。在这个例子中,可以看到只有一个元素小于基准,因此将其与 i 处的元素交换。


[7, 6, 8]
^
i,j

Step 3:将基准元素放回正确的位置。将 i+1 位置的元素 7 与基准元素 8 交换。


[7, 8, 6]
^
i+1,right

Step 4:对左右两部分分别进行快速排序。继续对左侧部分 [7] 进行快速排序,无需进行任何操作。对右侧部分 [6] 进行快速排序,同样无需进行任何操作。


综上所述,对于数组 [8, 4, 2, 6, 7, 1, 3, 5],通过快速排序算法的处理,最终得到有序数组 [1, 2, 3, 4, 5, 6, 7, 8]。


核心总结:



快速排序算法是一种高效的排序算法,它的核心在于基准元素的选择和快速分割数组。通过不断选择基准元素,将数组划分成两个部分,并分别对这两个部分进行快速排序,最终将整个数组排序完成。



快速排序算法的时间复杂度为 O(n log n),空间复杂度为 O(log n)。它是一种原地排序算法,不需要额外的空间。


记忆方法:


快速排序算法的核心是基准元素的选择和数组的分割。可以用以下方法记忆:



  1. 选择基准元素:通常选择数组的最后一个元素作为基准,也可以选择其他位置的元素。
  2. 分割数组:将数组分割成小于基准的部分和大于等于基准的部分。可以使用双指针法来实现。
  3. 递归排序:对小于基准的部分和大于等于基准的部分分别进行快速排序,直到数组长度为 1 时停止递归。

记忆口诀:



  1. 基准元素找末尾,
  2. 双指针分割快速跑,
  3. 递归小大排,
  4. 最后数组有序到。

这个口诀可以快速记忆快速排序算法的核心思想和实现过程。


Android开发怎么融入其中


安卓开发中需要使用算法和数据结构时,可以将以上的学习模板应用到具体的问题中。



  1. 首先,可以选择适合问题的算法和数据结构。例如,如果你需要对一个数组进行排序,你可以使用快速排序算法。如果你需要快速查找元素,你可以使用二分查找算法。
  2. 其次,你可以使用学习模板中的学习过程和解决过程来帮助自己理解算法的实现过程和核心思想。通过学习模板,你可以更深入地了解算法和数据结构的实现原理,并将它们应用到实际的开发中。
  3. 最后,你可以使用学习模板中提供的核心总结和记忆方法来帮助自己记忆算法和数据结构的核心思想和实现过程。这可以帮助你更快速地掌握算法和数据结构,并在实际开发中应用它们。

总结


学而不思则亡 思而不学则殆


使用学习模板可以帮助你更有效地学习算法和数据结构,并将它们应用到实际的安卓开发中。这可以提升你的技能水平,并使你在开发中更加高效和优秀。


作者:狼窝山下的青年
链接:https://juejin.cn/post/7201444843137318949
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

0 个评论

要回复文章请先登录注册