2014-05-10 23:26

题目链接

原题:

  1. what is the best,worst and average case complexity for fibonacci no.s ..explain?

题目:计算斐波那契数的最好、最坏、平均复杂度是多少?

解法:计算斐波那契数倒是有好多方法,不过平均复杂度是怎么个说法?我写了三种解法:1. 白痴级的二路递归,复杂度是指数级的。2. 普通的递推算法,复杂度是线性的。3. 矩阵陈法,用快速幂可以达到对数级的时间。

代码:

  1. // http://www.careercup.com/question?id=5673934611546112
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. int fib1(int n)
  6. {
  7. if (n < ) {
  8. return ;
  9. }
  10.  
  11. if (n == || n == ) {
  12. return ;
  13. }
  14.  
  15. return fib1(n - ) + fib1(n - );
  16. }
  17.  
  18. int fib2(int n)
  19. {
  20. if (n < ) {
  21. return ;
  22. }
  23.  
  24. if (n == || n == ) {
  25. return ;
  26. }
  27.  
  28. int f1, f2, f3;
  29.  
  30. f1 = f2 = ;
  31. for (int i = ; i <= n; ++i) {
  32. f3 = f1 + f2;
  33. f1 = f2;
  34. f2 = f3;
  35. }
  36. return f3;
  37. }
  38.  
  39. void matrixMultiply(int a[][], int b[][], int c[][])
  40. {
  41. int i, j, k;
  42.  
  43. for (i = ; i < ; ++i) {
  44. for (j = ; j < ; ++j) {
  45. c[i][j] = ;
  46. for (k = ; k < ; ++k) {
  47. c[i][j] += a[i][k] * b[k][j];
  48. }
  49. }
  50. }
  51. }
  52.  
  53. void matrixPower(int a[][], int b[][], int n)
  54. {
  55. if (n < ) {
  56. b[][] = b[][] = ;
  57. b[][] = b[][] = ;
  58. return;
  59. }
  60.  
  61. if (n == ) {
  62. b[][] = a[][];
  63. b[][] = a[][];
  64. b[][] = a[][];
  65. b[][] = a[][];
  66. return;
  67. }
  68.  
  69. int p[][];
  70. matrixPower(a, p, n / );
  71. if (n % ) {
  72. int c[][];
  73. matrixMultiply(p, p, c);
  74. matrixMultiply(a, c, b);
  75. } else {
  76. matrixMultiply(p, p, b);
  77. }
  78. }
  79.  
  80. int fib3(int n)
  81. {
  82. if (n < ) {
  83. return ;
  84. }
  85.  
  86. if (n == || n == ) {
  87. return ;
  88. }
  89.  
  90. int a[][] = {
  91. {, },
  92. {, }
  93. };
  94. int b[][];
  95. matrixPower(a, b, n - );
  96.  
  97. return b[][] + b[][];
  98. }
  99.  
  100. int main()
  101. {
  102. int n;
  103.  
  104. while (cin >> n) {
  105. cout << fib3(n) << endl;
  106. }
  107.  
  108. return ;
  109. }

Careercup - Microsoft面试题 - 5673934611546112的更多相关文章

  1. Careercup - Microsoft面试题 - 6314866323226624

    2014-05-11 05:29 题目链接 原题: Design remote controller for me. 题目:设计一个遥控器. 解法:遥控什么?什么遥控?传统的红外线信号吗?我只能随便说 ...

  2. Careercup - Microsoft面试题 - 6366101810184192

    2014-05-10 22:30 题目链接 原题: Design database locks to allow r/w concurrency and data consistency. 题目:设计 ...

  3. Careercup - Microsoft面试题 - 24308662

    2014-05-12 07:31 题目链接 原题: I have heard this question many times in microsoft interviews. Given two a ...

  4. Careercup - Microsoft面试题 - 5700293077499904

    2014-05-12 00:02 题目链接 原题: For a given map (ie Bing map) given longitude/latitude/ how would you desi ...

  5. Careercup - Microsoft面试题 - 5204967652589568

    2014-05-11 23:57 题目链接 原题: identical balls. one ball measurements ........ dead easy. 题目:9个看起来一样的球,其中 ...

  6. Careercup - Microsoft面试题 - 5175246478901248

    2014-05-11 23:52 题目链接 原题: design an alarm clock for a deaf person. 题目:为聋人设计闹钟? 解法:聋人听不见,那么闪光.震动都可行.睡 ...

  7. Careercup - Microsoft面试题 - 5718181884723200

    2014-05-11 05:55 题目链接 原题: difference between thread and process. 题目:请描述进程和线程的区别. 解法:操作系统理论题.标准答案在恐龙书 ...

  8. Careercup - Microsoft面试题 - 5173689888800768

    2014-05-11 05:21 题目链接 原题: Complexity of a function: int func_fibonacci ( int n) { ) { return n; } el ...

  9. Careercup - Microsoft面试题 - 6282862240202752

    2014-05-11 03:56 题目链接 原题: Given an integer array. Perform circular right shift by n. Give the best s ...

随机推荐

  1. 一步一图:从SQLSERVER2005中导出insert语句

    1.为什么要导出insert语句,我电脑装的是SQL Server Express免费版的,服务器上装的是正式版,在服务器上备份的数据库文件在本机上还原的时候 因为版本不一样,总是不成功.如果能直接使 ...

  2. php中实现17种正则表达式

    php中实现17种正则表达式 该教程来自:php教程网:http://php.662p.com "^\d+[ DISCUZ_CODE_1 ]quot; //非负整数(正整数 + 0) &qu ...

  3. [转]CentOS开机启动脚本

    转载自http://www.2cto.com/os/201306/220559.html   我的一个Centos开机自启动脚本的制作   一.切换到/etc/init.d/   二.制作sh脚本 v ...

  4. 为什么swing不适合做桌面软件

    http://www.zhihu.com/question/19608871 我最近几年做的项目清一色的都是HTML5了,这篇<基于HTML5的电信网管3D机房监控应用>供参考,HTML5 ...

  5. j-query j-query

    jQuery   1.安装:http://jquery.com/download/登陆这个jQuery下载2在.html文件的<head>标签中导入3 语法$(selector).acti ...

  6. centos6.7下网络设置

    vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0"BOOTPROTO="static"   # ...

  7. C++判断五位以内的对称素数

    题目内容:判断一个数是否为对称且不大于五位数的素数. 输入描述:输入数据含有不多于50个的正整数n(0<n<232). 输出描述:对于每个n,如果该数是不大于五位数的对称素数,则输出“Ye ...

  8. Java打印温度转换表

    按5度的增量打印出一个从摄氏温度到华氏温度的转换表.转换公式为h=c*9/5+32,其中h为华氏温度,c为摄氏温度. 主要是“按5度的增量”这个要求,一般摄氏温度的起始分别为0度和40度,所以循环可以 ...

  9. QQl聊天消息

    Activity: package com.zzw.qqchat; import java.util.ArrayList; import java.util.HashMap; import andro ...

  10. ASP.NET Core文章汇总

    现有Asp.Net Core 文章资料,2016 3-20月汇总如下 ASP.NET Core 1.0 与 .NET Core 1.0 基础概述 http://www.cnblogs.com/Irvi ...