<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    cuiyi's blog(崔毅 crazycy)

    記錄點滴 鑒往事之得失 以資于發(fā)展
    數(shù)據(jù)加載中……

    google筆試的敗筆(大家來仁者見仁哦)

    1 超級失敗的1:說8點開始,考試時間100分鐘 ,怎么算都是9:10交卷;9點一到匆匆交卷了,晚上躺床上才發(fā)現(xiàn)錯也;

    2 超級失敗的2:把自個的生日又記錯了;

    3 怕怕的發(fā)現(xiàn):發(fā)現(xiàn)mm還是超級可怕滴,眼睜睜看著一個騙局,哎,也得謹慎些以防上當受騙啊;

    題目如下:

    T( 0 ) = 1 ; T(1)=1;T(2)=2;T(n)=T(n-1)+T(n-2)+T(n-3);
    用最優(yōu)方式求T(n) ;

    int?T(int?n)?{
    }

    可以用最熟悉的語言寫


    在考場的第一個做法

    ?1 public ? class ?T? {
    ?2 ? public ? int ?t( int ?n) {
    ?3 ?? if ?(n? == ? 0 )? {
    ?4 ??? return ? 1 ;
    ?5 ??}
    ? else ? if ?(n? == ? 1 )? {
    ?6 ??? return ? 1 ;
    ?7 ??}
    ? else ? if ?(n? == ? 2 )? {
    ?8 ??? return ? 2 ;
    ?9 ??}
    ? else ? {
    10 ??? return ?t(n - 1 )? + ?t(n - 2 )? + ?t(n - 3 );
    11 ??}
    ?
    12 ?}

    13 }

    當時發(fā)現(xiàn)時間夠用,進行了公式推理,但未得出規(guī)律的真諦
    每個都與T(3)可以直接發(fā)生關(guān)系,關(guān)系是2的冪次方,但最終沒有得出公式
    遂改進如下:

    ?1 public ? class ?T? {
    ?2 ? public ? int ?t( int ?n) {
    ?3 ?? if ?(n? == ? 0 )? {
    ?4 ??? return ? 1 ;
    ?5 ??}
    ? else ? if ?(n? == ? 1 )? {
    ?6 ??? return ? 1 ;
    ?7 ??}
    ? else ? if ?(n? == ? 2 )? {
    ?8 ??? return ? 2 ;
    ?9 ??}
    ? else ? {
    10 ??? return ? 2 ? * ?t(n - 1 )? - ?t(n - 3 );
    11 ??}
    ?
    12 ?}

    13 }

    晚上躺床上,怎么可能這樣直接呢?
    突然想到最起碼的一點就是重復數(shù)的計算,應該進行保存;
    如果正向逐個求然后保存,可行;
    如果倒向如何保存,尚未想好
    大家來仁者見仁一下哦(有更好的思路的請指點)
    public class T {
    ?Map values = new HashMap();
    ?
    ?public int t(int n){
    ??int result = 0;
    ??if (n == 0) {
    ??? result = 1;
    ??} else if (n == 1) {
    ???result = 1;
    ??} else if (n == 2) {
    ???result = 2;
    ??} else {
    ???result =? 2 * t(n-1) - t(n-3);
    ??}
    ??return result;
    ?}
    }

    posted on 2006-10-18 11:37 crazycy 閱讀(3131) 評論(23)  編輯  收藏 所屬分類: JavaSE語言

    評論

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    應該是:
    public class T {
    public int t(int n){
    if (n == 0) {
    return 1;
    } else if (n == 1) {
    return 1;
    } else if (n == 2) {
    return 2;
    } else if (n == 3) {
    return 4;
    } else {
    return 2 * t(n-1) - t(n-4);
    }
    }
    }
    2006-10-18 12:37 | katlao

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    增開7群,號碼 30440732
    8群 30756649
    9群 30178567
    10群 28694497

    我們的qq群:15096318 學習程序的都可以來
    2006-10-18 14:16 | 123bingbing

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    @katlao

    對;呵呵;這個地方是記錯了;上交的卷子是這樣寫的;

    覺得還應該能繼續(xù)推導的;當時在考場上沒有推導出來;因為都與t(3)有2的冪方關(guān)系

    另外,我覺得另外的思路上正向做,并且存儲每一個數(shù)字;

    我現(xiàn)在思考的是倒向是否有辦法存儲呢?
    2006-10-18 16:21 | crazycy

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    @123bingbing

    我曾經(jīng)加入了47個群;呵呵,現(xiàn)在只留了4個,拒絕新的群了。
    2006-10-18 16:31 | crazycy

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    最優(yōu)的算法是推導出遞推公式的,但是那個要用到矩陣,有一些技巧來推,我當時也沒有推出來。次優(yōu)的一個方案是對中間的結(jié)果進行緩存,dp阿,O(n)的復雜度,而不是O(3^n)
    ----------------------------------------------------
    int buffer[n+1]

    buffer[0] = 1; buffer[1] = 1; buffer[2] = 2;

    for(int i = 3; i<=n; i++)
    buffer[i] = buffer[i - 1] + buffer[i - 2] + buffer[i - 3];

    return buffer[n];
    2006-10-18 19:38 | yangfan

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    我把樓上的作了一下修改,也不知道是改好了,還是改差了,呵呵
    就是把計算的結(jié)果存儲到數(shù)組中值最小的元素當中,因為它對以后的計算已經(jīng)沒有用處了
    雖然節(jié)省了空間,但是不知道速度會不會明顯變慢

    public static int t1( int n ){
    if( n==0 ){
    return 1;
    }else if( n== 1 ){
    return 1;
    }else if( n==2 ){
    return 2;
    }else{
    int[] b= new int[3];
    b[0] = 1;
    b[1] = 1;
    b[2] = 2;
    for( int i = 3; i < n+1; i++ ){
    b[i%3] = b[i%3] + b[(i+1)%3] + b[(i+2)%3];
    }
    return b[n%3];
    }
    2006-10-18 22:38 | 馬嘉楠

    # 我的  回復  更多評論   

    #!/usr/bin/python
    x=[1,1,2]
    def T(n):
    if n > len(x)-1:
    x.append(T(n-1)+T(n-2)+T(n-3))
    return x[n]

    import sys
    print T(int(sys.argv[1]))

    $ python test.py 100
    180396380815100901214157639
    2006-10-19 09:22 | oneleaf

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    重貼,不到1秒
    [code]
    #!/usr/bin/python
    x=[1,1,2]
    def T(n):
    if n > len(x)-1:
    x.append(T(n-1)+T(n-2)+T(n-3))
    return x[n]

    import sys
    print T(int(sys.argv[1]))
    [/code]

    $ python test.py 1000
    2758842807766486252615892411656158645133100149652696210351601845036392978912293462801016485671033253921841350537004356434253826361707295202024537559785200706502368152965047761644352316799391470273906561574500883480570560512982435681502330814068718832813973880527601
    2006-10-19 09:36 | oneleaf

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    @馬嘉楠
    不錯!
    2006-10-19 12:28 | katlao

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    是不是還得考慮溢出的情況?
    2006-10-19 14:39 | Gasbarroni

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    #!/usr/bin/python

    import sys
    import datetime

    def T(n):
    if n == 0:
    return 1
    elif n == 1:
    return 1
    elif n == 2:
    return 2
    else:
    i = 3
    a = 1
    b = 1
    c = 2
    while i <= n:
    d = a + b + c

    if i == n:
    return d
    else:
    i = i + 1
    a = b
    b = c
    c = d

    t_start = datetime.datetime.today()

    print T(int(sys.argv[1]))

    t_end = datetime.datetime.today()

    print t_end - t_start


    當n=100000時執(zhí)行時間為5.86秒
    2006-10-19 17:20 | wes109

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    都亂了,大家可以到http://bbs.btant.com/viewthread.php?tid=80&extra=page%3D1

    copy代碼
    2006-10-19 17:22 | wes109

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    @Gasbarroni

    哦 題目中聲明了不需考慮溢出

    呵呵
    2006-10-19 19:14 | crazycy

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   


    崔崔強啊,到google面試了?

    2006-10-19 23:49 | pigo

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    “發(fā)現(xiàn)mm還是超級可怕滴,眼睜睜看著一個騙局”,恩,建議你閉上眼過日子:)不然一睜眼就是怕怕了~
    2006-10-20 00:09 | qqsy

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    程序在運行中由于數(shù)據(jù)值過大,會導致溢出,所以在程序中計算時間的準確性值得懷疑.
    2006-10-20 10:07 | joycsharp@hotmail.com

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    給出此問題的一種“記憶”解法(java解法)
    //n的值到了80應該要超出Long型的范圍了
    static long[] knownT=new long[100];
    public static long t(n)
    { long t;
    if (knownT[n]!=0) return knownT[n];
    if(n<0) return 0;
    else if(n==0) return (knownT[n]=1);
    else if(n==1) return (knownT[n]=1);
    else if(n==2) return (knownT[n]=2);
    else if(n>=3) t=t(n-1)+t(n-2)+t(n-3);
    return (knownT[n]=t);

    }
    數(shù)據(jù)再大一些,只有使用BigInteger了。



    BigInteger
    2006-10-23 10:13 | oliver456

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    不好意思

    long t=0;

    要不然,會出現(xiàn)編譯錯誤
    2006-10-23 10:17 | oliver456

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    @wes109

    亂了,亂了
    重新來過,哈哈
    2006-10-23 22:55 | 馬嘉楠

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    #!/usr/bin/python
    x=[1,1,2]
    def T(n):
    if n < 3:
    return x[n]
    else:
    for i in xrange(n-2):
    x.append(sum(x))
    x.pop(0)
    return x[-1]

    import sys
    print T(int(sys.argv[1]))

    time t.py 150000

    real 0m9.860s
    user 0m9.553s
    sys 0m0.016s
    2006-11-01 20:43 | guyingbo

    # re: google筆試的敗筆(大家來仁者見仁哦)  回復  更多評論   

    int T(int n)
    {
    int i, temp, a[3] = {1, 1, 2};

    for (i = 3; i <= n; ++i)
    {
    temp = a[0] + a[1] + a[2];
    a[0] = a[1];
    a[1] = a[2];
    a[2] = temp;
    }

    return a[2];
    }
    2007-10-01 10:35 | peng

    # re: google筆試的敗筆(大家來仁者見仁哦)[未登錄]  回復  更多評論   

    int T(int n){
    int a=0,b=2,c=1,d=1;
    for(int i=3; i<n; i++){
    a = b+c+d;
    d=c;c=b;b=a;
    }
    return a;
    }
    2008-03-08 16:52 | jimmy

    # re: google筆試的敗筆(大家來仁者見仁哦)[未登錄]  回復  更多評論   

    暈 大家難道就沒有 發(fā)現(xiàn) 遞歸 運算最大的問題是重復計算嘛?
    2008-05-28 22:54 | 季失羽
    主站蜘蛛池模板: 亚洲一区精品无码| 亚洲va中文字幕无码久久 | 久久亚洲免费视频| 亚洲国产精品成人久久| 久久毛片免费看一区二区三区| yy6080亚洲一级理论| 免费精品久久久久久中文字幕| 波多野结衣久久高清免费| 亚洲丁香婷婷综合久久| 国产成人综合久久精品免费 | 四虎影视久久久免费 | 日韩亚洲Av人人夜夜澡人人爽| 午夜无码A级毛片免费视频| 精品亚洲国产成AV人片传媒| 18女人水真多免费高清毛片| 亚洲国产av一区二区三区丶| 久久精品网站免费观看| 亚洲av色香蕉一区二区三区| 亚洲人成网站18禁止一区| 中文字幕看片在线a免费| 亚洲国产天堂在线观看| 大地资源二在线观看免费高清| 久久水蜜桃亚洲AV无码精品| 国产精品亚洲不卡一区二区三区| 中文字幕在线观看免费| 亚洲色图校园春色| 在线观看91精品国产不卡免费| 九九全国免费视频| 亚洲精品在线播放视频| 日本无吗免费一二区| 久久性生大片免费观看性| 中文字幕在线观看亚洲| 国产成人免费手机在线观看视频 | 亚洲av无码国产精品色在线看不卡| 国产真人无码作爱免费视频| 亚洲色欲色欲综合网站| 国产无遮挡色视频免费视频| 丁香花在线视频观看免费| 亚洲kkk4444在线观看| 亚洲一区二区三区在线视频 | 免费va在线观看|