1. 算法特点
    1. 输入
    2. 输出
    3. 确定性
    4. 有限性
  2. 算法的复杂度
    1. 时间复杂度
      1. 与问题的规模
      2. 问题的输入
      3. 算法本身有关
    2. 空间复杂度
      1. 同上
    3. 一般是衡量时间的复杂度
      1. 用O()来表示
      2. 时间复杂度不要求精确
      3. 在给定的问题的规模足够的大的情况下,我们只取高阶的项作为时间复杂度,求极限会发现,原来的复杂度逼近高阶函数的复杂度
      4. 进一步我们对待所有的运算都看做是1时间复杂度
  3. 递归与分治
    1. 先分治再递归
  4. 算法的目的就是多做加法,少做乘法
    1. 大数乘法
      1. 将数拆分成两部分
      2. 乘法部分做一些技术处理
    2. strassen矩阵乘法
      1. 也是把举证拆成4块
      2. 乘法部分做些技术处理
      3. 一个2*2的矩阵是有必要做7次乘法的
      4. 如果要追求更好的效率,需要拆成3*3或者5*5的矩阵
  5. 如何去解一个递归方程
  6. Windows程序的入口是哪里?写出Windows消息机制的流程。
    1. Windows应用程序消息处理机制: A. 操作系统接收应用程序的窗口消息,将消息投递到该应用程序的消息队列中 B. 应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息,取出消息后 ,应用程序可以对消息进行一些预处理。 C. 应用程序调用DispatchMessage,将消息回传给操作系统。 D. 系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消 息进行处理。
  7. 算法小问题
    1. 如何求两个字符串的公共子串
      1. 用一个指针指向第一个字符串
      2. 比较第一个字符在下一个字符串中是否有共同的字符,若有则两个同时循环增加,直到不同为止,记录下第一相同字符的位置和长度
      3. 到第二个字符串遍历完,第一个串的指针向后加一,若在第二串中没有相同字符则也加一,
      4. 第一串循环完就结束
      5. 其中公共字串的首地址和长度是不断更新的,只要发现比当前字串长的,就更新
  8. c++使用问题
    1. 如何在类中申明一个函数为回调函数
      1. 一个是用普通的C 函数,在类中申明为友元
      2. 一个是使用静态函数
      3. 类中的函数包含有this指针不能使用回调函数
      4. /以下是一个回调函数的声明 int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf, LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lParam);
      5. 函数名就是一个地址
      6. 调用时在写一个函数,把回调函数的函数名写过去,函数执行完就会回调
    2. 补码如何计算
      1. 先你需要把数字化为二进制数,然后判断一下是正数还是负数,正数首位为零,负数首位为1,这是常说的称为原码的东西,正数在计算机里可以直接用原码存储,但负数存储的实际为补码,这也是为了运算简单。补码主要是将除符号位的所有位数变反,最后再加一,通过这个运算得出以上结果
  9. 静态与非静态的区别
    1. 全局的静态和非全局的静态的区别
      1. 静态全局函数有作用域,即为本程序,不能在其他的.c文件中使用
      2. 全局变量则无这个限制
    2. 局部变量静态和非静态的区别
      1. 只初始化一次
      2. 到程序结束时才释放
    3. 函数静态和非静态的区别
      1. 只有一份
  10. kmp算法
    1. 当匹配的字符串不同是,回朔到前面相同的字串的后面一个字符 再开始比较,如果还不可以则回溯到要匹配的串的开始bijiao
  11. b-树
    1. 子主题 1
  12. emc笔试
    1. 斐波那契数列的第40像比第三十九项是多少
    2. 在二叉树中找任意两个节点的公共父节点
      1. 找父节点
      2. 找到一个节点,标记出他所有的父节点
      3. 宁一个节点找父节点,找到第一个有标记的停止