算法的每一行中的计数/步数

时间:2016-10-03 04:15:05

标签: c algorithm performance big-o

我在这里有一个功能,我可以看到是O(N ^ 2)。但是,我想弄清楚每条线路使用的确切步数/计算。

public class ContactActivity extends Activity implements ContactListFragment.ContactListListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contact);

    }

    @Override
    public void itemClicked(long id){
        //method also defined in the listener

        View fragmentContainer = findViewById(R.id.fragment_detail_container);
        if (fragmentContainer != null){
            ContactDetailsFragment detailsFragment = new ContactDetailsFragment();
            FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
            detailsFragment.setContact(id);
            fragmentTransaction.replace(R.id.fragment_detail_container, detailsFragment);
            //fragmentTransaction.addToBackStack(null);
            fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
            fragmentTransaction.commit();
        }

    }

}

对于第1行,我认为它是1+(N + 1)+1。

第2行和第3行应该是sum(i = 1到n)(3i + 2),但我不知道如何。这个总和来自哪里?

2 个答案:

答案 0 :(得分:0)

第1行执行1次。但是,它执行1次初始化,n次比较和增量。

第2行执行n次。但是,它执行n初始化,n *(n + 1)/ 2比较和增量。

第3行执行n *(n + 1)/ 2次。由于http://mathcentral.uregina.ca/qq/database/qq.02.06/jo1.html

因此总操作数为1 + 3n + 3n *(n + 1)/ 2.

答案 1 :(得分:0)

外部for语句执行一次...虽然它迭代n次(由于开始条件,结束条件和更新部分)。这是“第1行”。

对于外循环的每次迭代,内部for语句将执行一次。外部循环迭代n次,因此内部for语句执行n次。这是“第2行”。

对于内循环的每次迭代,

"hi"将被写入一次。对于外循环的每次迭代,内循环将迭代n-i+1次(产生i的值)。这意味着打印"hi"的次数为ni == 1)+ n-1i == 2)+ .... {{1 (1)。添加它们,相当于i==n次。这是“第3行”。