随笔分类 - 算法
摘要:外观模式(Facade Pattern)门面模式 隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。(就是封装)
阅读全文
摘要:TODO GOOGLE PASSWORD
阅读全文
摘要: KNN用于分类和回归,需要考虑最近的邻居。 分类就是编组。 回归就是预测结果(如数字)。 特征抽取意味着将物品(如水果或用户)转换为一系列可比较的数字。 能否挑选合适的特征事关KNN算法的成败。
阅读全文
摘要:贪婪算法: 这是一种近似算法(approximation algorithm)。在获得精确解需要的时间太长时,可使用近似算法。判断近似算法优劣的标准如下: 速度有多快; 得到的近似解与最优解的接近程度。贪婪算法是不错的选择,它们不仅简单,而且通常运行速度很快。在这个例子中,贪婪算法的运行时间为O
阅读全文
摘要:狄克斯特拉算法用于每条边都有关联数字的图,这些数字称为权重(weight)。 带权重的图称为加权图(weighted graph),不带权重的图称为非加权图(unweighted graph)。 要计算非加权图中的最短路径,可使用广度优先搜索。要计算加权图中的最短路径,可使用狄克斯特拉算法。 无向图
阅读全文
摘要:图算法——广度优先搜索(breadth-first search,BFS)。 广度优先搜索指出是否有从A到B的路径。 如果有,广度优先搜索将找出最短路径。 你需要在你们的朋友中,找到一位芒果销售商。检查名单中的每个人时,你都将其朋友加入名单。 这样一来,你不仅在朋友中查找,还在朋友的朋友中查找
阅读全文
摘要:快速排序的工作原理 1,从数组中选择一个元素,这个元素被称为基准值(pivot)。 2,接下来,找出比基准值小的元素以及比基准值大的元素。这被称为分区(partitioning)。 现在有: 一个由所有小于基准值的数字组成的子数组; 基准值; 一个由所有大于基准值的数组组成的子数组。 3,
阅读全文
摘要:选择排序:每次选择一个最小的放入到一个新的数组或者列表中,以此来排序,放入到新数组的元素在原来的数组中要删除。 需要检查的元素数越来越少随着排序的进行,每次需要检查的元素数在逐渐减少,最后一次需要检查的元素都只有一个。既然如此,运行时间怎么还是O(n2)呢?这个问题问得好,这与大O表示法中的常数相关
阅读全文
摘要:#!/usr/bin/env python # -*- coding: utf-8 -*- # O(logn) ' binary_search ' __author__ = 'chris' import random import string def binary_search(list,item): low = 0 high = len(list) - 1 whi...
阅读全文
摘要:大O表示法 指出了算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间为O(n)。单位秒呢?没有——大O表示法指的并非以秒为单位的速度。大O表示法让你能够比较操作数,它指出了算法运行时间的增速。 大O 表示法指出了最糟情况下的运行时间假
阅读全文
摘要:1,对比 弱分治归并算法 vs 强分治归并算法 弱分治: 强分治: 强分治归并排序与弱分治排序的归并逻辑是一致的,只是在分治逻辑不同, 是通过递归的方式,将源数列层层切割,以下标middlle 为分界点,切割的逻辑图如上所示,逐步切成成长度为1的有序数列,然后再层层反向归并。 代码参考如下: 关于分
阅读全文
摘要:概念:递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。 绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。 递归执行的语句在遇到同名函数前正常执行,而其后的语句则暂时保留在内存中,待其递归后得
阅读全文
摘要:1,归并排序是建立在归并操作上的一种有效的排序算法。该算法也是采用分治法(Divide and Conquer)的一个非常典型的应用。 难点在于分治,分治是将原有数列分成一个个小的的有序数列,然后再合并。 2,例如集合{7,6,5,4,3,2,1},分治归并的逻辑如下: groupsize = 1:
阅读全文
摘要:假设集合int a = {4,3,2,1}; 插入排序法会设置一个插入的“标杆”,一般是以数列的第一个数为标杆,因次判断是否插入是从第二个数字开始。 从小至大排序: 第一轮: 排序完 3,4,2,1 第二轮: 排序完 2,3,4,1 第三轮: 排序完 1,2,3,4 current 代表当前的元素,
阅读全文
摘要:冒泡:核心是相邻的两个数进行比较。然后量两两交换。知道没有交换,代表排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。 外循环控制着冒泡的轮数,内循环控制着每轮比较的个数 第一轮比较:
阅读全文
摘要:1,在一个未排序的数组或者集合中,依次比较,依次将最小的放在排序后的起始位置(从小至大),或者将最大的放在排序后的起始位置(从大至小)。 int [] a = {12,3,4,55,66,7,8,90}; 第一轮比较: a[0] 依次和 a[1],a[2],[3]......a[n-1]比较,将最小
阅读全文