Skip to content

Commit 0ddf057

Browse files
fix(minor): fixing performance issue dari codacy
# Deskripsi (Description) - huffman - gak cocok (gak valid / warning wajar) pakai const `std::string&` jika pasing const karena `str + "0"` nantinya akan buat temporary `std::string`, jadi menggunakan `std::string_view` untuk read string tanpa copy # Checklist: ##### Umum: - [ ] Saya menambah algoritma terbaru. - [x] Saya memperbaiki algoritma yang sudah ada. - [ ] Saya memperbaiki dokumentasi. - [ ] Saya menambah dokumentasi. ##### Contributor Requirements (Syarat Kontributor) dan Lain-Lain: - [x] Saya sudah membaca (I have read) [CONTRIBUTING](https://github.com/bellshade/CPP/blob/main/CONTRIBUTING.md) dan sudah menyetujui semua syarat. - [x] Saya telah menambahkan komentar kode yang memberikan penjelasan maksud dari kode yang saya buat. - [x] Saya menggunakan bahasa Indonesia untuk memberikan penjelasan dari kode yang saya buat. # Environment Saya menggunakan (I'm using): - ``OS`` = `Linux` - ``g++`` = ` 15.1.1 20250425` # Link Issues Issues : # This Commit License https://github.com/bellshade/CPP/blob/main/license Co-authored-by: bellshadebot <[email protected]>
1 parent 9d76bed commit 0ddf057

File tree

8 files changed

+61
-63
lines changed

8 files changed

+61
-63
lines changed

algorithm/algoritma_greedy/huffman.cpp

Lines changed: 55 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -7,90 +7,92 @@
77
*/
88
#include <iostream>
99
#include <queue>
10+
#include <string>
1011

1112
// huffman pohon node
1213
struct MinHeapNode {
13-
// input karakter
14-
char data;
15-
// frekuensi dari karakter
16-
unsigned frekuensi;
17-
// kiri dan kanan node child
18-
MinHeapNode *kanan, *kiri;
14+
// input karakter
15+
char data;
16+
// frekuensi dari karakter
17+
unsigned frekuensi;
18+
// kiri dan kanan node child
19+
MinHeapNode *kanan, *kiri;
1920

20-
MinHeapNode(char data, unsigned frekuensi) {
21-
kiri = kanan = NULL;
22-
this->data = data;
23-
this->data = frekuensi;
24-
}
21+
MinHeapNode(char data, unsigned frekuensi) {
22+
kiri = kanan = NULL;
23+
this->data = data;
24+
this->data = frekuensi;
25+
}
2526
};
2627

2728
// untuk membandingkan antara
2829
// heap node
2930
struct komparasi {
30-
bool operator()(MinHeapNode *kiri, MinHeapNode *kanan) {
31-
return (kiri->frekuensi > kanan->frekuensi);
32-
}
31+
bool operator()(MinHeapNode *kiri, MinHeapNode *kanan) {
32+
return (kiri->frekuensi > kanan->frekuensi);
33+
}
3334
};
3435

3536
// menampilkan kode huffman dari
3637
// root pohon huffman
37-
void printKode(struct MinHeapNode *root, std::string str) {
38-
if (!root) {
39-
return;
40-
}
38+
void printKode(struct MinHeapNode *root, const std::string& str) {
39+
if (!root) {
40+
return;
41+
}
4142

42-
if (root->data != '$')
43-
std::cout << root->data << ":" << str << "\n";
43+
if (root->data != '$') {
44+
std::cout << root->data << ":" << str << "\n";
45+
}
4446

45-
printKode(root->kiri, str + "0");
46-
printKode(root->kanan, str + "1");
47+
printKode(root->kiri, std::string(str) + "0");
48+
printKode(root->kanan, std::string(str) + "1");
4749
}
4850

4951
/**
5052
* bangun pohon huffman dan menampilkan kode dengan
5153
* melintasi pohon huffman yang dibagun
5254
*/
5355
void KodeHuffman(char data[], int frekuensi[], int ukuran) {
54-
struct MinHeapNode *kiri, *kanan, *atas;
56+
struct MinHeapNode *kiri, *kanan, *atas;
5557

56-
// membuat min heap dan memasukkan semua karakter ke dalam data[]
57-
std::priority_queue<MinHeapNode *, std::vector<MinHeapNode *>, komparasi>
58-
minHeap;
59-
for (int i = 0; i < ukuran; ++i)
60-
minHeap.push(new MinHeapNode(data[i], frekuensi[i]));
58+
// membuat min heap dan memasukkan semua karakter ke dalam data[]
59+
std::priority_queue<MinHeapNode *, std::vector<MinHeapNode *>, komparasi>
60+
minHeap;
61+
for (int i = 0; i < ukuran; ++i)
62+
minHeap.push(new MinHeapNode(data[i], frekuensi[i]));
6163

62-
// looping ketika ukuran heap tidak menjadi 1
63-
while (minHeap.size() != 1) {
64-
kiri = minHeap.top();
65-
minHeap.pop();
64+
// looping ketika ukuran heap tidak menjadi 1
65+
while (minHeap.size() != 1) {
66+
kiri = minHeap.top();
67+
minHeap.pop();
6668

67-
kanan = minHeap.top();
68-
minHeap.pop();
69+
kanan = minHeap.top();
70+
minHeap.pop();
6971

70-
// buat simpul internal baru dengan frekuensi sama
71-
// dengn jumlah dua node.
72-
// buat juga dua simpil yang diekstrasi sebagai child kiri
73-
// dan kana dan node baru ini, maka ditambahkan simpul ini
74-
// ke min heap "$" adalah nilai khusus untuk kode internal
75-
atas = new MinHeapNode('$', kiri->frekuensi + kanan->frekuensi);
76-
atas->kiri = kiri;
77-
atas->kanan = kanan;
78-
minHeap.push(atas);
79-
}
72+
// buat simpul internal baru dengan frekuensi sama
73+
// dengn jumlah dua node.
74+
// buat juga dua simpil yang diekstrasi sebagai child kiri
75+
// dan kana dan node baru ini, maka ditambahkan simpul ini
76+
// ke min heap "$" adalah nilai khusus untuk kode internal
77+
atas = new MinHeapNode('$', kiri->frekuensi + kanan->frekuensi);
78+
atas->kiri = kiri;
79+
atas->kanan = kanan;
80+
minHeap.push(atas);
81+
}
8082

81-
// tampilkan kode huffman
82-
// menggunakan pohon huffman
83-
// yang sebelumnya sudah dibuat
84-
printKode(minHeap.top(), "");
83+
// tampilkan kode huffman
84+
// menggunakan pohon huffman
85+
// yang sebelumnya sudah dibuat
86+
printKode(minHeap.top(), "");
8587
}
8688

8789
// jalankan semua fungsi
8890
int main() {
89-
char arr[] = {'a', 'b', 'c', 'd', 'e', 'f'};
90-
int frekuensi[] = {5, 9, 12, 13, 16, 45};
91+
char arr[] = {'a', 'b', 'c', 'd', 'e', 'f'};
92+
int frekuensi[] = {5, 9, 12, 13, 16, 45};
9193

92-
int ukuran = sizeof(arr) / sizeof(arr[0]);
94+
int ukuran = sizeof(arr) / sizeof(arr[0]);
9395

94-
KodeHuffman(arr, frekuensi, ukuran);
95-
return 0;
96+
KodeHuffman(arr, frekuensi, ukuran);
97+
return 0;
9698
}

algorithm/sorting/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
cmake_minimum_required(VERSION 3.1)
21
set (CMAKE_CXX_STANDARD 11)
32
file( GLOB APP_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp )
43
foreach( testsourcefile ${APP_SOURCES} )
@@ -11,4 +10,4 @@ foreach( testsourcefile ${APP_SOURCES} )
1110
endif()
1211
install(TARGETS ${testname} DESTINATION "bin/sorting")
1312

14-
endforeach( testsourcefile ${APP_SOURCES} )
13+
endforeach( testsourcefile ${APP_SOURCES} )

backtracking/wildcard_matching.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ namespace wildcard_matching {
1414
* @param p - referensi ke pattern (const&)
1515
* @return true jika cocok, false jika tidak
1616
*/
17-
bool wildcard_matching(std::string s, std::string p, uint32_t pos1,
18-
std::uint32_t pos2) {
17+
bool wildcard_matching(const std::string &s, const std::string &p,
18+
uint32_t pos1, std::uint32_t pos2) {
1919
const uint32_t n = static_cast<uint32_t>(s.length());
2020
const uint32_t m = static_cast<uint32_t>(p.length());
2121
std::vector<std::vector<int8_t>> dp(n + 1, std::vector<int8_t>(m + 1, -1));

design_patterns/singleton/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
cmake_minimum_required(VERSION 3.1)
21
set (CMAKE_CXX_STANDARD 11)
32
file( GLOB APP_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp )
43
foreach( testsourcefile ${APP_SOURCES} )

geometri/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
cmake_minimum_required(VERSION 3.1)
21
set (CMAKE_CXX_STANDARD 11)
32
file( GLOB APP_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp )
43
foreach( testsourcefile ${APP_SOURCES} )

graf/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
cmake_minimum_required(VERSION 3.1)
21
set (CMAKE_CXX_STANDARD 11)
32
file( GLOB APP_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp )
43
foreach( testsourcefile ${APP_SOURCES} )

math/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ foreach( testsourcefile ${APP_SOURCES} )
88
target_link_libraries(${testname} OpenMP::OpenMP_CXX)
99
endif()
1010
install(TARGETS ${testname} DESTINATION "bin/math")
11-
endforeach( testsourcefile ${APP_SOURCES} )
11+
endforeach( testsourcefile ${APP_SOURCES} )

struktur_data/struct_ds/struktur_contoh2.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include <iostream>
22
#include <cstring>
33

4-
void printKomputer(strcut Komputer komputer);
4+
void printKomputer(struct Komputer komputer);
55

66
struct Komputer {
77
char pemilik[30];
@@ -31,7 +31,7 @@ int main() {
3131

3232
}
3333

34-
void printKomputer(struct Komputer komputer) {
34+
void printKomputer(const struct Komputer& komputer) {
3535
std::cout<<"pemilik :"<<komputer.pemilik<<std::endl;
3636
std::cout<<"tujuan :"<<komputer.tujuan<<std::endl;
3737
std::cout<<"jumlah :"<<komputer.jumlah<<std::endl;

0 commit comments

Comments
 (0)