ホームページ > 運用・保守 > Linuxの運用と保守 > プロジェクトで一般的に使用される Linux コマンドによって引き起こされる古典的なアルゴリズムの問​​題

プロジェクトで一般的に使用される Linux コマンドによって引き起こされる古典的なアルゴリズムの問​​題

巴扎黑
リリース: 2017-06-23 14:14:22
オリジナル
2328 人が閲覧しました

  小时候家里定了《读者》的月刊,里面记录一个故事:说有有个偏僻的乡村一日突然来了一个美女,她携着万贯家财子女在当地安家落户,成了当地的乡绅。她让她的子女世世代代的保守这个秘密,直到这个秘密不会再对家族带来灾难。她就是陈圆圆。当年吴三桂领清兵入关,冲冠一怒为红颜,改写了中国的历史,自己却能全身而退的那个人。

  周五例行公事的查看一下离线数据推送项目的数据和log。将log用awk分段之后,我想知道实时数据前10个被重复发送的数据ID都被重复发送了几次,从而找到进一步优化的入手点,天知道我对这个项目已经进行了多少次优化了。于是linux命令就是

 cat transmission.log |grep 'IncrementAlbumService.java:146'|awk '{print $6}'|awk -F ',' '{print $1}'| sort |uniq -c| sort -nr |head
ログイン後にコピー

得られた結果を見て非常に罪悪感を感じました

(データセキュリティ、プロジェクトのIDルール部分が表示されません)

これは彼らの運用に関わることですが、データの変更を検知して送信すべきだったのですが、しかし、これほど高い再発行率ではありません。更新サービスとオフライン サービスのインターフェイスに関係なく、最適化できる点はまだあります。女の子、私の考え方は、登場するときにヘアドライヤーや人工じょうろを使用して絵を作成する男性アイドルの考え方とは常に異なっていました。この結果に加えて、私は別の古典的なアルゴリズムの問​​題についても考えています。つまり、各行に 1 つの単語が含まれる約 10,000 行のテキスト ファイルがあり、最も頻繁に出現する上位 10 の単語をカウントする必要があります。

このアルゴリズムの問​​題では、上記の Linux コマンドは sort|uniq -c |sort -nr | です。時間計算量は次の中で最大です:

1> まずソートを行います、

直接挿入ソート: 順序付きリストに要素を連続的に挿入します、最悪の時間計算量は O(n2 )

シェルソート:増分が減少した挿入ソート、不安定、増分因子シーケンスの選択に依存、最悪の時間計算量は O(n2)

単純選択ソート: ソートされる数値のうち、最小または最大を選択して交換します最初のソートされていない位置では、最悪の場合の時間計算量は O(n2) です

二項選択ソート: 単純な選択ソートごとに 2 つの要素が決定されるため、サイクルが半分に短縮されます。

ヒープソート: ツリー選択ソート、大きなルートヒープ、小さなルートヒープ。最悪の時間計算量は O(N*logN) です

バブルソート: 2 つの隣接する数値が比較され交換されるたびに、最悪の時間計算量は O(n2) になります

クイックソート: 選択ベンチマーク要素、毎回ソートされる要素は分割され、最悪の時間計算量は O(n2)

マージソート: 2 つの順序付きリストを新しい順序付きリストに結合します、最悪の時間計算量は O(N*logN) です

バケットソート:空間と時間を交換するアルゴリズム、計算量は O(n) に近い

基数ソート: 数十万桁に従って割り当てと収集、時間計算量は O(dn)

2>uniq の時間計算量は O (n)

3>sortの時間サービス度は1>

4>sort後の時間計算量はO(1)

使用されるアルゴリズムはファイルのサイズにも関係しますサイズが大きすぎてデータが多すぎる場合は、ファイルを分割し、個別に並べ替えてから、複数の方法で結合する必要があります。したがって、ここでは単語数について言及します。

Linux コマンドを使用しない場合の古典的な解決策は、まず辞書ツリーを使用して単語の頻度をカウントし、次に大きなルート ヒープを使用することです。まず、タイヤ ツリーとも呼ばれる辞書ツリーを紹介します。検索エンジンはこれをテキストの単語の頻度統計を作成するためによく使用し、単語分割アルゴリズムもこれを基本的なデータ構造として使用するため、私はそれについて少し知っています。その利点は、不必要な文字列比較を最小限に抑え、クエリ効率がハッシュ テーブルよりも高いことです。中心となるアイデアは、スペースを時間に交換し、パブリック プレフィックスを使用してクエリ時間のオーバーヘッドを削減することです。したがって、統計について話すとき、最初に思い浮かぶのは辞書ツリーです。単語頻度をカウントするときに上位 10 個の最大単語頻度の配列を維持すると、ループ処理で比較した場合、時間計算量は 10 倍高くなります。したがって、最初に統計を作成してから上位 10 を選択する方が、時間効率の点で適切です。

実は私はアルゴリズムについてはあまり詳しくなく、ただ使い方を知っているだけです。私の元同僚は、私が WeChat に書いた記事を読んで、「フィード ストリーミングは非常に技術的な仕事ですか?」と尋ねました。彼の質問を聞いて、背が高く、金持ちで、ハンサムであるふりをすることに固執した「仙剣」のリー・シャオヤオを思い出しました。レストランで彼が一番高価な料理「牛肉と野菜の炒め物」を注文したいと言うと、リンアーは笑いながら「シャオヤオ兄さん、牛肉と野菜の炒め物はとても高価な料理ですか?」と尋ねた。同僚はJD.comにいてMomoに行くか検討しているので真剣に私の意見を求めていましたが、私は世界を見たことがないLi Xiaoyaoのような気分でした。フィード フローのビジネス ロジックは、どのような方法でも実行できます。技術的な内容が含まれるかどうかは、その実行方法によって決まります。フィードストリームを組み立てる方法を紹介する特許を書いていますが、そのプロセスはまだ完了していないため、それまでは計算方法を公開しません。しかし、よく考えてみると、最適化のポイントはまだたくさんあります。一昨年、モーメントを好んでプレイしていたとき、削除したモーメントが再び表示されたり、自分や他の人のモーメントの最近のデータが突然消えて、1 年前の 2 か月前などの非常に古いデータだけが残ったりすることがよくありました。 1 年前のデータは 1 日後に自動的に復元されます。それはすべて戦略の問題です。 WeChat モーメントには多くの問題があります。私たちの製品の 1 つである mm は WeChat アーキテクトのファミリー メンバーなので、あまり文句は言いません。

今日は日曜日ですが、少し想像力を働かせても構いませんが、テーマが必要です。前の例には古典的な上位 K 問題があります。検索エンジンは多くの場合、最も人気のあるクエリ文字列をカウントする必要があるため、上位 K 個の質問が基準となります。 TopK 問題は小さなルート ヒープを使用します。 K サイズの小さなルート ヒープを維持し、比較する要素をたどって、それらをそれぞれ次の要素と比較します。ルート要素より小さい場合は、上位 K には絶対に入らないことを意味します。ルート要素より大きい場合は、ルート要素を削除します。次に、ツリーを最小ヒープに調整し、比較を続けます。

最小ヒープは完全な二分木であり、各非葉ノードの値はその子ノードの値を超えません。このルールに違反している場合は、最初の非リーフ ノードからルート ノードまでボトムアップの順序で調整を行う必要があります。

来週Huluでインタビューすることに決めましたが、まだ行っていないので、おそらく行かないでしょう。 2 年前、元同僚が Amazon を勧めてくれましたが、自分を慰めるために、当時は採用活動をしていなかったのだろうと思います。私はこれまでこのような外資系企業の面接に行ったことがないので、どのようなルーティンになっているのかわかりません。今から準備を始めれば、おそらく国慶節後には合格できるでしょう。一人で面接に行くのは非常に不利だと思います。それはまったく悪いことではありませんが、非常に不安定になります。私の記事を読んだ友人は、私の記事が非常に乱雑で複雑だと思うかもしれません。これはまさに私の人生に当てはまります。私は幅広い知識を持っており、とても気まぐれで、何の迷いもありませんが、一方ではそれが私の創造性の基礎となりますが、他方では、自分自身を表現する能力には役立たないのです。スポット。脳はコンピューターのようなものです。並列プログラムがたくさんありますが、メモリが十分に大きくなく、データが大量にあります。メモリ ページングにより、ディスクの定期的なスワップが発生します。インタビューなどの時間に敏感なアクションは、簡単にタイムアウトによる返品につながる可能性があります。私は技術発明の特許をたくさん持っていますが、今思うと、自分が何を発明したのかすら思い出せません。ちょうどバスに乗ったところ、人が少なかったので、運転手はどこで降りればいいのかと尋ねました。思い出すのに長い時間がかかりました。実際、私の脳は非同期ノンブロッキング モードでより多く動作します。実際、インタビューなどには同期ブロッキングの方が適しています。しかし、すべてに解決策はあります。解決策が見つからない場合は、あなたの能力が足りないだけです。ただし、面接ではチームワークや会話力など総合的な能力が問われます。 「小京はとても賢いです」という一文に、うちの部署では異論のある人はいないと思います。また、部署や職場で一緒に仕事をする同僚たちも、私をコミュニケーションがとりにくい、付き合いにくい人だとは思わないだろうと信じています。しかし、面接では話し方を忘れてしまいがちです。しかし、この問題が原因で面接に落ちたとしても、私は文句を言いません。面接官は将来の同僚でありリーダーであるため、面接官との相性が合わないと将来自分の能力を発揮できない可能性があります。面接の結果が悪くても、自分の能力は十分だと感じている場合は、自分のレベルが十分ではなく、本当に優れた人材がどのようなものかを見たことがない可能性があります。しかし、私は壁にぶつかると覚悟してでもやり続ける人間です。私が何かを諦めると決めたら、それはやる価値がないからです。

私は働くことが好きで、60歳になってもクリエイティブな仕事を続けることが目標です。そのため、国内のインターネット企業が私を40歳で退職させてくれるのではないかと心配しています。もう一つ重要なことがあるのですが、検索エンジンのミドルウェアを自分で作りたいと思っています。国内のインターネット企業はユーザーを中心に考えているので、それをやるエネルギーは難しいと思います。もちろん、Hulu にアクセスできない場合でも、検索エンジンがそれを行う必要があります。あとは時間をどう配分するかの問題です。

私は実際、壁にぶつかるのが好きです。おそらく、そんなに早く成長したくないからです。毎日大人っぽく上品に振る舞うなら、苦手なことやうまくいかないことも隠しておく必要があります。その結果、私は毎日幸せになりますが、もしかしたら一生このままかもしれません。歴史上には、元々はプレイボーイだったが、家が没落した後に偉人になった有名人が数多くいます。この本では、人生の転機は高貴な人々との出会いと挫折の二種類があると書かれています。若くて心が広いときは、高貴な人に出会ってひらめきがあり、心を開くことができます。経験が増えるにつれて、人々は周囲の情報をより選択的に受け取るようになりますが、この時点では、人生を再考する前に大きな挫折に遭遇する必要があるかもしれません。より良い未来が見えるなら、私は一人で進んで船を燃やすつもりです。生きたいなら、一度に浮き沈みがある方が良いです~~

以上がプロジェクトで一般的に使用される Linux コマンドによって引き起こされる古典的なアルゴリズムの問​​題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート