ここには合計7つの古典的なアルゴリズムの問題があります(7つのフォルダーに入れます)。
Q1とQ2は、ビッグデータ処理に関連する2つのトピックです。
他の5つのトピックは次のとおりです。
1.DBScan clustering algorithm,
2.simple dynamic programming,
3.classic sorting algorithm,
4.full arrangement of strings,
5.calculation of tf-idf
ここには7つの古典的なアルゴリズムの問題があります(それぞれ7つのフォルダーに入れます)。
Q1とQ2は、ビッグデータ処理に関連する2つの質問です。
他の5つの質問は次のとおりです。
1.DBScan聚类算法、
2.简单的动态规划、
3.经典的排序算法、
4.字符串的全排列、
5.tf-idf的计算
以下は、Q1とQ2の関連ドキュメントの説明です
以下は、Q1とQ2の関連ドキュメントです
1。質問の説明。
2。アイデア。
3。環境。
4。コード実行。
過去数日間、私はアルゴリズムエンジニアにインタビューし、2つの特に良い筆記試験の質問に遭遇しました。これが私が提出したアイデアとコードを紹介します。彼らは最良の解決策ではないかもしれませんが、彼らは私の研究と過去2日間の考えの結果でもあります。
テーブルは、各日記のいいね!の数を記録することが知られており、慣れ親しんでいるプログラミング言語を使用して、日記P90のいいね!の数を計算します。 P90の定義:P90 = nを仮定し、日記の90%のいいね!の数はn以下であると仮定します。注:元のデータはソートされていません、日記の数は10億に達します
テーブル構造は次のとおりです。
note_id, like_count
1, 4
2, 6
..., ...
例:
1. 10日日記のいいね!の数は次のとおりです。1、2、2、3、3、4、5、5、6、50、P90 = 6
2。9日間のクリック数は次のとおりです。1、2、2、3、3、4、5、5、6、その後p90 = 5.5
1行ごと、および各テキストの程度は1024を超えず、テキストが重複する場合があります。よく知っているプログラミング言語を使用して、最も10,000個のテキストを見つけるために、条件は次のとおりです。
1.テキスト間の複製はありません。
2。結果にテキストが保持されている場合、テキストと同じ程度のすべてのテキストを結果に保持する必要があります。
説明:外部並べ替えを実装して、日記のようなテーブルのP90値の計算
1.读取大文件表,维护一个数据总量nTotal
2.分为n个小文件(第一次内部排序<采用优化后的快排>;注意:内存量 大于等于 小文件的数据量大小)
3.采用外部排序排序每个小文件
4.合并所有小文件并输出到一个新的文件(依次读取每个文件从第一行到末尾,比较获取极(大/小)值,存入新文件)
5.最终获得一个排序好的大文件
6.通过排序后的大文件获取p90的位置 通过文件指针偏移读取具体的p90数据
注:小文件倒序排列,点击数多的排在前面
説明:PANDASは<= 5TBでファイルを処理し、パンダを直接使用して超大型ファイルを処理できます
1.读入文件为DataFrame:reader
2.去重
3.新增文本长度列和索引列
4.按文本长度列分组(1024个分组)并返回每个分组的元素个数,产生新的DataFrame:group
5.通过group表返回top_n文本的最小长度
6.在reader大表中按条件查找行,产生DataFrame:result
7.通过result表返回符合条件的top_n文本
説明:ハッシュマップ
1.读取大文件表,生成hash key&value 存入1024个小文件(采用桶排序/计数排序,注意value不是字符串内容而是记录所在大文件中的行数)
1.1 key为hash值(采用md5<散列化>)
1.2 value为所在大文件中的行数
2.根据顺序依次从大到小读出topN
3.获取topN在文件中的行数并读取大文件表获取内容
4.循环输出topN
md5码:128位,16个字节
Python3.6
pip install tqdm
pip install pandas
エントリ関数: Q1/get_p90.py実行:
cd Q1
python get_p90.py
エントリー関数: Q2/get_top_1w_pandas.py実行:
cd Q2
python get_top_1w_pandas.py
エントリ関数: Q2/get_top_1w_hash.py実行:
cd Q2
python get_top_1w_hash.py