算法快学笔记(一):算法入门

1. 算法的定义

“算法”一词在不同的书籍以及网站上可能会存在一些差异,但是下面的定义个人觉得最为贴切:

1. 算法代表着用系统的方法描述解决问题的策略机制
2. 能够对一定规范的输入,在有限时间内获得所要求的输出
3. 一个算法的优劣可以用空间复杂度与时间复杂度来衡量

2. 论优秀算法的重要性

在很多场景下,数据规模越大,越能体现优秀算法的价值,接下来将以猜数游戏为例进行说明优秀算法的重要性。

假设 A随便想了一个1到100中的某个数字让B猜,B可以有两种方案:

  1. 简单查找:从1开始猜,一直猜到A想的数字为止。
  2. 二分查找:一半一半的猜,先猜50,如果小了,这时候就排除了1-50的数字!。接下来,你猜75,如果大了,就排除了75-100。以此类推。

接下来对两种方式进行说明与比较

2.1 简单查找

该方法的优点是简单,只需要从1一个个的猜,就一定能猜到。但是如果猜测数字的范围非常的大,且猜的数字非常靠后,将会使用较多的时间。

2.2 二分查找

二分查找是一种算法,其输入是必须是一个有序的元素列表。每次猜都从列的中间元素开始,如果大了,就过滤掉比猜测值小的那一半数字,反之亦然。

实现代码如下:

// 使用二分查找法,在有序列表intList中查找target,返回对应的索引
func BinarySearch(intList []int, target int) int {
	start := 0
	end := len(intList) - 1
	for {
		if end <= start {
			break
		}
		mid := int((start + end) / 2)
		if intList[mid] == target {
			return mid
		}
		// 如果mid处的值大于目标值,就在mid之前的数据中搜索
		if intList[mid] > target {
			end = mid-1
		}
		// 如果mid处的值大于目标值,就在mid之后的数据中搜索
		if intList[mid] < target {
			start = mid+1
		}
	}
	return -1
}

2.3 简单查找VS二分查找

如果列表包含100个数字,简单查找的方式可能要找100次才能找到结果,而二分查找法由于每次查找都会过滤掉一半的数据,因此最多只需要7次(log100)就能找到结果。这个级别的数据,结果看起来差距还不是很大。

如果列表包含40亿个数字,简单查找的方式可能要找40亿次才能找到结果,而二分查找法最多只需要32次(log40亿)就能找到结果。这个级别的数据,差距就比较可观了。

假设B一秒钟能猜10个数字,通过简单查询要猜4629(40亿/10 秒)天,而通过二分查找只需要4秒(log40亿/10 秒)。

有上面的例子可以看出,一个优秀的算法是多么的重要!

注意:log指的都是log2

大O表示法

大O表示法指出了算法有多快(O为操作数:Operations)。例如,假设列表包含n个元素。简
单查找需要检查每个元素,因此需要执行n次操作,使用大O表示法,
这个运行时间为O(n)。二分查找需要执行log n次操作,使用大O表示法的运行时间为 O(log n)。

关于大O表示法有以下几点需要注意:

  1. 大O表示法让你能够比较操作数,它指出了算法运行时间的增速,代表随着数据集的增加,算法所需时间的变化趋势。
  2. 大 O 表示法指出了最糟情况下的运行时间

下面按从快到慢的顺序列出了常见的5种大O运行时间:

  • O(log n),也叫对数时间,这样的算法包括二分查找。
  • O(n),也叫线性时间,这样的算法包括简单查找。
  • O(n * log n),这样的算法包括快速排序(一种非常快的排序算法)
  • O(n^2),这样的算法包括选择排序(一种非常慢的排序算法)。
  • O(n!),这样的算法包旅行商问题的解决方案-一种非常慢的算法。

总结

  • 二分查找的速度比简单查找快得多。
  • O(log n)比O(n)快。需要搜索的元素越多,前者比后者就快得越多。
  • 算法运行时间是从其增速的角度度量的。
  • 算法运行时间用大O表示法表示。
  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《算法笔记》是由胡凡编写的一本关于算法习的教材,它最初以C/C++为主要编程语言。这本教材主要面向想要算法的初者,以及希望进一步提升算法能力的人群。 《算法笔记》的内容广泛而且深入,涵盖了很多算法的基础知识和主要思想,如递归、排序、查找、图论、动态规划等。通过习这本教材,读者可以掌握这些算法的基本原理和实现方法,提高解决实际问题的能力。 该教材有几个特点:首先,它提供了很多例子和习题,帮助读者巩固所的知识;其次,它介绍了很多常用的数据结构,如数组、链表、栈、队列等,读者可以通过习这些数据结构更好地理解和应用算法;最后,它还介绍了一些高级主题,如高级数据结构、算法优化等,这些内容对于进一步提升算法水平非常有帮助。 《算法笔记》是一本入门级的教材,因此在阅读时需要一些基本的编程知识和逻辑思维能力。该教材的语言简洁明,适合作为习参考书,同时也可以作为算法竞赛的辅助教材。 总而言之,《算法笔记》是一本很好的算法习教材,它以C/C++为编程语言,全面介绍了算法的基本知识和常用方法,适合想要算法的初者。无论是术研究还是实际应用,阅读《算法笔记》都能提升算法能力,并为进一步习和应用算法打下坚实的基础。 ### 回答2: 《算法笔记 胡凡 c/c 入门pdf》是一本介绍算法和C/C++编程语言的入门书籍。该书的作者是胡凡,它主要规划了算法习路径以及基本的C/C++编程语言。这本书适合初入门,对于想要系统算法和C/C++编程的人来说是一本不错的选择。 这本书的内容非常系统和全面。它以算法和数据结构为基础,包括基本排序、查找、图论等算法的介绍和实践,让读者能够速掌握这些算法的原理和实现方法。同时,它还介绍了C/C++语言的基础知识和编程技巧,帮助读者理解和运用这些知识。 书中每章都有一些练习题,帮助读者巩固所的知识。同时,每个章节末尾还提供了一些进阶的题目和参考答案,供读者深入习和自我检测。这样的设计能够帮助读者更好地理解和掌握所的内容。 总的来说,《算法笔记 胡凡 c/c 入门pdf》是一本很好的算法和C/C++入门书籍。它能够帮助读者速了解算法和数据结构的基础知识,并会使用C/C++语言进行编程。无论是对于想要入门算法和C/C++编程的初者,还是已经有一定基础的读者,这本书都是一个很好的选择。 ### 回答3: 《算法笔记:胡凡C/C++入门PDF》是一本很棒的入门算法书籍。这本书主要介绍了常用的数据结构与算法,并通过C/C++语言来实现这些算法。 首先,这本书非常适合算法者。它从基础的数据结构开始讲解,如数组、链表、栈和队列,然后逐渐引入更复杂的数据结构,如二叉树、图和堆。此外,书中还介绍了常用的排序和查找算法,如冒泡排序、速排序、二分查找等。每个算法都配有具体的代码实现和详细的解释,帮助读者理解算法的原理和应用。 其次,这本书的习资料丰富。书中提供了很多例题和习题,读者可以通过实践来巩固所的知识。此外,书中还介绍了一些常见的算法优化技巧和设计思路,提供了一些高效解决问题的方法和思考方式。 最后,这本书的编写风格简明易懂。作者通过清晰的语言和简洁的代码,将复杂的算法问题简化为易于理解的部分。不论是对于算法者还是对于有一定编程基础的读者,这本书都是一本很好的习资料。 总而言之,《算法笔记:胡凡C/C++入门PDF》是一本很好的入门算法书籍。它适合初习和理解常用的数据结构与算法,通过具体的代码实现和详细的解释帮助读者掌握算法的原理和应用。无论是编程初者还是有一定基础的读者,都可以从这本书中获得丰富的知识和实践经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值