問題タブ [isomorphism]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 同形のJavaScriptの欠点はありますか?
Javascript が拡大し続け、Web 開発のほとんどのレイヤーをカバーするにつれて、Isomorphic JS (クライアント側またはサーバー側のいずれかで実行できるソフトウェアを作成する) が Web アプリの新しいパラダイムとして成長しています。
利点は明らかですが、サーバー側のレンダリングは同型の重要な機能の 1 つです。
私はそれをあまりいじっていませんが、本番プロジェクトに実装したいと思っています。
問題は、Node.js は大きなプロジェクトのサーバー側をレンダリングするのに十分なほど成熟しているかということです。落とし穴は見つかりましたか?保守性はどうですか?
prolog - プロローグ同型グラフ
ここで同型グラフの問題を解決しようとしています。
課題情報:
- 2 つの無向グラフが同型かどうかを判定します。
- 孤立した頂点はありません。
- 頂点の数が 30 未満です
グラフのエッジは述語として与えられます。
/li>
私は次のアプローチを使用しようとしています:
- エッジのすべてのペア (つまり、グラフ 1 と 2 のすべてのエッジ)
- 2 つのエッジの頂点をバインドしてみてください
- 頂点のバインドが不可能な場合 (つまり、頂点の 1 つとの別のバインドが既に存在する場合)、バックトラックして別のペアのエッジを試します。
- それ以外の場合は、バインディングを追加し、残りのグラフを続行します (つまり、各グラフの 1 つのエッジが削除され、手順が再度適用されます)。
両方のグラフが空 (すべての頂点が 1 つのグラフから別のグラフにバインドされていることを意味する) でない限り、手順は繰り返されます。これは成功を意味します。それ以外の場合、手順は常に失敗します (つまり、他のバインディングの組み合わせが利用できないなど)。
私のコードは機能しているようですが、小さなグラフのみです(すべてのペアを試すためだと思います:))。
したがって、コードを最適化する方法を誰かが知っている場合 (いくつかのカットを挿入してtry_bind
、より良い方法で書くことができると思います)、またはより良いアプローチを事前に教えてください。
非同形性をチェックするための追伸 不変条件などをチェックできることはわかっています。今のところ、それはあまり重要ではありません。
コード:
javascript - サーバー側をレンダリングする前にデータをフェッチする
現在、私はEste.jsを発見しており、同型アプリに少し問題があります。renderToString() でサーバー側をレンダリングする前に API 呼び出しを行う方法がわかりません。
1 つの解決策は、React Router を使用してルーター レベルですべてのデータ取得を行うことです。最上位のルートに応じて、どのデータが必要になるかを予測し、API 呼び出しを行ってから、React.renderToString を呼び出すことができます。
素晴らしいですが、コンポーネント レベルとルーター レベルでデータの依存関係を宣言する必要があります。同じコードを 2 回書くことになり、それが最善の方法だとは思えません。
編集:わかりました、今のところ、私はやりたいことがいくらかできます。React-Router とこのリンクを使用して、次のことができました。
このグローバルなアプリの状態を指定して、/todos を指すときに todos をプリフェッチしたい
初期状態.js
todos.react.js
todo コンポーネントで、静的関数 fetchData を宣言します。appState で正しいキーを取得したいので、「list」をパラメーターとして渡します。汚い感じ。
アクション.js
Api 呼び出しなど、キーを promise に渡します - ハックしているように感じます
render.js
ご覧のとおり、更新された todoList で appState を更新する関数を作成します。
このすべてを実行しても問題ありませんか? 暗い道を進んでいるように感じるので、フィードバックをお願いします:(。
python - networkx による力ずくのグラフ同形
2 つのグラフが同型かどうかを確認するためのブルート フォース アプローチを作成しようとしています。クラス networkx を使用していますが、組み込み関数を同形に使用したくありません。
グラフのすべてのノード順列をチェックする必要があることは理解していますが、その方法がわかりません。では、networkx グラフのノードをどのように並べ替えるのでしょうか?
graph - ノード不変条件とは何ですか? また、グラフ同型をチェックするプログラムでそれらを使用して「検索ツリーを剪定」するにはどうすればよいですか?
プロジェクトでは、networkx と連携して NAUTY スタイルの同形性チェック プログラムを作成する python プログラムを作成しています。私のプログラムは、ここにある Nauty の紹介に基づいており、次のように機能します。
2 つのグラフ G と H を取り、次数に応じてノードに色を付けます。色クラスの各ノードの近傍に基づいてグラフの色を調整する色調整アルゴリズムを実行します。このペア (G', H') は、検索ツリーの「ルート」になり、DFS アルゴリズムを使用します。次に、複数の要素を持つ最小の色クラスに属する G' のノードを個別化し、分岐法を使用して、新しい木のペア (G'', H''), (G'' , H'''), ... (G'', H^(k)) (k は色クラスのサイズに依存します。たとえば、色クラス red の g の場合: [1,2,3]は G の赤いノードであり、[5,6,7] は H の赤いノードです。次に、ペア 1:5、1:6、1:7 の検索ツリーの分岐を作成し、開く必要があります。後で検索ツリーにアクセスする新しいブランチ)。そして、摩擦があります!私のツリーは大きくなりすぎ、速すぎます。これは、上記のリンクの「ノードの不変条件とプルーニング」の部分で説明されているノードの不変条件を使用していないためです。
誰かが私が使用できるノード不変条件のいくつかの例を説明できますか? StackExchange では、ここではあまり役に立ちませんでした。ノードの色がノードの不変条件であるという事実を想定して使用していますが、強力な通常のグラフの場合、それは常に多くのことをもたらすとは限りません。何か案は?
isomorphism - サブグラフからサブグラフへの同型の実装
Bのサブグラフに同形であるグラフAの最大のサブグラフを取得する方法はありますか? グラフ A 全体の部分グラフ B への同型の実装をいくつか見つけただけです。A のすべての部分グラフを生成し、B への部分同型を取得できました。しかし、A の部分グラフの数は膨大です。最大のサブグラフをサブグラフ同型に取得するためのより効率的な方法が必要です。