タグ付けされた質問 「complexity」

複雑さは、コードの複雑さを計算するさまざまな形式を扱います。循環的複雑度、nパス複雑度、Big O時間および空間複雑度。

10
マルチスレッドが難しい理由を説明する方法
私はかなり良いプログラマーであり、上司もかなり良いプログラマーです。彼はマルチスレッドなどのいくつかのタスクを過小評価しているように見えますが、それがどれほど難しいかはわかりません(いくつかのスレッドを実行し、すべてが完了するのを待ってから結果を返す以上のことは非常に難しいと思います)。 デッドロックや競合状態を心配し始めた瞬間、私はそれを非常に難しいと感じますが、上司はこれを感謝していないようです-私は彼がこれに遭遇したことはないと思います。ロックをたたくだけで、態度はほぼ変わりません。 それでは、どうやって彼を紹介したり、なぜ彼が並行性、並列処理、マルチスレッドの複雑さを過小評価しているのかを説明できますか?または多分私は間違っていますか? 編集:彼がやったことのほんの少し-リストをループし、そのリストの各アイテムに対して、そのアイテムの情報に基づいてデータベース更新コマンドを実行するスレッドを作成します。一度に実行されるスレッドの数を彼がどのように制御したかはわかりません。実行中のスレッドが多すぎる場合(キューはセマフォを使用しなかった場合)、キューに追加する必要があります。

7
ソフトウェアプロジェクトの偶発的な複雑さを管理する方法
Murray Gell-Mannが、Richard Feynmanがどのように多くの困難な問題を解決したかを尋ねられたとき、Gell-Mannは、Feynmanにアルゴリズムがあったと答えました。 問題を書き留めます。 真剣に考えてください。 ソリューションを書き留めます。 ゲルマンは、ファインマンが別の種類の問題解決者であり、彼の方法を研究することから得られる洞察がなかったことを説明しようとしていました。中規模/大規模のソフトウェアプロジェクトの複雑さを管理することについても、同じように感じています。優れた人々は本質的にそれが得意であり、何らかの方法でさまざまな抽象化を積み重ねて積み重ねることで、無関係な問題を引き起こすことなく全体を管理可能にします。 ファインマンアルゴリズムは偶発的な複雑さを管理する唯一の方法ですか、それともソフトウェアエンジニアが偶然の複雑さを抑えるために一貫して適用できる実際の方法がありますか?

15
大規模なソフトウェアでバグの絶対的なゼロ状態に到達することは可能ですか?
たとえば、Autodesk Mayaの規模と複雑さのコード、2千万から3千万行以上のコードについて話しています。 必要に応じて開発をフリーズした場合、単一のバグがなくなるまで、すべてのバグを実際に修正できますか?バグのないシステムの存在に対する賛否両論は何ですか? 修正するたびにバグが増えるという考えがあるため、それは真実ではないと思います。 バグとは、UIの最も単純なタイプミスから、回避策のないより深刻な予防バグまでを意味します。たとえば、特定のスクリプト関数は法線を正しく計算しません。また、回避策がある場合でも、問題を解決する必要があります。したがって、提供された関数を使用する代わりに、この特定のことを手動で行うことができますが、その関数はまだ修正する必要があります。

17
業界で働くとき、big-Oは本当に関連性がありますか?
私が行ったすべてのインタビューで、big-O表記を含む複雑さの数学的分析についてクイズを受けました。 big-O分析は、業界の開発にどの程度関連していますか?どのくらいの頻度でそれを実際に使用しますか?また、問題に対する研ぎ澄まされた考え方を持つことはどのくらい必要ですか?

6
オープンソースプロジェクトのコード概要がないのはなぜですか?[閉まっている]
そこには非常に複雑なオープンソースプロジェクトがあり、そのうちのいくつかに私は貢献できると思います、そして私はできると思いますが、単一の理由でコードへの1行を変更するために、エントリーに対する障壁が高すぎます大きなプロジェクトをすべて理解する必要があります。 すべてのコードを読む必要はありません(読んでも十分ではありません)、すべての単一行が行うこととその理由をすべて理解する必要があります。コードはおそらくモジュール化され、コンパートメント化されているためです。その場合でも、プロジェクトの概要を取得して、モジュールの場所、あるモジュールが他のモジュールとインターフェイスする場所、各モジュールが正確に何をするのか、なぜなのか、これらの各イベントがどのディレクトリとファイルで発生するのかを知る必要があります。 私はこのコードの概要を、オープンソースプロジェクトがウェブサイトや外部の人にコードを説明するドキュメントに含めることができるセクションの名前として呼んでいます。私はそれが恩恵を受けるだろうと思う潜在的な貢献者を、彼らは実際、構築できる場所を識別することができるだろうとして、主コーダーは、彼らがすべてを書きながら、彼らの心を再編成することができるだろうとして、関与を、そして役立つだろうユーザーを、彼らは同じように、彼らが経験するバグを理解し、より良い報告をする助けになり、貢献者になることさえあります。 しかし、これらの「コードの概要」の1つを見たことはありません。どうして?これらのようなものがあり、私はそれらを見逃していますか?私が説明しているのと同じ仕事をするものは?または、これは完全に役に立たないアイデアですか?

5
akka / erlangでアクターを使用するのが良くないのはいつですか?
私はakkaで毎日7〜8か月働いています。私が始めたとき、私はアプリケーションに取り組んでおり、ほとんどのオブジェクト間で通信するために、アクターは基本的にアクターシステム内のどこででも使用されることに気付きました。だから私は同じことをした-x / y / zの別のアクターをスピンアップする。 これはあまりにも無差別で、必要のないところに複雑さを加えているように思えます-しかし、アクターとプレーンを介した同期、または先物を介した非同期ロジックを使用する必要がある場所についての議論は見つかりません。同僚が似たようなことを言った後、私は自分のスタンスを熟考し始めました。最近、タスクを熟考し、不変の実装で同じ結果を安全に達成できるため、別のアクターの作成を避けたいくつかのケースを実現しました。たとえば、非常に頻繁にアクセスするデータベースまたはファイルから設定値を取得するようなものです結果を待つのが実際のユースケースです。 特に、不変の状態で遊んでいる場合、アクターは複雑さを生み出し、スループットを制限します。たとえば、オブジェクトの純粋な関数は、並行性のレベルを問わず、リスクなしで同時に呼び出すことができます。アクターは一度に1つのメッセージしか処理できません。別の考慮事項は、futureの使用を開始しない限り、結果を待つ必要がある場合にスレッドを保留することですが、非同期メッセージングやスケールを心配する必要がない場合は、アクターを採用するのはやり過ぎかもしれません。 だから私の質問は-俳優を使用するのに悪い時間はありますか?アーランがどのように見えるのか興味があり、他の人の洞察が本当に欲しいです。または、アクターの使用に関するいくつかの原則がある場合。

4
抽象化が多すぎると悪いことはありますか?
プログラマーとして、私たちの目標は、与えられたドメインモデルとビジネスロジックを適切に抽象化することだと思います。しかし、この抽象化はどこで止めるべきですか?抽象化とそのすべての利点(柔軟性、変更の容易さなど)と、コードとそのすべての利点の理解の容易さとの間でトレードオフを行う方法。 私は過度に抽象化されたコードを書く傾向があり、それがどれほど良いのかわかりません。私はよく、2つの部分で構成されるマイクロフレームワークのようなものを書く傾向があります。 マイクロフレームワークに接続されたマイクロモジュール:これらのモジュールは、単一ユニットとして理解、開発、および保守が容易です。このコードは基本的に、要件で説明されている機能的な機能を実際に実行するコードを表しています。 接続コード; 今ここに私は問題があると信じています。このコードは、時には非常に抽象化されていて、最初は理解しにくいため、複雑になる傾向があります。これは、純粋な抽象化、現実のベース、および提示されたコードで実行されるビジネスロジックにすぎないという事実により発生します1。この理由から、このコードはテスト後に変更されることはありません。 これはプログラミングの良いアプローチですか?多くのモジュールで非常に断片化されたコードの変更が非常に理解しやすく、抽象化POVからの変更のないコードは非常に複雑であるということですか?すべてのコードが均一に複雑である(つまり、コード1がより複雑で相互にリンクされ、コード2がより単純である)ため、コードを見ている人は合理的な時間内にそれを理解できますが、変更は高価であるか、上記のソリューションは優れています「コードの変更」は理解、デバッグ、変更が非常に簡単であり、「コードのリンク」は一種の困難です。 注:これはコードの可読性に関するものではありません!1と2のコードはどちらも読み取り可能ですが、2のコードにはより複雑な抽象化があり、コード1には単純な抽象化があります。

4
P対NP対NP完全対NPハードを理解しよう
私はこれらの分類とそれらが存在する理由を理解しようとしています。私の理解は正しいですか?そうでない場合、何ですか? Pは多項式の複雑さ、またはなどの非負の実数の場合です。問題がPに属する場合、多項式時間でゼロから解決できるアルゴリズムが少なくとも1つ存在します。たとえば、分割する場合、各ステップでループしてチェックすることにより、整数が素数であるかどうかを常に把握できます。O(nk)kO(1), O(n1/2), O(n2), O(n3)n2 <= k <= sqrt(n)kn NPは非決定的な多項式の複雑さです。非決定論的であることの意味を私は本当に知りません。多項式時間で検証するのは簡単ですが、答えがわからない場合はゼロから解決する多項式時間である場合とそうでない場合があります。それは以来かもしれ多項式時間で解けること、すべてのP上の問題もNPの問題です。NPの例として整数因数分解が引用されていますが、試行的因数分解にはO(sqrt(n))時間がかかるため、個人的にはなぜPでないのか理解できません。 NP-Complete私はまったく理解していませんが、この例として巡回セールスマン問題が引用されています。しかし、私の意見では、TSPの問題は単にNPである可能性があります。なぜなら、前もってパスが与えられているかどうかを確認するようなものが必要だからです。O(2n n2) time to solve, but O(n) NP-Hardは未知のものでいっぱいだと思います。検証が難しく、解決が難しい。

2
O(…)とは何ですか。どのように計算しますか?
助けて!アルゴリズムまたはコードのBig-Oを分析する必要がある場所について質問があります。 Big-Oが何であるか、またはBig-OtaとBig-Thetaまたはアルゴリズムの複雑さを分析するその他の手段にどのように関連するかは正確にはわかりません。 Big-Oがコードを実行する時間を指すのか、それとも必要なメモリ量(スペース/時間のトレードオフ)を指すのかわかりません。 私はコンピューターサイエンスの宿題を持っています。そこでは、いくつかのループ(おそらく再帰アルゴリズム)を使用し、そのためのBig-Oを考え出す必要があります。 私は、既知のBig-Oを持つ2つのデータ構造またはアルゴリズムから選択できるプログラムに取り組んでおり、どちらを選択するかわからない。 Big-Oを計算してプログラム、宿題、またはコンピューターサイエンスの一般的な知識に適用する方法を理解するにはどうすればよいですか? 注:この質問は、コミュニティによって決定された他のBig-O質問の標準的なターゲットです。多くのBig-Oの質問に役立つ情報を大量に含めることができるのは、意図的に広いことです。これが広いという事実を、同様の質問が受け入れられることを示すものとして使用しないでください。

5
アルゴリズムがO(log n)であるかどうかの判別
CS理論を更新し、アルゴリズムO(log n)の複雑さを識別する方法を知りたいです。具体的には、それを識別する簡単な方法はありますか? 私はO(n)を知っています、あなたは通常単一のループを持っています。O(n ^ 2)は二重ループです。O(n ^ 3)はトリプルループなどです。O(log n)はどうですか。

9
複雑さを追加して重複コードを削除する
私はすべてが一般的な基本クラスから継承するいくつかのクラスを持っています。基本クラスには、typeのいくつかのオブジェクトのコレクションが含まれますT。 各子クラスは、オブジェクトのコレクションから補間値を計算できる必要がありますが、子クラスは異なるタイプを使用するため、計算はクラスごとにわずかに異なります。 これまで、コードをクラスからクラスにコピー/ペーストし、それぞれに小さな変更を加えました。しかし、今は重複したコードを削除し、基本クラスの1つの汎用補間メソッドに置き換えようとしています。しかし、それは非常に困難であることが証明されており、私が考えているすべての解決策は非常に複雑に思えます。 DRYの原則はこのような状況にはあまり当てはまらないと思い始めていますが、それは冒aspのように聞こえます。コードの重複を削除しようとすると、どれだけ複雑になりますか? 編集: 私が思いつく最良の解決策は次のようなものです: 基本クラス: protected T GetInterpolated(int frame) { var index = SortedFrames.BinarySearch(frame); if (index >= 0) return Data[index]; index = ~index; if (index == 0) return Data[index]; if (index >= Data.Count) return Data[Data.Count - 1]; return GetInterpolatedItem(frame, Data[index - 1], Data[index]); } protected abstract T GetInterpolatedItem(int …

7
Big OのOとは何ですか?
Big O表記のBigとOとは何ですか?私は定義を読みましたが、Oが「oh」と発音されていることはわかりません。たとえば、O(n)は線形アルゴリズムの複雑さであり、nは操作の数になる可能性があることを理解しています。しかし、Oとは何ですか?
23 complexity  big-o 

6
関数のBig O実行時間を変更するときに何と呼びますか[クローズ]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 去年閉鎖されました。 O(n^2)時間内にデータベースをソートする関数があるとしましょう。私はそれをリファクタリングしてO(n log(n))時間内に実行したいので、戻り値と入力を同等に保ちながら、操作の基本的な方法を変更します。 このリファクタリングアクティビティを何と呼びますか? 「高速化」は、アルゴリズムを実行する際の大きなO速度を変更せずにアルゴリズムを高速化できるため、あまり適切ではないようです。 「単純化」も正しくないようです。 このアクティビティを何と呼びますか? 更新 私が見つけた最良の答えは、漸近的な時間の複雑さを減らすことです。
19 complexity  big-o 

3
OOPの過度の複雑化に対する用語はありますか?
1〜2年前、OOP(Java)に関する優れた記事を目にしました。この記事では、2、3行のコードからなる単純な具体的なロガーの進行と、基本的には必要に応じてこれを追加してください! 記事の終わりまでに、この単純なロガーはごみの巨大な混乱であり、元の開発者は自分自身をほとんど理解できませんでした... このタイプの過剰合併症に共通の用語はありますか?その記事(私は再び見つけられることを心から願っています)は、孤立したケースのコンセプトを素晴らしく示していますが、パターン、フレームワーク、ライブラリの過剰使用によって開発者が本質的に自分自身を結び目にプログラムしたプロジェクト全体に出くわしましたその他の問題。独自の方法で、これは、交換用に継承する従来のVB6スパゲッティアプリと同じくらい悪い(またはさらに悪い)です。 私が本当に探しているのは、面接時にこれを持ち出すことです。アーキテクチャ/事前計画の欠如でこれに陥るのがどれほど簡単かを誰かが認識し、意識しているかどうかを知りたい(そして、彼らが適切なバランスを持っているように見えるかどうかで落ち込む)が、それは本当に何かではない私は多くの情報を見つけることができます。

5
P = NPの影響はどうなりますか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 7年前に閉鎖されました。 私はテストの準備をしていますが、PTIME = NPTIMEであることを証明するとどのような影響がありますかという質問に対する明確な答えが見つかりません。ウィキペディアを調べたところ、「数学、AI、アルゴリズムに重大な影響を与える」と述べたばかりです。 誰でも答えてくれますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.