高中信息技术教学课件4算法基础知识
- 格式:pptx
- 大小:714.88 KB
- 文档页数:14
第四章常用基础算法一、算法概念1.广义的讲,“算法”指的是解决问题或完成任务的一系列步骤。
在计算机科学领域内,“算法”指的是计算机解决问题的步骤,是为了解决问题而需要让计算机有序执行的,无歧义的,有限步骤的集合。
2.算法的特征:(1)有穷性:一个算法的处理步骤必须是有限的。
(2)可行性:每一步的操作与要求都是可行的,并且能够在有限时间内完成。
(3)确定性:每一步的执行描述必须是明确的(4)0个或多个输入(5)1个或多个输出3.描述算法的方法:1.自然语言描述;2.流程图描述;3.伪代码描述;4.用程序设计语言描述4.编程解决问题的一般过程:1.抽象与建模;2.设计算法;3.编写程序;4.调试运行程序二、解析算法和枚举算法1.解析算法:根据问题的前提条件与所求结果之间的关系,找出求解问题的数据表式,并通过表达式计算来实现问题的求解。
2.枚举算法:把问题所有可能的解一一例举,然后判断每一个列举出的可能解是否为正确的解。
以鸡兔同笼问题为例:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?思考:百钱百鸡问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,问翁、母、雏各几何?请编写Python程序解决该问题,思考应该用枚举还是用解析。
三、常见数据处理程序4.图像处理类(1)将彩色(灰度)图片转为黑白图片from PIL import Imageimport numpy as npimport matplotlib.pyplot as pltchoice=128img=np.array(Image.open("lena.jpg").convert('L')) #以灰度模式打开rows,cols=img.shape #图像尺寸分别赋值for i in range(rows): #依次取每个像素的坐标for j in range(cols):if (img[i,j]<=choice): #像素值小于等于指定值,赋值1,否则为0 img[i,j]=0else:img[i,j]=1plt.figure("lena") #指定当前绘图对象plt.imshow(img,cmap='gray') #显示灰度图像plt.axis('off') #关闭图像坐标plt.show() #弹出包含了图片的窗口(2)答题卡处理from PIL import Imagex_start = 11 # 起始点坐标y_start = 92fill_width = 24 # 信息点宽度fill_height = 10 # 信息点高度space_width = 15 # 间隔宽度space_height = 12 # 间隔高度num_length = 9 # 准考证号长度def bw_judge(R, G, B): # bw_judge 用于判断一个像素的填涂情况 Gray_scale = 0.299 * R + 0.587 * G + 0.114 * Breturn Gray_scale < 132def fill_judge(x, y): # fill_judge 用于判断信息点的填涂情况 count = 0for i in range(x, x+fill_width):for j in range(y, y+fill_height):R, G, B = pixels[i, j]if bw_judge(R, G, B) == True:count = count + 1if count >= fill_width * fill_height * 0.64:return Truetotal_width = fill_width + space_widthtotal_height = fill_height + space_heightimage = Image.open("答题卡.bmp")pixels = image.load()num = ""for col in range(num_length):for row in range(10):x = x_start + total_width * coly = y_start + total_height * rowif fill_judge(x, y) == True:num = num+str(row)breakelse: #十个点检查完都没有填涂for...else...特殊用法 num = num+"#"print(num)。
高中信息技术算法一、算法的基本概念算法是指解决问题的步骤和方法,是计算机程序设计的基础。
算法的特点包括正确性、可读性、健壮性、高效性等。
二、算法的分类1.按照求解问题的方式分类- 穷举法:逐个尝试所有可能的解,找到符合条件的解。
- 贪心法:每一步都选择当前最优解,最终得到全局最优解。
- 分治法:将问题分成若干个子问题,分别求解,再将结果合并得到原问题的解。
- 动态规划:利用已知信息逐步推导出全局最优解。
2.按照数据结构分类- 数组排序算法:冒泡排序、快速排序、插入排序等。
- 树形结构算法:二叉树遍历、哈夫曼编码等。
- 图形结构算法:最短路径算法、最小生成树算法等。
三、常见高中信息技术算法1.冒泡排序冒泡排序是一种简单直观的排序方法。
它重复地走访过要排序的数列,依次比较相邻两个元素大小,并交换位置,直到没有任何一对数字需要比较为止。
2.快速排序快速排序也是一种常用的排序方法。
它通过选定一个基准数,将数组分成两部分,一部分比基准数小,一部分比基准数大,再递归地对这两部分进行排序。
3.插入排序插入排序是一种简单直观的排序方法。
它将数组分为有序区和无序区,每次从无序区取出一个元素,在有序区中找到合适的位置插入。
4.二分查找二分查找也称折半查找,它是一种在有序数组中查找特定元素的算法。
每次取中间位置的值与待查关键字进行比较,如果中间位置的值比待查关键字大,则在左半部分继续查找;如果中间位置的值比待查关键字小,则在右半部分继续查找。
四、算法实现1.冒泡排序实现代码```void bubbleSort(int arr[], int n) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - i - 1; j++) {if (arr[j] > arr[j + 1]) {swap(arr[j], arr[j + 1]);}}}}```2.快速排序实现代码```void quickSort(int arr[], int left, int right) { if (left >= right) return;int pivot = arr[left];int i = left, j = right;while (i < j) {while (i < j && arr[j] >= pivot) j--; arr[i] = arr[j];while (i < j && arr[i] <= pivot) i++; arr[j] = arr[i];}arr[i] = pivot;quickSort(arr, left, i - 1);quickSort(arr, i + 1, right);}```3.插入排序实现代码```void insertionSort(int arr[], int n) {for (int i = 1; i < n; i++) {int temp = arr[i];int j = i - 1;while (j >= 0 && temp < arr[j]) { arr[j + 1] = arr[j];j--;}arr[j + 1] = temp;}}```4.二分查找实现代码```int binarySearch(int arr[], int n, int target) {int left = 0, right = n - 1;while (left <= right) {int mid = left + (right - left) / 2;if (arr[mid] == target) return mid;else if (arr[mid] > target) right = mid - 1; else left = mid + 1;}return -1;}```五、算法的优化算法的优化可以从多个方面入手,比如时间复杂度、空间复杂度、常数因子等。