Big-Oが以下のコードであることを理解しようとしています。コードは基本的にこのアルゴリズムのBig-Oを決定する
行うことになっている何
、私はランダムなノードのサブセット(最大サイズ= selectionSize)と、それらの間に存在するすべてのエッジを選択しようとしています。ランダムノードの選択は、while
ループで行われます。それをした後、私は選択されたノードの間に存在するエッジを選択したい。
は、私はそれが
は私が実行している時間が 編集:(O = n^2
n=selectionSize
だと思う理由&と思われるもの。理由は、nodes
の要素のサイズを増やすことはできますが(たとえば10000にするなど)、最大でselectionSize
までしかループしないため、アルゴリズムに影響するとは思われません。私がこれが間違っていることを少し心配している唯一の理由は、while
ループのためですこれは(ランダムなので)かなり時間がかかることがありますが、時間的には全体の出力には影響しないと思います。node.getNeighbors()
はnodes
のほとんどのサイズにすることができるため)考え直し上うわ...ネヴァーマインド... nodes
サイズがそれに影響を与えない...だから私はselectionSize
はと等しい場合だと思いますnodes
のサイズ、実行時間はO=n^2
、n=size of nodes
です。
ヒント/ヒントをお待ちしております。
コード
// nodes and selectionSize are my input:
int[] nodes = {1,2,3...,1000}; // 1000 elements
int selectionSize = 500; // This can be at most the size of the elements (in this case 1000)
run_algo(nodes, selectionSize);
public void run_algo(int[] nodes, int selectionSize) {
randomNodesList = {};
while(randomNodesList < selectionSize) {
randomNode = selectRandomNode(nodes); // Assume O(1)
if(!randomNodesList.exists(randomNode)) { // Assume O(1)
randomNodesList.push_back(randomNode); // Assume O(1)
}
}
foreach(node in randomNodesList) {
foreach(neighbor in node.getNeighbors()) { // Max. nodes size (in this case 1000)
if (!randomNodesList.exists(neighbor)) { // Assume O(1)
AddEdge(node, neighbor); // Takes O(1) time
}
}
}
}
こんにちは@VidorVistrom、コメントに感謝します。私は私の投稿を編集しました。まだ不明な点がある場合は、お知らせください。 – Moody
ランダムが毎回同じインデックスを描画する最悪の場合は本当に難しいと言えます。あなたは最高のケースについて簡単に話すことができます。そして、それは選択サイズに応じて線形でなければなりません。あなたのルックアップは一定であり、n + nはまだ線形なので。 –
@VidorVistrom洞察力とヒントをありがとう! – Moody