成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

關(guān)于排列后數(shù)組的一些思考(1)

DC_er / 1210人閱讀

摘要:?jiǎn)栴}上看到了一個(gè)問(wèn)題數(shù)組排序之后更加再對(duì)其進(jìn)行操作時(shí)間縮短了對(duì)樓主的實(shí)例代碼進(jìn)行了一下重構(gòu),代碼如下把最高的回答看了下,也就是在的時(shí)候,在判定的時(shí)候,沒(méi)有排列時(shí)候,每次都要重新進(jìn)行判斷,而排列完之后,當(dāng)排列完數(shù)據(jù)大于判斷時(shí)候,后面所有的數(shù)

問(wèn)題: stackoverflow上看到了一個(gè)問(wèn)題數(shù)組排序之后更加再對(duì)其進(jìn)行操作時(shí)間縮短了

對(duì)樓主的實(shí)例代碼進(jìn)行了一下重構(gòu),代碼如下:

public class Main {

    public static void main(String[] args) {
        noSortedTime();

        sortedTime();

    }

    private static void noSortedTime() {
        int[] data = initialize();
        calculateTime(data);
    }

    public static int[] initialize() {
        int arraySize = 32768;
        int data[] = new int[arraySize];
        Random ran = new Random(0);
        for (int c = 0; c < arraySize; ++c) {
            data[c] = ran.nextInt() % 256;
        }
        return data;
    }

    private static void sortedTime() {
        int[] data = initialize();
        Arrays.sort(data);
        calculateTime(data);
    }

    private static void calculateTime(int[] data) {
        long start = System.nanoTime();
        long sum = 0;
        for (int i = 0; i < 100000; i++) {
            for (int c = 0; c < data.length; c++) {
                if (data[c] < 128) {
                    sum += data[c];
                }
            }
        }
        System.out.println((System.nanoTime() - start) / 1000000000.0);
        System.out.println("sum = " + sum);
    }
}

把up最高的回答看了下,也就是在loop的時(shí)候,在判定if (data[c] > 128) 的時(shí)候,沒(méi)有排列時(shí)候,每次都要重新進(jìn)行判斷,而排列完之后,當(dāng)排列完數(shù)據(jù)大于128判斷時(shí)候,后面所有的數(shù)據(jù)都不需要進(jìn)行if的判斷,由此減少了判定方向,減少了運(yùn)行時(shí)間,由于128大概是255的一般左右,所以我當(dāng)時(shí)的認(rèn)為應(yīng)該時(shí)間也是一般左右,但得到的偏差比較大,而且sum是負(fù)數(shù),debug后發(fā)現(xiàn)ran.nextInt() % 256;可能產(chǎn)生負(fù)數(shù),于是我把initialize()方法改成了如下:

public static int[] initialize() {
    int arraySize = 30000;
    int data[] = new int[arraySize];
    Random ran = new Random(0);
    for (int c = 0; c < arraySize; ++c) {
        int i = ran.nextInt() % 256;
        if (i > 0) {
            data[c] = i;
        } else {
            data[c] = -i;
        }   
    }
    return data;
}

這時(shí)候,得到了結(jié)果是:
20.666892876
sum = 95197000000
9.225126652
sum = 95197000000

之后我覺(jué)得如果以128作為判定條件太折中,如果是用極端點(diǎn)的條件來(lái)進(jìn)行如小于1會(huì)不會(huì)排列好的數(shù)組會(huì)非??斓耐瓿赡?,或者大于254會(huì)不會(huì)兩邊的速度差不多呢,進(jìn)行了實(shí)驗(yàn)小于1的話得到的結(jié)果是:
8.647651855
sum = 0
8.641952252
sum = 0
大于254的結(jié)果是:
8.942171349
sum = 3111000000
8.821620658
sum = 3111000000

上述結(jié)果很明顯得到我們的猜想是錯(cuò)誤的,我又重新去把回答up最高的答案仔細(xì)讀了一遍,發(fā)現(xiàn)了又Branch predictor這個(gè)概念,是處理器中對(duì)于if else這類condition的判斷預(yù)測(cè),具體里面的概念灰常不懂,只能先放著了。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/63979.html

相關(guān)文章

  • Python | 遞歸

    摘要:那假如我們用遞歸來(lái)描述這種情況呢定義基本情況其它情形所以在上述求和中的定義又用到了自己本身的定義,這就構(gòu)成了遞歸。 說(shuō)起遞歸,我覺(jué)得其實(shí)大部分人應(yīng)該是不陌生的,遞歸廣泛存在于生活中。比如: showImg(https://segmentfault.com/img/remote/1460000007420204?w=294&h=450); The woman in this image ...

    qieangel2013 評(píng)論0 收藏0
  • 記一次JavaScript API練習(xí)題

    摘要:當(dāng)我完成這個(gè)題目并且看到其他大神的答案時(shí),我就覺(jué)得我真的很有必要記錄一下這道題,并且思考它在中的實(shí)現(xiàn)。表示被查找的值方法返回一個(gè)由替換值替換一些或所有匹配的模式后的新字符串。舉一反三,多多思考,多多實(shí)踐才是學(xué)習(xí)前端的最佳實(shí)踐。 之前,我在Codewars上看到一道名為Recover a secret string from random triplets的題,這道題使我沉思了很久,最終...

    scq000 評(píng)論0 收藏0
  • 也談前端面試常見(jiàn)問(wèn)題之『數(shù)組亂序』

    摘要:看完部分的源碼,首先迫不及待想跟大家分享的正是本文主題數(shù)組亂序。這是一道經(jīng)典的前端面試題,給你一個(gè)數(shù)組,將其打亂,返回新的數(shù)組,即為數(shù)組亂序,也稱為洗牌問(wèn)題。關(guān)于數(shù)組亂序,正確的解法應(yīng)該是,復(fù)雜度。 前言 終于可以開(kāi)始 Collection Functions 部分了。 可能有的童鞋是第一次看樓主的系列文章,這里再做下簡(jiǎn)單的介紹。樓主在閱讀 underscore.js 源碼的時(shí)候,學(xué)到...

    tracy 評(píng)論0 收藏0
  • [Leetcode] Next Permutation 下一個(gè)排列

    摘要:因?yàn)樵黾痈呶粫?huì)帶來(lái)更大的增益。所以對(duì)于一個(gè)長(zhǎng)為的序列,我們?cè)黾拥谖坏那疤崾?,前位已?jīng)達(dá)到了最大排列方法。因?yàn)槭钦蚁乱粋€(gè)數(shù),所以我們要找一個(gè)比小卻盡可能大的數(shù),所以找到。把換到的位置后,后三位仍然是個(gè)降序的排列。 Next Permutation Implement next permutation, which rearranges numbers into the lexicogr...

    young.li 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<