随笔分类 - 算法
摘要:通过组合子问题来解决问题,各个子问题不独立,子问题包含公共子问题,每个子问题求解一次将结果保存在表中1:描述最优解结构2:定义递归的最优解3:自底向上求解最优解的值4:根据每步的计算结果构造最优解适用动态规划的两个基本要素:1:最优子结构:当问题最优解中包含子问题的最优解2:重叠子问题我们令fi[j]为底盘到Si,j的最优解i=0,1 j=1....n问题最优解:f* = min(f1[n]+x1,f2[n]+x2)f1[j] = min(f1[j-1]+a1,j-1,f2[j-1]+t2,j-1+a2,j-1) 2<=j<=nf1[1] = e1 + a11f2[j] = min
阅读全文
摘要:# -*- coding: cp936 -*-import copyMV = 0xFFFFFFFFVertexs = {0:'v0',1:'v1',2:'v2',3:'v3',4:'v4',5:'v5'}Arcs = [[MV,MV,10,MV,30,100],[MV,MV,5,MV,MV,MV],[MV,MV,MV,50,MV,MV],\ [MV,MV,MV,MV,MV,10],[MV,MV,MV,20,MV,MV],[MV,MV,MV,MV,MV,MV]]#初始化源点到目标点的最短路径 def
阅读全文
摘要:# -*- coding: cp936 -*-#构建表达式二叉树import Stack#if 'ch' is opreator,then return True,otherwise return Falsedef isOperator(ch): if '+' == ch or '-' == ch or\ '*' == ch or '/' == ch or\ '(' == ch or ')' == ch or\ '#' == ch: return True retur
阅读全文
摘要:由于在项目中需要使用到不同关键字类型(整数,字符串等)来构建hash表,可以使用一个较为通用的hash表操作算法来实现。1:支持多种关键字类型。2:支持hash表的动态扩大。3:通过双向链表链接所有元素,方便hash表的动态扩展和清空。一个实例:hash值1、3、5、7中存在对应的元素节点,这些元素节点又互相链接并由一个pHead节点指向。数据结构定义:每个元素是双向链表的节点。pFirstElem是链表的头结点,通过该节点可以快速遍历所有元素。View Code #define STR_TYPE 0#define INT_TYPE 1typedef struct elem_s elem_t,
阅读全文
摘要:对于32位的机器,INT整形占四个字节,这意味着如果我们要保存一个INT类型数据需要占用4个字节空间,但实际的情况是4个字节的空间中并非所有的空间都保存了有效的数据位,比如整数1,在内存中以0x00000001表示,实际只有最低位表示了实际数据,通过实现一个整形的压缩算法可以有效的减少存储空间的使用。1:在一个字节数据中只保存7bit有效数据,第8位作为一个INT数据是否表示完成的指示位(1表示未完成,0表示已经完成)。2:通过判断字节的最高BIT位是否为0来获取一个INT型数据,这样我们可以通过1-5个字节数据来表示一个INT型。3:数据转换通过去除每个字节的指示位,其它bit数据拼接构成I
阅读全文
摘要:sqlite的分词器模块需要对输入的字符串映射为系统中的标示符,其对关键字映射使用了hash算法,其对hash冲突的解决十分巧妙。1:最常规的解决办法:写一堆判断对每个输入字符串判断是否匹配,如果匹配就映射为系统中的关键字。由于sqlite的关键字有100多个,如果每个字符串进行比较判断,无疑效率很低2:使用hash算法: 首先构造一个散列函数,该函数计算字符串得到一个hash映射表的入口地址。 在入口地址中存放对应的记录. 由于对不同的字符串进行散列后可能得到一个相同的入口地址,这就要求我们要对冲突进行解决.2.1以前遇到类似的问题,基本使用了链地址法来解决冲突的问题。例如:typedef
阅读全文

浙公网安备 33010602011771号