ホームページ >バックエンド開発 >PHPチュートリアル >面接関連の質問: 1 億個の QQ 番号が保存されたテキスト ファイルを渡します。プログラムを使用して、小さいものから大きいものまで並べ替えてください。

面接関連の質問: 1 億個の QQ 番号が保存されたテキスト ファイルを渡します。プログラムを使用して、小さいものから大きいものまで並べ替えてください。

WBOY
WBOYオリジナル
2016-06-13 13:47:161133ブラウズ

面接の質問: 1 億個の QQ 番号が保存されたテキスト ファイルが与えられました。プログラムを使用して、小さいものから大きなものまで並べ替えてください。汗!
面接の質問: 1 億個の QQ 番号が保存されたテキスト ファイルが与えられました。 QQ 番号。QQ 番号は何億もあります。プログラムを使用して小さい番号から大きい番号に並べ替えてください。
専門家にアイデアを説明してもらいましょう。
他にも質問があります:
たとえば、Memcache の動作メカニズム、その動作原理、その長所と短所は何ですか。
現在在庫が 100 個ある商品がフラッシュ セールで販売されますが、在庫数をはるかに超えて販売されています。どのように対処しますか?注意すべきですか!
Mysql の最適化についての意見、またはデータベースを設計するように頼まれた場合、どのように設計して最適化しますか?
今日の私の答えは理想的ではないと思いましたが、専門家はいますか?インタビュー、そして以下のインタビューをご覧ください。
私の弟は解雇されたばかりです。もう冬で、とても寒いです。


-----解決策---------------------------- -
解決策の問題 良い解決策がない場合、実行時間やメモリなど、より具体的な制限はありますか?
直接ソート機能を制限しない場合は、クイックソートが使用されており、理論的な効率が最も高いはずです。また、ネイティブコードなので、ソートアルゴリズムをシミュレートするよりも高速です。 PHPコードで。

memcache の動作メカニズムは、責任のあるプロセスを使用してメモリ空間を開き、すべてのリクエストとアプリケーションがこのデータを共有します。アクセス速度が速く、頻繁に読み書きするデータのキャッシュに適しているのがメリットです。欠点は、メモリを消費することと、キーでしか取得できず、リレーショナル クエリ (SQL など) が実行できないことです。

アトミックな操作を保証するには、特定のロック メカニズムを使用して、複数のリクエストが 1 つのデータに対して同時に操作され、結果が期待と矛盾することを防ぎます。

MySQL データベースの最適化は、主にインデックス作成とテーブル パーティショニングに関するもので、パフォーマンスを向上させるために、並べ替えと取得が必要なすべてのフィールドのインデックスを作成し、水平または垂直テーブル パーティショニングによって効率を向上させることができます。
------解決策----------------------
目的は決して推測してインポートすることではありませんデータベースを構築してエクスポートしますが、


を指定して一度スキャンし、サイズに応じて適切なファイルに数値を書き込むことができます。 。 。たとえば、100,000 という数値セグメントが合意されます

たとえば、0 番目のファイルには 10,000 が書き込まれ、100,000,001 は 1K 番目のファイルに属します

各ファイルのデータを並べ替えてファイルを結合します

並べ替える場合、ファイルが大きい場合は、ファイル サイズに基づいて、数値の大きさを推定できる可能性があります。 。数値が小さい場合は、クイック ソートを選択できます。それ以外の場合、

は 100,000 の配列を作成し、それを再度走査します。arr[qqnum-i*100000]+1; は配列を走査します。配列の値に従って、数値を増分して書き込むだけです

計算量は O(n) と O(nlogn) の間です

------解決策---------
このインタビューの質問は、アルゴリズムのセクションに少し見覚えがあるように思えます。似ています 議論されていたので、ビットマップを使用して空間を時間に置き換えて回答しました。 実際に実行するには、5 ~ 7 桁の qq ダイレクト ビット ハッシュ、7 ~ 10 桁のビット ハッシュ値 + 1000000

PHP コード
などの分割された処理が必要になる場合があります。 "; $i++; } ?>

------解決策---------<br><font color="#e78608"></font><br>話し合う
このインタビューの質問は、アルゴリズムのセクションで議論されているようなので、ビットマップを使用して時間と交換して答えました。
実際の処理では、5 ~ 7 桁の qq ダイレクト ビット ハッシュ、7 ~ 10 桁のビット ハッシュ値 + 1000000
PHP コード
set_time_limit (0) など、細分化された処理が必要になる場合があります。 );
//5-7 桁 qq
$s = '0';
$s{9999999} = 1;
$s{22334} = 1;
… …


------解決策---------<br><font color="#e78608"></font><br>話し合う
Zhuji での電話番号の並べ替えの原則は同じはずです。1 億の QQ 番号には 1 億桁が必要で、これは約 11MB です


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。